A crate for creating and working with snowflake ids.
Add snowflaked
to your Cargo.toml
:
snowflaked = "1.0.0"
This crate provides APIs for generating new snowflake ids and defining custom snowflake types.
Use the Generator
type to create new snowflake ids:
use snowflaked::Generator;
let mut generator = Generator::new(0);
let id: u64 = generator.generate();
Or use the thread-safe sync::Generator
type (requires the optional sync
feature):
use snowflaked::sync::Generator;
static GENERATOR: Generator = Generator::new(0);
fn generate_id() -> u64 {
GENERATOR.generate()
}
Custom snowflake types can be defined with the Snowflake
trait. This trait is currently
implemented for u64
and i64
and can be used to define your custom types:
use snowflaked::Snowflake;
struct UserId(u64);
impl Snowflake for UserId {
fn from_parts(timestamp: u64, instance: u64, sequence: u64) -> Self {
Self(u64::from_parts(timestamp, instance, sequence))
}
fn timestamp(&self) -> u64 {
self.0.timestamp()
}
fn instance(&self) -> u64 {
self.0.instance()
}
fn sequence(&self) -> u64 {
self.0.sequence()
}
}
Licensed under either
- MIT License or
- Apache License, Version 2.0 at your option.