#include <argus.h>
#include <stdio.h>
ARGUS_OPTIONS(
options,
HELP_OPTION(),
VERSION_OPTION(),
// Arrays: Unique and sorted strings, count limited to 1-10
OPTION_ARRAY_STRING('t', "tags", HELP("Resource tags"),
FLAGS(FLAG_UNIQUE | FLAG_SORTED),
VALIDATOR(V_COUNT(1, 10))),
// Arrays: Integers with range support, count limited to 1-5
OPTION_ARRAY_INT('p', "ports", HELP("Port numbers (supports ranges)"),
VALIDATOR(V_COUNT(1, 5))),
// Maps: Key-value pairs with environment variable integration
OPTION_MAP_STRING('e', "env", HELP("Environment variables"),
ENV_VAR("CONFIG_ENV"), FLAGS(FLAG_SORTED_KEY)),
OPTION_MAP_BOOL('f', "features", HELP("Feature toggles"),
FLAGS(FLAG_SORTED_KEY)),
// Required string with environment fallback
OPTION_STRING('n', "name", HELP("Service name"),
ENV_VAR("SERVICE_NAME"), FLAGS(FLAG_REQUIRED)),
// String with default value and environment fallback
OPTION_STRING('h', "host", HELP("Host address"),
ENV_VAR("HOST"), DEFAULT("localhost")),
// Integer with range validation and default
OPTION_INT('P', "port", HELP("Main port"),
ENV_VAR("PORT"), VALIDATOR(V_RANGE(1, 65535)), DEFAULT(8080)),
// Regex validation for email
OPTION_STRING('c', "contact", HELP("Contact email"),
VALIDATOR(V_REGEX(ARGUS_RE_EMAIL))),
// Optional positional argument
POSITIONAL_STRING("output", HELP("Output file"), FLAGS(FLAG_OPTIONAL)),
)
int main(int argc, char **argv)
{
argus_t argus = argus_init(options, "config_tool", "2.0.0");
argus.description = "Configuration management with collections and environment support";
argus.env_prefix = "CONFIG"; // Prefix for all ENV_VAR lookups
if (argus_parse(&argus, argc, argv) != ARGUS_SUCCESS)
return 1;
// Accessing values
const char *name = argus_get(&argus, "name").as_string;
int port = argus_get(&argus, "port").as_int;
// Iterating through an array
if (argus_is_set(&argus, "tags")) {
argus_array_it_t it = argus_array_it(&argus, "tags");
while (argus_array_next(&it))
printf("Tag: %s\n", it.value.as_string);
}
argus_free(&argus);
return 0;
}