diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2016-02-15 14:06:08 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2016-02-15 14:09:22 +0100 |
commit | 386ba39e94a2414d5c181554220b8d2d5621da1b (patch) | |
tree | 4c47834dfbe504357aa0bf28dcedcb953e2da883 /libimagtag | |
parent | 5c92624989f893d875c57b0173137c92dfea55bb (diff) |
Reimplement add_tag() with get_tags()/set_tags()
Diffstat (limited to 'libimagtag')
-rw-r--r-- | libimagtag/src/tagable.rs | 38 |
1 files changed, 6 insertions, 32 deletions
diff --git a/libimagtag/src/tagable.rs b/libimagtag/src/tagable.rs index a5c76c8d..6d91fa15 100644 --- a/libimagtag/src/tagable.rs +++ b/libimagtag/src/tagable.rs @@ -58,38 +58,12 @@ impl Tagable for EntryHeader { } fn add_tag(&mut self, t: Tag) -> Result<()> { - let tags = self.read("imag.tags"); - if tags.is_err() { - let kind = TagErrorKind::HeaderReadError; - return Err(TagError::new(kind, Some(Box::new(tags.err().unwrap())))); - } - let tags = tags.unwrap(); - - if !tags.iter().all(|t| match t { &Value::String(_) => true, _ => false }) { - return Err(TagError::new(TagErrorKind::TagTypeError, None)); - } - - if tags.is_none() { - return Ok(()); - } - let tags = tags.unwrap(); - - if !match tags { Value::Array(_) => true, _ => false } { - return Err(TagError::new(TagErrorKind::TagTypeError, None)); - } - - match tags { - Value::Array(tag_array) => { - let mut new_tags = tag_array.clone(); - new_tags.push(Value::String(t.clone())); - - self.set("imag.tags", Value::Array(new_tags)) - .map_err(|e| TagError::new(TagErrorKind::TagTypeError, Some(Box::new(e)))) - .map(|_| ()) - }, - - _ => unreachable!(), - } + self.get_tags() + .map(|mut tags| { + tags.push(t); + self.set_tags(tags) + }) + .map(|_| ()) } fn remove_tag(&mut self, t: Tag) -> Result<()> { |