summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers+gitlab@digital-scurf.org>2021-04-06 09:06:56 +0000
committerDaniel Silverstone <dsilvers+gitlab@digital-scurf.org>2021-04-06 09:06:56 +0000
commit518e7dc2d5f97387702af0a300cc2842bd0deec6 (patch)
tree05b1bdaff3e35e31ca18fb98f472eacd2767d421
parentcdb2ab3244776d99656b3aee93256a358456bf7e (diff)
parentbd6b9363cf282e82267fb7108320a6571e7a3e24 (diff)
downloadjt2-518e7dc2d5f97387702af0a300cc2842bd0deec6.tar.gz
Merge branch 'no-anyhow-in-lib' into 'main'
refactor: use Result<_, JournalError> instead of anyhow::Result See merge request larswirzenius/jt!10
-rw-r--r--src/error.rs8
-rw-r--r--src/journal.rs22
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(())
}
}