use std::{
error::Error,
fmt,
};
use crate::error::{
ConfigurationError,
DeliveryError,
EmissionError,
};
#[derive(Clone, Debug)]
#[non_exhaustive]
pub enum StartError {
InvalidConfiguration(ConfigurationError),
OperationIdExhausted,
Delivery(DeliveryError),
}
impl fmt::Display for StartError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidConfiguration(error) => error.fmt(formatter),
Self::OperationIdExhausted => {
formatter.write_str("progress operation IDs are exhausted")
}
Self::Delivery(error) => error.fmt(formatter),
}
}
}
impl Error for StartError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
Self::InvalidConfiguration(error) => Some(error),
Self::OperationIdExhausted => None,
Self::Delivery(error) => Some(error),
}
}
}
impl From<ConfigurationError> for StartError {
fn from(error: ConfigurationError) -> Self {
Self::InvalidConfiguration(error)
}
}
impl From<EmissionError> for StartError {
fn from(error: EmissionError) -> Self {
match error {
EmissionError::Delivery(error) => Self::Delivery(error),
EmissionError::SequenceExhausted => Self::OperationIdExhausted,
}
}
}