Skip to main content

signet_cold_mdbx/
error.rs

1//! Error types for cold MDBX storage.
2
3use signet_hot::ser::DeserError;
4
5/// Errors that can occur in cold MDBX storage operations.
6#[derive(Debug, thiserror::Error)]
7pub enum MdbxColdError {
8    /// A serialization/deserialization error occurred.
9    #[error("serialization error: {0}")]
10    Ser(#[from] DeserError),
11
12    /// An MDBX error occurred.
13    #[error("mdbx error: {0}")]
14    Mdbx(#[from] signet_hot_mdbx::MdbxError),
15
16    /// Database is read-only.
17    #[error("database is read-only")]
18    ReadOnly,
19
20    /// Too many logs matched the filter.
21    #[error("too many logs: limit is {0}")]
22    TooManyLogs(usize),
23
24    /// An MDBX read exceeded its configured deadline.
25    #[error("mdbx read timed out after {0:?}")]
26    Timeout(std::time::Duration),
27}
28
29impl From<MdbxColdError> for signet_cold::ColdStorageError {
30    fn from(error: MdbxColdError) -> Self {
31        match error {
32            MdbxColdError::TooManyLogs(limit) => Self::TooManyLogs { limit },
33            MdbxColdError::Timeout(duration) => Self::DeadlineExceeded(duration),
34            other => Self::Backend(Box::new(other)),
35        }
36    }
37}