use nanoid::nanoid;
use rust_mcp_sdk::id_generator::IdGenerator;
pub struct NanoIdGenerator {
size: usize, }
impl NanoIdGenerator {
pub fn new(size: usize) -> Self {
Self { size }
}
}
impl<T> IdGenerator<T> for NanoIdGenerator
where
T: From<String>,
{
fn generate(&self) -> T {
let size = self.size;
let id = nanoid!(size);
T::from(id)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn generates_correct_length_id() {
let generator = NanoIdGenerator::new(12);
let id: String = generator.generate();
assert_eq!(id.len(), 12);
}
#[test]
fn generates_unique_ids() {
let generator = NanoIdGenerator::new(8);
let mut seen = std::collections::HashSet::new();
for _ in 0..1000 {
let id: String = generator.generate();
assert!(seen.insert(id.clone()), "Duplicate ID: {id}");
}
}
}