From: Ian Jackson Date: Sun, 6 Jun 2021 20:58:44 +0000 (+0100) Subject: otter: Break out run_argparse X-Git-Tag: otter-0.7.0~72 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=d17d20e9d41dd5658fdc91b476fbddcf801dafc8;p=otter.git otter: Break out run_argparse Signed-off-by: Ian Jackson --- 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();