summaryrefslogtreecommitdiffstats
path: root/bin/domain/imag-timetrack/src/start.rs
diff options
context:
space:
mode:
Diffstat (limited to 'bin/domain/imag-timetrack/src/start.rs')
-rw-r--r--bin/domain/imag-timetrack/src/start.rs35
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(|_| ())
}