mirror of
https://github.com/clap-rs/clap
synced 2024-11-11 07:14:15 +00:00
93948cc724
The comments in these examples say that a `conflicts_with` should override `required`. This seems to be true one way but not the other, causing these examples to error out at runtime.
49 lines
2.2 KiB
Rust
49 lines
2.2 KiB
Rust
use clap::{App, Arg};
|
|
|
|
fn main() {
|
|
// Positional arguments are those values after the program name which are not preceded by any
|
|
// identifier (such as "myapp some_file"). Positionals support many of the same options as
|
|
// flags, as well as a few additional ones.
|
|
let matches = App::new("MyApp")
|
|
// Regular App configuration goes here...
|
|
// We'll add two positional arguments, an input file, and a config file.
|
|
//
|
|
// I'll explain each possible setting that "positionals" accept. Keep in
|
|
// mind that you DO NOT need to set each of these for every flag, only the
|
|
// ones that apply to your individual case.
|
|
.arg(
|
|
Arg::new("input")
|
|
.about("the input file to use") // Displayed when showing help info
|
|
.index(1) // Set the order in which the user must
|
|
// specify this argument (Starts at 1)
|
|
.requires("config") // Says, "If the user uses "input", they MUST
|
|
// also use this other 'config' arg too"
|
|
// Can also specify a list using
|
|
// requires_all(Vec<&str>)
|
|
.required(true), // By default this argument MUST be present
|
|
// NOTE: mutual exclusions take precedence over
|
|
// required arguments
|
|
)
|
|
.arg(Arg::new("config").about("the config file to use").index(2)) // Note, we do not need to specify required(true)
|
|
// if we don't want to, because "input" already
|
|
// requires "config"
|
|
// Note, we also do not need to specify requires("input")
|
|
// because requires lists are automatically two-way
|
|
.get_matches();
|
|
|
|
// We can find out whether or not "input" or "config" were used
|
|
if matches.is_present("input") {
|
|
println!("An input file was specified");
|
|
}
|
|
|
|
// We can also get the values for those arguments
|
|
if let Some(ref in_file) = matches.value_of("input") {
|
|
// It's safe to call unwrap() because of the required options we set above
|
|
println!(
|
|
"Doing work with {} and {}",
|
|
in_file,
|
|
matches.value_of("config").unwrap()
|
|
);
|
|
}
|
|
// Continued program logic goes here...
|
|
}
|