Skip to main content

reifydb_core/key/
procedure.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use reifydb_codec::key::encoded::EncodedKey;
5use reifydb_macro::KeyCodec;
6
7use super::KeyTag;
8use crate::{
9	interface::catalog::id::ProcedureId,
10	key::{
11		any::{Field, KeyFields, Width},
12		bound::TaggedKeyBoundRange,
13	},
14};
15
16#[derive(Debug, Clone, PartialEq, KeyCodec, Hash)]
17#[key(tag = Procedure)]
18pub struct ProcedureKey {
19	pub procedure: ProcedureId,
20}
21
22impl ProcedureKey {
23	pub fn new(procedure: impl Into<ProcedureId>) -> Self {
24		Self {
25			procedure: procedure.into(),
26		}
27	}
28
29	pub fn full_scan() -> TaggedKeyBoundRange {
30		TaggedKeyBoundRange::kind(Self::TAG)
31	}
32}
33
34#[cfg(test)]
35pub mod procedure_key_tests {
36	use super::ProcedureKey;
37	use crate::interface::catalog::id::ProcedureId;
38
39	#[test]
40	fn test_encode_decode() {
41		let key = ProcedureKey {
42			procedure: ProcedureId::from_raw(0xABCD),
43		};
44		let encoded = key.encode();
45		let key = ProcedureKey::decode(&encoded).unwrap();
46		assert_eq!(key.procedure, 0xABCD);
47	}
48}
49
50#[derive(Debug, Clone, PartialEq, KeyCodec, Hash)]
51#[key(tag = ProcedureParam)]
52pub struct ProcedureParamKey {
53	pub procedure: ProcedureId,
54	pub param_index: u16,
55}
56
57impl ProcedureParamKey {
58	pub fn new(procedure: impl Into<ProcedureId>, param_index: u16) -> Self {
59		Self {
60			procedure: procedure.into(),
61			param_index,
62		}
63	}
64
65	pub fn full_scan(procedure: ProcedureId) -> TaggedKeyBoundRange {
66		TaggedKeyBoundRange::prefix(Self::TAG, [Field::UDesc(Width::U64, *procedure as u128)])
67	}
68}
69
70#[cfg(test)]
71pub mod procedure_param_key_tests {
72	use super::ProcedureParamKey;
73	use crate::interface::catalog::id::ProcedureId;
74
75	#[test]
76	fn test_encode_decode() {
77		let key = ProcedureParamKey {
78			procedure: ProcedureId::from_raw(0xCAFE),
79			param_index: 7,
80		};
81		let encoded = key.encode();
82		let key = ProcedureParamKey::decode(&encoded).unwrap();
83		assert_eq!(key.procedure, 0xCAFE);
84		assert_eq!(key.param_index, 7);
85	}
86}