use std::fmt;
use crate::types::EndpointId;
#[derive(Debug, PartialEq, Eq)]
pub enum DispatchError {
Backpressure,
Shutdown,
InvalidEndpoint {
endpoint_id: EndpointId,
},
}
impl fmt::Display for DispatchError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
DispatchError::Backpressure =>
write!(f, "dispatcher at capacity"),
DispatchError::Shutdown =>
write!(f, "dispatcher is shut down"),
DispatchError::InvalidEndpoint { endpoint_id } =>
write!(f, "endpoint not registered: {:?}", endpoint_id),
}
}
}
impl std::error::Error for DispatchError {}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DeliveryOutcome {
Delivered,
Dropped(DropReason),
Failed(FailureReason),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DropReason {
Backpressure,
Shutdown,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FailureReason {
Timeout,
Network,
RemoteError,
ClientError,
MaxRetriesExceeded,
}
impl fmt::Display for FailureReason {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
FailureReason::Timeout =>
write!(f, "request timed out"),
FailureReason::Network =>
write!(f, "network error"),
FailureReason::RemoteError =>
write!(f, "remote endpoint returned error"),
FailureReason::ClientError =>
write!(f, "client error (non-retryable)"),
FailureReason::MaxRetriesExceeded =>
write!(f, "maximum retries exceeded"),
}
}
}