use std::fmt::Debug;
use thiserror::Error;
#[derive(Debug, Error, Clone, PartialEq, Eq)]
#[error("resource {resource:?} requested {requested:?}, but only {remaining:?} of {limit:?} remains")]
pub struct InsufficientBudgetError<R, Q = u64>
where
Q: Copy + Debug,
{
pub resource: R,
pub limit: Q,
pub remaining: Q,
pub requested: Q,
}
impl<R, Q> InsufficientBudgetError<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 limit(&self) -> Q {
self.limit
}
#[must_use]
#[inline(always)]
pub const fn remaining(&self) -> Q {
self.remaining
}
#[must_use]
#[inline(always)]
pub const fn requested(&self) -> Q {
self.requested
}
}
impl<R, Q> InsufficientBudgetError<R, Q>
where
Q: crate::ResourceQuantity,
{
#[must_use]
#[inline]
pub fn used(&self) -> Q {
self.limit - self.remaining
}
}