Skip to content

A crate for creating and working with snowflake ids

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

MrGunflame/snowflaked-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages