4 stable releases
new 2.0.2 | Mar 30, 2025 |
---|---|
2.0.1 | Mar 27, 2025 |
2.0.0 |
|
1.1.0 | Feb 8, 2025 |
1.0.0 | Feb 8, 2025 |
#1979 in Database interfaces
329 downloads per month
30KB
157 lines
k-snowflake
Simple one-dependency implementation of Twitter`s (X) snowflake in rust. Compatible with discord snowflakes. Firstly used for my projects. One snowflake creation take ~127ns. See /benches.
Twitter snowflake schema
Snowflakes are 64 bits in binary. (Only 63 are used to fit in a signed integer.) The first 41 bits are a timestamp, representing milliseconds since the chosen epoch (default X epoch is 1288834974657 (in Unix time milliseconds)) . The next 10 bits represent a machine ID, preventing clashes. Twelve more bits represent a per-machine sequence number, to allow creation of multiple snowflakes in the same millisecond. The final number is generally serialized in decimal
Version 2 changelog
- Added global context to handle epoch, instance and sequence
- Updated methods of Snowflake
- New simple use function create_snowflake()
- Config functions like set_epoch() and etc.
Basic usage
use k_snowflake::{create_snowflake, set_epoch, Snowflake, DISCORD_EPOCH};
fn main() {
// Create snowflake
let snowflake = create_snowflake();
println!("{}", snowflake);
// change epoch
set_epoch(DISCORD_EPOCH);
let snowflake = create_snowflake();
println!("{}", snowflake);
// get UNIX timestamp of discord snowflake
println!(
"{}",
"1301619246953926811"
.parse::<Snowflake>()
.unwrap()
.get_unix_timestamp()
);
}
See other methods in docs
Dependencies
~48KB