diff options
Diffstat (limited to 'bin/domain/imag-timetrack/src/start.rs')
-rw-r--r-- | bin/domain/imag-timetrack/src/start.rs | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/bin/domain/imag-timetrack/src/start.rs b/bin/domain/imag-timetrack/src/start.rs index a4f99e91..e3d10f01 100644 --- a/bin/domain/imag-timetrack/src/start.rs +++ b/bin/domain/imag-timetrack/src/start.rs @@ -21,49 +21,34 @@ use std::str::FromStr; use chrono::naive::NaiveDateTime; use failure::Error; +use failure::Fallible as Result; use libimagrt::runtime::Runtime; -use libimagerror::trace::trace_error; -use libimagerror::exit::ExitUnwrap; use libimagtimetrack::tag::TimeTrackingTag; use libimagtimetrack::store::TimeTrackStore; -pub fn start(rt: &Runtime) -> i32 { +pub fn start(rt: &Runtime) -> Result<()> { let (_, cmd) = rt.cli().subcommand(); let cmd = cmd.unwrap(); // checked in main() let start = { let startstr = cmd.value_of("start-time").unwrap(); // safe by clap if startstr == "now" { - ::chrono::offset::Local::now().naive_local() + Ok(::chrono::offset::Local::now().naive_local()) } else { - match NaiveDateTime::from_str(startstr).map_err(Error::from) { - Ok(ndt) => ndt, - Err(e) => { - trace_error(&e); - error!("Cannot continue, not having start time"); - return 1 - }, - } + NaiveDateTime::from_str(startstr) } - }; + }?; cmd.values_of("tags") .unwrap() // enforced by clap .map(String::from) .map(TimeTrackingTag::from) - .fold(0, |acc, ttt| { - match rt.store().create_timetracking_at(&start, &ttt) { - Err(e) => { - trace_error(&e); - 1 - }, - Ok(entry) => { - rt.report_touched(entry.get_location()).unwrap_or_exit(); - - acc - } - } + .map(|ttt| { + let entry = rt.store().create_timetracking_at(&start, &ttt)?; + rt.report_touched(entry.get_location()).map_err(Error::from) }) + .collect::<Result<Vec<_>>>() + .map(|_| ()) } |