sample/example_introspection.c
#include <stdio.h>
#include <stdlib.h>
#include "argparse-c.h"
static void print_argument_summary(const ap_arg_info *info) {
int i;
if (!info) {
return;
}
printf("dest=%s\n", info->dest ? info->dest : "(null)");
printf("kind=%s\n",
info->kind == AP_ARG_KIND_OPTIONAL ? "optional" : "positional");
printf("required=%s\n", info->required ? "true" : "false");
if (info->flag_count > 0) {
printf("flags=");
for (i = 0; i < info->flag_count; ++i) {
printf("%s%s", i == 0 ? "" : ", ", info->flags[i]);
}
printf("\n");
}
}
int main(void) {
ap_error err = {0};
ap_parser *parser = ap_parser_new("example_introspection",
"inspect parser metadata at runtime.");
ap_parser *config = NULL;
ap_parser_info parser_info;
ap_arg_info arg_info;
ap_subcommand_info sub_info;
ap_arg_options verbose = ap_arg_options_default();
ap_arg_options input = ap_arg_options_default();
if (!parser) {
fprintf(stderr, "failed to initialize parser\n");
return 1;
}
verbose.type = AP_TYPE_BOOL;
verbose.action = AP_ACTION_STORE_TRUE;
verbose.help = "enable verbose output";
if (ap_add_argument(parser, "-v, --verbose", verbose, &err) != 0) {
fprintf(stderr, "%s\n", err.message);
ap_parser_free(parser);
return 1;
}
input.required = true;
input.help = "input file";
if (ap_add_argument(parser, "input", input, &err) != 0) {
fprintf(stderr, "%s\n", err.message);
ap_parser_free(parser);
return 1;
}
config = ap_add_subcommand(parser, "config", "configuration commands", &err);
if (!config) {
fprintf(stderr, "%s\n", err.message);
ap_parser_free(parser);
return 1;
}
(void)config;
if (ap_parser_get_info(parser, &parser_info) != 0) {
fprintf(stderr, "failed to inspect parser info\n");
ap_parser_free(parser);
return 1;
}
printf("prog=%s\n", parser_info.prog);
printf("description=%s\n", parser_info.description);
printf("argument_count=%d\n", parser_info.argument_count);
printf("subcommand_count=%d\n", parser_info.subcommand_count);
if (ap_parser_get_argument(parser, 0, &arg_info) == 0) {
printf("first_argument:\n");
print_argument_summary(&arg_info);
}
if (ap_parser_get_argument(parser, 1, &arg_info) == 0) {
printf("second_argument:\n");
print_argument_summary(&arg_info);
}
if (ap_parser_get_subcommand(parser, 0, &sub_info) == 0) {
printf("first_subcommand=%s\n", sub_info.name ? sub_info.name : "(null)");
printf("first_subcommand_description=%s\n",
sub_info.description ? sub_info.description : "(null)");
}
ap_parser_free(parser);
return 0;
}