chiark / gitweb /
library list
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 27 Sep 2020 12:29:59 +0000 (13:29 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 27 Sep 2020 12:29:59 +0000 (13:29 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/otter.rs
src/imports.rs
src/shapelib.rs

index 59d63b0635fae03fe84766dcd96b0b90d6d71085..bfa8346f0cd61e038a1e241bd0af8a3d390984d3 100644 (file)
@@ -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<String>) ->Result<(),AE> {
+    let args = parse_args::<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 {
index 1c4ae85bf39b0f3e545356414c80e2af172042af..ba24e764c6c13ce7c81a8d1e5efb3a04e5749f60 100644 (file)
@@ -114,6 +114,8 @@ pub use crate::shapelib;
 
 pub use nix::unistd::Uid;
 
+pub fn default<T:Default>() -> T { Default::default() }
+
 pub type E = anyhow::Error;
 pub type AE = anyhow::Error;
 
index 044733228dfbdc8bfb72dc576efc3dfd526b5684..b4438257ff422a50effa580200a768a309f47292 100644 (file)
@@ -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,