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}