#[must_use]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct LimitExceeded<K> {
kind: K,
maximum: usize,
observed_at_least: usize,
}
impl<K> LimitExceeded<K> {
#[inline(always)]
pub const fn new(
kind: K,
maximum: usize,
observed_at_least: usize,
) -> Self {
Self {
kind,
maximum,
observed_at_least,
}
}
#[inline(always)]
pub const fn kind(&self) -> &K {
&self.kind
}
#[inline(always)]
pub const fn maximum(&self) -> usize {
self.maximum
}
#[inline(always)]
pub const fn observed_at_least(&self) -> usize {
self.observed_at_least
}
#[inline(always)]
pub fn into_kind(self) -> K {
self.kind
}
#[inline]
pub fn map_kind<T>(self, mapper: impl FnOnce(K) -> T) -> LimitExceeded<T> {
LimitExceeded::new(
mapper(self.kind),
self.maximum,
self.observed_at_least,
)
}
}