2021-11-19 20:33:11 +00:00
|
|
|
use clap::{arg, App, Arg};
|
2015-03-19 21:55:13 +00:00
|
|
|
|
|
|
|
fn main() {
|
|
|
|
// Args are described in the same manner as Apps using the "builder pattern" with multiple
|
2015-04-14 02:18:50 +00:00
|
|
|
// methods describing various settings for the individual arguments. Or by supplying a "usage"
|
|
|
|
// string. Both methods have their pros and cons.
|
2015-03-19 21:55:13 +00:00
|
|
|
//
|
2021-11-19 20:33:11 +00:00
|
|
|
// Arguments can be added to applications in two manners, one at a time with the arg()
|
|
|
|
// method, or multiple arguments at once via a `&[Arg]` inside the args() method.
|
2015-03-19 21:55:13 +00:00
|
|
|
//
|
|
|
|
// There are various options which can be set for a given argument, some apply to any of the
|
2015-10-01 01:45:35 +00:00
|
|
|
// three types of arguments, some only apply one or two of the types. *NOTE* if you set
|
2015-03-20 16:47:28 +00:00
|
|
|
// incompatible options on a single argument, clap will panic! at runtime. This is by design,
|
2015-10-01 01:45:35 +00:00
|
|
|
// so that you know right away an error was made by the developer, not the end user.
|
2015-03-19 21:55:13 +00:00
|
|
|
let matches = App::new("MyApp")
|
2018-11-14 17:05:06 +00:00
|
|
|
// All application settings go here...
|
|
|
|
// A simple "Flag" argument example (i.e. "-d") using the builder pattern
|
|
|
|
.arg(
|
2020-05-14 20:50:56 +00:00
|
|
|
Arg::new("debug")
|
2021-11-18 16:17:15 +00:00
|
|
|
.help("turn on debugging information")
|
2018-11-14 17:05:06 +00:00
|
|
|
.short('d'),
|
|
|
|
)
|
|
|
|
// Two arguments, one "Option" argument (i.e. one that takes a value) such
|
|
|
|
// as "-c some", and one positional argument (i.e. "myapp some_file")
|
|
|
|
.args(&[
|
2020-05-14 20:50:56 +00:00
|
|
|
Arg::new("config")
|
2021-11-18 16:17:15 +00:00
|
|
|
.help("sets the config file to use")
|
2018-11-14 17:05:06 +00:00
|
|
|
.takes_value(true)
|
|
|
|
.short('c')
|
|
|
|
.long("config"),
|
2020-05-14 20:50:56 +00:00
|
|
|
Arg::new("input")
|
2021-11-18 16:17:15 +00:00
|
|
|
.help("the input file to use")
|
2018-11-14 17:05:06 +00:00
|
|
|
.required(true),
|
|
|
|
])
|
|
|
|
// *Note* the following two examples are convenience methods, if you wish
|
2020-05-14 20:50:56 +00:00
|
|
|
// to still get the full configurability of Arg::new() and the readability
|
2018-11-14 17:05:06 +00:00
|
|
|
// of arg(), you can instantiate a new Arg with Arg::from() and
|
2020-05-14 20:50:56 +00:00
|
|
|
// still be able to set all the additional properties, just like Arg::new()
|
2018-11-14 17:05:06 +00:00
|
|
|
//
|
|
|
|
//
|
|
|
|
// One "Flag" using a usage string
|
2021-11-19 20:33:11 +00:00
|
|
|
.arg(arg!(--license "display the license file"))
|
|
|
|
// Two args one Positional and one Option using a usage string
|
|
|
|
.arg(arg!([output] "Supply an output file to use"))
|
|
|
|
.arg(
|
|
|
|
arg!(
|
|
|
|
-i --int <IFACE> "Set an interface to use"
|
|
|
|
)
|
|
|
|
.required(false),
|
|
|
|
)
|
2018-11-14 17:05:06 +00:00
|
|
|
.get_matches();
|
2015-10-01 01:45:35 +00:00
|
|
|
|
2015-08-30 20:16:35 +00:00
|
|
|
// Here are some examples of using the arguments defined above. Keep in mind that this is only
|
|
|
|
// an example, and may be somewhat contrived
|
|
|
|
//
|
|
|
|
// First we check if debugging should be on or not
|
2018-01-25 04:05:05 +00:00
|
|
|
println!(
|
|
|
|
"Debugging mode is: {}",
|
|
|
|
if matches.is_present("debug") {
|
|
|
|
"ON"
|
|
|
|
} else {
|
|
|
|
"OFF"
|
|
|
|
}
|
|
|
|
);
|
2015-08-30 20:16:35 +00:00
|
|
|
|
2015-10-01 01:45:35 +00:00
|
|
|
// Next we print the config file we're using, if any was defined with either -c <file> or
|
2015-08-30 20:16:35 +00:00
|
|
|
// --config <file>
|
|
|
|
if let Some(config) = matches.value_of("config") {
|
|
|
|
println!("A config file was passed in: {}", config);
|
|
|
|
}
|
|
|
|
|
2021-11-12 14:42:25 +00:00
|
|
|
// Let's print the <INPUT> file the user passed in.
|
|
|
|
println!(
|
|
|
|
"Using input file: {}",
|
|
|
|
matches
|
|
|
|
.value_of("input")
|
|
|
|
.expect("'input' is required and parsing will fail if its missing")
|
|
|
|
);
|
2015-08-30 20:16:35 +00:00
|
|
|
|
|
|
|
// We could continue checking for and using arguments in this manner, such as "license",
|
|
|
|
// "output", and "interface". Keep in mind that "output" and "interface" are optional, so you
|
2018-01-18 12:20:02 +00:00
|
|
|
// shouldn't call .unwrap(). Instead, prefer using an 'if let' expression as we did with
|
2015-08-30 20:16:35 +00:00
|
|
|
// "config"
|
2015-03-19 21:55:13 +00:00
|
|
|
}
|