use std::error::Error;
use std::fmt;
#[cfg(feature = "state-in-transaction")]
use crate::error::{InternalError, InvalidStateError};
#[derive(Debug)]
pub enum StateWriteError {
InvalidStateId(String),
StorageError(Box<dyn Error>),
}
impl fmt::Display for StateWriteError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
StateWriteError::InvalidStateId(msg) => write!(f, "Invalid State Id: {}", msg),
StateWriteError::StorageError(err) => write!(f, "Storage Error: {}", err),
}
}
}
impl Error for StateWriteError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
StateWriteError::InvalidStateId(_) => None,
StateWriteError::StorageError(err) => Some(err.as_ref()),
}
}
}
#[derive(Debug)]
pub enum StateReadError {
InvalidStateId(String),
InvalidKey(String),
StorageError(Box<dyn Error>),
}
impl fmt::Display for StateReadError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
StateReadError::InvalidStateId(msg) => write!(f, "Invalid State Id: {}", msg),
StateReadError::InvalidKey(key) => write!(f, "Invalid Key: {}", key),
StateReadError::StorageError(err) => write!(f, "Storage Error: {}", err),
}
}
}
impl Error for StateReadError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
StateReadError::InvalidStateId(_) | StateReadError::InvalidKey(_) => None,
StateReadError::StorageError(err) => Some(err.as_ref()),
}
}
}
#[derive(Debug)]
pub enum StatePruneError {
InvalidStateId(String),
StorageError(Box<dyn Error>),
}
impl fmt::Display for StatePruneError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
StatePruneError::InvalidStateId(msg) => write!(f, "Invalid State Id: {}", msg),
StatePruneError::StorageError(err) => write!(f, "Storage Error: {}", err),
}
}
}
impl Error for StatePruneError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
StatePruneError::InvalidStateId(_) => None,
StatePruneError::StorageError(err) => Some(err.as_ref()),
}
}
}
#[cfg(feature = "state-in-transaction")]
#[derive(Debug)]
pub enum StateError {
Internal(InternalError),
InvalidState(InvalidStateError),
}
#[cfg(feature = "state-in-transaction")]
impl fmt::Display for StateError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Self::Internal(err) => f.write_str(&err.to_string()),
Self::InvalidState(err) => f.write_str(&err.to_string()),
}
}
}
#[cfg(feature = "state-in-transaction")]
impl Error for StateError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
Self::Internal(err) => Some(err),
Self::InvalidState(err) => Some(err),
}
}
}
#[cfg(feature = "state-in-transaction")]
impl From<InternalError> for StateError {
fn from(err: InternalError) -> Self {
Self::Internal(err)
}
}
#[cfg(feature = "state-in-transaction")]
impl From<InvalidStateError> for StateError {
fn from(err: InvalidStateError) -> Self {
Self::InvalidState(err)
}
}