From bd6b9363cf282e82267fb7108320a6571e7a3e24 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 5 Apr 2021 19:04:13 +0300 Subject: refactor: use Result<_, JournalError> instead of anyhow::Result --- src/error.rs | 8 ++++++++ src/journal.rs | 22 ++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/error.rs b/src/error.rs index 05bb74d..199d1e4 100644 --- a/src/error.rs +++ b/src/error.rs @@ -26,6 +26,14 @@ pub enum JournalError { #[error("failed to create journal directory {0}")] CreateDirectory(PathBuf, #[source] std::io::Error), + /// Failed to rename entry when finishing it. + #[error("failed to rename journal entry {0} to {1}: {2}")] + RenameEntry(PathBuf, PathBuf, #[source] std::io::Error), + + /// Failed to write entry. + #[error("failed to create journal entry {0}: {1}")] + WriteEntry(PathBuf, #[source] std::io::Error), + /// To many drafts. #[error("there are already {0} drafts in {1}, can't create more")] TooManyDrafts(usize, PathBuf), diff --git a/src/journal.rs b/src/journal.rs index c3bb1eb..f58e49d 100644 --- a/src/journal.rs +++ b/src/journal.rs @@ -48,15 +48,17 @@ impl Journal { self.entries.clone() } - pub fn new_draft(&self, title: &str, editor: &str) -> anyhow::Result<()> { + pub fn new_draft(&self, title: &str, editor: &str) -> Result<(), JournalError> { let drafts = self.drafts(); if !drafts.exists() { - std::fs::create_dir(&drafts)?; + std::fs::create_dir(&drafts) + .map_err(|err| JournalError::CreateDirectory(drafts.to_path_buf(), err))?; } let pathname = self.pick_file_id(&drafts)?; let text = format!(r#"[[!meta title="{}"]]"#, title); - std::fs::write(&pathname, format!("{}\n\n", text))?; + std::fs::write(&pathname, format!("{}\n\n", text)) + .map_err(|err| JournalError::WriteEntry(pathname.to_path_buf(), err))?; self.edit(editor, &pathname)?; Ok(()) } @@ -105,23 +107,27 @@ impl Journal { } } - pub fn edit_draft(&self, editor: &str, filename: &Path) -> anyhow::Result<()> { + pub fn edit_draft(&self, editor: &str, filename: &Path) -> Result<(), JournalError> { self.edit(editor, filename)?; Ok(()) } - pub fn finish_draft(&self, filename: &Path, basename: &str) -> anyhow::Result<()> { + pub fn finish_draft(&self, filename: &Path, basename: &str) -> Result<(), JournalError> { let entries = self.entries(); if !entries.exists() { - std::fs::create_dir(&entries)?; + std::fs::create_dir(&entries) + .map_err(|err| JournalError::CreateDirectory(entries.to_path_buf(), err))?; } let subdir = entries.join(Local::today().format("%Y/%m/%d").to_string()); - std::fs::create_dir_all(&subdir)?; + std::fs::create_dir_all(&subdir) + .map_err(|err| JournalError::CreateDirectory(entries.to_path_buf(), err))?; let basename = PathBuf::from(format!("{}.mdwn", basename)); let entry = subdir.join(basename); - std::fs::rename(filename, entry)?; + std::fs::rename(filename, &entry).map_err(|err| { + JournalError::RenameEntry(filename.to_path_buf(), entry.to_path_buf(), err) + })?; Ok(()) } } -- cgit v1.2.1