Qqwy / snowflaked-rs

A crate for creating and working with snowflake ids

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Snowflaked

Crates.io Docs.rs

A crate for creating and working with snowflake ids.

Usage

Add snowflaked to your Cargo.toml:

snowflaked = "1.0.0"

This crate provides APIs for generating new snowflake ids and defining custom snowflake types.

Snowflake Generation

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()
}

Using custom snowflake types

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()
    }
}

License

Licensed under either

About

A crate for creating and working with snowflake ids

License:Apache License 2.0


Languages

Language:Rust 100.0%