snowflake_gen/generator/
decomposition.rs1use crate::generator::SnowflakeIdGenerator;
2use crate::generator::components::SnowflakeComponents;
3
4impl SnowflakeIdGenerator {
5 pub fn decompose(&self, id: i64) -> SnowflakeComponents {
18 let layout = &self.layout;
19
20 let sequence_mask = layout.max_sequence() as i64;
21 let node_mask = layout.max_node_id() as i64;
22 let machine_mask = layout.max_machine_id() as i64;
23
24 let sequence = (id & sequence_mask) as u32;
25 let node_id = (id >> layout.node_id_shift) & node_mask;
26 let machine_id = (id >> layout.machine_id_shift) & machine_mask;
27 let timestamp_millis = id >> layout.timestamp_shift;
28
29 SnowflakeComponents {
30 timestamp_millis,
31 machine_id,
32 node_id,
33 sequence,
34 }
35 }
36}