Porytiles
Loading...
Searching...
No Matches
verify_tileset_command.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "CLI/CLI.hpp"
4
7
8#include "command.hpp"
9#include "option_group.hpp"
10
11class VerifyTilesetCommand final : public Command {
12 public:
13 explicit VerifyTilesetCommand(CLI::App &parent_app) : Command{parent_app, kCommandName, kCommandDesc, kCommandGroup}
14 {
15 CLI::App &cmd = get_app();
16 cmd.add_option("<tileset-name>", tileset_name_, "Name of the tileset to load")->required();
17 diagnostics_opts_.RegisterGroup(cmd);
18 }
19
20 void Run() override
21 {
22 using namespace porytiles2;
23
24 // Initialize stateless services
25 PngRgbaImageLoader png_rgba_loader{};
26 PngIndexedImageLoader png_indexed_loader{};
27 PngRgbaImageSaver png_rgba_saver{};
28 PngIndexedImageSaver png_indexed_saver{};
29 JascPalLoader jasc_loader{};
30 JascPalSaver jasc_saver{};
31 AnsiStyledTextFormatter formatter{};
32
33 // Setup layered configuration
34 std::vector<std::unique_ptr<ConfigProvider>> providers{};
35 providers.push_back(std::make_unique<DefaultProvider>());
36 LazyLayeredConfig config{std::move(providers)};
37
38 // Setup the tileset repository
39 ProjectTilesetArtifactReader artifact_reader{&png_rgba_loader, &png_indexed_loader, &jasc_loader};
40 ProjectTilesetArtifactWriter artifact_writer{&config, ".", &png_rgba_saver, &png_indexed_saver, &jasc_saver};
41 ProjectTilesetArtifactKeyProvider key_provider{"."};
42 ProjectArtifactChecksumProvider checksum_provider{&key_provider};
43 TilesetRepo repo{&checksum_provider, &key_provider, &artifact_reader, &artifact_writer};
44
45 VerifyPrimaryTileset verify_use_case{&repo};
46 auto verify_result = verify_use_case.verify(tileset_name_);
47 if (!verify_result.has_value()) {
48 for (const auto &err : verify_result.chain()) {
49 std::cerr << err->join(formatter) << std::endl;
50 }
51 }
52 }
53
54 private:
55 static constexpr auto kCommandName = "verify-tileset";
56 static constexpr auto kCommandDesc = "Verify a tileset's contents.";
57 static constexpr auto kCommandGroup = "COMMANDS";
58
59 std::string tileset_name_;
60 OptGroupDiagnostics diagnostics_opts_;
61};
Command is an abstract class that provides basic command functionality for the Porytiles CLI driver.
Definition command.hpp:18
CLI::App & get_app() const
Definition command.hpp:45
void RegisterGroup(CLI::App &app) override
VerifyTilesetCommand(CLI::App &parent_app)
TextFormatter implementation that applies ANSI escape codes for terminal styling.
An implementation of FilePalLoader that loads palettes from JASC-PAL (Paintshop Pro) pal files.
An implementation of FilePalSaver that saves palettes to JASC-PAL (Paintshop Pro) pal files.
A Config implementation that lazily pulls a config value by consulting multiple priority-ordered back...
An image loader that reads PNG files to create an Image with an index pixel type.
An image saver that saves PNG files from an Image with an index pixel type.
An image loader that reads PNG files to create an Image with an Rgba32 pixel type.
An image saver that saves PNG files from an Image with an Rgba32 pixel type.
Provides a pokeemerald project filesystem-based implementation for TilesetArtifactKeyProvider.
Provides a filesystem-based implementation for TilesetArtifactReader.
Provides a filesystem-based implementation for TilesetArtifactWriter.
Repository interface for the Tileset aggregate root.
Use case for verifying a primary tileset.
ChainableResult< void > verify(const std::string &tileset_name) const