oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
3,833 bytes raw
1
#[derive(Debug)]
2
pub enum WmError {
3
    X11(X11Error),
4
    Io(std::io::Error),
5
    Anyhow(anyhow::Error),
6
    Config(ConfigError),
7
}
8
9
#[derive(Debug)]
10
pub enum X11Error {
11
    ConnectError(x11rb::errors::ConnectError),
12
    ConnectionError(x11rb::errors::ConnectionError),
13
    ReplyError(x11rb::errors::ReplyError),
14
    ReplyOrIdError(x11rb::errors::ReplyOrIdError),
15
    DisplayOpenFailed,
16
    FontLoadFailed(String),
17
    DrawCreateFailed,
18
}
19
20
#[derive(Debug)]
21
pub enum ConfigError {
22
    ParseError(ron::error::SpannedError),
23
    InvalidModkey(String),
24
    UnknownKey(String),
25
    UnknownAction(String),
26
    UnknownBlockCommand(String),
27
    MissingCommandArg { command: String, field: String },
28
}
29
30
impl std::fmt::Display for WmError {
31
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
32
        match self {
33
            Self::X11(error) => write!(f, "{}", error),
34
            Self::Io(error) => write!(f, "{}", error),
35
            Self::Anyhow(error) => write!(f, "{}", error),
36
            Self::Config(error) => write!(f, "{}", error),
37
        }
38
    }
39
}
40
41
impl std::error::Error for WmError {}
42
43
impl std::fmt::Display for X11Error {
44
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
45
        match self {
46
            Self::ConnectError(err) => write!(f, "{}", err),
47
            Self::ConnectionError(err) => write!(f, "{}", err),
48
            Self::ReplyError(err) => write!(f, "{}", err),
49
            Self::ReplyOrIdError(err) => write!(f, "{}", err),
50
            Self::DisplayOpenFailed => write!(f, "failed to open X11 display"),
51
            Self::FontLoadFailed(font_name) => write!(f, "failed to load Xft font: {}", font_name),
52
            Self::DrawCreateFailed => write!(f, "failed to create XftDraw"),
53
        }
54
    }
55
}
56
57
impl std::error::Error for X11Error {}
58
59
impl std::fmt::Display for ConfigError {
60
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61
        match self {
62
            Self::ParseError(err) => write!(f, "Failed to parse RON config: {}", err),
63
            Self::InvalidModkey(key) => write!(f, "Invalid modkey: {}", key),
64
            Self::UnknownKey(key) => write!(f, "Unknown key: {}", key),
65
            Self::UnknownAction(action) => write!(f, "Unknown action: {}", action),
66
            Self::UnknownBlockCommand(cmd) => write!(f, "Unknown block command: {}", cmd),
67
            Self::MissingCommandArg { command, field } => {
68
                write!(f, "{} command requires {}", command, field)
69
            }
70
        }
71
    }
72
}
73
74
impl std::error::Error for ConfigError {}
75
76
impl<T: Into<X11Error>> From<T> for WmError {
77
    fn from(value: T) -> Self {
78
        Self::X11(value.into())
79
    }
80
}
81
82
impl From<std::io::Error> for WmError {
83
    fn from(value: std::io::Error) -> Self {
84
        Self::Io(value)
85
    }
86
}
87
88
impl From<anyhow::Error> for WmError {
89
    fn from(value: anyhow::Error) -> Self {
90
        Self::Anyhow(value)
91
    }
92
}
93
94
impl From<ConfigError> for WmError {
95
    fn from(value: ConfigError) -> Self {
96
        Self::Config(value)
97
    }
98
}
99
100
impl From<ron::error::SpannedError> for ConfigError {
101
    fn from(value: ron::error::SpannedError) -> Self {
102
        ConfigError::ParseError(value)
103
    }
104
}
105
106
impl From<x11rb::errors::ConnectError> for X11Error {
107
    fn from(value: x11rb::errors::ConnectError) -> Self {
108
        X11Error::ConnectError(value)
109
    }
110
}
111
112
impl From<x11rb::errors::ConnectionError> for X11Error {
113
    fn from(value: x11rb::errors::ConnectionError) -> Self {
114
        X11Error::ConnectionError(value)
115
    }
116
}
117
118
impl From<x11rb::errors::ReplyError> for X11Error {
119
    fn from(value: x11rb::errors::ReplyError) -> Self {
120
        X11Error::ReplyError(value)
121
    }
122
}
123
124
impl From<x11rb::errors::ReplyOrIdError> for X11Error {
125
    fn from(value: x11rb::errors::ReplyOrIdError) -> Self {
126
        X11Error::ReplyOrIdError(value)
127
    }
128
}