// jsonproc.cpp #include "jsonproc.h" #include #include using std::string; #include using namespace inja; using json = nlohmann::json; std::map customVars; void set_custom_var(string key, string value) { customVars[key] = value; } string get_custom_var(string key) { return customVars[key]; } int main(int argc, char *argv[]) { if (argc != 4) FATAL_ERROR("USAGE: jsonproc \n"); string jsonfilepath = argv[1]; string templateFilepath = argv[2]; string outputFilepath = argv[3]; Environment env; // Add custom command callbacks. env.add_callback("doNotModifyHeader", 0, [jsonfilepath, templateFilepath](Arguments& args) { return "//\n// DO NOT MODIFY THIS FILE! IT IS AUTO-GENERATED FROM " + jsonfilepath +" and Inja template " + templateFilepath + "\n//\n"; }); env.add_callback("setVar", 2, [=](Arguments& args) { string key = args.at(0)->get(); string value = args.at(1)->get(); set_custom_var(key, value); return ""; }); env.add_callback("getVar", 1, [=](Arguments& args) { string key = args.at(0)->get(); return get_custom_var(key); }); env.add_callback("concat", 2, [](Arguments& args) { string first = args.at(0)->get(); string second = args.at(1)->get(); return first + second; }); env.add_callback("removePrefix", 2, [](Arguments& args) { string rawValue = args.at(0)->get(); string prefix = args.at(1)->get(); string::size_type i = rawValue.find(prefix); if (i != 0) return rawValue; return rawValue.erase(0, prefix.length()); }); // Add custom command callbacks. env.add_callback("removeSuffix", 2, [](Arguments& args) { string rawValue = args.at(0)->get(); string suffix = args.at(1)->get(); string::size_type i = rawValue.rfind(suffix); if (i == string::npos) return rawValue; return rawValue.substr(0, i); }); try { env.write_with_json_file(templateFilepath, jsonfilepath, outputFilepath); } catch (const std::exception& e) { FATAL_ERROR("JSONPROC_ERROR: %s\n", e.what()); } return 0; }