Crates.io | snowflaked |
lib.rs | snowflaked |
version | 1.0.3 |
source | src |
created_at | 2022-06-13 17:15:15.381476 |
updated_at | 2024-02-24 17:12:14.858929 |
description | A crate for creating and working with snowflake ids |
homepage | |
repository | https://github.com/MrGunflame/snowflaked-rs |
max_upload_size | |
id | 605213 |
size | 53,986 |
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