libimagentrytag: Rewrite error handling
This commit is contained in:
parent
8d8a91e7c5
commit
0ede39a991
3 changed files with 10 additions and 11 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Reference in a new issue