reifydb_core/key/
operator_settings.rs1use reifydb_codec::key::{
5 deserializer::KeyDeserializer,
6 encoded::{EncodedKey, EncodedKeyRange},
7 serializer::KeySerializer,
8};
9use serde::{Deserialize, Serialize};
10
11use super::{EncodableKey, KeyKind};
12use crate::interface::catalog::flow::OperatorId;
13
14#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
15pub struct OperatorSettingsKey {
16 pub operator: OperatorId,
17}
18
19impl OperatorSettingsKey {
20 pub fn encoded(operator: impl Into<OperatorId>) -> EncodedKey {
21 Self {
22 operator: operator.into(),
23 }
24 .encode()
25 }
26}
27
28impl EncodableKey for OperatorSettingsKey {
29 const KIND: KeyKind = KeyKind::OperatorSettings;
30
31 fn encode(&self) -> EncodedKey {
32 let mut serializer = KeySerializer::with_capacity(9);
33 serializer.extend_u8(Self::KIND as u8).extend_u64(self.operator);
34 serializer.to_encoded_key()
35 }
36
37 fn decode(key: &EncodedKey) -> Option<Self> {
38 let mut de = KeyDeserializer::from_bytes(key.as_slice());
39
40 let kind: KeyKind = de.read_u8().ok()?.try_into().ok()?;
41 if kind != Self::KIND {
42 return None;
43 }
44
45 Some(Self {
46 operator: OperatorId(de.read_u64().ok()?),
47 })
48 }
49}
50
51pub struct OperatorSettingsKeyRange;
52
53impl OperatorSettingsKeyRange {
54 pub fn full_scan() -> EncodedKeyRange {
55 EncodedKeyRange::start_end(Some(Self::start()), Some(Self::end()))
56 }
57
58 fn start() -> EncodedKey {
59 let mut serializer = KeySerializer::with_capacity(1);
60 serializer.extend_u8(OperatorSettingsKey::KIND as u8);
61 serializer.to_encoded_key()
62 }
63
64 fn end() -> EncodedKey {
65 let mut serializer = KeySerializer::with_capacity(1);
66 serializer.extend_u8(OperatorSettingsKey::KIND as u8 - 1);
67 serializer.to_encoded_key()
68 }
69}
70
71#[cfg(test)]
72pub mod tests {
73 use super::*;
74 use crate::{
75 interface::catalog::{id::TableId, storage::StorageId},
76 key::row_settings::RowSettingsKey,
77 };
78
79 #[test]
80 fn test_operator_settings_key_roundtrip() {
81 let key = OperatorSettingsKey {
82 operator: OperatorId(12345),
83 };
84
85 let encoded = key.encode();
86 let decoded = OperatorSettingsKey::decode(&encoded).unwrap();
87 assert_eq!(key, decoded);
88 }
89
90 #[test]
91 fn test_operator_settings_key_rejects_other_kind() {
92 let other = RowSettingsKey::encoded(StorageId::Table(TableId(1)));
93 assert!(OperatorSettingsKey::decode(&other).is_none());
94 }
95}