reifydb_core/key/
series.rs1use reifydb_codec::key::{
5 deserializer::KeyDeserializer,
6 encoded::{EncodedKey, EncodedKeyRange},
7 serializer::KeySerializer,
8};
9
10use super::{EncodableKey, KeyKind};
11use crate::interface::catalog::id::SeriesId;
12
13#[derive(Debug, Clone, PartialEq)]
14pub struct SeriesKey {
15 pub series: SeriesId,
16}
17
18impl SeriesKey {
19 pub fn new(series: SeriesId) -> Self {
20 Self {
21 series,
22 }
23 }
24
25 pub fn encoded(series: impl Into<SeriesId>) -> EncodedKey {
26 Self::new(series.into()).encode()
27 }
28
29 pub fn full_scan() -> EncodedKeyRange {
30 EncodedKeyRange::start_end(Some(Self::series_start()), Some(Self::series_end()))
31 }
32
33 fn series_start() -> EncodedKey {
34 let mut serializer = KeySerializer::with_capacity(1);
35 serializer.extend_u8(Self::KIND as u8);
36 serializer.to_encoded_key()
37 }
38
39 fn series_end() -> EncodedKey {
40 let mut serializer = KeySerializer::with_capacity(1);
41 serializer.extend_u8(Self::KIND as u8 - 1);
42 serializer.to_encoded_key()
43 }
44}
45
46impl EncodableKey for SeriesKey {
47 const KIND: KeyKind = KeyKind::Series;
48
49 fn encode(&self) -> EncodedKey {
50 let mut serializer = KeySerializer::with_capacity(9);
51 serializer.extend_u8(Self::KIND as u8).extend_u64(self.series);
52 serializer.to_encoded_key()
53 }
54
55 fn decode(key: &EncodedKey) -> Option<Self> {
56 let mut de = KeyDeserializer::from_bytes(key.as_slice());
57
58 let kind: KeyKind = de.read_u8().ok()?.try_into().ok()?;
59 if kind != Self::KIND {
60 return None;
61 }
62
63 let series = de.read_u64().ok()?;
64
65 Some(Self {
66 series: SeriesId(series),
67 })
68 }
69}
70
71#[derive(Debug, Clone, PartialEq)]
72pub struct SeriesMetadataKey {
73 pub series: SeriesId,
74}
75
76impl SeriesMetadataKey {
77 pub fn new(series: SeriesId) -> Self {
78 Self {
79 series,
80 }
81 }
82
83 pub fn encoded(series: impl Into<SeriesId>) -> EncodedKey {
84 Self::new(series.into()).encode()
85 }
86}
87
88impl EncodableKey for SeriesMetadataKey {
89 const KIND: KeyKind = KeyKind::SeriesMetadata;
90
91 fn encode(&self) -> EncodedKey {
92 let mut serializer = KeySerializer::with_capacity(9);
93 serializer.extend_u8(Self::KIND as u8).extend_u64(self.series);
94 serializer.to_encoded_key()
95 }
96
97 fn decode(key: &EncodedKey) -> Option<Self> {
98 let mut de = KeyDeserializer::from_bytes(key.as_slice());
99
100 let kind: KeyKind = de.read_u8().ok()?.try_into().ok()?;
101 if kind != Self::KIND {
102 return None;
103 }
104
105 let series = de.read_u64().ok()?;
106
107 Some(Self {
108 series: SeriesId(series),
109 })
110 }
111}