From dd66936e48684b6cad599ee0041486b439a6f898 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Thu, 4 Jan 2018 23:09:30 +0100 Subject: [PATCH] Refactoring: Use function chaining rather than matching --- lib/domain/libimagtodo/src/task.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/domain/libimagtodo/src/task.rs b/lib/domain/libimagtodo/src/task.rs index 039bdbfb..88c2e1f0 100644 --- a/lib/domain/libimagtodo/src/task.rs +++ b/lib/domain/libimagtodo/src/task.rs @@ -25,7 +25,6 @@ use error::Result; use libimagstore::store::Entry; use uuid::Uuid; -use toml::Value; use toml_query::read::TomlValueReadExt; pub trait Task { @@ -34,14 +33,13 @@ pub trait Task { impl Task for Entry { fn get_uuid(&self) -> Result { - match self.get_header().read("todo.uuid") { - Ok(Some(&Value::String(ref uuid))) => { - Uuid::parse_str(uuid).chain_err(|| TEK::UuidParserError) - }, - Ok(Some(_)) => Err(TE::from_kind(TEK::HeaderTypeError)), - Ok(None) => Err(TE::from_kind(TEK::HeaderFieldMissing)), - Err(e) => Err(e).chain_err(|| TEK::StoreError), - } + self.get_header() + .read("todo.uuid") + .chain_err(|| TEK::StoreError)? + .ok_or(TE::from_kind(TEK::HeaderFieldMissing))? + .as_str() + .ok_or(TE::from_kind(TEK::HeaderTypeError)) + .and_then(|u| Uuid::parse_str(u).chain_err(|| TEK::UuidParserError)) } }