From: Ian Jackson Date: Sun, 9 Aug 2020 09:25:06 +0000 (+0100) Subject: move, compiles X-Git-Tag: otter-0.2.0~1153 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=7175ef8c9da32e7e78b6efa41ddf8d17d757c018;p=otter.git move, compiles --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index 5ec7d0e1..f2fad9e8 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -104,10 +104,20 @@ inventory::submit!{Subcommand( } )} +fn parse_args(apmaker: &F) -> T + where T:Default, F: Fn(&mut T) -> ArgumentParser +{ + let mut parsed = Default::default(); + let ap = apmaker(&mut parsed); + + ap.parse_args().unwrap_or_else(|rc| exit(if rc!=0 { EXIT_USAGE } else { 0 })); + mem::drop(ap); + parsed +} + fn main() { use argparse::*; - let mut parsed = Default::default(); let apmaker : fn(&mut (MainOpts, String, Vec)) -> ArgumentParser = | (mainopts, subcommand, subargs) | { @@ -133,11 +143,7 @@ fn main() { "use USER scope"); ap }; - let ap = apmaker(&mut parsed); - - ap.parse_args().unwrap_or_else(|rc| exit(if rc!=0 { EXIT_USAGE } else { 0 })); - mem::drop(ap); - let (mut mainopts, subcommand, subargs) = parsed; + let (mut mainopts, subcommand, subargs) = parse_args(&apmaker); mainopts.scope.get_or_insert_with(||{ let user = env::var("USER").unwrap_or_else(|e|{