Skip to main content

reifydb_core/key/
operator_settings.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use 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}