use std::fmt::Debug;
use thiserror::Error;
#[non_exhaustive]
#[derive(Debug, Error, Clone, PartialEq, Eq)]
pub enum ResourceReleaseError<R, Q = u64>
where
Q: Copy + Debug,
{
#[error("resource {resource:?} has {in_use:?} in use, but {requested:?} was released")]
InvalidRelease {
resource: R,
limit: Q,
in_use: Q,
requested: Q,
},
}
impl<R, Q> ResourceReleaseError<R, Q>
where
Q: Copy + Debug,
{
#[must_use]
#[inline(always)]
pub const fn resource(&self) -> &R {
match self {
Self::InvalidRelease { resource, .. } => resource,
}
}
#[inline(always)]
#[must_use]
pub fn into_resource(self) -> R {
match self {
Self::InvalidRelease { resource, .. } => resource,
}
}
#[must_use]
#[inline(always)]
pub const fn limit(&self) -> Q {
match self {
Self::InvalidRelease { limit, .. } => *limit,
}
}
#[must_use]
#[inline(always)]
pub const fn in_use(&self) -> Q {
match self {
Self::InvalidRelease { in_use, .. } => *in_use,
}
}
#[must_use]
#[inline(always)]
pub const fn requested(&self) -> Q {
match self {
Self::InvalidRelease { requested, .. } => *requested,
}
}
}