1use crate::{
4 errors::{APIError, CatBridgeError, NetworkError, NetworkParseError},
5 mion::{
6 cgis::MIONCGIApiError,
7 firmware::MIONFirmwareAPIError,
8 proto::{
9 cgis::MIONCGIErrors,
10 control::MIONControlProtocolError,
11 parameter::{MIONParamProtocolError, MIONParameterAPIError},
12 },
13 },
14};
15use miette::Diagnostic;
16use thiserror::Error;
17
18#[derive(Error, Diagnostic, Debug, PartialEq, Eq)]
20pub enum MIONAPIError {
21 #[error(transparent)]
22 #[diagnostic(transparent)]
23 CGI(#[from] MIONCGIApiError),
24 #[error("You cannot set a default bridge that does not exist.")]
26 #[diagnostic(code(cat_dev::api::mion::default_device_must_exist))]
27 DefaultDeviceMustExist,
28 #[error("The device name cannot be empty, it must be at least one byte long.")]
32 #[diagnostic(code(cat_dev::api::mion::device_name_cannot_be_empty))]
33 DeviceNameCannotBeEmpty,
34 #[error("A device name has to be completely ASCII! But it wasn't ASCII!")]
39 #[diagnostic(code(cat_dev::api::mion::device_name_not_ascii))]
40 DeviceNameMustBeAscii,
41 #[error("A Device Name can only be 255 bytes long, but you specified one: {0} bytes long.")]
48 #[diagnostic(code(cat_dev::api::mion::device_name_too_long))]
49 DeviceNameTooLong(usize),
50 #[error(transparent)]
52 #[diagnostic(transparent)]
53 Firmware(#[from] MIONFirmwareAPIError),
54 #[error(transparent)]
56 #[diagnostic(transparent)]
57 ParameterSpace(#[from] MIONParameterAPIError),
58}
59
60impl From<MIONCGIApiError> for APIError {
61 fn from(value: MIONCGIApiError) -> Self {
62 Self::MION(value.into())
63 }
64}
65impl From<MIONCGIApiError> for CatBridgeError {
66 fn from(value: MIONCGIApiError) -> Self {
67 Self::API(value.into())
68 }
69}
70
71impl From<MIONFirmwareAPIError> for APIError {
72 fn from(value: MIONFirmwareAPIError) -> Self {
73 Self::MION(value.into())
74 }
75}
76impl From<MIONFirmwareAPIError> for CatBridgeError {
77 fn from(value: MIONFirmwareAPIError) -> Self {
78 Self::API(value.into())
79 }
80}
81
82impl From<MIONParameterAPIError> for APIError {
83 fn from(value: MIONParameterAPIError) -> Self {
84 Self::MION(value.into())
85 }
86}
87impl From<MIONParameterAPIError> for CatBridgeError {
88 fn from(value: MIONParameterAPIError) -> Self {
89 Self::API(value.into())
90 }
91}
92
93#[derive(Error, Diagnostic, Debug, PartialEq, Eq)]
95pub enum MIONProtocolError {
96 #[error(transparent)]
98 #[diagnostic(transparent)]
99 CGI(#[from] MIONCGIErrors),
100 #[error(transparent)]
102 #[diagnostic(transparent)]
103 Control(#[from] MIONControlProtocolError),
104 #[error(transparent)]
106 #[diagnostic(transparent)]
107 Params(#[from] MIONParamProtocolError),
108}
109
110impl From<MIONProtocolError> for NetworkError {
111 fn from(value: MIONProtocolError) -> Self {
112 Self::Parse(value.into())
113 }
114}
115impl From<MIONProtocolError> for CatBridgeError {
116 fn from(value: MIONProtocolError) -> Self {
117 Self::Network(value.into())
118 }
119}
120
121impl From<MIONCGIErrors> for NetworkParseError {
122 fn from(value: MIONCGIErrors) -> Self {
123 Self::MION(value.into())
124 }
125}
126impl From<MIONCGIErrors> for NetworkError {
127 fn from(value: MIONCGIErrors) -> Self {
128 Self::Parse(value.into())
129 }
130}
131impl From<MIONCGIErrors> for CatBridgeError {
132 fn from(value: MIONCGIErrors) -> Self {
133 Self::Network(value.into())
134 }
135}
136
137impl From<MIONParamProtocolError> for NetworkParseError {
138 fn from(value: MIONParamProtocolError) -> Self {
139 Self::MION(value.into())
140 }
141}
142impl From<MIONParamProtocolError> for NetworkError {
143 fn from(value: MIONParamProtocolError) -> Self {
144 Self::Parse(value.into())
145 }
146}
147impl From<MIONParamProtocolError> for CatBridgeError {
148 fn from(value: MIONParamProtocolError) -> Self {
149 Self::Network(value.into())
150 }
151}
152
153impl From<MIONControlProtocolError> for NetworkParseError {
154 fn from(value: MIONControlProtocolError) -> Self {
155 Self::MION(value.into())
156 }
157}
158impl From<MIONControlProtocolError> for NetworkError {
159 fn from(value: MIONControlProtocolError) -> Self {
160 Self::Parse(value.into())
161 }
162}
163impl From<MIONControlProtocolError> for CatBridgeError {
164 fn from(value: MIONControlProtocolError) -> Self {
165 Self::Network(value.into())
166 }
167}