use thiserror::Error;
pub type TransportResult<T> = Result<T, TransportError>;
#[derive(Debug, Error)]
pub enum TransportError {
#[error("transport config error: {0}")]
Config(String),
#[error("transport connection error: {0}")]
Connection(String),
#[error("transport send error: {0}")]
Send(String),
#[error("transport receive error: {0}")]
Recv(String),
#[error("transport commit error: {0}")]
Commit(String),
#[error("transport closed")]
Closed,
#[error("transport operation timed out")]
Timeout,
#[error("transport backpressure")]
Backpressure,
#[error("transport internal error: {0}")]
Internal(String),
#[error("transport admin error: {0}")]
Admin(String),
}
impl TransportError {
#[must_use]
pub fn is_recoverable(&self) -> bool {
matches!(self, Self::Timeout | Self::Backpressure)
}
#[must_use]
pub fn is_fatal(&self) -> bool {
matches!(self, Self::Closed | Self::Config(_))
}
}