1use clap::{arg, command, value_parser, ArgAction};
2
3fn 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