diff options
Diffstat (limited to 'src/error.rs')
-rw-r--r-- | src/error.rs | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..c86ad13 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,116 @@ +//! Errors returned from functions in this crate. + +use std::path::PathBuf; + +#[derive(Debug, thiserror::Error)] +pub enum JournalError { + /// Configuration file does not exist. + #[error("specified configuration file does not exist: {0}")] + ConfigMissing(PathBuf), + + /// Failed to read the configuration file. + /// + /// This is for permission problems and such. + #[error("failed to read configuration file {0}")] + ReadConfig(PathBuf, #[source] std::io::Error), + + /// Configuration file has a syntax error. + #[error("failed to understand configuration file syntax: {0}")] + ConfigSyntax(PathBuf, #[source] serde_yaml::Error), + + /// The specified directory does not look like a journal. + #[error("directory {0} is not a journal")] + NotAJournal(String), + + /// The specified directory for the journal does not exist. + #[error("journal directory does not exist: {0}")] + NoJournalDirectory(PathBuf), + + /// Failed to create the directory for the journal. + #[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 rename draft. + #[error("failed to remove draft {0}: {1}")] + RemoveDraft(PathBuf, #[source] std::io::Error), + + /// Failed to write entry. + #[error("failed to create journal entry {0}: {1}")] + WriteEntry(PathBuf, #[source] std::io::Error), + + /// Failed to write topic page. + #[error("failed to create topic page {0}: {1}")] + WriteTopic(PathBuf, #[source] std::io::Error), + + /// User chose a draft that doesn't exist. + #[error("No draft {0} in {1}")] + NoSuchDraft(String, PathBuf), + + /// Too many drafts. + #[error("there are already {0} drafts in {1}, can't create more")] + TooManyDrafts(usize, PathBuf), + + /// User chose a topic that doesn't exist. + #[error("No topic page {0}")] + NoSuchTopic(PathBuf), + + /// Failed to read draft. + #[error("failed to drafts {0}: {1}")] + ReadDraft(PathBuf, #[source] std::io::Error), + + /// Draft is not UTF8. + #[error("draft {0} is not UTF8: {1}")] + DraftNotUUtf8(PathBuf, #[source] std::string::FromUtf8Error), + + /// Failed to get metadata for specific file in drafts folder. + #[error("failed to stat draft in {0}: {1}")] + StatDraft(PathBuf, #[source] std::io::Error), + + /// Error spawning git. + #[error("failed to start git in {0}: {1}")] + SpawnGit(PathBuf, std::io::Error), + + /// Git init failed. + #[error("git init failed in {0}: {1}")] + GitInit(PathBuf, String), + + /// Git add failed. + #[error("git add failed in {0}: {1}")] + GitAdd(PathBuf, String), + + /// Git commit failed. + #[error("git commit failed in {0}: {1}")] + GitCommit(PathBuf, String), + + /// Error spawning editor. + #[error("failed to start editor {0}: {1}")] + SpawnEditor(PathBuf, #[source] std::io::Error), + + /// Editor failed. + #[error("editor {0} failed: {1}")] + EditorFailed(PathBuf, String), + + /// Template not found. + #[error("template not found: {0}")] + TemplateNotFound(String), + + /// Failed to render a Tera template. + #[error("template {0} failed to render: {1}")] + TemplateRender(String, #[source] tera::Error), + + /// Failed to make a path relative to a directory. + #[error("failed to make {0} relative to {1}: {2}")] + RelativePath(PathBuf, PathBuf, std::path::StripPrefixError), + + /// Problem with glob pattern. + #[error("Error in glob pattern {0}: {1}")] + PatternError(String, #[source] glob::PatternError), + + /// Problem when matching glob pattern on actual files. + #[error("Failed to match glob pattern {0}: {1}")] + GlobError(String, #[source] glob::GlobError), +} |