time_key_stream_set/
time_key.rs1use tsz_compress::prelude::*;
2
3pub trait TimeKey: Copy {
12 fn timestamp_us(&self) -> u64;
13 fn partition(&self) -> u64;
14 fn key(&self) -> TimeKeyItem {
15 TimeKeyItem::new(*self)
16 }
17}
18
19#[derive(Debug, Clone, Copy)]
27pub struct UserDeviceTimeKey {
28 pub timestamp_us: i64,
29 pub user_id: i32,
30 pub device_id: i32,
31}
32
33impl TimeKey for UserDeviceTimeKey {
38 fn timestamp_us(&self) -> u64 {
39 self.timestamp_us as u64
40 }
41 fn partition(&self) -> u64 {
42 ((self.user_id as u64) << 32) | self.device_id as u64
43 }
44}
45
46#[derive(
51 Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, DeltaEncodable, Compressible, Decompressible,
52)]
53pub struct TimeKeyItem {
54 pub partition: i64,
55 pub timestamp_us: i64,
56}
57
58impl TimeKeyItem {
59 pub fn new<T: TimeKey>(key: T) -> Self {
60 TimeKeyItem {
61 partition: key.partition() as i64,
62 timestamp_us: key.timestamp_us() as i64,
63 }
64 }
65}