diff --git a/libimagentryselect/Cargo.toml b/libimagentryselect/Cargo.toml new file mode 100644 index 00000000..ccd52838 --- /dev/null +++ b/libimagentryselect/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "libimagentryselect" +version = "0.1.0" +authors = ["Matthias Beyer "] + +[dependencies] +clap = "2" +log = "0.3" +interactor = "0.1" + +[dependencies.libimagstore] +path = "../libimagstore" + +[dependencies.libimagerror] +path = "../libimagerror" + diff --git a/libimagentryselect/src/lib.rs b/libimagentryselect/src/lib.rs new file mode 100644 index 00000000..182aecdb --- /dev/null +++ b/libimagentryselect/src/lib.rs @@ -0,0 +1,9 @@ +extern crate clap; +extern crate log; +extern crate interactor; + +extern crate libimagstore; +extern crate libimagerror; + +pub mod ui; + diff --git a/libimagentryselect/src/ui.rs b/libimagentryselect/src/ui.rs new file mode 100644 index 00000000..c8c524d5 --- /dev/null +++ b/libimagentryselect/src/ui.rs @@ -0,0 +1,53 @@ +use std::path::PathBuf; + +use clap::{Arg, ArgMatches}; + +use libimagstore::storeid::StoreId; +use libimagerror::trace::trace_error; + +pub fn id_argument<'a, 'b>() -> Arg<'a, 'b> { + Arg::with_name(id_argument_name()) + .short(id_argument_short()) + .long(id_argument_long()) + .takes_value(true) + .multiple(true) + .help("Specify the Store-Id") +} + +pub fn id_argument_name() -> &'static str { + "id-argument" +} + +pub fn id_argument_short() -> &'static str { + "i" +} + +pub fn id_argument_long() -> &'static str { + "id" +} + +pub fn get_id(matches: &ArgMatches) -> Option> { + matches.values_of(id_argument_name()) + .map(|vals| { + vals.into_iter() + .map(String::from) + .map(StoreId::from) + .collect() + }) +} + +pub fn get_or_select_id(matches: &ArgMatches, store_path: &PathBuf) -> Option> { + use interactor::{pick_file, default_menu_cmd}; + + get_id(matches).or_else(|| { + match pick_file(default_menu_cmd, store_path.clone()) { + Err(e) => { + trace_error(&e); + None + }, + + Ok(p) => Some(vec![StoreId::from(p)]), + } + }) +} +