use akita_core::Snowflake;
use std::fmt::Debug;
use uuid::Uuid;
pub trait IdentifierGenerator: Send + Sync + Debug {
fn next_id(&self) -> u64;
fn next_uuid(&self) -> String {
Uuid::new_v4().simple().to_string()
}
}
#[derive(Debug)]
pub struct SnowflakeGenerator {
snowflake: Snowflake,
}
impl SnowflakeGenerator {
pub fn new() -> Self {
Self {
snowflake: Snowflake::default(),
}
}
fn generate_id(&self) -> u64 {
self.snowflake.generate()
}
}
impl IdentifierGenerator for SnowflakeGenerator {
fn next_id(&self) -> u64 {
self.generate_id()
}
}
#[test]
fn test_key() {
let generator = SnowflakeGenerator::new();
let id_as_u64: u64 = generator.next_id();
println!("u64 ID: {}", id_as_u64);
}