use crate::LimitExceeded;
#[must_use]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ResourceLimit {
maximum: usize,
}
impl ResourceLimit {
pub const UNBOUNDED: Self = Self::new(usize::MAX);
#[inline(always)]
pub const fn new(maximum: usize) -> Self {
Self { maximum }
}
#[inline(always)]
pub const fn unbounded() -> Self {
Self::UNBOUNDED
}
#[inline(always)]
pub const fn maximum(self) -> usize {
self.maximum
}
#[inline(always)]
pub const fn is_unbounded(self) -> bool {
self.maximum == usize::MAX
}
#[inline]
pub fn check<K>(
self,
kind: K,
observed: usize,
) -> Result<(), LimitExceeded<K>> {
if observed > self.maximum {
Err(LimitExceeded::new(kind, self.maximum, observed))
} else {
Ok(())
}
}
#[inline(always)]
pub const fn budget(self) -> crate::ResourceBudget {
crate::ResourceBudget::new(self)
}
}