Open parasyte opened 4 months ago
This was requested privately. The idea is to invert the value of argument flags (fields with bool value) when it defaults to true.
bool
true
E.g. This would be valid and would parse --no-recurse to args.recurse == false:
--no-recurse
args.recurse == false
#[derive(OnlyArgs)] struct Args { #[default(true)] recurse: bool, }
Meanwhile, if #[default(true)] is not used on the flag, then --no-recurse would be an argument parser error; only --recurse would be allowed.
#[default(true)]
--recurse
Without this feature, there is no way to turn off default flags.
This feature could lead to some weird ambiguities. For instance:
#[derive(OnlyArgs)] struct Args { #[default(true)] recurse: bool, no_recurse: bool, }
This cli supports two explicit flags: --recurse and --no-recurse for both struct fields, plus one implicit flag, which is also --no-recurse (on the recurse field).
recurse
These ambiguities should probably end up as compile errors.
This was requested privately. The idea is to invert the value of argument flags (fields with
bool
value) when it defaults totrue
.E.g. This would be valid and would parse
--no-recurse
toargs.recurse == false
:Meanwhile, if
#[default(true)]
is not used on the flag, then--no-recurse
would be an argument parser error; only--recurse
would be allowed.Without this feature, there is no way to turn off default flags.
Potential caveats
This feature could lead to some weird ambiguities. For instance:
This cli supports two explicit flags:
--recurse
and--no-recurse
for both struct fields, plus one implicit flag, which is also--no-recurse
(on therecurse
field).These ambiguities should probably end up as compile errors.