use alloy_primitives::BlockNumber;
use chrono::NaiveDate;
use crate::UnixTimestamp;
use super::RpcError;
#[derive(Debug, thiserror::Error)]
pub enum BlockWindowError {
#[error("Invalid block range: end_block ({end_block}) < start_block ({start_block})")]
InvalidRange {
start_block: BlockNumber,
end_block: BlockNumber,
},
#[error("Invalid timestamp range: end_ts ({end_ts}) <= start_ts ({start_ts})")]
InvalidTimestampRange {
start_ts: UnixTimestamp,
end_ts: UnixTimestamp,
},
#[error("Cannot convert date to UTC timestamp: {date}")]
InvalidDateConversion {
date: NaiveDate,
},
#[error("Date arithmetic overflow when adding to: {date}")]
DateArithmeticOverflow {
date: NaiveDate,
},
#[error("Cache I/O error at {path}: {source}")]
CacheIoError {
path: String,
#[source]
source: std::io::Error,
},
#[error("Serialization error: {source}")]
SerializationError {
#[source]
source: serde_json::Error,
},
#[error("RPC error: {0}")]
Rpc(#[from] RpcError),
}
impl BlockWindowError {
pub fn invalid_range(start_block: BlockNumber, end_block: BlockNumber) -> Self {
BlockWindowError::InvalidRange {
start_block,
end_block,
}
}
pub fn invalid_timestamp_range(start_ts: UnixTimestamp, end_ts: UnixTimestamp) -> Self {
BlockWindowError::InvalidTimestampRange { start_ts, end_ts }
}
pub fn invalid_date_conversion(date: NaiveDate) -> Self {
BlockWindowError::InvalidDateConversion { date }
}
pub fn date_arithmetic_overflow(date: NaiveDate) -> Self {
BlockWindowError::DateArithmeticOverflow { date }
}
pub fn cache_io_error(path: impl Into<String>, source: std::io::Error) -> Self {
BlockWindowError::CacheIoError {
path: path.into(),
source,
}
}
pub fn serialization_error(source: serde_json::Error) -> Self {
BlockWindowError::SerializationError { source }
}
}