From 33683712604607d85f20cbf93a7ac904552f4979 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 5 Sep 2020 14:42:08 +0300 Subject: feat: create and initialise a new journal At the moment this only creates a new directory, but most of the change is scaffolding so that more interesting changes can be built on top of this later. --- src/lib.rs | 1 + src/main.rs | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/lib.rs create mode 100644 src/main.rs (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ + diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..0a7efe1 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,54 @@ +use anyhow::Result; +use std::fs; +use std::path::{Path, PathBuf}; +use structopt::StructOpt; +use thiserror::Error; + +#[derive(Debug, StructOpt)] +#[structopt(about = "maintain a journal")] +enum JT { + Init { + #[structopt(help = "Directory where journal should be stored")] + dirname: PathBuf, + #[structopt(help = "Short name for journal")] + journalname: String, + #[structopt(help = "Short description of journal, its title")] + description: String, + }, + IsJournal { + #[structopt(help = "Directory that may or may not be a journal")] + dirname: PathBuf, + }, +} + +#[derive(Debug, Error)] +enum JournalError { + #[error("directory {0} is not a journal")] + NotAJournal(String), +} + +fn main() -> Result<()> { + let opt = JT::from_args(); + match opt { + JT::Init { + dirname, + journalname, + description, + } => init(&dirname, &journalname, &description)?, + JT::IsJournal { dirname } => is_journal(&dirname)?, + } + Ok(()) +} + +fn init(dirname: &Path, _journalname: &str, _description: &str) -> anyhow::Result<()> { + std::fs::create_dir(dirname)?; + Ok(()) +} + +fn is_journal(dirname: &Path) -> anyhow::Result<()> { + let meta = fs::symlink_metadata(dirname)?; + if !meta.is_dir() { + return Err(JournalError::NotAJournal(dirname.to_string_lossy().to_string()).into()); + } + Ok(()) +} -- cgit v1.2.1