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}