#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CaducusErrorKind<T = ()> {
InvalidArgument,
#[allow(clippy::upper_case_acronyms)]
InvalidTTL(T),
InvalidPattern(T),
NoRuntime,
Timeout,
Shutdown(T),
Full(T),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CaducusError<T = ()> {
pub kind: CaducusErrorKind<T>,
}
impl<T> std::fmt::Display for CaducusError<T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match &self.kind {
CaducusErrorKind::InvalidArgument => write!(f, "invalid argument"),
CaducusErrorKind::InvalidTTL(_) => write!(f, "invalid TTL"),
CaducusErrorKind::InvalidPattern(_) => write!(f, "invalid pattern"),
CaducusErrorKind::NoRuntime => write!(f, "no tokio runtime available"),
CaducusErrorKind::Timeout => write!(f, "timeout"),
CaducusErrorKind::Shutdown(_) => write!(f, "shutdown"),
CaducusErrorKind::Full(_) => write!(f, "full"),
}
}
}
impl<T: std::fmt::Debug> std::error::Error for CaducusError<T> {}
impl<T> CaducusError<T> {
pub fn into_inner(self) -> Option<T> {
match self.kind {
CaducusErrorKind::Full(item)
| CaducusErrorKind::Shutdown(item)
| CaducusErrorKind::InvalidTTL(item)
| CaducusErrorKind::InvalidPattern(item) => Some(item),
_ => None,
}
}
}