| #include "rive/importers/file_asset_importer.hpp" | |
| #include "rive/assets/file_asset_contents.hpp" | |
| #include "rive/assets/file_asset.hpp" | |
| #include "rive/file_asset_loader.hpp" | |
| #include "rive/span.hpp" | |
| #include <cstdint> | |
| using namespace rive; | |
| FileAssetImporter::FileAssetImporter(FileAsset* fileAsset, | |
| FileAssetLoader* assetLoader, | |
| Factory* factory) : | |
| m_FileAsset(fileAsset), m_FileAssetLoader(assetLoader), m_Factory(factory) | |
| {} | |
| // if file asset contents are found when importing a rive file, store those for when we resolve | |
| // the importer later | |
| void FileAssetImporter::onFileAssetContents(std::unique_ptr<FileAssetContents> contents) | |
| { | |
| // we should only ever be called once | |
| assert(!m_Content); | |
| m_Content = std::move(contents); | |
| } | |
| StatusCode FileAssetImporter::resolve() | |
| { | |
| Span<const uint8_t> bytes; | |
| if (m_Content != nullptr) | |
| { | |
| bytes = m_Content->bytes(); | |
| } | |
| // If we have a file asset loader, lets give it the opportunity to claim responsibility for | |
| // loading the asset | |
| if (m_FileAssetLoader != nullptr && | |
| m_FileAssetLoader->loadContents(*m_FileAsset, bytes, m_Factory)) | |
| { | |
| return StatusCode::Ok; | |
| } | |
| // If we do not, but we have found in band contents, load those | |
| else if (bytes.size() > 0) | |
| { | |
| m_FileAsset->decode(bytes, m_Factory); | |
| } | |
| // Note that it's ok for an asset to not resolve (or to resolve async). | |
| return StatusCode::Ok; | |
| } |