Skip to main content

org_core/
error.rs

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