libimagentrytag: Rewrite error handling

This commit is contained in:
Matthias Beyer 2017-09-03 15:57:47 +02:00
parent 8d8a91e7c5
commit 0ede39a991
3 changed files with 10 additions and 11 deletions

View file

@ -17,6 +17,10 @@
// 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 std::error::Error;
use libimagerror::into::IntoError;
error_chain! { error_chain! {
types { types {
TagError, TagErrorKind, ResultExt, Result; TagError, TagErrorKind, ResultExt, Result;
@ -46,10 +50,6 @@ error_chain! {
} }
} }
pub use self::error::TagError;
pub use self::error::TagErrorKind;
pub use self::error::MapErrInto;
impl IntoError for TagErrorKind { impl IntoError for TagErrorKind {
type Target = TagError; type Target = TagError;
@ -57,7 +57,7 @@ impl IntoError for TagErrorKind {
TagError::from_kind(self) TagError::from_kind(self)
} }
fn into_error_with_cause(self, cause: Box<Error>) -> Self::Target { fn into_error_with_cause(self, _: Box<Error>) -> Self::Target {
TagError::from_kind(self) TagError::from_kind(self)
} }
} }

View file

@ -46,7 +46,7 @@ extern crate filters;
#[macro_use] extern crate error_chain; #[macro_use] extern crate error_chain;
extern crate libimagstore; extern crate libimagstore;
#[macro_use] extern crate libimagerror; extern crate libimagerror;
pub mod error; pub mod error;
pub mod exec; pub mod exec;

View file

@ -26,7 +26,7 @@ use toml_query::read::TomlValueReadExt;
use toml_query::set::TomlValueSetExt; use toml_query::set::TomlValueSetExt;
use error::TagErrorKind; use error::TagErrorKind;
use error::MapErrInto; use error::ResultExt;
use result::Result; use result::Result;
use tag::{Tag, TagSlice}; use tag::{Tag, TagSlice};
use tag::is_tag_str; use tag::is_tag_str;
@ -49,7 +49,7 @@ pub trait Tagable {
impl Tagable for Value { impl Tagable for Value {
fn get_tags(&self) -> Result<Vec<Tag>> { fn get_tags(&self) -> Result<Vec<Tag>> {
let tags = try!(self.read("imag.tags").map_err_into(TagErrorKind::HeaderReadError)); let tags = try!(self.read("imag.tags").chain_err(|| TagErrorKind::HeaderReadError));
match tags { match tags {
Some(&Value::Array(ref tags)) => { Some(&Value::Array(ref tags)) => {
@ -87,8 +87,7 @@ impl Tagable for Value {
let a = ts.iter().unique().map(|t| Value::String(t.clone())).collect(); let a = ts.iter().unique().map(|t| Value::String(t.clone())).collect();
self.set("imag.tags", Value::Array(a)) self.set("imag.tags", Value::Array(a))
.map(|_| ()) .map(|_| ())
.map_err(Box::new) .chain_err(|| TagErrorKind::HeaderWriteError)
.map_err(|e| TagErrorKind::HeaderWriteError.into_error_with_cause(e))
} }
fn add_tag(&mut self, t: Tag) -> Result<()> { fn add_tag(&mut self, t: Tag) -> Result<()> {
@ -120,7 +119,7 @@ impl Tagable for Value {
} }
fn has_tag(&self, t: TagSlice) -> Result<bool> { fn has_tag(&self, t: TagSlice) -> Result<bool> {
let tags = try!(self.read("imag.tags").map_err_into(TagErrorKind::HeaderReadError)); let tags = try!(self.read("imag.tags").chain_err(|| TagErrorKind::HeaderReadError));
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());