pub struct Switch<'a, T> { /* private fields */ }
Expand description
An option parameter that takes no values (precisely 0).
Implementations§
Source§impl<'a, T> Switch<'a, T>
impl<'a, T> Switch<'a, T>
Sourcepub fn new(variable: &'a mut T, target: T) -> Switch<'a, T>
pub fn new(variable: &'a mut T, target: T) -> Switch<'a, T>
Create a switch parameter.
Examples found in repository?
examples/example.rs (line 8)
2fn main() {
3 let mut verbose: bool = false;
4 let mut value: u32 = 0;
5 let ap = CommandLineParser::new("example");
6 let parser = ap
7 .add(Parameter::option(
8 Switch::new(&mut verbose, true),
9 "verbose",
10 Some('v'),
11 ))
12 .add(Parameter::argument(Scalar::new(&mut value), "value").meta(vec!["type: u32"]))
13 .build();
14 parser.parse();
15 println!("value: {value}, verbose: {verbose}");
16}
More examples
examples/demo_organization.rs (line 36)
30fn parse_tokens(parse_fn: impl FnOnce(GeneralParser) -> Result<(), i32>) -> Params {
31 let mut params = Params::init();
32
33 let clp = CommandLineParser::new("organization");
34 let parser = clp
35 .add(Parameter::option(
36 Switch::new(&mut params.verbose, true),
37 "verbose",
38 Some('v'),
39 ))
40 .add(Parameter::argument(
41 Collection::new(&mut params.items, Nargs::AtLeastOne),
42 "item",
43 ))
44 .build();
45
46 // The parse_fn signature is a `Result`.
47 // However, since `GeneralParser::parse` does not return an error (it uses `std::process::exit` under the hood), the `Err` case is only reached via test.
48 parse_fn(parser).expect("test-reachable-only");
49 params
50}
examples/reducer.rs (line 63)
53fn main() {
54 let mut _verbose: bool = false;
55 let mut operand: Operand = Operand::Add;
56 let mut initial: Option<u32> = None;
57 let mut _countries: HashSet<Country> = HashSet::default();
58 let mut items: Vec<u32> = Vec::default();
59
60 let ap = CommandLineParser::new("reducer");
61 let parser = ap
62 .add(
63 Parameter::option(Switch::new(&mut _verbose, true), "verbose", Some('v'))
64 .help("Do dee doo. We're really stretching here HAAAAAAAA HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!"),
65 )
66 .add(
67 Parameter::option(Scalar::new(&mut operand), "operand", Some('o'))
68 .help("moot")
69 .choice(Operand::Add, "+")
70 .choice(Operand::Multiply, "*"),
71 )
72 .add(Parameter::option(Optional::new(&mut initial), "initial", None)
73 .meta(vec!["testing a really long meta.. abcdefghijklmnopqrstuvwxyz"])
74 )
75 .add(Parameter::option(Collection::new(&mut _countries, Nargs::AtLeastOne), "country", None))
76 .add(
77 Parameter::argument(Collection::new(&mut items, Nargs::AtLeastOne), "item")
78 .help("The items."),
79 )
80 .build();
81 parser.parse();
82 println!("Items: {items:?}");
83 execute(_verbose, operand, initial, _countries, items);
84}
examples/foo_bar.rs (line 64)
54fn main() {
55 let mut verbose: bool = false;
56 let mut foo_bar = FooBar::Foo;
57 let mut initial: Option<u32> = None;
58 let mut countries: HashSet<Country> = HashSet::default();
59 let mut items: Vec<u32> = Vec::default();
60
61 let ap = CommandLineParser::new("foo_bar");
62 let parser = ap
63 .add(
64 Parameter::option(Switch::new(&mut verbose, true), "verbose", Some('v'))
65 .help("Do dee doo."),
66 )
67 .branch(
68 Condition::new(Scalar::new(&mut foo_bar), "foo_bar")
69 .choice(FooBar::Foo, "123 abc let's make this one medium long.")
70 .choice(FooBar::Bar, "456 def let's make this one multiple sentences. We're really stretching here HAAAAAAAA HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!")
71 .help("foo'y bar'y stuff")
72 .meta(vec!["a", "b", "c"]),
73 )
74 .command(FooBar::Foo, |sub| {
75 sub.add(Parameter::option(
76 Optional::new(&mut initial),
77 "initial",
78 None,
79 ))
80 .add(
81 Parameter::argument(Collection::new(&mut items, Nargs::Any), "item")
82 .help("The items."),
83 )
84 })
85 .command(FooBar::Bar, |sub| {
86 sub.add(Parameter::option(
87 Collection::new(&mut countries, Nargs::AtLeastOne),
88 "country",
89 None,
90 ))
91 })
92 .build();
93 parser.parse();
94 println!("Items: {items:?}");
95 execute(verbose, foo_bar, initial, countries, items);
96}
examples/demo_sub_command.rs (line 28)
3fn main() {
4 let mut sub: u32 = 0;
5 let mut arg_0: bool = false;
6 let mut opt_0: bool = false;
7 let mut arg_1: bool = false;
8
9 let clp = CommandLineParser::new("sub-command");
10 let parser = clp
11 .about("Describe the base command line parser. Let's make it a little long for fun.")
12 .branch(
13 Condition::new(Scalar::new(&mut sub), "sub")
14 // "0" is an undocumented sub-command.
15 // "1" is a regular sub-command.
16 .choice(1, "the one sub-command")
17 // "2" is a regular sub-command.
18 .choice(2, "the two sub-command")
19 // "3" is a false sub-command.
20 // It will appear in the documentation, but only those specified via `command(..)` actually affect the program structure.
21 .choice(3, "the three sub-command"),
22 )
23 .command(0, |sub_command| {
24 sub_command
25 .about("Describe the 0 sub-command parser. Let's make it a little long for fun.")
26 .add(Parameter::argument(Scalar::new(&mut arg_0), "arg"))
27 .add(Parameter::option(
28 Switch::new(&mut opt_0, true),
29 "opt",
30 None,
31 ))
32 })
33 .command(1, |sub_command| {
34 sub_command
35 .about("Describe the 1 sub-command parser.")
36 .add(Parameter::argument(Scalar::new(&mut arg_1), "arg"))
37 })
38 // Specify an argument-less & option-less sub-command by leaving the 'sub' untouched.
39 .command(2, |sub_command| sub_command)
40 // Since we never add "3", it isn't a true sub-command.
41 .build();
42
43 parser.parse();
44
45 println!("Used sub-command '{sub}'.");
46 match sub {
47 0 => {
48 println!("arg_0: {arg_0}");
49 println!("opt_0: {opt_0}");
50 assert!(!arg_1);
51 }
52 1 => {
53 assert!(!arg_0);
54 assert!(!opt_0);
55 println!("arg_1: {arg_1}");
56 }
57 2 => {
58 assert!(!arg_0);
59 assert!(!opt_0);
60 assert!(!arg_1);
61 println!("argument-less & option-less");
62 }
63 _ => {
64 panic!(
65 "impossible - the parser will reject any variants not specified via `command(..)`."
66 )
67 }
68 }
69}
Trait Implementations§
Auto Trait Implementations§
impl<'a, T> Freeze for Switch<'a, T>where
T: Freeze,
impl<'a, T> !RefUnwindSafe for Switch<'a, T>
impl<'a, T> !Send for Switch<'a, T>
impl<'a, T> !Sync for Switch<'a, T>
impl<'a, T> Unpin for Switch<'a, T>where
T: Unpin,
impl<'a, T> !UnwindSafe for Switch<'a, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more