org_core/
error.rs

1use std::fmt;
2
3#[derive(Debug)]
4pub enum OrgModeError {
5    InvalidDirectory(String),
6    InvalidHeadingPath(String),
7    InvalidElementId(String),
8    WalkDirError(walkdir::Error),
9    IoError(std::io::Error),
10    ShellExpansionError(String),
11    ConfigError(String),
12}
13
14impl fmt::Display for OrgModeError {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        match self {
17            OrgModeError::InvalidDirectory(path) => {
18                write!(f, "Invalid or inaccessible directory: {path}")
19            }
20            OrgModeError::InvalidHeadingPath(path) => {
21                write!(f, "Invalid heading path: {path}")
22            }
23            OrgModeError::InvalidElementId(id) => {
24                write!(f, "Invalid element id: {id}")
25            }
26            OrgModeError::WalkDirError(err) => write!(f, "Error walking directory: {err}"),
27            OrgModeError::IoError(err) => write!(f, "IO error: {err}"),
28            OrgModeError::ShellExpansionError(path) => write!(f, "Failed to expand path: {path}"),
29            OrgModeError::ConfigError(msg) => write!(f, "Configuration error: {msg}"),
30        }
31    }
32}
33
34impl std::error::Error for OrgModeError {
35    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
36        match self {
37            OrgModeError::WalkDirError(err) => Some(err),
38            OrgModeError::IoError(err) => Some(err),
39            _ => None,
40        }
41    }
42}
43
44impl From<walkdir::Error> for OrgModeError {
45    fn from(err: walkdir::Error) -> Self {
46        OrgModeError::WalkDirError(err)
47    }
48}
49
50impl From<std::io::Error> for OrgModeError {
51    fn from(err: std::io::Error) -> Self {
52        OrgModeError::IoError(err)
53    }
54}
55
56impl From<config::ConfigError> for OrgModeError {
57    fn from(err: config::ConfigError) -> Self {
58        OrgModeError::ConfigError(err.to_string())
59    }
60}