chiark / gitweb /
otter: Rework run_ap_completer into argparse_more
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 6 Jun 2021 21:28:32 +0000 (22:28 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 6 Jun 2021 21:28:32 +0000 (22:28 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
cli/clisupport.rs
cli/otter.rs

index 54ec5a3d9bf0c134670908bfa7805e91352cc0d4..15b6da285b9a12db2bff5374f3353458a03c6779 100644 (file)
@@ -155,11 +155,11 @@ pub fn run_argparse<T>(parsed: &mut T, apmaker: ApMaker<T>,
   us
 }
 
-pub fn run_ap_completer<T,U>(parsed: T, us: String, apmaker: ApMaker<T>,
-                             completer: ApCompleter<T,U>)
-  -> U where T: Default
+pub fn argparse_more<T,U,F>(us: String, apmaker: ApMaker<T>, f: F) -> U
+  where T: Default,
+        F: FnOnce() -> Result<U, ArgumentParseError>
 {
-  completer(parsed).unwrap_or_else(|e| e.report(&us,apmaker))
+  f().unwrap_or_else(|e| e.report(&us,apmaker))
 }
 
 pub fn parse_args<T:Default,U>(
@@ -170,7 +170,7 @@ pub fn parse_args<T:Default,U>(
 ) -> U {
   let mut parsed = default();
   let us = run_argparse(&mut parsed, apmaker, args, extra_help);
-  let completed = run_ap_completer(parsed, us, apmaker, completer);
+  let completed = argparse_more(us, apmaker, || completer(parsed));
   completed
 }
 
index a0c7cf7e8f805fc1e678b99ba21d5016f271777a..8808ff28e878bf07508cb4fb4064f67eaf995e61 100644 (file)
@@ -323,7 +323,7 @@ fn main() {
 
   let us = run_argparse(&mut parsed, apmaker, args.clone(), Some(extra_help));
 
-  let completed = run_ap_completer(parsed, us, apmaker, &ap_completer);
+  let completed = argparse_more(us, apmaker, || ap_completer(parsed));
   let (subcommand, subargs, mo) = completed;
 
   let stdout = CookedStdout::new();