Skip to main content

walletconnect_client/
error.rs

1use 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)]
6/// WalletConnect error.
7pub 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}