1 // Third Party
2 #[cfg(feature = "yaml")]
3 use yaml_rust::Yaml;
4 
5 // Internal
6 use App;
7 use ArgMatches;
8 
9 /// The abstract representation of a command line subcommand.
10 ///
11 /// This struct describes all the valid options of the subcommand for the program. Subcommands are
12 /// essentially "sub-[`App`]s" and contain all the same possibilities (such as their own
13 /// [arguments], subcommands, and settings).
14 ///
15 /// # Examples
16 ///
17 /// ```rust
18 /// # use clap::{App, Arg, SubCommand};
19 /// App::new("myprog")
20 ///     .subcommand(
21 ///         SubCommand::with_name("config")
22 ///             .about("Used for configuration")
23 ///             .arg(Arg::with_name("config_file")
24 ///                 .help("The configuration file to use")
25 ///                 .index(1)))
26 /// # ;
27 /// ```
28 /// [`App`]: ./struct.App.html
29 /// [arguments]: ./struct.Arg.html
30 #[derive(Debug, Clone)]
31 pub struct SubCommand<'a> {
32     #[doc(hidden)] pub name: String,
33     #[doc(hidden)] pub matches: ArgMatches<'a>,
34 }
35 
36 impl<'a> SubCommand<'a> {
37     /// Creates a new instance of a subcommand requiring a name. The name will be displayed
38     /// to the user when they print version or help and usage information.
39     ///
40     /// # Examples
41     ///
42     /// ```rust
43     /// # use clap::{App, Arg, SubCommand};
44     /// App::new("myprog")
45     ///     .subcommand(
46     ///         SubCommand::with_name("config"))
47     /// # ;
48     /// ```
with_name<'b>(name: &str) -> App<'a, 'b>49     pub fn with_name<'b>(name: &str) -> App<'a, 'b> { App::new(name) }
50 
51     /// Creates a new instance of a subcommand from a YAML (.yml) document
52     ///
53     /// # Examples
54     ///
55     /// ```ignore
56     /// # #[macro_use]
57     /// # extern crate clap;
58     /// # use clap::Subcommand;
59     /// # fn main() {
60     /// let sc_yaml = load_yaml!("test_subcommand.yml");
61     /// let sc = SubCommand::from_yaml(sc_yaml);
62     /// # }
63     /// ```
64     #[cfg(feature = "yaml")]
from_yaml(yaml: &Yaml) -> App65     pub fn from_yaml(yaml: &Yaml) -> App { App::from_yaml(yaml) }
66 }
67