summaryrefslogtreecommitdiffstats
path: root/libimagtag
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-02-15 14:06:08 +0100
committerMatthias Beyer <mail@beyermatthias.de>2016-02-15 14:09:22 +0100
commit386ba39e94a2414d5c181554220b8d2d5621da1b (patch)
tree4c47834dfbe504357aa0bf28dcedcb953e2da883 /libimagtag
parent5c92624989f893d875c57b0173137c92dfea55bb (diff)
Reimplement add_tag() with get_tags()/set_tags()
Diffstat (limited to 'libimagtag')
-rw-r--r--libimagtag/src/tagable.rs38
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<()> {