pub enum BlockWindowError {
InvalidRange {
start_block: BlockNumber,
end_block: BlockNumber,
},
InvalidTimestampRange {
start_ts: UnixTimestamp,
end_ts: UnixTimestamp,
},
InvalidDateConversion {
date: NaiveDate,
},
DateArithmeticOverflow {
date: NaiveDate,
},
CacheIoError {
path: String,
source: Error,
},
SerializationError {
source: Error,
},
Rpc(RpcError),
}Expand description
Errors that can occur during block window calculations.
This error type covers validation errors, RPC failures, cache I/O errors, and serialization errors that can occur when calculating block windows for specific dates on various chains.
§Examples
use semioscan::{BlockWindowCalculator, BlockWindowError};
use alloy_chains::NamedChain;
use chrono::NaiveDate;
async fn example() -> Result<(), BlockWindowError> {
let calculator = BlockWindowCalculator::with_disk_cache(provider, "cache.json")?;
let date = NaiveDate::from_ymd_opt(2024, 1, 15).unwrap();
match calculator.get_daily_window(NamedChain::Arbitrum, date).await {
Ok(window) => println!("Success: {:?}", window),
Err(BlockWindowError::InvalidRange { start_block, end_block }) => {
eprintln!("Invalid block range: start={}, end={}", start_block, end_block);
}
Err(BlockWindowError::Rpc(e)) => {
eprintln!("RPC error, will retry: {}", e);
}
Err(e) => eprintln!("Other error: {}", e),
}
Ok(())
}Variants§
InvalidRange
Invalid block range where end block is less than start block.
This error occurs when you attempt to create a block window where the
ending block number comes before the starting block number. You can use
the start_block and end_block fields to understand which blocks
caused the validation to fail.
Fields
start_block: BlockNumberThe starting block number of the invalid range
end_block: BlockNumberThe ending block number of the invalid range
InvalidTimestampRange
Invalid timestamp range where end timestamp is not after start timestamp.
This error occurs when validating a time window where the end timestamp is less than or equal to the start timestamp. You can access the specific timestamp values to understand the validation failure.
Fields
start_ts: UnixTimestampThe starting Unix timestamp
end_ts: UnixTimestampThe ending Unix timestamp (should be after start_ts)
InvalidDateConversion
Date cannot be converted to a valid UTC timestamp.
This error occurs when attempting to convert a date to UTC time fails, typically when the date represents an invalid or ambiguous time.
DateArithmeticOverflow
Arithmetic overflow when performing date calculations.
This error occurs when date arithmetic (such as adding days) would overflow beyond the valid range of representable dates.
CacheIoError
Error reading from or writing to the block window cache.
This error occurs when filesystem operations fail while accessing the cache file. You can access the specific path and underlying I/O error to understand what went wrong.
Fields
SerializationError
Error serializing or deserializing block window data.
This error occurs when JSON serialization/deserialization fails while reading or writing cached block windows. You can access the underlying serde_json error for details.
Rpc(RpcError)
RPC error when communicating with blockchain provider.
This wraps RpcError for blockchain provider failures during
block window calculations (e.g., fetching block numbers, block details).
Implementations§
Source§impl BlockWindowError
impl BlockWindowError
Sourcepub fn invalid_range(start_block: BlockNumber, end_block: BlockNumber) -> Self
pub fn invalid_range(start_block: BlockNumber, end_block: BlockNumber) -> Self
Create an InvalidRange error with start and end block numbers.
Sourcepub fn invalid_timestamp_range(
start_ts: UnixTimestamp,
end_ts: UnixTimestamp,
) -> Self
pub fn invalid_timestamp_range( start_ts: UnixTimestamp, end_ts: UnixTimestamp, ) -> Self
Create an InvalidTimestampRange error with start and end timestamps.
Sourcepub fn invalid_date_conversion(date: NaiveDate) -> Self
pub fn invalid_date_conversion(date: NaiveDate) -> Self
Create an InvalidDateConversion error for a date that cannot be converted to UTC.
Sourcepub fn date_arithmetic_overflow(date: NaiveDate) -> Self
pub fn date_arithmetic_overflow(date: NaiveDate) -> Self
Create a DateArithmeticOverflow error when date arithmetic overflows.
Sourcepub fn cache_io_error(path: impl Into<String>, source: Error) -> Self
pub fn cache_io_error(path: impl Into<String>, source: Error) -> Self
Create a CacheIoError from a path and I/O error.
Sourcepub fn serialization_error(source: Error) -> Self
pub fn serialization_error(source: Error) -> Self
Create a SerializationError from a serde_json error.
Trait Implementations§
Source§impl Debug for BlockWindowError
impl Debug for BlockWindowError
Source§impl Display for BlockWindowError
impl Display for BlockWindowError
Source§impl Error for BlockWindowError
impl Error for BlockWindowError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl From<BlockWindowError> for SemioscanError
impl From<BlockWindowError> for SemioscanError
Source§fn from(source: BlockWindowError) -> Self
fn from(source: BlockWindowError) -> Self
Auto Trait Implementations§
impl Freeze for BlockWindowError
impl !RefUnwindSafe for BlockWindowError
impl Send for BlockWindowError
impl Sync for BlockWindowError
impl Unpin for BlockWindowError
impl !UnwindSafe for BlockWindowError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.