summaryrefslogtreecommitdiff
path: root/src/bin/jt2.rs
blob: 3d8522901ad2b45ef9b2121b9727cca86f0699af (plain)
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(())
}