decthings_api/client/
error.rs1#[cfg(feature = "events")]
2use std::sync::Arc;
3
4#[derive(Debug)]
5pub enum DecthingsClientError {
6 #[cfg(not(target_os = "espidf"))]
7 Http(reqwest::Error),
10
11 #[cfg(target_os = "espidf")]
12 Http(esp_idf_svc::sys::EspError),
15
16 #[cfg(feature = "events")]
17 WebSocketConnect(Arc<tokio_tungstenite::tungstenite::Error>),
19
20 #[cfg(feature = "events")]
21 WebSocketWrite(Arc<tokio_tungstenite::tungstenite::Error>),
23
24 #[cfg(feature = "events")]
25 WebSocketRead(Arc<tokio_tungstenite::tungstenite::Error>),
27
28 ParseResponseFailed(serde_json::Error),
30
31 InvalidMessage,
33}
34
35#[cfg(target_os = "espidf")]
36impl From<esp_idf_svc::sys::EspError> for DecthingsClientError {
37 fn from(value: esp_idf_svc::sys::EspError) -> Self {
38 DecthingsClientError::Http(value)
39 }
40}
41
42#[cfg(target_os = "espidf")]
43impl From<esp_idf_svc::io::EspIOError> for DecthingsClientError {
44 fn from(value: esp_idf_svc::io::EspIOError) -> Self {
45 DecthingsClientError::Http(value.0)
46 }
47}
48
49impl std::fmt::Display for DecthingsClientError {
50 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
51 write!(f, "{:?}", self)
52 }
53}
54
55impl std::error::Error for DecthingsClientError {
56 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
57 match self {
58 Self::Http(e) => Some(e),
59 #[cfg(feature = "events")]
60 Self::WebSocketConnect(e) => Some(e),
61 #[cfg(feature = "events")]
62 Self::WebSocketRead(e) => Some(e),
63 #[cfg(feature = "events")]
64 Self::WebSocketWrite(e) => Some(e),
65 Self::ParseResponseFailed(e) => Some(e),
66 Self::InvalidMessage => None,
67 }
68 }
69}
70
71#[cfg(feature = "events")]
72impl From<super::websocket::WebSocketClientError> for DecthingsClientError {
73 fn from(x: super::websocket::WebSocketClientError) -> Self {
74 match x {
75 super::websocket::WebSocketClientError::Connect(e) => {
76 DecthingsClientError::WebSocketConnect(e)
77 }
78 super::websocket::WebSocketClientError::Write(e) => {
79 DecthingsClientError::WebSocketWrite(e)
80 }
81 super::websocket::WebSocketClientError::Read(e) => {
82 DecthingsClientError::WebSocketRead(e)
83 }
84 super::websocket::WebSocketClientError::InvalidMessage => {
85 DecthingsClientError::InvalidMessage
86 }
87 }
88 }
89}
90
91#[derive(Debug)]
92pub enum DecthingsRpcError<E> {
93 Request(DecthingsClientError),
95 Rpc(E),
97}
98
99impl<E: std::fmt::Debug> std::fmt::Display for DecthingsRpcError<E> {
100 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
101 write!(f, "{:?}", self)
102 }
103}
104
105impl<E> From<serde_json::Error> for DecthingsRpcError<E> {
106 fn from(x: serde_json::Error) -> Self {
107 Self::Request(DecthingsClientError::ParseResponseFailed(x))
108 }
109}
110
111impl<E> From<DecthingsClientError> for DecthingsRpcError<E> {
112 fn from(x: DecthingsClientError) -> Self {
113 Self::Request(x)
114 }
115}
116
117impl<E: std::fmt::Debug> std::error::Error for DecthingsRpcError<E> {
118 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
119 match self {
120 Self::Request(e) => Some(e),
121 Self::Rpc(_) => None,
122 }
123 }
124}