use std::fmt;
#[derive(Copy, Clone, Eq, PartialEq)]
pub enum TryEnqueueError<T> {
InsufficientCapacity(T),
Closed(T),
}
impl<T> TryEnqueueError<T> {
pub fn into_inner(self) -> T {
match self {
Self::InsufficientCapacity(v) | Self::Closed(v) => v,
}
}
}
impl<T> fmt::Debug for TryEnqueueError<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InsufficientCapacity(_) => write!(f, "TryEnqueueError::InsufficientCapacity(_)"),
Self::Closed(_) => write!(f, "TryEnqueueError::Closed(_)"),
}
}
}
impl<T> fmt::Display for TryEnqueueError<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let error = match self {
Self::InsufficientCapacity(_) => "queue has insufficient capacity",
Self::Closed(_) => "queue is closed",
};
write!(f, "{error}")
}
}
#[cfg(feature = "std")]
impl<T> std::error::Error for TryEnqueueError<T> {}
pub type EnqueueError<T> = TryEnqueueError<T>;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum TryDequeueError {
Empty,
Pending,
Closed,
Conflict,
}
impl fmt::Display for TryDequeueError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let error = match self {
Self::Empty => "queue is empty",
Self::Pending => "waiting for concurrent enqueuing end",
Self::Closed => "queue is closed",
Self::Conflict => "queue is concurrently dequeued",
};
write!(f, "{error}")
}
}
#[cfg(feature = "std")]
impl std::error::Error for TryDequeueError {}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum DequeueError {
Closed,
Conflict,
}
impl fmt::Display for DequeueError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let error = match self {
Self::Closed => "queue is closed",
Self::Conflict => "queue is concurrently dequeued",
};
write!(f, "{error}")
}
}
#[cfg(feature = "std")]
impl std::error::Error for DequeueError {}