use crate::protos::ProtoConversionError;
use std::error::Error;
use std::fmt;
cfg_if! {
if #[cfg(target_arch = "wasm32")] {
use sabre_sdk::WasmSdkError as ContextError;
} else {
use sawtooth_sdk::processor::handler::ContextError;
}
}
#[derive(Debug)]
pub enum PermissionCheckerError {
Context(ContextError),
InvalidPublicKey(String),
InvalidRole(String),
ProtoConversion(ProtoConversionError),
}
impl fmt::Display for PermissionCheckerError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
PermissionCheckerError::Context(ref e) => e.fmt(f),
PermissionCheckerError::InvalidPublicKey(ref msg) => {
write!(f, "InvalidPublicKey: {}", msg)
}
PermissionCheckerError::InvalidRole(ref msg) => write!(f, "InvalidRole: {}", msg),
PermissionCheckerError::ProtoConversion(ref e) => e.fmt(f),
}
}
}
impl Error for PermissionCheckerError {
fn cause(&self) -> Option<&dyn Error> {
match *self {
PermissionCheckerError::Context(_) => None,
PermissionCheckerError::InvalidPublicKey(_) => None,
PermissionCheckerError::InvalidRole(_) => None,
PermissionCheckerError::ProtoConversion(ref e) => Some(e),
}
}
}
impl From<ContextError> for PermissionCheckerError {
fn from(err: ContextError) -> PermissionCheckerError {
PermissionCheckerError::Context(err)
}
}
impl From<ProtoConversionError> for PermissionCheckerError {
fn from(err: ProtoConversionError) -> PermissionCheckerError {
PermissionCheckerError::ProtoConversion(err)
}
}