Command Line Argument Parser¶
#import "std/arg_parser"
Generic command line argument parsing tool.
Example¶
#import "std/arg_parser"
// Command line arguments context.
Args :: struct #base ArgParser.Ctx {
my_flag: bool;
my_name: string;
}
g_args: Args;
main :: fn () s32 {
parser :: ArgParser.new();
defer ArgParser.delete(parser);
// Add new argument.
ArgParser.add(
parser,
"-f", // Short name (must start with -)
"--flag", // Long name (must start with -)
"Specify my flag.", // Help text.
&fn (parser: ArgParser.Parser, args: []string, ctx: *ArgParser.Ctx) (s32, Error) {
a: *Args = auto ctx;
a.my_flag = true;
return 1, ok(); // Return number of parsed arguments and state.
});
ArgParser.add(
parser,
"-n",
"--name",
"Specify my name.",
&fn (parser: ArgParser.Parser, args: []string, ctx: *ArgParser.Ctx) (s32, Error) {
a: *Args = auto ctx;
if (args.len < 2) {
return 0, error("Expected name!");
}
a.my_name = args[1];
return 2, ok();
});
// Start parsing.
state :: ArgParser.run(parser, command_line_arguments, &g_args, 1);
if !is_ok(state) {
print_err("%", state);
ArgParser.print_help(parser);
return 1;
}
print("%\n", g_args);
return 0;
}