libimagbookmark: Rewrite error handling

This commit is contained in:
Matthias Beyer 2017-09-03 16:07:31 +02:00
parent 5b781702cc
commit c9dbf76395
4 changed files with 21 additions and 21 deletions

View file

@ -29,7 +29,7 @@ use std::ops::DerefMut;
use regex::Regex; use regex::Regex;
use error::BookmarkErrorKind as BEK; use error::BookmarkErrorKind as BEK;
use error::MapErrInto; use error::ResultExt;
use result::Result; use result::Result;
use module_path::ModuleEntryPath; use module_path::ModuleEntryPath;
@ -81,14 +81,14 @@ impl<'a> BookmarkCollection<'a> {
store: store, store: store,
} }
}) })
.map_err_into(BEK::StoreReadError) .chain_err(|| BEK::StoreReadError)
} }
pub fn get(store: &'a Store, name: &str) -> Result<BookmarkCollection<'a>> { pub fn get(store: &'a Store, name: &str) -> Result<BookmarkCollection<'a>> {
ModuleEntryPath::new(name) ModuleEntryPath::new(name)
.into_storeid() .into_storeid()
.and_then(|id| store.get(id)) .and_then(|id| store.get(id))
.map_err_into(BEK::StoreReadError) .chain_err(|| BEK::StoreReadError)
.and_then(|fle| { .and_then(|fle| {
match fle { match fle {
None => Err(BEK::CollectionNotFound.into_error()), None => Err(BEK::CollectionNotFound.into_error()),
@ -104,11 +104,11 @@ impl<'a> BookmarkCollection<'a> {
ModuleEntryPath::new(name) ModuleEntryPath::new(name)
.into_storeid() .into_storeid()
.and_then(|id| store.delete(id)) .and_then(|id| store.delete(id))
.map_err_into(BEK::StoreReadError) .chain_err(|| BEK::StoreReadError)
} }
pub fn links(&self) -> Result<UrlIter> { pub fn links(&self) -> Result<UrlIter> {
self.fle.get_external_links(&self.store).map_err_into(BEK::LinkError) self.fle.get_external_links(&self.store).chain_err(|| BEK::LinkError)
} }
pub fn link_entries(&self) -> Result<Vec<StoreLink>> { pub fn link_entries(&self) -> Result<Vec<StoreLink>> {
@ -117,22 +117,22 @@ impl<'a> BookmarkCollection<'a> {
self.fle self.fle
.get_internal_links() .get_internal_links()
.map(|v| v.filter(|id| is_external_link_storeid(id)).collect()) .map(|v| v.filter(|id| is_external_link_storeid(id)).collect())
.map_err_into(BEK::StoreReadError) .chain_err(|| BEK::StoreReadError)
} }
pub fn add_link(&mut self, l: Link) -> Result<()> { pub fn add_link(&mut self, l: Link) -> Result<()> {
use link::IntoUrl; use link::IntoUrl;
l.into_url() l.into_url()
.and_then(|url| self.add_external_link(self.store, url).map_err_into(BEK::LinkingError)) .and_then(|url| self.add_external_link(self.store, url).chain_err(|| BEK::LinkingError))
.map_err_into(BEK::LinkError) .chain_err(|| BEK::LinkError)
} }
pub fn get_links_matching(&self, r: Regex) -> Result<LinksMatchingRegexIter<'a>> { pub fn get_links_matching(&self, r: Regex) -> Result<LinksMatchingRegexIter<'a>> {
use self::iter::IntoLinksMatchingRegexIter; use self::iter::IntoLinksMatchingRegexIter;
self.get_external_links(self.store) self.get_external_links(self.store)
.map_err_into(BEK::LinkError) .chain_err(|| BEK::LinkError)
.map(|iter| iter.matching_regex(r)) .map(|iter| iter.matching_regex(r))
} }
@ -141,9 +141,9 @@ impl<'a> BookmarkCollection<'a> {
l.into_url() l.into_url()
.and_then(|url| { .and_then(|url| {
self.remove_external_link(self.store, url).map_err_into(BEK::LinkingError) self.remove_external_link(self.store, url).chain_err(|| BEK::LinkingError)
}) })
.map_err_into(BEK::LinkError) .chain_err(|| BEK::LinkError)
} }
} }
@ -151,7 +151,7 @@ impl<'a> BookmarkCollection<'a> {
pub mod iter { pub mod iter {
use link::Link; use link::Link;
use result::Result; use result::Result;
use error::{MapErrInto, BookmarkErrorKind as BEK}; use error::{ResultExt, BookmarkErrorKind as BEK};
pub struct LinkIter<I>(I) pub struct LinkIter<I>(I)
where I: Iterator<Item = Link>; where I: Iterator<Item = Link>;
@ -194,7 +194,7 @@ pub mod iter {
loop { loop {
let n = match self.0.next() { let n = match self.0.next() {
Some(Ok(n)) => n, Some(Ok(n)) => n,
Some(Err(e)) => return Some(Err(e).map_err_into(BEK::LinkError)), Some(Err(e)) => return Some(Err(e).chain_err(|| BEK::LinkError)),
None => return None, None => return None,
}; };

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 {
BookmarkError, BookmarkErrorKind, ResultExt, Result; BookmarkError, BookmarkErrorKind, ResultExt, Result;
@ -51,10 +55,6 @@ error_chain! {
} }
} }
pub use self::error::BookmarkError;
pub use self::error::BookmarkErrorKind;
pub use self::error::MapErrInto;
impl IntoError for BookmarkErrorKind { impl IntoError for BookmarkErrorKind {
type Target = BookmarkError; type Target = BookmarkError;
@ -62,7 +62,7 @@ impl IntoError for BookmarkErrorKind {
BookmarkError::from_kind(self) BookmarkError::from_kind(self)
} }
fn into_error_with_cause(self, cause: Box<Error>) -> Self::Target { fn into_error_with_cause(self, _: Box<Error>) -> Self::Target {
BookmarkError::from_kind(self) BookmarkError::from_kind(self)
} }
} }

View file

@ -40,7 +40,7 @@ extern crate regex;
#[macro_use] extern crate error_chain; #[macro_use] extern crate error_chain;
#[macro_use] extern crate libimagstore; #[macro_use] extern crate libimagstore;
#[macro_use] extern crate libimagerror; extern crate libimagerror;
extern crate libimagentrylink; extern crate libimagentrylink;
module_entry_path_mod!("bookmark"); module_entry_path_mod!("bookmark");

View file

@ -67,9 +67,9 @@ impl IntoUrl for Link {
fn into_url(self) -> Result<Url> { fn into_url(self) -> Result<Url> {
use error::BookmarkErrorKind as BEK; use error::BookmarkErrorKind as BEK;
use error::MapErrInto; use error::ResultExt;
Url::parse(&self[..]).map_err_into(BEK::LinkParsingError) Url::parse(&self[..]).chain_err(|| BEK::LinkParsingError)
} }
} }