A real twitter snowflake implementation in Rust
Find a file
2024-09-29 14:33:08 -04:00
src refactored sequence_id to sequence and switched to wrapping shifts 2024-09-29 14:33:08 -04:00
.gitignore wrote spec 2024-09-24 17:44:29 -04:00
Cargo.lock refactored sequence_id to sequence and switched to wrapping shifts 2024-09-29 14:33:08 -04:00
Cargo.toml refactored sequence_id to sequence and switched to wrapping shifts 2024-09-29 14:33:08 -04:00
LICENSE added license 2024-09-29 01:48:33 -04:00
README.md added desc and updated README 2024-09-29 01:53:44 -04:00

Icechip

A snowflake library that actually does what it is supposed to.

(Mostly) adheres to the twitter specification, but also has an improved mode.

NOTE: Only enhanced and extended modes are available at this time. Twitter original spec is horridly painful to implement with generics, as it supports both u64 and i64 and ignores the sign bit completely in both modes. (essentially u63 and i64 modes).

Twitter Specification

u64 or i64
0-40 41-51 52-62 63
time since an epoch in ms machine id sequence number sign

Enhanced Specification

Utilizes a 64 bit unsigned integer, moves the now spare sign bit and one sequence bit to the machine ID.

u64
0-40 41-53 54-63
time since an epoch in ms machine id sequence number

Extended Enhanced Specification

Utilizes a 128 bit unsigned integer. 32bit machine id, 32bit sequence number. (Ought to be enough for anybody™)

u128
0-63 64-95 96-127
full unix timestamp ms machine id sequence number

Another good doc explaining the general fuctionality of snowflakes:discord api reference