blob: 82dae12ee38a4245518b6a00181edd05115aa764 [file] [log] [blame] [edit]
#include "argparse.hpp"
using argparse::ArgValue;
struct Args {
ArgValue<bool> do_foo;
ArgValue<bool> enable_bar;
ArgValue<std::string> filename;
ArgValue<size_t> verbosity;
ArgValue<bool> show_version;
};
struct OnOff {
bool from_str(std::string str) {
if (str == "on") return true;
else if (str == "off") return false;
std::stringstream msg;
throw argparse::ArgParseConversionError("Invalid argument value");
}
std::string to_str(bool val) {
if (val) return "on";
return "off";
}
std::vector<std::string> default_choices() {
return {"on", "off"};
}
};
int main(int argc, const char** argv) {
Args args;
auto parser = argparse::ArgumentParser(argv[0], "My application description");
parser.version("Version: 0.0.1");
parser.add_argument(args.filename, "filename")
.help("File to process");
parser.add_argument(args.do_foo, "--foo")
.help("Causes foo")
.default_value("false")
.action(argparse::Action::STORE_TRUE);
parser.add_argument<bool,OnOff>(args.enable_bar, "--bar")
.help("Control whether bar is enabled")
.default_value("off");
parser.add_argument(args.verbosity, "--verbosity", "-v")
.help("Sets the verbosity")
.default_value("1")
.choices({"0", "1", "2"});
parser.add_argument(args.show_version, "--version", "-V")
.help("Show version information")
.action(argparse::Action::VERSION);
parser.parse_args(argc, argv);
//Show the arguments
std::cout << "args.filename: " << args.filename << "\n";
std::cout << "args.do_foo: " << args.do_foo << "\n";
std::cout << "args.verbosity: " << args.verbosity << "\n";
std::cout << "\n";
//Do work
if (args.do_foo) {
if (args.verbosity > 0) {
std::cout << "Doing foo with " << args.filename << "\n";
}
if (args.verbosity > 1) {
std::cout << "Doing foo step 1" << "\n";
std::cout << "Doing foo step 2" << "\n";
std::cout << "Doing foo step 3" << "\n";
}
}
if (args.enable_bar) {
if (args.verbosity > 0) {
std::cout << "Bar is enabled" << "\n";
}
} else {
if (args.verbosity > 0) {
std::cout << "Bar is disabled" << "\n";
}
}
return 0;
}