use std::sync::Arc;
use globuid::{IdGenerator, MemoryStorage, NanoId, NanoIdConfig, Snowflake, SnowflakeConfig, Ulid};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== GlobUid - Multiple Algorithm Demo ===\n");
println!("1. Snowflake (64-bit numeric, distributed):");
let config = SnowflakeConfig::default();
let storage = Arc::new(MemoryStorage::new());
let snowflake = Snowflake::new(config, storage).await?;
let id = snowflake.generate().await?;
println!(" Single ID: {}", id);
let ids = snowflake.generate_batch(5).await?;
println!(
" Batch: {:?}",
ids.iter().map(|i| i.as_string()).collect::<Vec<_>>()
);
println!("\n2. ULID (26 chars, lexicographically sortable):");
let ulid = Ulid::with_default();
let id = ulid.generate().await?;
println!(" Single ID: {}", id);
let ids = ulid.generate_batch(5).await?;
println!(
" Batch: {:?}",
ids.iter().map(|i| i.as_string()).collect::<Vec<_>>()
);
println!("\n3. NanoID (21 chars default, URL-friendly):");
let nanoid = NanoId::with_default();
let id = nanoid.generate().await?;
println!(" Single ID: {}", id);
let ids = nanoid.generate_batch(5).await?;
println!(
" Batch: {:?}",
ids.iter().map(|i| i.as_string()).collect::<Vec<_>>()
);
println!("\n4. Custom NanoID (8 chars):");
let config = NanoIdConfig::new().length(8);
let short_nanoid = NanoId::new(config);
let id = short_nanoid.generate().await?;
println!(" Single ID: {}", id);
Ok(())
}