#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; }
