1use near_jsonrpc_client::errors::JsonRpcError;
2use near_jsonrpc_client::methods::broadcast_tx_async::RpcBroadcastTxAsyncError;
3use near_jsonrpc_primitives::types::blocks::RpcBlockError;
4use near_jsonrpc_primitives::types::chunks::RpcChunkError;
5use near_jsonrpc_primitives::types::query::RpcQueryError;
6use near_jsonrpc_primitives::types::transactions::RpcTransactionError;
7use near_primitives::errors::TxExecutionError;
8
9pub type Result<T, E = Error> = core::result::Result<T, E>;
10
11#[derive(thiserror::Error, Debug)]
12#[non_exhaustive]
13pub enum Error {
14 #[error(transparent)]
15 RpcBlockError(Box<JsonRpcError<RpcBlockError>>),
16 #[error(transparent)]
17 RpcQueryError(Box<JsonRpcError<RpcQueryError>>),
18 #[error(transparent)]
19 RpcChunkError(Box<JsonRpcError<RpcChunkError>>),
20 #[error(transparent)]
21 RpcTransactionError(Box<JsonRpcError<RpcTransactionError>>),
22 #[error(transparent)]
23 RpcTransactionAsyncError(Box<JsonRpcError<RpcBroadcastTxAsyncError>>),
24 #[error("transaction has not completed yet")]
25 RpcTransactionPending,
26 #[error("invalid data returned: {0}")]
27 RpcReturnedInvalidData(String),
28 #[error("rpc: {0}")]
30 Rpc(Box<dyn std::error::Error + Send + Sync>),
31 #[error(transparent)]
32 TxExecution(Box<TxExecutionError>),
33 #[error("tx_status={0}")]
34 TxStatus(&'static str),
35
36 #[error(transparent)]
37 Serialization(#[from] serde_json::Error),
38 #[error(transparent)]
39 Base64(#[from] base64::DecodeError),
40 #[error(transparent)]
41 Io(#[from] std::io::Error),
42 #[error("invalid args were passed: {0}")]
43 InvalidArgs(&'static str),
44}
45
46impl From<JsonRpcError<RpcBlockError>> for Error {
47 fn from(err: JsonRpcError<RpcBlockError>) -> Self {
48 Error::RpcBlockError(Box::new(err))
49 }
50}
51
52impl From<JsonRpcError<RpcQueryError>> for Error {
53 fn from(err: JsonRpcError<RpcQueryError>) -> Self {
54 Error::RpcQueryError(Box::new(err))
55 }
56}
57
58impl From<JsonRpcError<RpcChunkError>> for Error {
59 fn from(err: JsonRpcError<RpcChunkError>) -> Self {
60 Error::RpcChunkError(Box::new(err))
61 }
62}
63
64impl From<JsonRpcError<RpcTransactionError>> for Error {
65 fn from(err: JsonRpcError<RpcTransactionError>) -> Self {
66 Error::RpcTransactionError(Box::new(err))
67 }
68}
69
70impl From<JsonRpcError<RpcBroadcastTxAsyncError>> for Error {
71 fn from(err: JsonRpcError<RpcBroadcastTxAsyncError>) -> Self {
72 Error::RpcTransactionAsyncError(Box::new(err))
73 }
74}