use ap::{App, Arg, Args, Handler, Need, Result};
#[derive(Clone, Debug, Default)]
struct MyHandler {
a_count: usize,
b_count: usize,
d_count: usize,
i: usize,
v: Vec<String>,
s: String,
}
impl Handler for &mut MyHandler {
fn handle(&mut self, arg: Arg) -> Result<()> {
println!("INFO: MyHandler: arg: {:?}", arg);
match arg.option {
'a' => self.a_count += 1,
'b' => self.b_count += 1,
'd' => self.d_count += 1,
_ => (),
};
self.i += 999;
self.s = "string value set by handler".into();
self.v.push("vector value set by handler".into());
println!("INFO: MyHandler: self: {:?}", self);
Ok(())
}
}
fn main() -> Result<()> {
let mut my_handler = MyHandler::default();
println!("INFO: Initial value of my handler: {:?}", my_handler);
let mut args = Args::default();
args.add(Arg::new('a').needs(Need::Argument));
args.add(Arg::new('b').needs(Need::Argument));
args.add(Arg::new('d').needs(Need::Nothing));
let mut app = App::default()
.help("some text")
.args(args)
.handler(Box::new(&mut my_handler));
let result = app.parse();
drop(app);
println!("INFO: Final value of my handler: {:?}", my_handler);
result
}