#pragma once

#include "deimos/core/base.h"

namespace deimos
{

class IWriter
{
public:
    IWriter() = default;

    deimos_NO_COPY_MOVE(IWriter);

    virtual ~IWriter() = default;

    virtual void Write(Span<const std::byte>) = 0;
};

class BufferWriter : public IWriter
{
    std::byte*      m_buffer;
    int64_t         m_size;
    int64_t         m_written = 0;

public:
    explicit BufferWriter(Span<std::byte> buffer) :
        m_buffer{buffer.begin()},
        m_size{buffer.size()}
    {}

    void Write(Span<const std::byte>) override;

    constexpr Span<const std::byte> GetWritten() const
    {
        return { m_buffer, m_written };
    }
};

} // namespace deimos