From: Ian Jackson Date: Wed, 19 May 2021 19:51:15 +0000 (+0100) Subject: otter(1): Provide alter-game-json ad-hoc subcommand X-Git-Tag: otter-0.6.0~148 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=9f9c85b1c42c39ee8bdff63b9a01a10c653dc650;p=otter.git otter(1): Provide alter-game-json ad-hoc subcommand Signed-off-by: Ian Jackson --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index a25367ea..596505bd 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -1356,6 +1356,54 @@ mod list_pieces { )} } +//---------- alter game json ---------- + +mod alter_game_json { + use super::*; + + #[derive(Default,Debug)] + struct Args { + table_name: String, + json: Vec, + } + + fn subargs(sa: &mut Args) -> ArgumentParser { + use argparse::*; + let mut ap = ArgumentParser::new(); + ap.refer(&mut sa.table_name).required() + .add_argument("TABLE-NAME",Store,"table name"); + ap.refer(&mut sa.json).required() + .add_argument("JSON-INSN",Collect,"JSON-encoded MgmtGameInstruction"); + ap + } + + #[throws(AE)] + fn call(_sc: &Subcommand, ma: MainOpts, args: Vec) { + let args = parse_args::(args, &subargs, &ok_id, None); + let mut chan = access_game(&ma, &args.table_name)?; + + let insns = args.json.iter().enumerate().map(|(i,s)|{ + serde_json::from_str(&s) + .with_context(|| s.clone()) + .with_context(|| format!("parse json insn (#{})", i)) + }).collect::,AE>>()?; + + let resps = chan.alter_game(insns,None)?; + + for resp in resps { + println!("{}", + serde_json::to_string(&resp) + .context("re-format json")?); + } + } + + inventory::submit!{Subcommand( + "alter-game-json", + "run an ad-hoc AlterGame commandr", + call, + )} +} + //---------- upload-bundle ---------- mod upload_bundle {