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