mirror of
https://github.com/clap-rs/clap
synced 2024-11-10 06:44:16 +00:00
470531b515
This reduces ambiguity in how the different "multiple" parts of the API interact and lowrs the amount of API surface area users have to dig through to use clap. For now, this is only a matter of cleaning up the public API. Cleaning up the implementation is the next step.
39 lines
1.2 KiB
Rust
39 lines
1.2 KiB
Rust
use clap::{arg, command, value_parser, ArgAction};
|
|
|
|
fn main() {
|
|
let matches = command!() // requires `cargo` feature
|
|
.arg(arg!(eff: -f).action(ArgAction::SetTrue))
|
|
.arg(
|
|
arg!(pea: -p <PEAR>)
|
|
.required(false)
|
|
.value_parser(value_parser!(String)),
|
|
)
|
|
.arg(
|
|
// Indicates that `slop` is only accessible after `--`.
|
|
arg!(slop: [SLOP])
|
|
.number_of_values(1..)
|
|
.last(true)
|
|
.value_parser(value_parser!(String)),
|
|
)
|
|
.get_matches();
|
|
|
|
// This is what will happen with `myprog -f -p=bob -- sloppy slop slop`...
|
|
|
|
// -f used: true
|
|
println!(
|
|
"-f used: {:?}",
|
|
*matches.get_one::<bool>("eff").expect("defaulted by clap")
|
|
);
|
|
// -p's value: Some("bob")
|
|
println!("-p's value: {:?}", matches.get_one::<String>("pea"));
|
|
// 'slops' values: Some(["sloppy", "slop", "slop"])
|
|
println!(
|
|
"'slops' values: {:?}",
|
|
matches
|
|
.get_many::<String>("slop")
|
|
.map(|vals| vals.collect::<Vec<_>>())
|
|
.unwrap_or_default()
|
|
);
|
|
|
|
// Continued program logic goes here...
|
|
}
|