Merge pull request #418 from matthiasbeyer/libimagentrytag/more-helpers
Libimagentrytag/more helpers
This commit is contained in:
commit
8926fca280
3 changed files with 33 additions and 33 deletions
|
@ -14,8 +14,10 @@ use std::process::exit;
|
||||||
use libimagrt::runtime::Runtime;
|
use libimagrt::runtime::Runtime;
|
||||||
use libimagrt::setup::generate_runtime_setup;
|
use libimagrt::setup::generate_runtime_setup;
|
||||||
use libimagentrytag::tagable::Tagable;
|
use libimagentrytag::tagable::Tagable;
|
||||||
|
use libimagentrytag::tag::Tag;
|
||||||
use libimagstore::storeid::build_entry_path;
|
use libimagstore::storeid::build_entry_path;
|
||||||
use libimagerror::trace::trace_error;
|
use libimagerror::trace::trace_error;
|
||||||
|
use libimagentrytag::ui::{get_add_tags, get_remove_tags};
|
||||||
|
|
||||||
mod ui;
|
mod ui;
|
||||||
|
|
||||||
|
@ -32,9 +34,8 @@ fn main() {
|
||||||
.subcommand_name()
|
.subcommand_name()
|
||||||
.map_or_else(
|
.map_or_else(
|
||||||
|| {
|
|| {
|
||||||
let add = rt.cli().values_of("add").map(|o| o.map(String::from));
|
let add = get_add_tags(rt.cli());
|
||||||
let rem = rt.cli().values_of("remove").map(|o| o.map(String::from));
|
let rem = get_remove_tags(rt.cli());
|
||||||
|
|
||||||
alter(&rt, id, add, rem);
|
alter(&rt, id, add, rem);
|
||||||
},
|
},
|
||||||
|name| {
|
|name| {
|
||||||
|
@ -49,7 +50,7 @@ fn main() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn alter<SI: Iterator<Item = String>>(rt: &Runtime, id: &str, add: Option<SI>, rem: Option<SI>) {
|
fn alter(rt: &Runtime, id: &str, add: Option<Vec<Tag>>, rem: Option<Vec<Tag>>) {
|
||||||
let path = {
|
let path = {
|
||||||
match build_entry_path(rt.store(), id) {
|
match build_entry_path(rt.store(), id) {
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
use clap::{Arg, App, ArgGroup, SubCommand};
|
use clap::{Arg, App, ArgGroup, SubCommand};
|
||||||
|
|
||||||
|
use libimagentrytag::ui::{tag_add_arg, tag_remove_arg};
|
||||||
|
|
||||||
pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
|
pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
|
||||||
app.arg(Arg::with_name("id")
|
app.arg(Arg::with_name("id")
|
||||||
.long("id")
|
.long("id")
|
||||||
|
@ -8,21 +10,8 @@ pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
|
||||||
.required(true)
|
.required(true)
|
||||||
.help("Use this entry"))
|
.help("Use this entry"))
|
||||||
|
|
||||||
.arg(Arg::with_name("add")
|
.arg(tag_add_arg())
|
||||||
.long("add")
|
.arg(tag_remove_arg())
|
||||||
.short("a")
|
|
||||||
.takes_value(true)
|
|
||||||
.required(false)
|
|
||||||
.multiple(true)
|
|
||||||
.help("Add this tag"))
|
|
||||||
|
|
||||||
.arg(Arg::with_name("remove")
|
|
||||||
.long("remove")
|
|
||||||
.short("r")
|
|
||||||
.takes_value(true)
|
|
||||||
.required(false)
|
|
||||||
.multiple(true)
|
|
||||||
.help("Remove this tag"))
|
|
||||||
|
|
||||||
.subcommand(SubCommand::with_name("list")
|
.subcommand(SubCommand::with_name("list")
|
||||||
.about("List tags (default)")
|
.about("List tags (default)")
|
||||||
|
|
|
@ -9,20 +9,26 @@ pub fn tag_subcommand<'a, 'b>() -> App<'a, 'b> {
|
||||||
.author("Matthias Beyer <mail@beyermatthias.de>")
|
.author("Matthias Beyer <mail@beyermatthias.de>")
|
||||||
.version("0.1")
|
.version("0.1")
|
||||||
.about("Add or remove tags")
|
.about("Add or remove tags")
|
||||||
|
.arg(tag_add_arg())
|
||||||
|
.arg(tag_remove_arg())
|
||||||
|
}
|
||||||
|
|
||||||
.arg(Arg::with_name(tag_subcommand_add_arg_name())
|
pub fn tag_add_arg<'a, 'b>() -> Arg<'a, 'b> {
|
||||||
.short("a")
|
Arg::with_name(tag_subcommand_add_arg_name())
|
||||||
.long("add")
|
.short("a")
|
||||||
.takes_value(true)
|
.long("add")
|
||||||
.multiple(true)
|
.takes_value(true)
|
||||||
.help("Add tags, seperated by comma or by specifying multiple times"))
|
.multiple(true)
|
||||||
|
.help("Add tags, seperated by comma or by specifying multiple times")
|
||||||
|
}
|
||||||
|
|
||||||
.arg(Arg::with_name(tag_subcommand_remove_arg_name())
|
pub fn tag_remove_arg<'a, 'b>() -> Arg<'a, 'b> {
|
||||||
.short("r")
|
Arg::with_name(tag_subcommand_remove_arg_name())
|
||||||
.long("remove")
|
.short("r")
|
||||||
.takes_value(true)
|
.long("remove")
|
||||||
.multiple(true)
|
.takes_value(true)
|
||||||
.help("Remove tags, seperated by comma or by specifying multiple times"))
|
.multiple(true)
|
||||||
|
.help("Remove tags, seperated by comma or by specifying multiple times")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn tag_subcommand_name() -> &'static str {
|
pub fn tag_subcommand_name() -> &'static str {
|
||||||
|
@ -60,14 +66,18 @@ pub fn tag_argument_name() -> &'static str {
|
||||||
///
|
///
|
||||||
/// Returns none if the argument was not specified
|
/// Returns none if the argument was not specified
|
||||||
pub fn get_add_tags(matches: &ArgMatches) -> Option<Vec<Tag>> {
|
pub fn get_add_tags(matches: &ArgMatches) -> Option<Vec<Tag>> {
|
||||||
extract_tags(matches, "add-tags", '+')
|
let add = tag_subcommand_add_arg_name();
|
||||||
|
extract_tags(matches, add, '+')
|
||||||
|
.or_else(|| matches.values_of(add).map(|values| values.map(String::from).collect()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the tags which should be removed from the commandline
|
/// Get the tags which should be removed from the commandline
|
||||||
///
|
///
|
||||||
/// Returns none if the argument was not specified
|
/// Returns none if the argument was not specified
|
||||||
pub fn get_remove_tags(matches: &ArgMatches) -> Option<Vec<Tag>> {
|
pub fn get_remove_tags(matches: &ArgMatches) -> Option<Vec<Tag>> {
|
||||||
extract_tags(matches, "remove-tags", '-')
|
let rem = tag_subcommand_remove_arg_name();
|
||||||
|
extract_tags(matches, rem, '+')
|
||||||
|
.or_else(|| matches.values_of(rem).map(|values| values.map(String::from).collect()))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extract_tags(matches: &ArgMatches, specifier: &str, specchar: char) -> Option<Vec<Tag>> {
|
fn extract_tags(matches: &ArgMatches, specifier: &str, specchar: char) -> Option<Vec<Tag>> {
|
||||||
|
|
Loading…
Reference in a new issue