From: Ian Jackson Date: Wed, 5 Aug 2020 23:17:52 +0000 (+0100) Subject: argparse call X-Git-Tag: otter-0.2.0~1177 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=4ee036a6358dfbe993e124a2d7eddaeead97cd38;p=otter.git argparse call --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index dedf5804..6505fa9a 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -1,6 +1,12 @@ // -/* + use game::imports::*; +use argparse::{self,ArgumentParser,action::{TypedAction,ParseResult}}; +use argparse::action::{Action,IArgAction}; +use std::rc::Rc; +use std::cell::RefCell; + +/* use std::cell::Cell; pub struct CellRef<'a, T> { @@ -36,28 +42,52 @@ impl<'a,T> Deref for CellRef<'a,T> { type Target = Cell; fn deref(&self) -> &Cell { &self.current } } + */ -use structopt::StructOpt; +struct Call; +struct CallIArgAction(RRF); +impl IArgAction for CallIArgAction>> +where F : FnMut(&str) -> ParseResult { + fn parse_arg(&self, arg: &str) -> ParseResult { + self.0.borrow_mut()(arg) + } +} +impl ParseResult> TypedAction for Call { + fn bind<'x>(&self, f: Rc>) -> Action<'x> { + Action::Single(Box::new(CallIArgAction(f.clone()))) + } +// fn bind<'x>(&self, t: Rc>) -> Action<'x> { +} +/* (&FnMut( +} +*/ +//use structopt::StructOpt; -#[derive(Debug,StructOpt)] -#[structopt(rename_all="kebab-case")] +//#[derive(Debug,StructOpt)] +//#[structopt(rename_all="kebab-case")] +#[derive(Default)] struct MainOpts { - #[structopt(long,group="scope",overrides_with("scope"))] server_scope: bool, - #[structopt(long,group="scope",overrides_with("scope"))] unix: bool, - #[structopt(long,group="scope",overrides_with("scope"))] unix_user: Option, - #[structopt(subcommand)] - cmd: Subcommand, + scope: Option, } -#[derive(Debug,StructOpt)] +//#[derive(Debug,StructOpt)] enum Subcommand { CreateTable { } } -*/ + fn main() { -/* - let opts = MainOpts::from_args(); - println!("{:?}", &opts); + let mainopts : MainOpts = Default::default(); + { + let ap = ArgumentParser::new(); + /* + let scope = ap.refer(&mut scope); + scope.add_option( + + Cell::from_mut(&mut mainopts.scope); + ap.refer(&mut &scope). + let opts = MainOpts::from_args(); */ + } +// println!("{:?}", &opts); }