From 9efc3df2ee9a2ca03c97445ab12be7d8eee4b937 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 13 Aug 2020 19:49:59 +0100 Subject: [PATCH] less weird closure stuff --- src/bin/otter.rs | 90 +++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/src/bin/otter.rs b/src/bin/otter.rs index b5f245d6..355e1c6d 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -189,47 +189,51 @@ fn connect(_ma: &MainOpts) -> MgmtChannel { } inventory::submit!{Subcommand( - "create-table", "Create a new table", |_sc, mainopts, args|{ - #[derive(Default,Debug)] - struct Args { - name: String, - file: String, - } - let args = parse_args::(args, - &|ma|{ - use argparse::*; - let mut ap = ArgumentParser::new(); - ap.refer(&mut ma.name).required() - .add_argument("TABLE-NAME",Store,"table name"); - ap.refer(&mut ma.file).required() - .add_argument("TABLE-SPEC-TOML",Store,"table spec"); - ap - }, &|_ma|{ - Ok(()) - }, None); - - let spec = (||{ - let mut f = File::open(&args.file).context("open")?; - let mut buf = String::new(); - f.read_to_string(&mut buf).context("read")?; - let spec : TableSpec = toml::de::from_str(&buf).context("parse")?; - >::Ok(spec) - })().context("game spec toml").context(&args.file)?; - - let chan = connect(&mainopts)?; - - /* - - chan.cmd(MgmtCommand::CreateGame { - CreateGame { - name: args.name, - insns: vec![ - MgmtGameInstruction { - - }, - ]*/ - - eprintln!("CREATE-TABLE {:?} {:?}", &mainopts, &args); - Ok(()) - } + "create-table", + "Create a new table", + do_create_table, )} + +#[throws(E)] +fn do_create_table(_sc: &Subcommand, ma: MainOpts, args: Vec) { + #[derive(Default,Debug)] + struct Args { + name: String, + file: String, + } + let args = parse_args::(args, + &|ma|{ + use argparse::*; + let mut ap = ArgumentParser::new(); + ap.refer(&mut ma.name).required() + .add_argument("TABLE-NAME",Store,"table name"); + ap.refer(&mut ma.file).required() + .add_argument("TABLE-SPEC-TOML",Store,"table spec"); + ap + }, &|_ma|{ + Ok(()) + }, None); +/* + let spec = (||{ + let mut f = File::open(&args.file).context("open")?; + let mut buf = String::new(); + f.read_to_string(&mut buf).context("read")?; + let spec : TableSpec = toml::de::from_str(&buf).context("parse")?; + >::Ok(spec) + })().context("game spec toml").context(&args.file)?; +*/ + let chan = connect(&ma)?; + + /* + + chan.cmd(MgmtCommand::CreateGame { + CreateGame { + name: args.name, + insns: vec![ + MgmtGameInstruction { + + }, + ]*/ + + eprintln!("CREATE-TABLE {:?} {:?}", &ma, &args); +} -- 2.30.2