Remove duplicated is_tag() function implementation
This commit is contained in:
parent
798b95785a
commit
e7bd43718d
4 changed files with 11 additions and 18 deletions
|
@ -17,6 +17,8 @@
|
||||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
//
|
//
|
||||||
|
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
pub type Tag = String;
|
pub type Tag = String;
|
||||||
pub type TagSlice<'a> = &'a str;
|
pub type TagSlice<'a> = &'a str;
|
||||||
|
|
||||||
|
@ -31,8 +33,9 @@ pub fn is_tag_str(s: &String) -> Result<(), String> {
|
||||||
let is_lower = |s: &String| s.chars().all(|c| c.is_lowercase());
|
let is_lower = |s: &String| s.chars().all(|c| c.is_lowercase());
|
||||||
let no_whitespace = |s: &String| s.chars().all(|c| !c.is_whitespace());
|
let no_whitespace = |s: &String| s.chars().all(|c| !c.is_whitespace());
|
||||||
let is_alphanum = |s: &String| s.chars().all(|c| c.is_alphanumeric());
|
let is_alphanum = |s: &String| s.chars().all(|c| c.is_alphanumeric());
|
||||||
|
let matches_regex = |s: &String| Regex::new("^[a-zA-Z]([a-zA-Z0-9_-]*)$").unwrap().captures(s).is_some();
|
||||||
|
|
||||||
if is_lower.and(no_whitespace).and(is_alphanum).filter(s) {
|
if is_lower.and(no_whitespace).and(is_alphanum).and(matches_regex).filter(s) {
|
||||||
Ok(())
|
Ok(())
|
||||||
} else {
|
} else {
|
||||||
Err(format!("The string '{}' is not a valid tag", s))
|
Err(format!("The string '{}' is not a valid tag", s))
|
||||||
|
|
|
@ -27,7 +27,7 @@ use error::TagErrorKind;
|
||||||
use error::MapErrInto;
|
use error::MapErrInto;
|
||||||
use result::Result;
|
use result::Result;
|
||||||
use tag::{Tag, TagSlice};
|
use tag::{Tag, TagSlice};
|
||||||
use util::is_tag;
|
use tag::is_tag_str;
|
||||||
|
|
||||||
use toml::Value;
|
use toml::Value;
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ impl Tagable for Value {
|
||||||
return Err(TagErrorKind::TagTypeError.into());
|
return Err(TagErrorKind::TagTypeError.into());
|
||||||
}
|
}
|
||||||
if tags.iter().any(|t| match *t {
|
if tags.iter().any(|t| match *t {
|
||||||
Value::String(ref s) => !is_tag(s),
|
Value::String(ref s) => !is_tag_str(s).is_ok(),
|
||||||
_ => unreachable!()})
|
_ => unreachable!()})
|
||||||
{
|
{
|
||||||
return Err(TagErrorKind::NotATag.into());
|
return Err(TagErrorKind::NotATag.into());
|
||||||
|
@ -77,8 +77,8 @@ impl Tagable for Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_tags(&mut self, ts: &[Tag]) -> Result<()> {
|
fn set_tags(&mut self, ts: &[Tag]) -> Result<()> {
|
||||||
if ts.iter().any(|tag| !is_tag(tag)) {
|
if ts.iter().any(|tag| !is_tag_str(tag).is_ok()) {
|
||||||
debug!("Not a tag: '{}'", ts.iter().filter(|t| !is_tag(t)).next().unwrap());
|
debug!("Not a tag: '{}'", ts.iter().filter(|t| !is_tag_str(t).is_ok()).next().unwrap());
|
||||||
return Err(TagErrorKind::NotATag.into());
|
return Err(TagErrorKind::NotATag.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ impl Tagable for Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_tag(&mut self, t: Tag) -> Result<()> {
|
fn add_tag(&mut self, t: Tag) -> Result<()> {
|
||||||
if !is_tag(&t) {
|
if !try!(is_tag_str(&t).map(|_| true).map_err(|_| TagErrorKind::NotATag.into_error())) {
|
||||||
debug!("Not a tag: '{}'", t);
|
debug!("Not a tag: '{}'", t);
|
||||||
return Err(TagErrorKind::NotATag.into());
|
return Err(TagErrorKind::NotATag.into());
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ impl Tagable for Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn remove_tag(&mut self, t: Tag) -> Result<()> {
|
fn remove_tag(&mut self, t: Tag) -> Result<()> {
|
||||||
if !is_tag(&t) {
|
if !try!(is_tag_str(&t).map(|_| true).map_err(|_| TagErrorKind::NotATag.into_error())) {
|
||||||
debug!("Not a tag: '{}'", t);
|
debug!("Not a tag: '{}'", t);
|
||||||
return Err(TagErrorKind::NotATag.into());
|
return Err(TagErrorKind::NotATag.into());
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,7 @@
|
||||||
use clap::{Arg, ArgMatches, App, SubCommand};
|
use clap::{Arg, ArgMatches, App, SubCommand};
|
||||||
|
|
||||||
use tag::Tag;
|
use tag::Tag;
|
||||||
|
use tag::is_tag;
|
||||||
use libimagutil::cli_validators::is_tag;
|
|
||||||
|
|
||||||
/// Generates a `clap::SubCommand` to be integrated in the commandline-ui builder for building a
|
/// Generates a `clap::SubCommand` to be integrated in the commandline-ui builder for building a
|
||||||
/// "tags --add foo --remove bar" subcommand to do tagging action.
|
/// "tags --add foo --remove bar" subcommand to do tagging action.
|
||||||
|
|
|
@ -47,12 +47,3 @@ pub fn is_url(s: String) -> Result<(), String> {
|
||||||
Url::parse(&s).map(|_| ()).map_err(|_| format!("Not a URL: {}", s))
|
Url::parse(&s).map(|_| ()).map_err(|_| format!("Not a URL: {}", s))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_tag(s: String) -> Result<(), String> {
|
|
||||||
use regex::Regex;
|
|
||||||
lazy_static! { static ref TAG_RE : Regex = Regex::new("[:alpha:][:word:]*").unwrap(); }
|
|
||||||
|
|
||||||
TAG_RE
|
|
||||||
.is_match(&s)
|
|
||||||
.as_result((), format!("Not a valid Tag: '{}' - Valid is [a-zA-Z][0-9a-zA-Z]*", s))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue