extern crate alloc;
use crate::policy::PolicyViolation;
use crate::settlement::SettlementError;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum VaultError {
PolicyDenied(PolicyViolation),
HitlRequired,
SignerFailure(SettlementError),
InvalidAddress,
RailNotAllowed,
IdentityError(aethel_core::IdentityError),
SerializationError,
}
impl From<aethel_core::IdentityError> for VaultError {
fn from(e: aethel_core::IdentityError) -> Self {
VaultError::IdentityError(e)
}
}
impl From<PolicyViolation> for VaultError {
fn from(e: PolicyViolation) -> Self {
VaultError::PolicyDenied(e)
}
}
impl From<SettlementError> for VaultError {
fn from(e: SettlementError) -> Self {
VaultError::SignerFailure(e)
}
}
impl core::fmt::Display for VaultError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
VaultError::PolicyDenied(v) => write!(f, "spend policy denied: {v:?}"),
VaultError::HitlRequired => write!(f, "amount requires human-in-the-loop approval"),
VaultError::SignerFailure(e) => write!(f, "settlement signer failed: {e:?}"),
VaultError::InvalidAddress => write!(f, "invalid address"),
VaultError::RailNotAllowed => write!(f, "rail not allowed by policy"),
VaultError::IdentityError(e) => write!(f, "identity error: {e:?}"),
VaultError::SerializationError => write!(f, "serialization error"),
}
}
}