From 9f9c85b1c42c39ee8bdff63b9a01a10c653dc650 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 19 May 2021 20:51:15 +0100 Subject: [PATCH] otter(1): Provide alter-game-json ad-hoc subcommand Signed-off-by: Ian Jackson --- src/bin/otter.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) 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 { -- 2.30.2