From d17d20e9d41dd5658fdc91b476fbddcf801dafc8 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 6 Jun 2021 21:58:44 +0100 Subject: [PATCH] otter: Break out run_argparse Signed-off-by: Ian Jackson --- cli/clisupport.rs | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/cli/clisupport.rs b/cli/clisupport.rs index 06d9902f..a9a501ac 100644 --- a/cli/clisupport.rs +++ b/cli/clisupport.rs @@ -111,14 +111,13 @@ pub fn noargs(_sa: &mut NoArgs) -> ArgumentParser { ArgumentParser::new() } pub type ApMaker<'apm, T> = &'apm dyn for <'a> Fn(&'a mut T) -> ArgumentParser<'a>; -pub fn parse_args( - args: Vec, - apmaker: ApMaker, - completer: &dyn Fn(T) -> Result, - extra_help: Option<&dyn Fn(&mut dyn Write) -> Result<(), io::Error>>, -) -> U { - let mut parsed = default(); - let ap = apmaker(&mut parsed); +pub type ExtraHelp<'exh> = + &'exh dyn Fn(&mut dyn Write) -> Result<(), io::Error>; + +pub fn run_argparse(parsed: &mut T, apmaker: ApMaker, + args: Vec, extra_help: Option) + -> String /* us */{ + let ap = apmaker(parsed); let us = args.get(0).expect("argv[0] must be provided!").clone(); let mut stdout = CookedStdout::new(); @@ -139,6 +138,20 @@ pub fn parse_args( } mem::drop(stdout); mem::drop(ap); + + us +} + +pub fn parse_args( + args: Vec, + apmaker: ApMaker, + completer: &dyn Fn(T) -> Result, + extra_help: Option, +) -> U { + let mut stderr = io::stderr(); + + let mut parsed = default(); + let us = run_argparse(&mut parsed, apmaker, args, extra_help); let completed = completer(parsed) .unwrap_or_else(|e:ArgumentParseError| { let mut def = default(); -- 2.30.2