1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
use jt2::config::Configuration;
use jt2::error::JournalError;
use jt2::journal::Journal;
use jt2::opt::{Opt, SubCommand};
use std::path::Path;
use structopt::StructOpt;
fn main() -> anyhow::Result<()> {
pretty_env_logger::init_custom_env("JT_LOG");
let opt = Opt::from_args();
let config = Configuration::read(&opt)?;
match opt.cmd {
SubCommand::Config => config.dump(),
SubCommand::Init {
journalname,
description,
} => init(&config.dirname, &journalname, &description)?,
SubCommand::IsJournal => is_journal(&config.dirname)?,
SubCommand::New { title } => new_draft(&title, &config.dirname, &config.editor)?,
SubCommand::Edit { draft } => edit_draft(&config.dirname, &config.editor, &draft)?,
SubCommand::Finish { draft, basename } => finish_draft(&config.dirname, &draft, &basename)?,
}
Ok(())
}
fn init(dirname: &Path, _journalname: &str, _description: &str) -> anyhow::Result<()> {
Journal::init(dirname)?;
Ok(())
}
fn is_journal(dirname: &Path) -> anyhow::Result<()> {
if !Journal::is_journal(dirname) {
return Err(JournalError::NotAJournal(dirname.display().to_string()).into());
}
Ok(())
}
fn new_draft(title: &str, dirname: &Path, editor: &str) -> anyhow::Result<()> {
let journal = Journal::new(dirname)?;
journal.new_draft(title, editor)?;
Ok(())
}
fn edit_draft(dirname: &Path, editor: &str, draft: &str) -> anyhow::Result<()> {
let journal = Journal::new(dirname)?;
let filename = journal.pick_draft(draft)?;
journal.edit_draft(editor, &filename)?;
Ok(())
}
fn finish_draft(dirname: &Path, draft: &str, basename: &str) -> anyhow::Result<()> {
let journal = Journal::new(dirname)?;
let filename = journal.pick_draft(draft)?;
journal.finish_draft(&filename, basename)?;
Ok(())
}
|