1use alloy::{
2 contract::Error as AlloyContractError,
3 providers::{MulticallError, PendingTransactionError},
4 transports::{RpcError as AlloyRpcError, TransportErrorKind},
5};
6use thiserror::Error;
8
9#[derive(Error, Debug)]
11pub enum RpcError {
12 #[error(transparent)]
13 AlloyRpcError(#[from] AlloyRpcError<TransportErrorKind>),
14
15 #[error(transparent)]
16 AlloyContractError(#[from] AlloyContractError),
17
18 #[error(transparent)]
19 MulticallError(#[from] MulticallError),
20
21 #[error(transparent)]
22 LogConversionError(#[from] LogConversionError),
23
24 #[error(transparent)]
25 SignerError(#[from] alloy::signers::Error),
26
27 #[error("multicall inner failure at {0}: {1}")]
28 MulticallFailure(usize, String),
29
30 #[error(transparent)]
31 PendingTransactionError(#[from] PendingTransactionError),
32
33 #[error("filter does not contain any criteria")]
34 FilterIsEmpty,
35
36 #[error("transaction submission to the RPC provider timed out")]
37 Timeout,
38
39 #[error("unknown error: {0}")]
40 Other(String),
41}
42
43pub type Result<T> = std::result::Result<T, RpcError>;
44
45#[derive(Error, Clone, Debug, PartialEq)]
47pub enum HttpRequestError {
48 #[error("connection timed out")]
49 Timeout,
50
51 #[error("http error - status {0}")]
52 HttpError(http::StatusCode),
53
54 #[error("io error when performing http request: {0}")]
55 TransportError(String),
56
57 #[error("unrecognized error: {0}")]
58 UnknownError(String),
59}
60
61#[derive(Debug, thiserror::Error)]
62pub enum LogConversionError {
63 #[error("Missing transaction index")]
64 MissingTransactionIndex,
65 #[error("Missing block number")]
66 MissingBlockNumber,
67 #[error("Missing block hash")]
68 MissingBlockHash,
69 #[error("Missing log index")]
70 MissingLogIndex,
71 #[error("Missing transaction hash")]
72 MissingTransactionHash,
73}