chiark / gitweb /
less weird closure stuff
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 13 Aug 2020 18:49:59 +0000 (19:49 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 13 Aug 2020 18:49:59 +0000 (19:49 +0100)
src/bin/otter.rs

index b5f245d6c4867f59c24273c8340a16d63eb68459..355e1c6d0940165233a86339f0e363ed671c949e 100644 (file)
@@ -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,_,_>(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")?;
-      <Result<_,AE>>::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<String>) {
+  #[derive(Default,Debug)]
+  struct Args {
+    name: String,
+    file: String,
+  }
+  let args = parse_args::<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")?;
+    <Result<_,AE>>::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);
+}