Skip to main content

reifydb_core/key/
kind.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use 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	OperatorState = 0x13,
30	RingBuffer = 0x14,
31	NamespaceRingBuffer = 0x15,
32	RingBufferMetadata = 0x16,
33	Flow = 0x17,
34	NamespaceFlow = 0x18,
35	Operator = 0x19,
36	OperatorByFlow = 0x1A,
37	FlowEdge = 0x1B,
38	FlowEdgeByFlow = 0x1C,
39	OutputFrontier = 0x1D,
40	Dictionary = 0x1E,
41	DictionaryEntry = 0x1F,
42	DictionaryEntryIndex = 0x20,
43	NamespaceDictionary = 0x21,
44	Metric = 0x22,
45	FlowVersion = 0x23,
46	Subscription = 0x24,
47	SubscriptionRow = 0x25,
48	SubscriptionColumn = 0x26,
49	RowShape = 0x27,
50	RowShapeField = 0x28,
51	SumType = 0x29,
52	NamespaceSumType = 0x2A,
53	Handler = 0x2B,
54	NamespaceHandler = 0x2C,
55	VariantHandler = 0x2D,
56	Series = 0x2E,
57	NamespaceSeries = 0x2F,
58	SeriesMetadata = 0x30,
59	Identity = 0x31,
60	Role = 0x32,
61	GrantedRole = 0x33,
62	Policy = 0x34,
63	PolicyOp = 0x35,
64	Migration = 0x36,
65	MigrationEvent = 0x37,
66	Authentication = 0x38,
67	ConfigStorage = 0x39,
68	Token = 0x3A,
69	Source = 0x3B,
70	NamespaceSource = 0x3C,
71	Sink = 0x3D,
72	NamespaceSink = 0x3E,
73	SourceCheckpoint = 0x3F,
74	RowSettings = 0x40,
75	Procedure = 0x41,
76	NamespaceProcedure = 0x42,
77	ProcedureParam = 0x43,
78	Binding = 0x44,
79	NamespaceBinding = 0x45,
80	OperatorSettings = 0x46,
81	ColumnSnapshot = 0x47,
82	SeriesColumnSnapshot = 0x48,
83	TableColumnSnapshot = 0x49,
84	VersionEpoch = 0x4A,
85	IdentityAttribute = 0x4B,
86	IdentityAttributeValue = 0x4C,
87	PartitionedRow = 0x4D,
88	Partition = 0x4E,
89	Queue = 0x4F,
90	NamespaceQueue = 0x50,
91	QueueDeduplication = 0x51,
92	Relationship = 0x52,
93}
94
95impl From<KeyKind> for u8 {
96	fn from(kind: KeyKind) -> Self {
97		kind as u8
98	}
99}
100impl TryFrom<u8> for KeyKind {
101	type Error = Error;
102
103	fn try_from(value: u8) -> Result<Self, Self::Error> {
104		match value {
105			0x01 => Ok(Self::Namespace),
106			0x02 => Ok(Self::Table),
107			0x03 => Ok(Self::Row),
108			0x04 => Ok(Self::NamespaceTable),
109			0x05 => Ok(Self::SystemSequence),
110			0x06 => Ok(Self::Columns),
111			0x07 => Ok(Self::Column),
112			0x08 => Ok(Self::RowSequence),
113			0x09 => Ok(Self::ColumnProperty),
114			0x0A => Ok(Self::SystemVersion),
115			0x0B => Ok(Self::TransactionVersion),
116			0x0C => Ok(Self::Index),
117			0x0D => Ok(Self::IndexEntry),
118			0x0E => Ok(Self::ColumnSequence),
119			0x0F => Ok(Self::CdcConsumer),
120			0x10 => Ok(Self::View),
121			0x11 => Ok(Self::NamespaceView),
122			0x12 => Ok(Self::PrimaryKey),
123			0x13 => Ok(Self::OperatorState),
124			0x14 => Ok(Self::RingBuffer),
125			0x15 => Ok(Self::NamespaceRingBuffer),
126			0x16 => Ok(Self::RingBufferMetadata),
127			0x17 => Ok(Self::Flow),
128			0x18 => Ok(Self::NamespaceFlow),
129			0x19 => Ok(Self::Operator),
130			0x1A => Ok(Self::OperatorByFlow),
131			0x1B => Ok(Self::FlowEdge),
132			0x1C => Ok(Self::FlowEdgeByFlow),
133			0x1D => Ok(Self::OutputFrontier),
134			0x1E => Ok(Self::Dictionary),
135			0x1F => Ok(Self::DictionaryEntry),
136			0x20 => Ok(Self::DictionaryEntryIndex),
137			0x21 => Ok(Self::NamespaceDictionary),
138			0x22 => Ok(Self::Metric),
139			0x23 => Ok(Self::FlowVersion),
140			0x24 => Ok(Self::Subscription),
141			0x25 => Ok(Self::SubscriptionRow),
142			0x26 => Ok(Self::SubscriptionColumn),
143			0x27 => Ok(Self::RowShape),
144			0x28 => Ok(Self::RowShapeField),
145			0x29 => Ok(Self::SumType),
146			0x2A => Ok(Self::NamespaceSumType),
147			0x2B => Ok(Self::Handler),
148			0x2C => Ok(Self::NamespaceHandler),
149			0x2D => Ok(Self::VariantHandler),
150			0x2E => Ok(Self::Series),
151			0x2F => Ok(Self::NamespaceSeries),
152			0x30 => Ok(Self::SeriesMetadata),
153			0x31 => Ok(Self::Identity),
154			0x32 => Ok(Self::Role),
155			0x33 => Ok(Self::GrantedRole),
156			0x34 => Ok(Self::Policy),
157			0x35 => Ok(Self::PolicyOp),
158			0x36 => Ok(Self::Migration),
159			0x37 => Ok(Self::MigrationEvent),
160			0x38 => Ok(Self::Authentication),
161			0x39 => Ok(Self::ConfigStorage),
162			0x3A => Ok(Self::Token),
163			0x3B => Ok(Self::Source),
164			0x3C => Ok(Self::NamespaceSource),
165			0x3D => Ok(Self::Sink),
166			0x3E => Ok(Self::NamespaceSink),
167			0x3F => Ok(Self::SourceCheckpoint),
168			0x40 => Ok(Self::RowSettings),
169			0x41 => Ok(Self::Procedure),
170			0x42 => Ok(Self::NamespaceProcedure),
171			0x43 => Ok(Self::ProcedureParam),
172			0x44 => Ok(Self::Binding),
173			0x45 => Ok(Self::NamespaceBinding),
174			0x46 => Ok(Self::OperatorSettings),
175			0x47 => Ok(Self::ColumnSnapshot),
176			0x48 => Ok(Self::SeriesColumnSnapshot),
177			0x49 => Ok(Self::TableColumnSnapshot),
178			0x4A => Ok(Self::VersionEpoch),
179			0x4B => Ok(Self::IdentityAttribute),
180			0x4C => Ok(Self::IdentityAttributeValue),
181			0x4D => Ok(Self::PartitionedRow),
182			0x4E => Ok(Self::Partition),
183			0x4F => Ok(Self::Queue),
184			0x50 => Ok(Self::NamespaceQueue),
185			0x51 => Ok(Self::QueueDeduplication),
186			0x52 => Ok(Self::Relationship),
187			_ => Err(de::Error::custom(format!("Invalid KeyKind value: {value:#04x}"))),
188		}
189	}
190}