summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-04-30 17:20:36 +0200
committerMatthias Beyer <mail@beyermatthias.de>2018-04-30 17:29:27 +0200
commitb3cf96d88b96c3ec9a1d6417bb9da9ec5c969526 (patch)
tree4b28e1963da8949b2600b3821a030b90d8253f32 /lib
parent76966bcd6c6e9c330cc97ad230e84f3dbddcba56 (diff)
Refactor error handling, use more error chaining
Diffstat (limited to 'lib')
-rw-r--r--lib/domain/libimagtodo/src/error.rs13
-rw-r--r--lib/domain/libimagtodo/src/task.rs3
-rw-r--r--lib/domain/libimagtodo/src/taskstore.rs17
3 files changed, 16 insertions, 17 deletions
diff --git a/lib/domain/libimagtodo/src/error.rs b/lib/domain/libimagtodo/src/error.rs
index e2402bb0..7498d387 100644
--- a/lib/domain/libimagtodo/src/error.rs
+++ b/lib/domain/libimagtodo/src/error.rs
@@ -22,17 +22,20 @@ error_chain! {
TodoError, TodoErrorKind, ResultExt, Result;
}
+ links {
+ StoreError(::libimagstore::error::StoreError, ::libimagstore::error::StoreErrorKind);
+ }
+
+ foreign_links {
+ TomlQueryError(::toml_query::error::Error);
+ }
+
errors {
ConversionError {
description("Conversion Error")
display("Conversion Error")
}
- StoreError {
- description("Store Error")
- display("Store Error")
- }
-
StoreIdError {
description("Store Id handling error")
display("Store Id handling error")
diff --git a/lib/domain/libimagtodo/src/task.rs b/lib/domain/libimagtodo/src/task.rs
index 81fcc2c3..b16cec06 100644
--- a/lib/domain/libimagtodo/src/task.rs
+++ b/lib/domain/libimagtodo/src/task.rs
@@ -34,8 +34,7 @@ pub trait Task {
impl Task for Entry {
fn get_uuid(&self) -> Result<Uuid> {
self.get_header()
- .read_string("todo.uuid")
- .chain_err(|| TEK::StoreError)?
+ .read_string("todo.uuid")?
.ok_or(TE::from_kind(TEK::HeaderFieldMissing))
.and_then(|u| Uuid::parse_str(&u).chain_err(|| TEK::UuidParserError))
}
diff --git a/lib/domain/libimagtodo/src/taskstore.rs b/lib/domain/libimagtodo/src/taskstore.rs
index 103532ca..a85696e4 100644
--- a/lib/domain/libimagtodo/src/taskstore.rs
+++ b/lib/domain/libimagtodo/src/taskstore.rs
@@ -101,7 +101,7 @@ impl<'a> TaskStore<'a> for Store {
ModuleEntryPath::new(format!("taskwarrior/{}", uuid))
.into_storeid()
.and_then(|store_id| self.get(store_id))
- .chain_err(|| TEK::StoreError)
+ .map_err(TE::from)
}
/// Same as Task::get_from_import() but uses Store::retrieve() rather than Store::get(), to
@@ -165,13 +165,13 @@ impl<'a> TaskStore<'a> for Store {
ModuleEntryPath::new(format!("taskwarrior/{}", uuid))
.into_storeid()
.and_then(|id| self.delete(id))
- .chain_err(|| TEK::StoreError)
+ .map_err(TE::from)
}
fn all_tasks(&self) -> Result<TaskIdIterator> {
self.entries()
.map(|i| TaskIdIterator::new(i.without_store()))
- .chain_err(|| TEK::StoreError)
+ .map_err(TE::from)
}
fn new_from_twtask(&'a self, task: TTask) -> Result<FileLockEntry<'a>> {
@@ -184,18 +184,15 @@ impl<'a> TaskStore<'a> for Store {
.chain_err(|| TEK::StoreIdError)
.and_then(|id| {
self.retrieve(id)
- .chain_err(|| TEK::StoreError)
+ .map_err(TE::from)
.and_then(|mut fle| {
{
let hdr = fle.get_header_mut();
- if hdr.read("todo").chain_err(|| TEK::StoreError)?.is_none() {
- hdr
- .set("todo", Value::Table(BTreeMap::new()))
- .chain_err(|| TEK::StoreError)?;
+ if hdr.read("todo")?.is_none() {
+ hdr.set("todo", Value::Table(BTreeMap::new()))?;
}
- hdr.set("todo.uuid", Value::String(format!("{}",uuid)))
- .chain_err(|| TEK::StoreError)?;
+ hdr.set("todo.uuid", Value::String(format!("{}",uuid)))?;
}
// If none of the errors above have returned the function, everything is fine