An ultra simple CLI arguments parser.
If you think that this library doesn't support some feature, it's probably intentional.
- No help generation
- Only flags, options, free arguments and subcommands are supported
- Options can be separated by a space,
=or nothing. See build features - Arguments can be in any order
- Non UTF-8 arguments are supported
-
eq-separatorAllows parsing arguments separated by
=
This feature adds about 1KiB to the resulting binary -
short-space-optMakes the space between short keys and their values optional (e.g.
-w10)
Ifeq-separatoris enabled, then it takes precedence and the '=' is not included.
Ifeq-separatoris disabled, then-K=valuegives an error instead of returning"=value".
The optional space is only applicable for short keys because--keyvaluewould be ambiguous -
combined-flagsAllows combination of flags, e.g.
-abcinstead of-a -b -c
Ifshort-space-optoreq-separatorare enabled, you must parse flags after values, to prevent ambiguities
The main fundamental limitation of pico-args is that it parses arguments in an arbitrary order.
This is because we have a sort of "streaming" API and we don't know all the keys/arguments
beforehand. This could lead to some unexpected behaviors.
Specifically, let's say you have a following arguments:
--arg1 --arg2 value
If your parser tries to parse --arg1 as key-value first, than its value would be --arg2
and not value, because the parser simply takes the "next" argument.
A properer parser would knew that --arg2 is a key and will return an error,
since the value is missing.
If your parser tries to parse --arg2 as a flag first and then --arg1 as key-value,
then its value would be value, because --arg2 was already removed by the parser
and the arguments list looks like --arg1 value to the parser.
If such behavior is unacceptable to your application, then you have to use a more high-level arguments parsing library.
The core idea of pico-args is to provide some "sugar" for arguments parsing without
a lot of overhead (binary or compilation time wise).
There are no point in comparing parsing features since pico-args supports
only the bare minimum. Here
is a great comparison of various arguments parsing libraries.
MIT