diff options
Diffstat (limited to 'bin/domain/imag-todo/src/lib.rs')
-rw-r--r-- | bin/domain/imag-todo/src/lib.rs | 64 |
1 files changed, 29 insertions, 35 deletions
diff --git a/bin/domain/imag-todo/src/lib.rs b/bin/domain/imag-todo/src/lib.rs index 42f9baeb..db93004d 100644 --- a/bin/domain/imag-todo/src/lib.rs +++ b/bin/domain/imag-todo/src/lib.rs @@ -41,7 +41,7 @@ extern crate chrono; extern crate filters; extern crate kairos; #[macro_use] extern crate log; -#[macro_use] extern crate failure; +#[macro_use] extern crate anyhow; extern crate resiter; extern crate handlebars; extern crate prettytable; @@ -69,14 +69,13 @@ extern crate libimaginteraction; use std::ops::Deref; use std::io::Write; -use std::result::Result as RResult; use std::str::FromStr; use clap::ArgMatches; use chrono::NaiveDateTime; -use failure::Error; -use failure::Fallible as Result; -use failure::err_msg; +use anyhow::Error; +use anyhow::Result; + use clap::App; use resiter::AndThen; use resiter::IterInnerOkOrElse; @@ -121,7 +120,7 @@ impl ImagApplication for ImagTodo { if rt.handle_unknown_subcommand("imag-todo", other, rt.cli())?.success() { Ok(()) } else { - Err(err_msg("Failed to handle unknown subcommand")) + Err(anyhow!("Failed to handle unknown subcommand")) } } } // end match scmd @@ -219,11 +218,11 @@ fn create(rt: &Runtime) -> Result<()> { fn mark(rt: &Runtime) -> Result<()> { fn mark_todos_as(rt: &Runtime, status: Status) -> Result<()> { rt.ids::<crate::ui::PathProvider>()? - .ok_or_else(|| err_msg("No ids supplied"))? + .ok_or_else(|| anyhow!("No ids supplied"))? .into_iter() .map(Ok) .into_get_iter(rt.store()) - .map_inner_ok_or_else(|| err_msg("Did not find one entry")) + .map_inner_ok_or_else(|| anyhow!("Did not find one entry")) .and_then_ok(|e| rt.report_touched(e.get_location()).map(|_| e)) .and_then_ok(|mut e| e.set_status(status.clone())) .collect() @@ -234,8 +233,8 @@ fn mark(rt: &Runtime) -> Result<()> { Some("done") => mark_todos_as(rt, Status::Done), Some("deleted") => mark_todos_as(rt, Status::Deleted), Some("pending") => mark_todos_as(rt, Status::Pending), - Some(other) => Err(format_err!("Unknown mark type selected: {}", other)), - None => Err(format_err!("No mark type selected, doing nothing!")), + Some(other) => Err(anyhow!("Unknown mark type selected: {}", other)), + None => Err(anyhow!("No mark type selected, doing nothing!")), } } @@ -249,19 +248,17 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul details: bool, } impl Viewer for TodoViewer { - fn view_entry<W>(&self, entry: &Entry, sink: &mut W) -> RResult<(), libimagentryview::error::Error> + fn view_entry<W>(&self, entry: &Entry, sink: &mut W) -> Result<()> where W: Write { - use libimagentryview::error::Error as E; - trace!("Viewing entry: {}", entry.get_location()); - if !entry.is_todo().map_err(E::from)? { - return Err(format_err!("Not a Todo: {}", entry.get_location())).map_err(E::from); + if !entry.is_todo()? { + return Err(anyhow!("Not a Todo: {}", entry.get_location())); } - let uuid = entry.get_uuid().map_err(E::from)?; - let status = entry.get_status().map_err(E::from)?; + let uuid = entry.get_uuid()?; + let status = entry.get_status()?; let status = status.as_str(); let first_line = entry.get_content() .lines() @@ -272,14 +269,14 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul let r = writeln!(sink, "{uuid} - {status} : {first_line}", uuid = uuid, status = status, - first_line = first_line); + first_line = first_line).map_err(Error::from); trace!("Viewing entry result: {:?}", r); r } else { let sched = util::get_dt_str(entry.get_scheduled(), "Not scheduled")?; let hidden = util::get_dt_str(entry.get_hidden(), "Not hidden")?; let due = util::get_dt_str(entry.get_due(), "No due")?; - let priority = entry.get_priority().map_err(E::from)?.map(|p| p.as_str().to_string()) + let priority = entry.get_priority()?.map(|p| p.as_str().to_string()) .unwrap_or_else(|| "No prio".to_string()); let r = writeln!(sink, "{uuid} - {status} - {sched} - {hidden} - {due} - {prio}: {first_line}", @@ -289,12 +286,11 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul hidden = hidden, due = due, prio = priority, - first_line = first_line); + first_line = first_line).map_err(Error::from); trace!("Viewing entry result: {:?}", r); r } - .map_err(libimagentryview::error::Error::from) } } @@ -343,18 +339,18 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul if rt.ids_from_stdin() { trace!("Getting IDs from stdin"); let iter = rt.ids::<crate::ui::PathProvider>()? - .ok_or_else(|| err_msg("No ids supplied"))? + .ok_or_else(|| anyhow!("No ids supplied"))? .into_iter() .map(Ok) .into_get_iter(rt.store()) - .map_inner_ok_or_else(|| err_msg("Did not find one entry")); + .map_inner_ok_or_else(|| anyhow!("Did not find one entry")); process(&rt, matcher, show_hidden, iter) } else { trace!("Getting IDs from store"); let iter = rt.store().get_todos()? .into_get_iter() - .map_inner_ok_or_else(|| err_msg("Did not find one entry")); + .map_inner_ok_or_else(|| anyhow!("Did not find one entry")); process(&rt, matcher, show_hidden, iter) } @@ -426,15 +422,13 @@ fn show(rt: &Runtime) -> Result<()> { }; iter.map(|entry| { - use libimagentryview::error::Error as E; - - let uuid = entry.get_uuid().map_err(E::from)?.to_hyphenated().to_string(); - let status = entry.get_status().map_err(E::from)?; + let uuid = entry.get_uuid()?.to_hyphenated().to_string(); + let status = entry.get_status()?; let status = status.as_str().to_string(); let sched = util::get_dt_str(entry.get_scheduled(), "Not scheduled")?; let hidden = util::get_dt_str(entry.get_hidden(), "Not hidden")?; let due = util::get_dt_str(entry.get_due(), "No due")?; - let priority = entry.get_priority().map_err(E::from)?.map(|p| p.as_str().to_string()).unwrap_or_else(|| "No prio".to_string()); + let priority = entry.get_priority()?.map(|p| p.as_str().to_string()).unwrap_or_else(|| "No prio".to_string()); let text = entry.get_content().to_owned(); @@ -461,11 +455,11 @@ fn show(rt: &Runtime) -> Result<()> { let iter = rt .ids::<crate::ui::PathProvider>()? - .ok_or_else(|| err_msg("No ids supplied"))? + .ok_or_else(|| anyhow!("No ids supplied"))? .into_iter() .map(Ok) .into_get_iter(rt.store()) - .map_inner_ok_or_else(|| err_msg("Did not find one entry")) + .map_inner_ok_or_else(|| anyhow!("Did not find one entry")) .and_then_ok(|e| rt.report_touched(e.get_location()).map(|_| e)) .collect::<Result<Vec<_>>>()? .into_iter(); @@ -493,13 +487,13 @@ fn get_datetime_arg(scmd: &ArgMatches, argname: &'static str) -> Result<Option<N match scmd.value_of(argname) { None => Ok(None), - Some(v) => match parser::parse(v)? { + Some(v) => match parser::parse(v).map_err(|e| Error::from(e.compat()))? { parser::Parsed::TimeType(TimeType::Moment(moment)) => Ok(Some(moment)), parser::Parsed::TimeType(other) => { - Err(format_err!("You did not pass a date, but a {}", other.name())) + Err(anyhow!("You did not pass a date, but a {}", other.name())) }, parser::Parsed::Iterator(_) => { - Err(format_err!("Argument {} results in a list of dates, but we need a single date.", v)) + Err(anyhow!("Argument {} results in a list of dates, but we need a single date.", v)) } } } @@ -510,7 +504,7 @@ fn prio_from_str<S: AsRef<str>>(s: S) -> Result<Priority> { "h" => Ok(Priority::High), "m" => Ok(Priority::Medium), "l" => Ok(Priority::Low), - other => Err(format_err!("Unsupported Priority: '{}'", other)), + other => Err(anyhow!("Unsupported Priority: '{}'", other)), } } |