1pub const SEQUENCE_BITS: u32 = 42;
5const SEQUENCE_MASK: u64 = (1_u64 << SEQUENCE_BITS) - 1;
6
7pub type PartitionId = u32;
9pub type KwId = u64;
11pub type AttrId = EntityId;
13pub type TxId = EntityId;
15
16#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
18#[repr(u32)]
19pub enum Partition {
20 Db = 0,
22 Tx = 1,
24 User = 2,
26}
27
28#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash)]
30pub struct EntityId(u64);
31
32impl EntityId {
33 #[must_use]
35 pub const fn new(partition: PartitionId, sequence: u64) -> Self {
36 Self(((partition as u64) << SEQUENCE_BITS) | (sequence & SEQUENCE_MASK))
37 }
38
39 #[must_use]
41 pub const fn from_raw(raw: u64) -> Self {
42 Self(raw)
43 }
44
45 #[must_use]
47 pub const fn raw(self) -> u64 {
48 self.0
49 }
50
51 #[must_use]
53 pub const fn partition(self) -> PartitionId {
54 (self.0 >> SEQUENCE_BITS) as PartitionId
55 }
56
57 #[must_use]
59 pub const fn sequence(self) -> u64 {
60 self.0 & SEQUENCE_MASK
61 }
62}