14 if (!tileset_repo_->exists(tileset_name)) {
15 return std::unexpected{fmt::format(
"tileset {} does not exist", tileset_name)};
19 auto maybe_tileset = tileset_repo_->load(tileset_name);
20 if (!maybe_tileset.has_value()) {
22 return std::unexpected{
"failed to load tileset"};
24 const auto tileset = std::move(maybe_tileset.value());
27 if (tileset->porymap_component().is_empty()) {
28 return std::unexpected{
"PorymapTilesetComponent was empty"};
33 if (!tileset->porytiles_component().is_empty()) {
34 const auto porytiles_keys = tileset_repo_->key_provider().get_porytiles_artifact_keys(tileset_name);
35 const auto mismatched_keys =
36 tileset_repo_->checksum_provider().find_unsynced_tileset_artifacts(tileset_name, porytiles_keys);
37 if (!mismatched_keys.empty()) {
38 return std::unexpected{
"uncompiled changes present in Porytiles assets: TODO keys here"};
44 const auto porymap_keys = tileset_repo_->key_provider().get_porymap_artifact_keys(tileset_name);
45 if (tileset_repo_->checksum_provider().all_checksums_tileset_match(tileset_name, porymap_keys)) {
60 if (
const auto save_result = tileset_repo_->save(*tileset); !save_result.has_value()) {
62 std::string joined_error;
63 for (std::size_t i = 0; i < error_lines.size(); ++i) {
67 joined_error += error_lines[i];
69 return std::unexpected{joined_error};
Result< void > import(const std::string &tileset_name) const
Imports the primary Tileset with the given tileset name.
TextFormatter implementation that strips all styling from text.
std::expected< T, E > Result
A result with some type T on success, otherwise an error of type E.