Skip to main content

reifydb_core/key/
series.rs

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