aboutsummaryrefslogtreecommitdiff
path: root/clap/examples/17_yaml.rs
diff options
context:
space:
mode:
Diffstat (limited to 'clap/examples/17_yaml.rs')
-rw-r--r--clap/examples/17_yaml.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/clap/examples/17_yaml.rs b/clap/examples/17_yaml.rs
new file mode 100644
index 0000000..3353d73
--- /dev/null
+++ b/clap/examples/17_yaml.rs
@@ -0,0 +1,53 @@
+// In order to use YAML to define your CLI you must compile clap with the "yaml" feature because
+// 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
+ // similar 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 {
+ "vi" => println!("You are using vi"),
+ "emacs" => println!("You are using emacs..."),
+ _ => 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.");
+}