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}