use std::cell::RefCell;
use qargparser as arg;
#[derive(Default)]
struct MyContext {
fname: String,
pidfile: String
}
fn file_proc(
_spec: &arg::Spec<MyContext>,
ctx: &mut MyContext,
args: &Vec<String>
) {
ctx.fname = args[0].clone();
assert_eq!(ctx.fname, "test.txt");
}
fn pidfile_proc(
_spec: &arg::Spec<MyContext>,
ctx: &mut MyContext,
args: &Vec<String>
) {
ctx.pidfile = args[0].clone();
assert_eq!(ctx.pidfile, "foobar.pid");
}
#[test]
fn optarg() -> Result<(), Box<dyn std::error::Error>> {
let file_spec = arg::Builder::new()
.sopt('f')
.lopt("file")
.help(&["Use file FILE."])
.nargs(arg::Nargs::Count(1), &["FILE"])
.build(file_proc);
let pidfile_spec = arg::Builder::new()
.sopt('p')
.lopt("pidfile")
.help(&["Store process pid in FILE."])
.nargs(arg::Nargs::Count(1), &["FILE"])
.build(pidfile_proc);
let ctx = MyContext {
..Default::default()
};
let mut prsr = arg::Parser::from_args(
"optarg",
&["--pidfile", "foobar.pid", "--file", "test.txt"],
ctx
);
prsr.add(file_spec)?;
prsr.add(pidfile_spec)?;
prsr.parse()?;
Ok(())
}