event_scanner/
error.rs

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}