#[must_use]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DiagnosticInputBudget {
remaining_input_bytes: usize,
exhausted: bool,
}
impl DiagnosticInputBudget {
#[inline(always)]
pub(crate) const fn new(max_input_bytes: usize) -> Self {
Self {
remaining_input_bytes: max_input_bytes,
exhausted: false,
}
}
#[inline]
pub fn reserve(&mut self, input_bytes: usize) -> bool {
if self.exhausted || input_bytes > self.remaining_input_bytes {
self.remaining_input_bytes = 0;
self.exhausted = true;
return false;
}
self.remaining_input_bytes -= input_bytes;
self.exhausted = self.remaining_input_bytes == 0;
true
}
#[must_use]
#[inline(always)]
pub const fn remaining_input_bytes(&self) -> usize {
self.remaining_input_bytes
}
}