pub trait Serial: PartialEq {
const START: Self;
fn next_increment(&self) -> Self;
fn prev_increment(&self) -> Self;
fn is_max_value(&self) -> bool;
}
macro_rules! impl_serial {
($($t:ty),+ $(,)?) => {
$(
impl Serial for $t {
const START: Self = Self::MIN;
fn next_increment(&self) -> Self {
self.saturating_add(1)
}
fn prev_increment(&self) -> Self {
self.saturating_sub(1)
}
fn is_max_value(&self) -> bool {
self == &Self::MAX
}
}
)+
}
}
impl_serial!(u8, u16, u32, u64, u128, usize);