#include <vector>
#include "rive/assets/file_asset_contents.hpp"
#include "rive/assets/file_asset.hpp"
#include "rive/importers/file_asset_importer.hpp"

using namespace rive;

StatusCode FileAssetContents::import(ImportStack& importStack)
{
    auto fileAssetImporter = importStack.latest<FileAssetImporter>(FileAsset::typeKey);
    if (fileAssetImporter == nullptr)
    {
        return StatusCode::MissingObject;
    }
    fileAssetImporter->loadContents(std::unique_ptr<FileAssetContents>(this));

    return Super::import(importStack);
}

void FileAssetContents::decodeBytes(Span<const uint8_t> value)
{
    m_Bytes = std::vector<uint8_t>(value.begin(), value.end());
}

void FileAssetContents::copyBytes(const FileAssetContentsBase& object)
{
    // Should never be called.
    assert(false);
}

Span<const uint8_t> FileAssetContents::bytes() const { return m_Bytes; }
