use super::EvidenceHighWaterMark;
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EvidenceGauge {
current: u64,
high_water: EvidenceHighWaterMark,
invalid: bool,
}
impl EvidenceGauge {
pub const fn new(initial: u64) -> Self {
Self {
current: initial,
high_water: EvidenceHighWaterMark::starting_at(initial),
invalid: false,
}
}
pub const fn current(self) -> u64 {
self.current
}
pub const fn high_water(self) -> EvidenceHighWaterMark {
self.high_water
}
pub const fn invalid(self) -> bool {
self.invalid
}
pub const fn valid(self) -> bool {
!self.invalid
}
pub fn increase(&mut self, increment: u64) {
match self.current.checked_add(increment) {
Some(current) => {
self.current = current;
self.high_water.observe(current);
}
None => {
self.current = u64::MAX;
self.high_water.observe(u64::MAX);
self.invalid = true;
}
}
}
pub fn decrease(&mut self, decrement: u64) {
match self.current.checked_sub(decrement) {
Some(current) => self.current = current,
None => {
self.current = 0;
self.invalid = true;
}
}
}
}