use std::fmt;
use serde::{Deserialize, Serialize};
#[derive(
Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
)]
#[serde(transparent)]
pub struct IntegratorFence(u64);
impl IntegratorFence {
pub const FIRST: Self = Self(0);
#[must_use]
pub const fn value(self) -> u64 {
self.0
}
#[must_use]
pub const fn next(self) -> Self {
Self(self.0.saturating_add(1))
}
}
impl fmt::Display for IntegratorFence {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(formatter, "{}", self.0)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn a_replacement_outranks_what_it_replaced() {
assert!(IntegratorFence::FIRST.next() > IntegratorFence::FIRST);
}
}