From: Ian Jackson Date: Sun, 27 Sep 2020 12:29:59 +0000 (+0100) Subject: library list X-Git-Tag: otter-0.2.0~859 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=27d61599c423d16af77c5ba541a4137bf138735a;p=otter.git library list Signed-off-by: Ian Jackson --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index 59d63b06..bfa8346f 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -565,6 +565,56 @@ mod reset_game { )} } +//---------- library-list ---------- + +mod library_list { + use super::*; + + #[derive(Debug)] + struct Args { + name: String, + pat: shapelib::ItemSpec, + } + + impl Default for Args { fn default() -> Args { Args { + name: default(), + pat: shapelib::ItemSpec { lib: default(), item: default() }, + } } } + + fn subargs(sa: &mut Args) -> ArgumentParser { + use argparse::*; + let mut ap = ArgumentParser::new(); + ap.refer(&mut sa.name).required() + .add_argument("TABLE-NAME",Store,"table name"); + ap.refer(&mut sa.pat.lib).required() + .add_argument("LIB-NAME",Store,"library name"); + ap.refer(&mut sa.pat.item).required() + .add_argument("ITEM-GLOB-PATTERN",Store,"item glob pattern"); + ap + } + + fn call(_sc: &Subcommand, ma: MainOpts, args: Vec) ->Result<(),AE> { + let args = parse_args::(args, &subargs, None, None); + let mut chan = ConnForGame { + conn: connect(&ma)?, + name: args.name.clone(), + how: MgmtGameUpdateMode::Bulk, + }; + + let cmd = MgmtCommand::LibraryListByGlob { glob: args.pat.clone() }; + let items = chan.cmd(&cmd)?; + dbg!(&items); + + Ok(()) + } + + inventory::submit!{Subcommand( + "library-list", + "List pieces in the shape libraries", + call, + )} +} + //---------- library-sdd ---------- mod library_add { diff --git a/src/imports.rs b/src/imports.rs index 1c4ae85b..ba24e764 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -114,6 +114,8 @@ pub use crate::shapelib; pub use nix::unistd::Uid; +pub fn default() -> T { Default::default() } + pub type E = anyhow::Error; pub type AE = anyhow::Error; diff --git a/src/shapelib.rs b/src/shapelib.rs index 04473322..b4438257 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -116,7 +116,7 @@ type LLE = LibraryLoadError; type TV = toml::Value; type SE = SpecError; -#[derive(Debug,Serialize,Deserialize)] +#[derive(Debug,Clone,Serialize,Deserialize)] pub struct ItemSpec { pub lib: String, pub item: String,