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