use keel_core_api::{ErrorCode, OutcomeError};
use std::fmt;
#[derive(Debug)]
pub enum Error<E> {
Original(E),
Keel(OutcomeError),
}
impl<E: fmt::Display> fmt::Display for Error<E> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::Original(err) => write!(f, "{err}"),
Error::Keel(err) => write!(f, "{}: {}", err.code, err.message),
}
}
}
impl<E: fmt::Debug + fmt::Display> std::error::Error for Error<E> {}
impl<E> Error<E> {
#[must_use]
pub const fn code(&self) -> Option<ErrorCode> {
match self {
Error::Original(_) => None,
Error::Keel(err) => Some(err.code),
}
}
pub fn into_original(self) -> Option<E> {
match self {
Error::Original(err) => Some(err),
Error::Keel(_) => None,
}
}
}