clap/examples/07_option_args.rs
Ed Page 7e899cd340 Revert "Deprecate Arg::help in favour of Arg::about"
This reverts commits 24cb8b1..d0abb37 from clap-rs/clap#1840

This is part of #16.  clap-rs/clap#1840 wasn't the right call but we
don't have time to make the decision now, so instead of having one
option and changing it in 4.0, this reverts back to clap2 behavior.
2021-11-18 12:25:49 -06:00

71 lines
3.3 KiB
Rust

use clap::{App, Arg};
fn main() {
// Option arguments are those that take an additional value, such as "-c value". In clap they
// support three types of specification, those with short() as "-o some", or those with long()
// as "--option value" or "--option=value"
//
// Options also support a multiple setting, which is discussed in the example below.
let matches = App::new("MyApp")
// Regular App configuration goes here...
// Assume we have an application that accepts an input file via the "-i file"
// or the "--input file" (as well as "--input=file").
// Below every setting supported by option arguments is discussed.
// NOTE: You DO NOT need to specify each setting, only those which apply
// to your particular case.
.arg(
Arg::new("input")
.help("the input file to use") // Displayed when showing help info
.takes_value(true) // MUST be set to true in order to be an "option" argument
.short('i') // This argument is triggered with "-i"
.long("input") // This argument is triggered with "--input"
.multiple_occurrences(true) // Set to true if you wish to allow multiple occurrences
// such as "-i file -i other_file -i third_file"
.required(true) // By default this argument MUST be present
// NOTE: mutual exclusions take precedence over
// required arguments
.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>)
.conflicts_with("output"), // Opposite of requires(), says "if the
// user uses -a, they CANNOT use 'output'"
// also has a conflicts_with_all(Vec<&str>)
// and an exclusive(true)
)
.arg("-c, --config=[FILE] 'the config file to use'")
.arg("[output] 'the output file to use'")
.get_matches();
// We can find out whether or not "input" was used
if matches.is_present("input") {
println!("An input file was specified");
}
// We can also get the value for "input"
//
// NOTE: If we specified multiple_occurrences(), this will only return the _FIRST_
// occurrence
if let Some(ref in_file) = matches.value_of("input") {
println!("An input file: {}", in_file);
}
// If we specified the multiple_occurrences() setting we can get all the values
if let Some(in_v) = matches.values_of("input") {
for in_file in in_v {
println!("An input file: {}", in_file);
}
}
// We can see how many times the option was used with the occurrences_of() method
//
// NOTE: Just like with flags, if we did not specify the multiple_occurrences() setting this will only
// return 1 no matter how many times the argument was used (unless it wasn't used at all, in
// in which case 0 is returned)
println!(
"The \"input\" argument was used {} times",
matches.occurrences_of("input")
);
// Continued program logic goes here...
}