diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2019-12-12 10:19:22 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2019-12-12 10:19:23 +0100 |
commit | d109c345c85f3d688755c1315377b7d50cefd4fd (patch) | |
tree | c4eebd577014b1f6674f28e4ebdde6de92bb9c9d /bin/domain/imag-diary/src/delete.rs | |
parent | 733979609fb07d5ed301035828ae612dc332f09f (diff) |
Transform to error propagation
Transform codebase of imag-diary to propagate errors up to the main()
function rather than calling exit().
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'bin/domain/imag-diary/src/delete.rs')
-rw-r--r-- | bin/domain/imag-diary/src/delete.rs | 38 |
1 files changed, 11 insertions, 27 deletions
diff --git a/bin/domain/imag-diary/src/delete.rs b/bin/domain/imag-diary/src/delete.rs index 1b254c18..84a2e586 100644 --- a/bin/domain/imag-diary/src/delete.rs +++ b/bin/domain/imag-diary/src/delete.rs @@ -17,26 +17,23 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // -use std::process::exit; - use chrono::naive::NaiveDateTime as NDT; +use failure::Fallible as Result; +use failure::err_msg; use libimagdiary::diaryid::DiaryId; use libimagrt::runtime::Runtime; use libimagtimeui::datetime::DateTime; use libimagtimeui::parse::Parse; -use libimagutil::warn_exit::warn_exit; use libimagstore::storeid::IntoStoreId; -use libimagerror::trace::MapErrTrace; -use libimagerror::exit::ExitUnwrap; use crate::util::get_diary_name; -pub fn delete(rt: &Runtime) { +pub fn delete(rt: &Runtime) -> Result<()> { use libimaginteraction::ask::ask_bool; let diaryname = get_diary_name(rt) - .unwrap_or_else(|| warn_exit("No diary selected. Use either the configuration file or the commandline option", 1)); + .ok_or_else(|| err_msg("No diary selected. Use either the configuration file or the commandline option"))?; let to_del_location = rt .cli() @@ -46,34 +43,21 @@ pub fn delete(rt: &Runtime) { .map(|dt| { debug!("DateTime = {:?}", dt); dt }) .and_then(DateTime::parse) .map(Into::into) - .ok_or_else(|| warn_exit("Not deleting entries: missing date/time specification", 1)) + .ok_or_else(|| err_msg("Not deleting entries: missing date/time specification")) .and_then(|dt: NDT| DiaryId::from_datetime(diaryname.clone(), dt).into_storeid()) - .and_then(|id| rt.store().retrieve(id)) - .map_err_trace_exit_unwrap() + .and_then(|id| rt.store().retrieve(id))? .get_location() .clone(); - let mut input = rt.stdin().unwrap_or_else(|| { - error!("No input stream. Cannot ask for permission"); - exit(1); - }); - + let mut input = rt.stdin().ok_or_else(|| err_msg("No input stream. Cannot ask for permission"))?; let mut output = rt.stdout(); - if !ask_bool(&format!("Deleting {:?}", to_del_location), Some(true), &mut input, &mut output) - .map_err_trace_exit_unwrap() - { + if !ask_bool(&format!("Deleting {:?}", to_del_location), Some(true), &mut input, &mut output)? { info!("Aborting delete action"); - return; + return Ok(()); } - rt.report_touched(&to_del_location).unwrap_or_exit(); - - rt - .store() - .delete(to_del_location) - .map_err_trace_exit_unwrap(); - - info!("Ok!"); + rt.report_touched(&to_del_location)?; + rt.store().delete(to_del_location) } |