1 use clap::{arg, command, value_parser, ArgAction};
2 
main()3 fn main() {
4     let matches = command!() // requires `cargo` feature
5         .arg(arg!(eff: -f).action(ArgAction::SetTrue))
6         .arg(arg!(pea: -p <PEAR>).value_parser(value_parser!(String)))
7         .arg(
8             // Indicates that `slop` is only accessible after `--`.
9             arg!(slop: [SLOP])
10                 .num_args(1..)
11                 .last(true)
12                 .value_parser(value_parser!(String)),
13         )
14         .get_matches();
15 
16     // This is what will happen with `myprog -f -p=bob -- sloppy slop slop`...
17 
18     // -f used: true
19     println!("-f used: {:?}", matches.get_flag("eff"));
20     // -p's value: Some("bob")
21     println!("-p's value: {:?}", matches.get_one::<String>("pea"));
22     // 'slops' values: Some(["sloppy", "slop", "slop"])
23     println!(
24         "'slops' values: {:?}",
25         matches
26             .get_many::<String>("slop")
27             .map(|vals| vals.collect::<Vec<_>>())
28             .unwrap_or_default()
29     );
30 
31     // Continued program logic goes here...
32 }
33