diff options
Diffstat (limited to 'bin/domain/imag-diary/src/lib.rs')
-rw-r--r-- | bin/domain/imag-diary/src/lib.rs | 50 |
1 files changed, 23 insertions, 27 deletions
diff --git a/bin/domain/imag-diary/src/lib.rs b/bin/domain/imag-diary/src/lib.rs index 23629dc9..f87cd927 100644 --- a/bin/domain/imag-diary/src/lib.rs +++ b/bin/domain/imag-diary/src/lib.rs @@ -36,6 +36,7 @@ #[macro_use] extern crate log; #[macro_use] extern crate failure; +extern crate resiter; extern crate clap; extern crate chrono; extern crate toml; @@ -56,11 +57,12 @@ use std::io::Write; use libimagrt::runtime::Runtime; use libimagrt::application::ImagApplication; -use libimagerror::trace::MapErrTrace; use itertools::Itertools; use clap::App; use failure::Fallible as Result; +use failure::err_msg; +use failure::Error; mod create; mod delete; @@ -81,25 +83,21 @@ use crate::view::view; pub enum ImagDiary {} impl ImagApplication for ImagDiary { fn run(rt: Runtime) -> Result<()> { - if let Some(name) = rt.cli().subcommand_name() { - debug!("Call {}", name); - match name { - "diaries" => diaries(&rt), - "create" => create(&rt), - "delete" => delete(&rt), - "list" => list(&rt), - "view" => view(&rt), - other => { - debug!("Unknown command"); - let _ = rt.handle_unknown_subcommand("imag-diary", other, rt.cli()) - .map_err_trace_exit_unwrap() - .code() - .map(::std::process::exit); - }, - } + match rt.cli().subcommand_name().ok_or_else(|| err_msg("No subcommand called"))? { + "diaries" => diaries(&rt), + "create" => create(&rt), + "delete" => delete(&rt), + "list" => list(&rt), + "view" => view(&rt), + other => { + debug!("Unknown command"); + if rt.handle_unknown_subcommand("imag-diary", other, rt.cli())?.success() { + Ok(()) + } else { + Err(err_msg("Failed to handle unknown subcommand")) + } + }, } - - Ok(()) } fn build_cli<'a>(app: App<'a, 'a>) -> App<'a, 'a> { @@ -119,20 +117,18 @@ impl ImagApplication for ImagDiary { } } -fn diaries(rt: &Runtime) { +fn diaries(rt: &Runtime) -> Result<()> { use libimagdiary::diary::Diary; - use libimagerror::io::ToExitCode; - use libimagerror::exit::ExitUnwrap; - use libimagerror::iter::TraceIterator; let out = rt.stdout(); let mut outlock = out.lock(); rt.store() - .diary_names() - .map_err_trace_exit_unwrap() - .trace_unwrap_exit() + .diary_names()? + .collect::<Result<Vec<String>>>()? + .into_iter() .unique() - .for_each(|n| writeln!(outlock, "{}", n).to_exit_code().unwrap_or_exit()) + .map(|n| writeln!(outlock, "{}", n).map_err(Error::from)) + .collect() } |