snowflake-rust

Crates.iosnowflake-rust
lib.rssnowflake-rust
version0.5.6
sourcesrc
created_at2020-01-06 09:05:33.774741
updated_at2020-01-13 11:39:17.815865
description'twitter' snowflakes.
homepage
repositoryhttps://github.com/bejens/snowflake.git
max_upload_size
id195716
size4,761
(wangchen000)

documentation

README

snowflake-rust

Kubernetes "twitter" snowflakes.this is not release version,please do not use in production.

By default the original Twitter snowflake format defines:

  • 35 bits are used to store a custom epoch with 10 millisecond precision
  • 16 bits are used to store low 16 bit from ip address
  • 12 bits are used to store a sequence number

Usage

Add this to your Cargo.toml:


[dependencies]
snowflake-rust = "0.5.6"

and this to your crate root:


use snowflake_rust;

Example


use snowflake_rust::Snowflake;

fn main() {
    let mut s = Snowflake::kubernetes();
    let id = s.generate().unwrap();
    println!("{:?}", id)
}

// singleton example
use snowflake_rust::Snowflake;

fn main() {
    let id = id().unwrap();
    println!("{:?}", id)
}

pub fn id() -> Option<i64> {
    let instance = get_instance();
    let mut sf = instance.lock().unwrap();
    sf.generate()
}

fn get_instance() -> Arc<Mutex<Snowflake>> {

    static mut SINGLETON: Option<Arc<Mutex<Snowflake>>> = None;

    unsafe {
        SINGLETON.get_or_insert_with( || {
            Arc::new(Mutex::new(Snowflake::kubernetes()))
        }).clone()
    }
}

Commit count: 21

cargo fmt