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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
use crate::config::Configuration;
use crate::error::JournalError;
use crate::journal::Journal;
use std::path::PathBuf;
use structopt::StructOpt;
#[derive(Debug, StructOpt)]
pub struct Config {}
impl Config {
pub fn run(&self, config: &Configuration) -> Result<(), JournalError> {
config.dump();
Ok(())
}
}
#[derive(Debug, StructOpt)]
pub struct Init {
#[structopt(help = "Short name for journal")]
journalname: String,
#[structopt(help = "Short description of journal, its title")]
description: String,
}
impl Init {
pub fn run(&self, config: &Configuration) -> Result<(), JournalError> {
Journal::init(&config.dirname, &config.entries)?;
Ok(())
}
}
#[derive(Debug, StructOpt)]
pub struct IsJournal {}
impl IsJournal {
pub fn run(&self, config: &Configuration) -> Result<(), JournalError> {
if !Journal::is_journal(&config.dirname, &config.entries) {
return Err(JournalError::NotAJournal(config.dirname.display().to_string()).into());
}
Ok(())
}
}
#[derive(Debug, StructOpt)]
pub struct New {
#[structopt(help = "Title of new draft")]
title: String,
#[structopt(long, help = "Add link to a topic page")]
topic: Option<PathBuf>,
}
impl New {
pub fn run(&self, config: &Configuration) -> Result<(), JournalError> {
let journal = Journal::new(&config.dirname, &config.entries)?;
journal.new_draft(&self.title, &self.topic, &config.editor)?;
Ok(())
}
}
#[derive(Debug, StructOpt)]
pub struct NewTopic {
#[structopt(help = "Path to topic page in journal")]
path: PathBuf,
#[structopt(help = "Title of topic page")]
title: String,
}
impl NewTopic {
pub fn run(&self, config: &Configuration) -> Result<(), JournalError> {
let journal = Journal::new(&config.dirname, &config.entries)?;
journal.new_topic(&self.path, &self.title, &config.editor)?;
Ok(())
}
}
#[derive(Debug, StructOpt)]
pub struct Edit {
/// Draft id.
draft: String,
}
impl Edit {
pub fn run(&self, config: &Configuration) -> Result<(), JournalError> {
let journal = Journal::new(&config.dirname, &config.entries)?;
let filename = journal.pick_draft(&self.draft)?;
journal.edit_draft(&config.editor, &filename)?;
Ok(())
}
}
#[derive(Debug, StructOpt)]
pub struct Finish {
/// Draft id.
draft: String,
/// Set base name of published file.
basename: String,
}
impl Finish {
pub fn run(&self, config: &Configuration) -> Result<(), JournalError> {
let journal = Journal::new(&config.dirname, &config.entries)?;
let filename = journal.pick_draft(&self.draft)?;
journal.finish_draft(&filename, &self.basename)?;
Ok(())
}
}
|