#![forbid(unsafe_code)]
#![deny(
non_camel_case_types,
non_snake_case,
path_statements,
trivial_numeric_casts,
unstable_features,
unused_allocation,
unused_import_braces,
unused_imports,
unused_must_use,
unused_mut,
unused_qualifications,
while_true,
)]
#[macro_use] extern crate log;
#[macro_use] extern crate failure;
extern crate resiter;
extern crate clap;
extern crate chrono;
extern crate toml;
extern crate toml_query;
extern crate itertools;
extern crate option_inspect;
extern crate libimagdiary;
extern crate libimagentryedit;
extern crate libimagentryview;
extern crate libimagerror;
extern crate libimaginteraction;
extern crate libimagrt;
extern crate libimagstore;
extern crate libimagtimeui;
extern crate libimagutil;
use std::io::Write;
use libimagrt::runtime::Runtime;
use libimagrt::application::ImagApplication;
use itertools::Itertools;
use clap::App;
use failure::Fallible as Result;
use failure::err_msg;
use failure::Error;
mod create;
mod delete;
mod list;
mod ui;
mod util;
mod view;
use crate::create::create;
use crate::delete::delete;
use crate::list::list;
use crate::view::view;
pub enum ImagDiary {}
impl ImagApplication for ImagDiary {
fn run(rt: Runtime) -> Result<()> {
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"))
}
},
}
}
fn build_cli<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
ui::build_ui(app)
}
fn name() -> &'static str {
env!("CARGO_PKG_NAME")
}
fn description() -> &'static str {
"Personal Diary/Diaries"
}
fn version() -> &'static str {
env!("CARGO_PKG_VERSION")
}
}
fn diaries(rt: &Runtime) -> Result<()> {
use libimagdiary::diary::Diary;
let out = rt.stdout();
let mut outlock = out.lock();
rt.store()
.diary_names()?
.collect::<Result<Vec<String>>>()?
.into_iter()
.unique()
.map(|n| writeln!(outlock, "{}", n).map_err(Error::from))
.collect()
}