1use thiserror::Error as ThisError;
2
3pub type Result<T> = std::result::Result<T, Error>;
4
5#[derive(ThisError, Debug)]
7pub enum Error {
8 #[error(transparent)]
9 IO(#[from] std::io::Error),
10
11 #[error("Call Error: code: {0} - msg: {1}")]
12 CallError(i32, String),
13
14 #[error("Subscribe Error: code: {0} - msg: {1}")]
15 SubscribeError(i32, String),
16
17 #[error("Encode Error: {0}")]
18 Encode(String),
19
20 #[error("Decode Error: {0}")]
21 Decode(String),
22
23 #[error("Invalid Message Error: {0}")]
24 InvalidMsg(String),
25
26 #[error(transparent)]
27 ParseJSON(#[from] serde_json::Error),
28
29 #[error("Unsupported Protocol: {0}")]
30 UnsupportedProtocol(String),
31
32 #[error("Tls config is required")]
33 TLSConfigRequired,
34
35 #[error("Receive Close Message From Connection: {0}")]
36 CloseConnection(String),
37
38 #[error("Subscription Not Found: {0}")]
39 SubscriptionNotFound(String),
40
41 #[error("Subscription Exceeds The Maximum Buffer Size")]
42 SubscriptionBufferFull,
43
44 #[error("Subscription Closed")]
45 SubscriptionClosed,
46
47 #[error("Subscription duplicated: {0}")]
48 SubscriptionDuplicated(String),
49
50 #[error("ClientDisconnected")]
51 ClientDisconnected,
52
53 #[error(transparent)]
54 ChannelRecv(#[from] async_channel::RecvError),
55
56 #[error("Channel send Error: {0}")]
57 ChannelSend(String),
58
59 #[cfg(feature = "ws")]
60 #[error(transparent)]
61 WebSocket(#[from] async_tungstenite::tungstenite::Error),
62
63 #[error("Unexpected Error: {0}")]
64 General(String),
65
66 #[error(transparent)]
67 KaryonCore(#[from] karyon_core::error::Error),
68
69 #[error(transparent)]
70 KaryonNet(#[from] karyon_net::Error),
71}
72
73impl<T> From<async_channel::SendError<T>> for Error {
74 fn from(error: async_channel::SendError<T>) -> Self {
75 Error::ChannelSend(error.to_string())
76 }
77}
78
79pub type RPCResult<T> = std::result::Result<T, RPCError>;
80
81#[derive(ThisError, Debug)]
83pub enum RPCError {
84 #[error("Custom Error: code: {0} msg: {1}")]
85 CustomError(i32, String),
86
87 #[error("Invalid Params: {0}")]
88 InvalidParams(String),
89
90 #[error("Invalid Request: {0}")]
91 InvalidRequest(String),
92
93 #[error("Parse Error: {0}")]
94 ParseError(String),
95
96 #[error("Internal Error")]
97 InternalError,
98}
99
100impl From<serde_json::Error> for RPCError {
101 fn from(error: serde_json::Error) -> Self {
102 RPCError::ParseError(error.to_string())
103 }
104}