walletconnect_client/
error.rs1use crate::{cipher::error::CipherError, jwt::decode::error::ClientIdDecodingError};
2use ethers::prelude::{JsonRpcError, ProviderError, RpcError};
3use gloo_net::websocket::WebSocketError;
4
5#[derive(Debug, thiserror::Error)]
6pub enum Error {
8 #[error("Query error")]
9 Query,
10
11 #[error("Url error")]
12 Url,
13
14 #[error("Token error")]
15 Token,
16
17 #[error("Disconnected")]
18 Disconnected,
19
20 #[error("BadParameter")]
21 BadParam,
22
23 #[error("Unknown error")]
24 Unknown,
25
26 #[error("Bad response")]
27 BadResponse,
28
29 #[error("Wallet error")]
30 WalletError(JsonRpcError),
31
32 #[error(transparent)]
33 ClientIdDecodingError(#[from] ClientIdDecodingError),
34
35 #[error(transparent)]
36 CipherError(#[from] CipherError),
37
38 #[error(transparent)]
39 CorruptedPacket(#[from] serde_json::error::Error),
40
41 #[error(transparent)]
42 WebSocketError(#[from] WebSocketError),
43
44 #[error(transparent)]
45 JSError(#[from] gloo_utils::errors::JsError),
46}
47
48impl RpcError for Error {
49 fn as_error_response(&self) -> Option<&JsonRpcError> {
50 match self {
51 Error::WalletError(e) => Some(e),
52 _ => None,
53 }
54 }
55
56 fn is_error_response(&self) -> bool {
57 self.as_error_response().is_some()
58 }
59
60 fn as_serde_error(&self) -> Option<&serde_json::Error> {
61 match self {
62 Error::CorruptedPacket(e) => Some(e),
63 _ => None,
64 }
65 }
66
67 fn is_serde_error(&self) -> bool {
68 self.as_serde_error().is_some()
69 }
70}
71
72impl From<Error> for ProviderError {
73 fn from(src: Error) -> Self {
74 ProviderError::JsonRpcClientError(Box::new(src))
75 }
76}