Merge pull request #621 from matthiasbeyer/libimagentrytag/remove-unwraps

Libimagentrytag/remove unwraps
This commit is contained in:
Matthias Beyer 2016-08-05 13:19:24 +02:00 committed by GitHub
commit 20a8f24a6e
2 changed files with 5 additions and 19 deletions

View file

@ -9,4 +9,5 @@ generate_error_module!(
pub use self::error::TagError; pub use self::error::TagError;
pub use self::error::TagErrorKind; pub use self::error::TagErrorKind;
pub use self::error::MapErrInto;

View file

@ -7,6 +7,7 @@ use libimagstore::store::{Entry, EntryHeader, FileLockEntry};
use libimagerror::into::IntoError; use libimagerror::into::IntoError;
use error::TagErrorKind; use error::TagErrorKind;
use error::MapErrInto;
use result::Result; use result::Result;
use tag::{Tag, TagSlice}; use tag::{Tag, TagSlice};
use util::is_tag; use util::is_tag;
@ -29,12 +30,7 @@ pub trait Tagable {
impl Tagable for EntryHeader { impl Tagable for EntryHeader {
fn get_tags(&self) -> Result<Vec<Tag>> { fn get_tags(&self) -> Result<Vec<Tag>> {
let tags = self.read("imag.tags"); let tags = try!(self.read("imag.tags").map_err_into(TagErrorKind::HeaderReadError));
if tags.is_err() {
let kind = TagErrorKind::HeaderReadError;
return Err(kind.into_error_with_cause(Box::new(tags.unwrap_err())));
}
let tags = tags.unwrap();
match tags { match tags {
Some(Value::Array(tags)) => { Some(Value::Array(tags)) => {
@ -105,12 +101,7 @@ impl Tagable for EntryHeader {
} }
fn has_tag(&self, t: TagSlice) -> Result<bool> { fn has_tag(&self, t: TagSlice) -> Result<bool> {
let tags = self.read("imag.tags"); let tags = try!(self.read("imag.tags").map_err_into(TagErrorKind::HeaderReadError));
if tags.is_err() {
let kind = TagErrorKind::HeaderReadError;
return Err(kind.into_error_with_cause(Box::new(tags.unwrap_err())));
}
let tags = tags.unwrap();
if !tags.iter().all(|t| is_match!(*t, Value::String(_))) { if !tags.iter().all(|t| is_match!(*t, Value::String(_))) {
return Err(TagErrorKind::TagTypeError.into()); return Err(TagErrorKind::TagTypeError.into());
@ -129,13 +120,7 @@ impl Tagable for EntryHeader {
fn has_tags(&self, tags: &[Tag]) -> Result<bool> { fn has_tags(&self, tags: &[Tag]) -> Result<bool> {
let mut result = true; let mut result = true;
for tag in tags { for tag in tags {
let check = self.has_tag(tag); result = result && try!(self.has_tag(tag));
if check.is_err() {
return Err(check.unwrap_err());
}
let check = check.unwrap();
result = result && check;
} }
Ok(result) Ok(result)