use std::fmt;
#[derive(Debug)]
pub struct AcquireError(());
#[derive(Debug, PartialEq, Eq)]
pub enum TryAcquireError {
Closed,
NoPermits,
}
impl AcquireError {
pub(crate) fn closed() -> AcquireError {
AcquireError(())
}
}
impl fmt::Display for AcquireError {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(fmt, "semaphore closed")
}
}
impl std::error::Error for AcquireError {}
impl TryAcquireError {
pub fn is_closed(&self) -> bool {
matches!(self, TryAcquireError::Closed)
}
pub fn is_no_permits(&self) -> bool {
matches!(self, TryAcquireError::NoPermits)
}
}
impl fmt::Display for TryAcquireError {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TryAcquireError::Closed => write!(fmt, "semaphore closed"),
TryAcquireError::NoPermits => write!(fmt, "no permits available"),
}
}
}
impl std::error::Error for TryAcquireError {}