From: Ian Jackson Date: Sun, 27 Sep 2020 12:55:48 +0000 (+0100) Subject: common library args X-Git-Tag: otter-0.2.0~854 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=e47312cc30ec96c635bc4bc7538204174dca2301;p=otter.git common library args Signed-off-by: Ian Jackson --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index 1c601f87..109c4be6 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -580,29 +580,41 @@ mod reset_game { //---------- library-list ---------- -mod library_list { - use super::*; +#[derive(Debug)] +struct TableLibGlobArgs { + name: String, + pat: shapelib::ItemSpec, +} - #[derive(Debug)] - struct Args { - name: String, - pat: shapelib::ItemSpec, +impl Default for TableLibGlobArgs { fn default() -> Self { Self { + name: default(), + pat: shapelib::ItemSpec { lib: default(), item: default() }, +} } } + +impl TableLibGlobArgs { + fn add_arguments<'ap, 'tlg : 'ap>( + &'tlg mut self, + ap: &'_ mut ArgumentParser<'ap> + ) { + use argparse::*; + ap.refer(&mut self.name).required() + .add_argument("TABLE-NAME",Store,"table name"); + ap.refer(&mut self.pat.lib).required() + .add_argument("LIB-NAME",Store,"library name"); + ap.refer(&mut self.pat.item).required() + .add_argument("ITEM-GLOB-PATTERN",Store,"item glob pattern"); } +} - impl Default for Args { fn default() -> Args { Args { - name: default(), - pat: shapelib::ItemSpec { lib: default(), item: default() }, - } } } +mod library_list { + use super::*; + + type Args = TableLibGlobArgs; 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"); + sa.add_arguments(&mut ap); ap } @@ -636,10 +648,8 @@ mod library_add { #[derive(Default,Debug)] struct Args { + tlg: TableLibGlobArgs, adjust_markers: Option, - name: String, - lib: String, - pat: String, } impl Args { @@ -653,12 +663,7 @@ mod library_add { .add_option(&["--no-adjust-markers"],StoreConst(Some(false)), "do not adjust the number of insertion markers, just fail") .add_option(&["--adjust-markers"],StoreConst(Some(true)),""); - ap.refer(&mut sa.name).required() - .add_argument("TABLE-NAME",Store,"table name"); - ap.refer(&mut sa.lib).required() - .add_argument("LIB-NAME",Store,"library name"); - ap.refer(&mut sa.pat).required() - .add_argument("ITEM-GLOB-PATTERN",Store,"item glob pattern"); + sa.tlg.add_arguments(&mut ap); ap } @@ -668,7 +673,7 @@ mod library_add { let args = parse_args::(args, &subargs, None, None); let mut chan = ConnForGame { conn: connect(&ma)?, - name: args.name.clone(), + name: args.tlg.name.clone(), how: MgmtGameUpdateMode::Online, }; let markers = chan.get_pieces()?.into_iter().filter( @@ -749,6 +754,9 @@ mod library_add { }; dbg!(&placement); + let items = chan.list_items(&args.tlg.pat); + dbg!(&items); + Ok(()) }