near_fetch/
error.rs

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    /// Catch all RPC error. This is usually resultant from query calls.
29    #[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}