03_combination_style/
03_combination_style.rs

1use aopt::prelude::*;
2
3pub fn main() -> Result<(), aopt::Error> {
4    let mut parser = AFwdParser::default();
5
6    // combination style only support bool type
7    parser.add_opt("-a=b")?;
8    parser.add_opt("-b=b")?;
9    parser.add_opt("-c".infer::<bool>())?;
10    parser.add_opt("d=b")?;
11    parser.add_opt("e=b")?;
12    parser.add_opt("f".infer::<bool>())?;
13
14    // enable combination style
15    parser.enable_combined();
16    parser
17        .parse(Args::from(["app", "-abc", "def"].into_iter()))?
18        .ok()?;
19
20    assert_eq!(parser.find_val::<bool>("-a")?, &true);
21    assert_eq!(parser.find_val::<bool>("-b")?, &true);
22    assert_eq!(parser.find_val::<bool>("-c")?, &true);
23    assert_eq!(parser.find_val::<bool>("d")?, &false);
24    assert_eq!(parser.find_val::<bool>("e")?, &false);
25    assert_eq!(parser.find_val::<bool>("f")?, &false);
26
27    // for support non-prefix option, need add prefix `""`,
28    // and disable the strict flag of policy
29    parser.validator_mut().add_prefix("");
30    parser.set_strict(false);
31    parser
32        .parse(Args::from(["app", "-abc", "def"].into_iter()))?
33        .ok()?;
34
35    assert_eq!(parser.find_val::<bool>("-a")?, &true);
36    assert_eq!(parser.find_val::<bool>("-b")?, &true);
37    assert_eq!(parser.find_val::<bool>("-c")?, &true);
38    assert_eq!(parser.find_val::<bool>("d")?, &true);
39    assert_eq!(parser.find_val::<bool>("e")?, &true);
40    assert_eq!(parser.find_val::<bool>("f")?, &true);
41
42    Ok(())
43}