use serde::Serialize;
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct IncIdGenerator<T> {
next_id: T,
}
impl<T> Default for IncIdGenerator<T>
where
T: Default,
{
fn default() -> Self {
Self::new(T::default())
}
}
impl<T> IncIdGenerator<T> {
pub fn new(next_id: T) -> Self {
Self { next_id }
}
}
impl<T> IncIdGenerator<T>
where
T: Copy + std::ops::AddAssign + From<bool>,
{
pub fn next_id(&mut self) -> T {
let next_id = self.next_id;
self.next_id += T::from(true);
next_id
}
pub fn peek_id(&self) -> T {
self.next_id
}
}