chiark / gitweb /
move, compiles
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 9 Aug 2020 09:25:06 +0000 (10:25 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 9 Aug 2020 09:25:06 +0000 (10:25 +0100)
src/bin/otter.rs

index 5ec7d0e1df79188ef5e1a3f02ec31166a38cb560..f2fad9e8bf729d9d891a580f547b61c7c70f4b8b 100644 (file)
@@ -104,10 +104,20 @@ inventory::submit!{Subcommand(
   }
 )}
 
+fn parse_args<T,F>(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<String>)) -> 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|{