07_callback/
07_callback.rs

1use aopt::prelude::*;
2
3pub fn changed(other: &str) -> impl Fn(&mut AHCSet, &mut Ctx) -> aopt::Result<Option<bool>> + '_ {
4    move |set, ctx| {
5        let val = ctx.value::<bool>()?;
6        *set.find_val_mut::<bool>(other)? = !val;
7        Ok(Some(val))
8    }
9}
10
11pub fn main() -> Result<(), aopt::Error> {
12    let mut parser = AFwdParser::default();
13
14    parser.add_opt("-flag;--flag=b")?.on(changed("--/flag"))?;
15    parser
16        .add_opt("-/flag;--/flag=b")?
17        .set_value_t(true)
18        .on(changed("--flag"))?;
19    parser
20        .parse(Args::from(["app", "-flag"].into_iter()))?
21        .ok()?;
22
23    assert_eq!(parser.find_val::<bool>("-flag")?, &true);
24    assert_eq!(parser.find_val::<bool>("--/flag")?, &false);
25
26    parser
27        .parse(Args::from(["app", "--/flag"].into_iter()))?
28        .ok()?;
29
30    assert_eq!(parser.find_val::<bool>("-flag")?, &false);
31    assert_eq!(parser.find_val::<bool>("--/flag")?, &true);
32
33    Ok(())
34}