use core::fmt;
#[derive(Debug)]
pub enum CallbackError<E> {
Processing(super::Error),
Callback(E),
}
impl<E> From<super::Error> for CallbackError<E> {
fn from(error: super::Error) -> Self {
Self::Processing(error)
}
}
impl<E: fmt::Display> fmt::Display for CallbackError<E> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Processing(error) => error.fmt(f),
Self::Callback(error) => write!(f, "callback: {error}"),
}
}
}
#[cfg(feature = "std")]
impl<E: std::error::Error + 'static> std::error::Error for CallbackError<E> {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::Processing(error) => Some(error),
Self::Callback(error) => Some(error),
}
}
}
pub type CallbackResult<T, E> = core::result::Result<T, CallbackError<E>>;