34 FLAG_ERROR_ALLOCATION,
35 FLAG_ERROR_UNKNOWN_FLAG,
36 FLAG_ERROR_MISSING_VALUE,
37 FLAG_ERROR_INVALID_NUMBER,
38 FLAG_ERROR_VALIDATION,
39 FLAG_ERROR_REQUIRED_MISSING,
40 FLAG_ERROR_UNKNOWN_SUBCOMMAND,
41 FLAG_ERROR_INVALID_ARGUMENT
62typedef struct Flag Flag;
63typedef struct FlagParser FlagParser;
71typedef bool (*
FlagValidator)(
const void* value,
const char** error_out);
101void flag_add_completion_cmd(FlagParser* fp);
125 void* value_ptr,
bool required);
128#define flag_bool(parser, name, short_name, desc, value) \
129 flag_add(parser, TYPE_BOOL, name, short_name, desc, value, false)
130#define flag_char(parser, name, short_name, desc, value) \
131 flag_add(parser, TYPE_CHAR, name, short_name, desc, value, false)
132#define flag_string(parser, name, short_name, desc, value) \
133 flag_add(parser, TYPE_STRING, name, short_name, desc, value, false)
134#define flag_int(parser, name, short_name, desc, value) \
135 flag_add(parser, TYPE_INT32, name, short_name, desc, value, false)
136#define flag_int8(parser, name, short_name, desc, value) \
137 flag_add(parser, TYPE_INT8, name, short_name, desc, value, false)
138#define flag_int16(parser, name, short_name, desc, value) \
139 flag_add(parser, TYPE_INT16, name, short_name, desc, value, false)
140#define flag_int32(parser, name, short_name, desc, value) \
141 flag_add(parser, TYPE_INT32, name, short_name, desc, value, false)
142#define flag_int64(parser, name, short_name, desc, value) \
143 flag_add(parser, TYPE_INT64, name, short_name, desc, value, false)
144#define flag_uint8(parser, name, short_name, desc, value) \
145 flag_add(parser, TYPE_UINT8, name, short_name, desc, value, false)
146#define flag_uint16(parser, name, short_name, desc, value) \
147 flag_add(parser, TYPE_UINT16, name, short_name, desc, value, false)
148#define flag_uint32(parser, name, short_name, desc, value) \
149 flag_add(parser, TYPE_UINT32, name, short_name, desc, value, false)
150#define flag_uint64(parser, name, short_name, desc, value) \
151 flag_add(parser, TYPE_UINT64, name, short_name, desc, value, false)
152#define flag_size_t(parser, name, short_name, desc, value) \
153 flag_add(parser, TYPE_SIZE_T, name, short_name, desc, value, false)
154#define flag_float(parser, name, short_name, desc, value) \
155 flag_add(parser, TYPE_FLOAT, name, short_name, desc, value, false)
156#define flag_double(parser, name, short_name, desc, value) \
157 flag_add(parser, TYPE_DOUBLE, name, short_name, desc, value, false)
161#define flag_req_bool(parser, name, short_name, desc, value) \
162 flag_add(parser, TYPE_BOOL, name, short_name, desc, value, true)
165#define flag_req_char(parser, name, short_name, desc, value) \
166 flag_add(parser, TYPE_CHAR, name, short_name, desc, value, true)
167#define flag_req_string(parser, name, short_name, desc, value) \
168 flag_add(parser, TYPE_STRING, name, short_name, desc, value, true)
171#define flag_req_int(parser, name, short_name, desc, value) \
172 flag_add(parser, TYPE_INT32, name, short_name, desc, value, true)
173#define flag_req_uint(parser, name, short_name, desc, value) \
174 flag_add(parser, TYPE_UINT32, name, short_name, desc, value, true)
177#define flag_req_int8(parser, name, short_name, desc, value) \
178 flag_add(parser, TYPE_INT8, name, short_name, desc, value, true)
179#define flag_req_uint8(parser, name, short_name, desc, value) \
180 flag_add(parser, TYPE_UINT8, name, short_name, desc, value, true)
181#define flag_req_int16(parser, name, short_name, desc, value) \
182 flag_add(parser, TYPE_INT16, name, short_name, desc, value, true)
183#define flag_req_uint16(parser, name, short_name, desc, value) \
184 flag_add(parser, TYPE_UINT16, name, short_name, desc, value, true)
185#define flag_req_int32(parser, name, short_name, desc, value) \
186 flag_add(parser, TYPE_INT32, name, short_name, desc, value, true)
187#define flag_req_uint32(parser, name, short_name, desc, value) \
188 flag_add(parser, TYPE_UINT32, name, short_name, desc, value, true)
189#define flag_req_int64(parser, name, short_name, desc, value) \
190 flag_add(parser, TYPE_INT64, name, short_name, desc, value, true)
191#define flag_req_uint64(parser, name, short_name, desc, value) \
192 flag_add(parser, TYPE_UINT64, name, short_name, desc, value, true)
195#define flag_req_size_t(parser, name, short_name, desc, value) \
196 flag_add(parser, TYPE_SIZE_T, name, short_name, desc, value, true)
197#define flag_req_float(parser, name, short_name, desc, value) \
198 flag_add(parser, TYPE_FLOAT, name, short_name, desc, value, true)
199#define flag_req_double(parser, name, short_name, desc, value) \
200 flag_add(parser, TYPE_DOUBLE, name, short_name, desc, value, true)
203FlagParser*
flag_add_subcommand(FlagParser* parser,
const char* name,
const char* desc,
void (*handler)(
void* data));
High-performance C string with Small String Optimization (SSO).
bool flag_invoke_subcommand(FlagParser *parser, void(*pre_invoke)(void *user_data), void *user_data)
FlagStatus flag_parse(FlagParser *parser, int argc, char **argv)
void flag_parser_set_footer(FlagParser *parser, const char *footer)
void flag_parser_free(FlagParser *parser)
Flag * flag_add(FlagParser *parser, FlagDataType type, const char *name, char short_name, const char *desc, void *value_ptr, bool required)
bool flag_is_present(FlagParser *parser, const char *flag_name)
FlagParser * flag_add_subcommand(FlagParser *parser, const char *name, const char *desc, void(*handler)(void *data))
const char * flag_positional_at(FlagParser *parser, int index)
FlagStatus flag_parse_and_invoke(FlagParser *parser, int argc, char **argv, void *user_data)
const char * flag_status_str(FlagStatus status)
const char * flag_get_error(FlagParser *parser)
FlagParser * flag_active_subcommand(FlagParser *parser)
bool(* FlagValidator)(const void *value, const char **error_out)
FlagParser * flag_parser_new(const char *name, const char *description)
void flag_set_validator(Flag *flag, FlagValidator validator)
int flag_positional_count(FlagParser *parser)
void flag_print_usage(FlagParser *parser)
void flag_set_pre_invoke(FlagParser *parser, void(*pre_invoke)(void *user_data))