use std::error::Error;
use crate::protocol::receipt::TransactionReceiptBuilderError;
use crate::state::error::StateReadError;
#[derive(Debug)]
pub enum ContextManagerError {
MissingContextError(String),
TransactionReceiptBuilderError(TransactionReceiptBuilderError),
StateReadError(StateReadError),
}
impl Error for ContextManagerError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match *self {
ContextManagerError::MissingContextError(_) => Some(self),
ContextManagerError::TransactionReceiptBuilderError(ref err) => Some(err),
ContextManagerError::StateReadError(ref err) => Some(err),
}
}
}
impl std::fmt::Display for ContextManagerError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match *self {
ContextManagerError::MissingContextError(ref s) => {
write!(f, "Unable to find specified Context: {:?}", s)
}
ContextManagerError::TransactionReceiptBuilderError(ref err) => {
write!(f, "A TransactionReceiptBuilder error occured: {}", err)
}
ContextManagerError::StateReadError(ref err) => {
write!(f, "A State Read error occured: {}", err)
}
}
}
}
impl From<TransactionReceiptBuilderError> for ContextManagerError {
fn from(err: TransactionReceiptBuilderError) -> Self {
ContextManagerError::TransactionReceiptBuilderError(err)
}
}
impl From<StateReadError> for ContextManagerError {
fn from(err: StateReadError) -> Self {
ContextManagerError::StateReadError(err)
}
}