1use reifydb_value::error::Error;
5use serde::{Deserialize, Serialize, de};
6
7#[repr(u8)]
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[serde(try_from = "u8", into = "u8")]
10pub enum KeyKind {
11 Namespace = 0x01,
12 Table = 0x02,
13 Row = 0x03,
14 NamespaceTable = 0x04,
15 SystemSequence = 0x05,
16 Columns = 0x06,
17 Column = 0x07,
18 RowSequence = 0x08,
19 ColumnProperty = 0x09,
20 SystemVersion = 0x0A,
21 TransactionVersion = 0x0B,
22 Index = 0x0C,
23 IndexEntry = 0x0D,
24 ColumnSequence = 0x0E,
25 CdcConsumer = 0x0F,
26 View = 0x10,
27 NamespaceView = 0x11,
28 PrimaryKey = 0x12,
29 FlowNodeState = 0x13,
30 RingBuffer = 0x14,
31 NamespaceRingBuffer = 0x15,
32 RingBufferMetadata = 0x16,
33 ShapeRetentionStrategy = 0x17,
34 OperatorRetentionStrategy = 0x18,
35 Flow = 0x19,
36 NamespaceFlow = 0x1A,
37 FlowNode = 0x1B,
38 FlowNodeByFlow = 0x1C,
39 FlowEdge = 0x1D,
40 FlowEdgeByFlow = 0x1E,
41 FlowNodeInternalState = 0x1F,
42 Dictionary = 0x20,
43 DictionaryEntry = 0x21,
44 DictionaryEntryIndex = 0x22,
45 NamespaceDictionary = 0x23,
46 Metric = 0x24,
47 FlowVersion = 0x25,
48 Subscription = 0x26,
49 SubscriptionRow = 0x27,
50 SubscriptionColumn = 0x28,
51 Shape = 0x29,
52 RowShapeField = 0x2A,
53 SumType = 0x2B,
54 NamespaceSumType = 0x2C,
55 Handler = 0x2D,
56 NamespaceHandler = 0x2E,
57 VariantHandler = 0x2F,
58 Series = 0x30,
59 NamespaceSeries = 0x31,
60 SeriesMetadata = 0x32,
61 Identity = 0x33,
62 Role = 0x34,
63 GrantedRole = 0x35,
64 Policy = 0x36,
65 PolicyOp = 0x37,
66 Migration = 0x38,
67 MigrationEvent = 0x39,
68 Authentication = 0x3A,
69 ConfigStorage = 0x3B,
70 Token = 0x3C,
71 Source = 0x3D,
72 NamespaceSource = 0x3E,
73 Sink = 0x3F,
74 NamespaceSink = 0x40,
75 SourceCheckpoint = 0x41,
76 RowSettings = 0x42,
77 Procedure = 0x43,
78 NamespaceProcedure = 0x44,
79 ProcedureParam = 0x45,
80 Binding = 0x46,
81 NamespaceBinding = 0x47,
82 OperatorSettings = 0x48,
83 ColumnSnapshot = 0x49,
84 SeriesColumnSnapshot = 0x4A,
85 TableColumnSnapshot = 0x4B,
86 VersionEpoch = 0x4C,
87}
88
89impl From<KeyKind> for u8 {
90 fn from(kind: KeyKind) -> Self {
91 kind as u8
92 }
93}
94impl TryFrom<u8> for KeyKind {
95 type Error = Error;
96
97 fn try_from(value: u8) -> Result<Self, Self::Error> {
98 match value {
99 0x01 => Ok(Self::Namespace),
100 0x02 => Ok(Self::Table),
101 0x03 => Ok(Self::Row),
102 0x04 => Ok(Self::NamespaceTable),
103 0x05 => Ok(Self::SystemSequence),
104 0x06 => Ok(Self::Columns),
105 0x07 => Ok(Self::Column),
106 0x08 => Ok(Self::RowSequence),
107 0x09 => Ok(Self::ColumnProperty),
108 0x0A => Ok(Self::SystemVersion),
109 0x0B => Ok(Self::TransactionVersion),
110 0x0C => Ok(Self::Index),
111 0x0D => Ok(Self::IndexEntry),
112 0x0E => Ok(Self::ColumnSequence),
113 0x0F => Ok(Self::CdcConsumer),
114 0x10 => Ok(Self::View),
115 0x11 => Ok(Self::NamespaceView),
116 0x12 => Ok(Self::PrimaryKey),
117 0x13 => Ok(Self::FlowNodeState),
118 0x14 => Ok(Self::RingBuffer),
119 0x15 => Ok(Self::NamespaceRingBuffer),
120 0x16 => Ok(Self::RingBufferMetadata),
121 0x17 => Ok(Self::ShapeRetentionStrategy),
122 0x18 => Ok(Self::OperatorRetentionStrategy),
123 0x19 => Ok(Self::Flow),
124 0x1A => Ok(Self::NamespaceFlow),
125 0x1B => Ok(Self::FlowNode),
126 0x1C => Ok(Self::FlowNodeByFlow),
127 0x1D => Ok(Self::FlowEdge),
128 0x1E => Ok(Self::FlowEdgeByFlow),
129 0x1F => Ok(Self::FlowNodeInternalState),
130 0x20 => Ok(Self::Dictionary),
131 0x21 => Ok(Self::DictionaryEntry),
132 0x22 => Ok(Self::DictionaryEntryIndex),
133 0x23 => Ok(Self::NamespaceDictionary),
134 0x24 => Ok(Self::Metric),
135 0x25 => Ok(Self::FlowVersion),
136 0x26 => Ok(Self::Subscription),
137 0x27 => Ok(Self::SubscriptionRow),
138 0x28 => Ok(Self::SubscriptionColumn),
139 0x29 => Ok(Self::Shape),
140 0x2A => Ok(Self::RowShapeField),
141 0x2B => Ok(Self::SumType),
142 0x2C => Ok(Self::NamespaceSumType),
143 0x2D => Ok(Self::Handler),
144 0x2E => Ok(Self::NamespaceHandler),
145 0x2F => Ok(Self::VariantHandler),
146 0x30 => Ok(Self::Series),
147 0x31 => Ok(Self::NamespaceSeries),
148 0x32 => Ok(Self::SeriesMetadata),
149 0x33 => Ok(Self::Identity),
150 0x34 => Ok(Self::Role),
151 0x35 => Ok(Self::GrantedRole),
152 0x36 => Ok(Self::Policy),
153 0x37 => Ok(Self::PolicyOp),
154 0x38 => Ok(Self::Migration),
155 0x39 => Ok(Self::MigrationEvent),
156 0x3A => Ok(Self::Authentication),
157 0x3B => Ok(Self::ConfigStorage),
158 0x3C => Ok(Self::Token),
159 0x3D => Ok(Self::Source),
160 0x3E => Ok(Self::NamespaceSource),
161 0x3F => Ok(Self::Sink),
162 0x40 => Ok(Self::NamespaceSink),
163 0x41 => Ok(Self::SourceCheckpoint),
164 0x42 => Ok(Self::RowSettings),
165 0x43 => Ok(Self::Procedure),
166 0x44 => Ok(Self::NamespaceProcedure),
167 0x45 => Ok(Self::ProcedureParam),
168 0x46 => Ok(Self::Binding),
169 0x47 => Ok(Self::NamespaceBinding),
170 0x48 => Ok(Self::OperatorSettings),
171 0x49 => Ok(Self::ColumnSnapshot),
172 0x4A => Ok(Self::SeriesColumnSnapshot),
173 0x4B => Ok(Self::TableColumnSnapshot),
174 0x4C => Ok(Self::VersionEpoch),
175 _ => Err(de::Error::custom(format!("Invalid KeyKind value: {value:#04x}"))),
176 }
177 }
178}