asteroid_mq_sdk/
error.rs

1use std::borrow::Cow;
2
3use asteroid_mq_model::{
4    connection::EdgeConnectionError, EdgeError, EdgeRequestEnum, EdgeResponseEnum, WaitAckError,
5};
6#[derive(Debug)]
7pub struct ClientNodeError {
8    pub kind: ClientErrorKind,
9}
10
11impl std::fmt::Display for ClientNodeError {
12    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13        write!(f, "{}", self.kind)
14    }
15}
16
17impl std::error::Error for ClientNodeError {}
18
19impl ClientNodeError {
20    pub fn unexpected_response(response: EdgeResponseEnum) -> Self {
21        ClientNodeError {
22            kind: ClientErrorKind::UnexpectedResponse(response),
23        }
24    }
25    pub fn disconnected(context: &'static str) -> Self {
26        ClientNodeError {
27            kind: ClientErrorKind::Disconnected(context.into()),
28        }
29    }
30}
31
32impl From<WaitAckError> for ClientNodeError {
33    fn from(e: WaitAckError) -> Self {
34        Self {
35            kind: ClientErrorKind::WaitAck(e),
36        }
37    }
38}
39impl From<EdgeConnectionError> for ClientNodeError {
40    fn from(e: EdgeConnectionError) -> Self {
41        Self {
42            kind: ClientErrorKind::Connection(e),
43        }
44    }
45}
46
47impl From<EdgeError> for ClientNodeError {
48    fn from(value: EdgeError) -> Self {
49        Self {
50            kind: ClientErrorKind::Edge(value),
51        }
52    }
53}
54#[derive(Debug)]
55pub enum ClientErrorKind {
56    UnexpectedResponse(EdgeResponseEnum),
57    Edge(EdgeError),
58    Connection(EdgeConnectionError),
59    NoConnection(EdgeRequestEnum),
60    Disconnected(Cow<'static, str>),
61    Io(std::io::Error),
62    WaitAck(WaitAckError),
63}
64
65impl std::fmt::Display for ClientErrorKind {
66    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
67        match self {
68            ClientErrorKind::UnexpectedResponse(response) => {
69                write!(f, "Unexpected response: {:?}", response)
70            }
71            ClientErrorKind::Edge(e) => write!(f, "Edge error: {:?}", e),
72            ClientErrorKind::Connection(e) => write!(f, "Edge connection error: {:?}", e),
73            ClientErrorKind::NoConnection(req) => write!(f, "No connection for request: {:?}", req),
74            ClientErrorKind::Disconnected(c) => write!(f, "Disconnected: {c}"),
75            ClientErrorKind::Io(e) => write!(f, "IO error: {:?}", e),
76            ClientErrorKind::WaitAck(e) => write!(f, "WaitAck error: {:?}", e),
77        }
78    }
79}