mirror of
https://github.com/clap-rs/clap
synced 2024-12-13 22:32:33 +00:00
7e899cd340
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.
96 lines
4.1 KiB
Rust
96 lines
4.1 KiB
Rust
use clap::{App, Arg};
|
|
|
|
fn main() {
|
|
// This method shows the traditional, and slightly more configurable way to set up arguments. This method is
|
|
// more verbose, but allows setting more configuration options, and even supports easier dynamic generation.
|
|
//
|
|
// The example below is functionally identical to the 01a_quick_example.rs
|
|
//
|
|
// *NOTE:* You can actually achieve the best of both worlds by using Arg::from() (instead of Arg::new())
|
|
// and *then* setting any additional properties.
|
|
//
|
|
// Create an application with 5 possible arguments (2 auto generated) and 2 subcommands (1 auto generated)
|
|
// - A config file
|
|
// + Uses "-c filename" or "--config filename"
|
|
// - An output file
|
|
// + A positional argument (i.e. "$ myapp output_filename")
|
|
// - A debug flag
|
|
// + Uses "-d" or "--debug"
|
|
// + Allows multiple occurrences of such as "-dd" (for vary levels of debugging, as an example)
|
|
// - A help flag (automatically generated by clap)
|
|
// + Uses "-h" or "--help" (Only autogenerated if you do NOT specify your own "-h" or "--help")
|
|
// - A version flag (automatically generated by clap)
|
|
// + Uses "-V" or "--version" (Only autogenerated if you do NOT specify your own "-V" or "--version")
|
|
// - A subcommand "test" (subcommands behave like their own apps, with their own arguments
|
|
// + Used by "$ myapp test" with the following arguments
|
|
// > A list flag
|
|
// = Uses "-l" (usage is "$ myapp test -l"
|
|
// > A help flag (automatically generated by clap
|
|
// = Uses "-h" or "--help" (full usage "$ myapp test -h" or "$ myapp test --help")
|
|
// > A version flag (automatically generated by clap
|
|
// = Uses "-V" or "--version" (full usage "$ myapp test -V" or "$ myapp test --version")
|
|
// - A subcommand "help" (automatically generated by clap because we specified a subcommand of our own)
|
|
// + Used by "$ myapp help" (same functionality as "-h" or "--help")
|
|
let matches = App::new("MyApp")
|
|
.version("1.0")
|
|
.author("Kevin K. <kbknapp@gmail.com>")
|
|
.about("Does awesome things")
|
|
.arg(
|
|
Arg::new("config")
|
|
.short('c')
|
|
.long("config")
|
|
.value_name("FILE")
|
|
.help("Sets a custom config file")
|
|
.takes_value(true),
|
|
)
|
|
.arg(
|
|
Arg::new("output")
|
|
.help("Sets an optional output file")
|
|
.index(1),
|
|
)
|
|
.arg(
|
|
Arg::new("debug")
|
|
.short('d')
|
|
.long("debug")
|
|
.multiple_occurrences(true)
|
|
.help("Turn debugging information on"),
|
|
)
|
|
.subcommand(
|
|
App::new("test")
|
|
.about("does testing things")
|
|
.arg(Arg::new("list").short('l').help("lists test values")),
|
|
)
|
|
.get_matches();
|
|
|
|
// You can check the value provided by positional arguments, or option arguments
|
|
if let Some(o) = matches.value_of("output") {
|
|
println!("Value for output: {}", o);
|
|
}
|
|
|
|
if let Some(c) = matches.value_of("config") {
|
|
println!("Value for config: {}", c);
|
|
}
|
|
|
|
// You can see how many times a particular flag or argument occurred
|
|
// Note, only flags can have multiple occurrences
|
|
match matches.occurrences_of("debug") {
|
|
0 => println!("Debug mode is off"),
|
|
1 => println!("Debug mode is kind of on"),
|
|
2 => println!("Debug mode is on"),
|
|
_ => println!("Don't be crazy"),
|
|
}
|
|
|
|
// You can check for the existence of subcommands, and if found use their
|
|
// matches just as you would the top level app
|
|
if let Some(matches) = matches.subcommand_matches("test") {
|
|
// "$ myapp test" was run
|
|
if matches.is_present("list") {
|
|
// "$ myapp test -l" was run
|
|
println!("Printing testing lists...");
|
|
} else {
|
|
println!("Not printing testing lists...");
|
|
}
|
|
}
|
|
|
|
// Continued program logic goes here...
|
|
}
|