use crate::config::ConfigError;
use signet_cold::ColdStorageError;
use signet_cold_mdbx::MdbxColdError;
use signet_hot::{HistoryError, model::HotKvError};
use signet_hot_mdbx::MdbxError;
#[derive(Debug, thiserror::Error)]
pub enum StorageError {
#[error("hot storage error: {0}")]
Hot(#[source] HistoryError<HotKvError>),
#[error("cold storage error: {0}")]
Cold(#[source] ColdStorageError),
#[error("configuration error: {0}")]
Config(String),
#[error("MDBX hot storage error: {0}")]
MdbxHot(#[from] MdbxError),
#[error("MDBX cold storage error: {0}")]
MdbxCold(#[from] MdbxColdError),
#[cfg(any(feature = "postgres", feature = "sqlite"))]
#[error("SQL cold storage error: {0}")]
SqlCold(#[from] signet_cold_sql::SqlColdError),
}
impl From<HistoryError<HotKvError>> for StorageError {
fn from(err: HistoryError<HotKvError>) -> Self {
Self::Hot(err)
}
}
impl From<ColdStorageError> for StorageError {
fn from(err: ColdStorageError) -> Self {
Self::Cold(err)
}
}
impl From<HotKvError> for StorageError {
fn from(err: HotKvError) -> Self {
Self::Hot(HistoryError::Db(err))
}
}
impl From<ConfigError> for StorageError {
fn from(err: ConfigError) -> Self {
Self::Config(err.to_string())
}
}
pub type StorageResult<T> = Result<T, StorageError>;