blob: 7a199ffacc7a07c1eee8403c4f98151695efe759 [file] [log] [blame]
#include "rive/importers/file_asset_importer.hpp"
#include "rive/assets/file_asset_contents.hpp"
#include "rive/assets/file_asset.hpp"
#include "rive/file_asset_resolver.hpp"
#include "rive/span.hpp"
#include <cstdint>
using namespace rive;
FileAssetImporter::FileAssetImporter(FileAsset* fileAsset,
FileAssetResolver* assetResolver,
Factory* factory) :
m_FileAsset(fileAsset), m_FileAssetResolver(assetResolver), m_Factory(factory) {}
void FileAssetImporter::loadContents(std::unique_ptr<FileAssetContents> contents) {
// we should only ever be called once
assert(!m_Content);
m_Content = std::move(contents);
auto data = m_Content->bytes();
if (m_FileAsset->decode(data, m_Factory)) {
m_LoadedContents = true;
}
}
StatusCode FileAssetImporter::resolve() {
if (!m_LoadedContents && m_FileAssetResolver != nullptr) {
// Contents weren't available in-band, or they couldn't be decoded. Try
// to find them out of band.
m_FileAssetResolver->loadContents(*m_FileAsset);
}
// Note that it's ok for an asset to not resolve (or to resolve async).
return StatusCode::Ok;
}