#[cfg(test)]
mod tests;
pub const fn record_sample(samples: &mut u64, total: &mut u64, value: u64) {
*samples = samples.saturating_add(1);
*total = total.saturating_add(value);
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MeasurementSummary {
samples: u64,
total: u64,
latest: u64,
maximum: u64,
}
impl MeasurementSummary {
pub const EMPTY: Self = Self {
samples: 0,
total: 0,
latest: 0,
maximum: 0,
};
pub const fn record(&mut self, value: u64) {
record_sample(&mut self.samples, &mut self.total, value);
self.latest = value;
if value > self.maximum {
self.maximum = value;
}
}
#[must_use]
pub const fn samples(self) -> u64 {
self.samples
}
#[must_use]
pub const fn total(self) -> u64 {
self.total
}
#[must_use]
pub const fn latest(self) -> Option<u64> {
if self.samples == 0 {
None
} else {
Some(self.latest)
}
}
#[must_use]
pub const fn maximum(self) -> Option<u64> {
if self.samples == 0 {
None
} else {
Some(self.maximum)
}
}
}