reifydb_core/key/
namespace_series.rs1use super::{EncodableKey, KeyKind};
5use crate::{
6 encoded::key::{EncodedKey, EncodedKeyRange},
7 interface::catalog::id::{NamespaceId, SeriesId},
8 util::encoding::keycode::{deserializer::KeyDeserializer, serializer::KeySerializer},
9};
10
11#[derive(Debug, Clone, PartialEq)]
12pub struct NamespaceSeriesKey {
13 pub namespace: NamespaceId,
14 pub series: SeriesId,
15}
16
17impl NamespaceSeriesKey {
18 pub fn new(namespace: NamespaceId, series: SeriesId) -> Self {
19 Self {
20 namespace,
21 series,
22 }
23 }
24
25 pub fn encoded(namespace: impl Into<NamespaceId>, series: impl Into<SeriesId>) -> EncodedKey {
26 Self::new(namespace.into(), series.into()).encode()
27 }
28
29 pub fn full_scan(namespace: NamespaceId) -> EncodedKeyRange {
30 EncodedKeyRange::start_end(Some(Self::link_start(namespace)), Some(Self::link_end(namespace)))
31 }
32
33 fn link_start(namespace: NamespaceId) -> EncodedKey {
34 let mut serializer = KeySerializer::with_capacity(9);
35 serializer.extend_u8(Self::KIND as u8).extend_u64(namespace);
36 serializer.to_encoded_key()
37 }
38
39 fn link_end(namespace: NamespaceId) -> EncodedKey {
40 let mut serializer = KeySerializer::with_capacity(9);
41 serializer.extend_u8(Self::KIND as u8).extend_u64(*namespace - 1);
42 serializer.to_encoded_key()
43 }
44}
45
46impl EncodableKey for NamespaceSeriesKey {
47 const KIND: KeyKind = KeyKind::NamespaceSeries;
48
49 fn encode(&self) -> EncodedKey {
50 let mut serializer = KeySerializer::with_capacity(17);
51 serializer.extend_u8(Self::KIND as u8).extend_u64(self.namespace).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 namespace = de.read_u64().ok()?;
64 let series = de.read_u64().ok()?;
65
66 Some(Self {
67 namespace: NamespaceId(namespace),
68 series: SeriesId(series),
69 })
70 }
71}