use crate::{BlankIdBuf, Generator, Id};
#[derive(Default)]
pub struct BlankIdGenerator {
prefix: String,
count: usize,
}
impl BlankIdGenerator {
pub fn new() -> Self {
Self::new_full(String::new(), 0)
}
pub fn new_with_offset(offset: usize) -> Self {
Self::new_full(String::new(), offset)
}
pub fn new_with_prefix(prefix: String) -> Self {
Self::new_full(prefix, 0)
}
pub fn new_full(prefix: String, offset: usize) -> Self {
Self {
prefix,
count: offset,
}
}
pub fn prefix(&self) -> &str {
&self.prefix
}
pub fn count(&self) -> usize {
self.count
}
pub fn next_blank_id(&mut self) -> BlankIdBuf {
let id = unsafe { BlankIdBuf::new_unchecked(format!("_:{}{}", self.prefix, self.count)) };
self.count = self.count.wrapping_add(1);
id
}
}
impl Generator for BlankIdGenerator {
fn next_id(&mut self) -> Id {
Id::BlankId(self.next_blank_id())
}
}