1#[derive(Debug)]
2pub enum KeyboardError {
3 ZoneOutOfRange,
4}
5
6impl std::fmt::Display for KeyboardError {
7 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8 match self {
9 KeyboardError::ZoneOutOfRange => write!(f, "steeloxide::keyboard error, colouring out of range")
10 }
11 }
12}
13
14impl std::error::Error for KeyboardError {
15 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
16 match self {
17 KeyboardError::ZoneOutOfRange => None,
18 }
19 }
20}
21
22#[derive(Debug)]
23pub enum MouseError {
24 InvalidPollingRate,
25 ZoneOutOfRange,
26}
27
28impl std::fmt::Display for MouseError {
29 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30 match self {
31 MouseError::InvalidPollingRate => write!(f, "steeloxide::mouse error, polling rate out of range"),
32 MouseError::ZoneOutOfRange => write!(f, "steeloxide::mouse error, colouring out of range")
33 }
34 }
35}
36
37impl std::error::Error for MouseError {
38 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
39 match self {
40 MouseError::InvalidPollingRate => None,
41 MouseError::ZoneOutOfRange => None,
42 }
43 }
44}
45
46#[derive(Debug)]
47pub enum DeviceError {
48 NotFound,
49 Mouse(MouseError),
50 Keyboard(KeyboardError),
51}
52
53impl std::fmt::Display for DeviceError {
54 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
55 match self {
56 DeviceError::NotFound => write!(f, "steeloxide device not found"),
57 DeviceError::Mouse(err) => write!(f, "{err}"),
58 DeviceError::Keyboard(err) => write!(f, "{err}")
59 }
60 }
61}
62
63impl std::error::Error for DeviceError {
64 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
65 match self {
66 DeviceError::NotFound => None,
67 DeviceError::Mouse(err) => err.source(),
68 DeviceError::Keyboard(err) => err.source(),
69 }
70 }
71}
72
73
74#[derive(Debug)]
75pub enum Error {
76 IO(std::io::Error),
77 HidApi(hidapi::HidError),
78 DeviceError(DeviceError)
79}
80
81impl std::fmt::Display for Error {
82 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
83 match self {
84 Error::IO(err) => write!(f, "steeloxide I/O error: {err}"),
85 Error::HidApi(err) => write!(f, "steeloxide hidapi error: {err}"),
86 Error::DeviceError(err) => write!(f, "{err}")
87 }
88 }
89}
90
91impl std::error::Error for Error {
92 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
93 match self {
94 Error::IO(err) => err.source(),
95 Error::HidApi(err) => err.source(),
96 Error::DeviceError(err) => err.source()
97 }
98 }
99}
100
101impl From<std::io::Error> for Error {
102 fn from(value: std::io::Error) -> Self {
103 Self::IO(value)
104 }
105}
106
107impl From<hidapi::HidError> for Error {
108 fn from(value: hidapi::HidError) -> Self {
109 Self::HidApi(value)
110 }
111}
112
113impl From<MouseError> for Error {
114 fn from(value: MouseError) -> Self {
115 Self::DeviceError(DeviceError::Mouse(value))
116 }
117}
118
119impl From<DeviceError> for Error {
120 fn from(value: DeviceError) -> Self {
121 Self::DeviceError(value)
122 }
123}
124
125pub type Result<T> = std::result::Result<T, Error>;