1use std::sync::Arc;
2
3use alloy::{
4 eips::BlockId,
5 transports::{RpcError, TransportErrorKind},
6};
7use thiserror::Error;
8
9use crate::robust_provider::Error as RobustProviderError;
10
11#[derive(Error, Debug, Clone)]
12pub enum ScannerError {
13 #[error("RPC error: {0}")]
14 RpcError(Arc<RpcError<TransportErrorKind>>),
15
16 #[error("Service is shutting down")]
17 ServiceShutdown,
18
19 #[error("Block not found, Block Id: {0}")]
20 BlockNotFound(BlockId),
21
22 #[error("Operation timed out")]
23 Timeout,
24}
25
26impl From<RobustProviderError> for ScannerError {
27 fn from(error: RobustProviderError) -> ScannerError {
28 match error {
29 RobustProviderError::Timeout => ScannerError::Timeout,
30 RobustProviderError::RpcError(err) => ScannerError::RpcError(err),
31 RobustProviderError::BlockNotFound(block) => ScannerError::BlockNotFound(block),
32 }
33 }
34}
35
36impl From<RpcError<TransportErrorKind>> for ScannerError {
37 fn from(error: RpcError<TransportErrorKind>) -> Self {
38 ScannerError::RpcError(Arc::new(error))
39 }
40}