use std::fmt::Debug;
use thiserror::Error;
use crate::resource::Observation;
#[derive(Debug, Error, Clone, PartialEq, Eq)]
#[error("resource {resource:?} measured {observed}, exceeding the maximum of {maximum:?}")]
pub struct LimitExceededError<R, Q = u64>
where
Q: Copy + Debug,
{
pub resource: R,
pub observed: Observation<Q>,
pub maximum: Q,
}
impl<R, Q> LimitExceededError<R, Q>
where
Q: Copy + Debug,
{
#[must_use]
#[inline(always)]
pub const fn resource(&self) -> &R {
&self.resource
}
#[must_use]
#[inline(always)]
pub fn into_resource(self) -> R {
self.resource
}
#[must_use]
#[inline(always)]
pub const fn observation(&self) -> Observation<Q> {
self.observed
}
#[must_use]
#[inline(always)]
pub const fn exact_observed(&self) -> Option<Q> {
match self.observed {
Observation::Exact(value) => Some(value),
Observation::AtLeast(_) => None,
}
}
#[must_use]
#[inline(always)]
pub const fn observed_lower_bound(&self) -> Q {
self.observed.lower_bound()
}
#[must_use]
#[inline(always)]
pub const fn maximum(&self) -> Q {
self.maximum
}
}