1use clap::{arg, Args, Command, FromArgMatches as _};
2
3#[derive(Args, Debug)]
4struct DerivedArgs {
5 #[arg(short, long)]
6 derived: bool,
7}
8
9fn main() {
10 let cli = Command::new("CLI").arg(arg!(-b - -built).action(clap::ArgAction::SetTrue));
11 // Augment built args with derived args
12 let cli = DerivedArgs::augment_args(cli);
13
14 let matches = cli.get_matches();
15 println!("Value of built: {:?}", matches.get_flag("built"));
16 println!(
17 "Value of derived via ArgMatches: {:?}",
18 matches.get_flag("derived")
19 );
20
21 // Since DerivedArgs implements FromArgMatches, we can extract it from the unstructured ArgMatches.
22 // This is the main benefit of using derived arguments.
23 let derived_matches = DerivedArgs::from_arg_matches(&matches)
24 .map_err(|err| err.exit())
25 .unwrap();
26 println!("Value of derived: {derived_matches:#?}");
27}
28