reifydb_core/key/
procedure.rs1use 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}