neo3/neo_clients/
errors.rs1use std::{error::Error, fmt::Debug, sync::Arc};
2
3use crate::{crypto::CryptoError, neo_clients::JsonRpcError, TypeError};
4use thiserror::Error;
5
6#[derive(Debug, Error)]
7pub enum ProviderError {
9 #[error("nns name not found: {0}")]
11 NnsError(String),
12 #[error("reverse nns name not pointing to itself: {0}")]
14 NnsNotOwned(String),
15 #[error(transparent)]
17 SerdeJson(#[from] serde_json::Error),
18 #[error(transparent)]
20 HexError(#[from] hex::FromHexError),
21 #[error(transparent)]
23 HTTPError(#[from] Arc<reqwest::Error>),
24 #[error(transparent)]
26 JsonRpcError(#[from] JsonRpcError),
27 #[error("custom error: {0}")]
29 CustomError(String),
30 #[error("unsupported RPC")]
32 UnsupportedRPC,
33 #[error("unsupported node client")]
35 UnsupportedNodeClient,
36 #[error("Attempted to sign a transaction with no available signer. Hint: did you mean to use a SignerMiddleware?"
38 )]
39 SignerUnavailable,
40 #[error("Illegal state: {0}")]
41 IllegalState(String),
42 #[error("Invalid address")]
43 InvalidAddress,
44 #[error(transparent)]
45 CryptoError(#[from] CryptoError),
46 #[error(transparent)]
47 TypeError(#[from] TypeError),
48 #[error("Invalid password")]
49 InvalidPassword,
50 #[error("Parse error: {0}")]
52 ParseError(String),
53 #[error("Lock error")]
55 LockError,
56 #[error("Protocol not found")]
58 ProtocolNotFound,
59 #[error("Network not found")]
61 NetworkNotFound,
62}
63
64impl PartialEq for ProviderError {
65 fn eq(&self, other: &Self) -> bool {
66 match (self, other) {
67 (ProviderError::SerdeJson(a), ProviderError::SerdeJson(b)) => {
68 a.to_string() == b.to_string()
69 },
70 (ProviderError::HTTPError(a), ProviderError::HTTPError(b)) => a.status() == b.status(),
71 (ProviderError::CustomError(a), ProviderError::CustomError(b)) => a == b,
72 (ProviderError::UnsupportedRPC, ProviderError::UnsupportedRPC) => true,
73 (ProviderError::UnsupportedNodeClient, ProviderError::UnsupportedNodeClient) => true,
74 (ProviderError::SignerUnavailable, ProviderError::SignerUnavailable) => true,
75 (ProviderError::IllegalState(a), ProviderError::IllegalState(b)) => a == b,
76 (ProviderError::InvalidAddress, ProviderError::InvalidAddress) => true,
77 (ProviderError::CryptoError(a), ProviderError::CryptoError(b)) => a == b,
78 (ProviderError::TypeError(a), ProviderError::TypeError(b)) => a == b,
79 (ProviderError::InvalidPassword, ProviderError::InvalidPassword) => true,
80 _ => false,
81 }
82 }
83}
84
85impl Clone for ProviderError {
87 fn clone(&self) -> Self {
88 match self {
89 ProviderError::NnsError(message) => ProviderError::NnsError(message.clone()),
90 ProviderError::NnsNotOwned(message) => ProviderError::NnsNotOwned(message.clone()),
91 ProviderError::SerdeJson(error) => ProviderError::SerdeJson(serde_json::Error::io(
92 std::io::Error::new(std::io::ErrorKind::Other, error.to_string()),
93 )),
94 ProviderError::HexError(error) => ProviderError::HexError(error.clone()),
95 ProviderError::HTTPError(error) => ProviderError::HTTPError(Arc::clone(error)),
96 ProviderError::JsonRpcError(error) => ProviderError::JsonRpcError(error.clone()),
97 ProviderError::CustomError(message) => ProviderError::CustomError(message.clone()),
98 ProviderError::UnsupportedRPC => ProviderError::UnsupportedRPC,
99 ProviderError::UnsupportedNodeClient => ProviderError::UnsupportedNodeClient,
100 ProviderError::SignerUnavailable => ProviderError::SignerUnavailable,
101 ProviderError::IllegalState(message) => ProviderError::IllegalState(message.clone()),
102 ProviderError::InvalidAddress => ProviderError::InvalidAddress,
103 ProviderError::CryptoError(error) => ProviderError::CryptoError(error.clone()),
104 ProviderError::TypeError(error) => ProviderError::TypeError(error.clone()),
105 ProviderError::InvalidPassword => ProviderError::InvalidPassword,
106 ProviderError::ParseError(message) => ProviderError::ParseError(message.clone()),
107 ProviderError::LockError => ProviderError::LockError,
108 ProviderError::ProtocolNotFound => ProviderError::ProtocolNotFound,
109 ProviderError::NetworkNotFound => ProviderError::NetworkNotFound,
110 }
111 }
112}