mirror of
https://github.com/clap-rs/clap
synced 2024-11-10 23:04:23 +00:00
53 lines
1.7 KiB
Rust
53 lines
1.7 KiB
Rust
// In order to use YAML to define your CLI you must compile clap with the "yaml" feature becasue
|
|
// it's **not** included by default.
|
|
//
|
|
// In order to do this, ensure your Cargo.toml looks like one of the following:
|
|
//
|
|
// [dependencies.clap]
|
|
// features = ["yaml"]
|
|
//
|
|
// __OR__
|
|
//
|
|
// [dependencies]
|
|
// clap = { features = ["yaml"] }
|
|
|
|
|
|
// Using yaml requires calling a clap macro `load_yaml!()` so we must use the '#[macro_use]'
|
|
// directive
|
|
#[macro_use]
|
|
extern crate clap;
|
|
|
|
#[cfg(feature = "yaml")]
|
|
fn main() {
|
|
use clap::App;
|
|
|
|
// To load a yaml file containing our CLI definition such as the example '17_yaml.yml' we can
|
|
// use the convenience macro which loads the file at compile relative to the current file
|
|
// similiar to how modules are found.
|
|
//
|
|
// Then we pass that yaml object to App to build the CLI.
|
|
//
|
|
// Finally we call get_matches() to start the parsing process. We use the matches just as we
|
|
// normally would
|
|
let yml = load_yaml!("17_yaml.yml");
|
|
let m = App::from_yaml(yml).get_matches();
|
|
|
|
// Because the example 17_yaml.yml is rather large we'll just look a single arg so you can
|
|
// see that it works...
|
|
if let Some(mode) = m.value_of("mode") {
|
|
match mode {
|
|
"fast" => println!("We're really going now!"),
|
|
"slow" => println!("Awwww, too slow :("),
|
|
_ => unreachable!()
|
|
}
|
|
} else {
|
|
println!("--mode <MODE> wasn't used...");
|
|
}
|
|
}
|
|
|
|
#[cfg(not(feature = "yaml"))]
|
|
fn main() {
|
|
// As stated above, if clap is not compiled with the YAML feature, it is disabled.
|
|
println!("YAML feature is disabled.");
|
|
println!("Pass --features yaml to cargo when trying this example.");
|
|
}
|