From: Ian Jackson Date: Sun, 6 Jun 2021 21:04:23 +0000 (+0100) Subject: otter: Break out run_ap_completer X-Git-Tag: otter-0.7.0~71 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=067dc14f8ff63183eb689df6a9a1a8fdbcd98700;p=otter.git otter: Break out run_ap_completer Signed-off-by: Ian Jackson --- diff --git a/cli/clisupport.rs b/cli/clisupport.rs index a9a501ac..51b8c8ef 100644 --- a/cli/clisupport.rs +++ b/cli/clisupport.rs @@ -114,6 +114,9 @@ pub type ApMaker<'apm, T> = pub type ExtraHelp<'exh> = &'exh dyn Fn(&mut dyn Write) -> Result<(), io::Error>; +pub type ApCompleter<'apc,T,U> = + &'apc dyn Fn(T) -> Result; + pub fn run_argparse(parsed: &mut T, apmaker: ApMaker, args: Vec, extra_help: Option) -> String /* us */{ @@ -142,23 +145,30 @@ pub fn run_argparse(parsed: &mut T, apmaker: ApMaker, us } -pub fn parse_args( - args: Vec, - apmaker: ApMaker, - completer: &dyn Fn(T) -> Result, - extra_help: Option, -) -> U { +pub fn run_ap_completer(parsed: T, us: String, apmaker: ApMaker, + completer: ApCompleter) + -> U where T: Default +{ let mut stderr = io::stderr(); - let mut parsed = default(); - let us = run_argparse(&mut parsed, apmaker, args, extra_help); - let completed = completer(parsed) + completer(parsed) .unwrap_or_else(|e:ArgumentParseError| { let mut def = default(); let ap = apmaker(&mut def); ap.error(&us, &e.0, &mut stderr); exit(EXIT_USAGE); - }); + }) +} + +pub fn parse_args( + args: Vec, + apmaker: ApMaker, + completer: ApCompleter, + extra_help: Option, +) -> U { + let mut parsed = default(); + let us = run_argparse(&mut parsed, apmaker, args, extra_help); + let completed = run_ap_completer(parsed, us, apmaker, completer); completed }