17 auto project_opt = parser.
GetString(
"project_name");
19 if (!project_opt.has_value()) {
20 return absl::InvalidArgumentError(
"Missing required argument: project_name");
23 std::string project_name = project_opt.value();
26 auto status = project.
Create(project_name,
".");
31 formatter.
AddField(
"status",
"success");
32 formatter.
AddField(
"message",
"Successfully initialized project: " + project_name);
33 formatter.
AddField(
"project_name", project_name);
35 return absl::OkStatus();
42 auto status = project.
Open(
".");
54 namespace fs = std::filesystem;
55 std::vector<std::string> bps_files;
58 for (
const auto& entry : fs::directory_iterator(project.
patches_folder)) {
59 if (entry.path().extension() ==
".bps") {
60 bps_files.push_back(entry.path().string());
63 }
catch (
const fs::filesystem_error& e) {
67 for (
const auto& patch_file : bps_files) {
68 std::vector<uint8_t> patch_data;
70 std::copy(patch_contents.begin(), patch_contents.end(),
71 std::back_inserter(patch_data));
72 std::vector<uint8_t> patched_rom;
78 std::vector<std::string> asm_files;
80 for (
const auto& entry : fs::directory_iterator(project.
patches_folder)) {
81 if (entry.path().extension() ==
".asm") {
82 asm_files.push_back(entry.path().string());
85 }
catch (
const fs::filesystem_error& e) {
94 std::string output_file = project.
name +
".sfc";
95 status = build_rom.
SaveToFile({.save_new =
true, .filename = output_file});
100 formatter.
AddField(
"status",
"success");
101 formatter.
AddField(
"message",
"Successfully built project: " + project.
name);
103 formatter.
AddField(
"output_file", output_file);
105 return absl::OkStatus();
The Rom class is used to load, save, and modify Rom data.
absl::Status LoadFromFile(const std::string &filename, bool z3_load=true)
absl::Status LoadFromData(const std::vector< uint8_t > &data, bool z3_load=true)
absl::Status SaveToFile(const SaveSettings &settings)
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
Utility for parsing common CLI argument patterns.
std::optional< std::string > GetString(const std::string &name) const
Parse a named argument (e.g., –format=json or –format json)
absl::Status ApplyBpsPatch(const std::vector< uint8_t > &source, const std::vector< uint8_t > &patch, std::vector< uint8_t > &output)
std::string LoadFile(const std::string &filename)
Loads the entire contents of a file into a string.
Main namespace for the application.
Modern project structure with comprehensive settings consolidation.
absl::Status Open(const std::string &project_path)
absl::Status Create(const std::string &project_name, const std::string &base_path)
std::string patches_folder