# Unique ID Generator Unique 64 bit ID generator inspired by [twitter snowflake](https://github.com/twitter-archive/snowflake) By default, settings are: * Machine ID - 8 bit (up to 255 machines) * Timestamp subset - 41 bits ~69 years since Unix Epoch * Remaining bits (15) - sequence number If sequence number is overflowing, generator will wait in chunks of 100 microseconds until next millisecond. Can be configured: * Machine ID - up to 8 bit * Timestamp subset - from 41 to 43 bits (up to 278 years since Unix Epoch) ## Usage Add into your Cargo.toml dependencies: ``` idgen = "0.1.2" ``` ```rust use idgen::IDGen; fn main() { let idgen = IDGen::new(128); println!("{}", idgen.new_id()); } ``` Alternatively, it can be configured to have more bits for sequence number with less bits for machine ID: ```rust use idgen::IDGen; fn main() { let idgen = IDGen::new_with_config(1, 1, 41); println!("{}", idgen.new_id()); } ``` ## Notes * Performance is "ok" - on MacBook Air 2019 it generates ~3M unique ids per second in single-threaded mode (Overhead for interior mutability/thread safety at least halves the performance) * It is thread-safe * Strictly speaking, it can be used with less than 41 bits for timestamp (as only last meaningful bits are taken into account)