reifydb_core/key/
kind.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use reifydb_type::Error;
5use serde::{Deserialize, Serialize};
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	ColumnPolicy = 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	SourceRetentionPolicy = 0x17,
34	OperatorRetentionPolicy = 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	DictionarySequence = 0x24,
47	StorageTracker = 0x25,
48}
49
50impl From<KeyKind> for u8 {
51	fn from(kind: KeyKind) -> Self {
52		kind as u8
53	}
54}
55impl TryFrom<u8> for KeyKind {
56	type Error = Error;
57
58	fn try_from(value: u8) -> Result<Self, Self::Error> {
59		match value {
60			0x01 => Ok(Self::Namespace),
61			0x02 => Ok(Self::Table),
62			0x03 => Ok(Self::Row),
63			0x04 => Ok(Self::NamespaceTable),
64			0x05 => Ok(Self::SystemSequence),
65			0x06 => Ok(Self::Columns),
66			0x07 => Ok(Self::Column),
67			0x08 => Ok(Self::RowSequence),
68			0x09 => Ok(Self::ColumnPolicy),
69			0x0A => Ok(Self::SystemVersion),
70			0x0B => Ok(Self::TransactionVersion),
71			0x0C => Ok(Self::Index),
72			0x0D => Ok(Self::IndexEntry),
73			0x0E => Ok(Self::ColumnSequence),
74			0x0F => Ok(Self::CdcConsumer),
75			0x10 => Ok(Self::View),
76			0x11 => Ok(Self::NamespaceView),
77			0x12 => Ok(Self::PrimaryKey),
78			0x13 => Ok(Self::FlowNodeState),
79			0x14 => Ok(Self::RingBuffer),
80			0x15 => Ok(Self::NamespaceRingBuffer),
81			0x16 => Ok(Self::RingBufferMetadata),
82			0x17 => Ok(Self::SourceRetentionPolicy),
83			0x18 => Ok(Self::OperatorRetentionPolicy),
84			0x19 => Ok(Self::Flow),
85			0x1A => Ok(Self::NamespaceFlow),
86			0x1B => Ok(Self::FlowNode),
87			0x1C => Ok(Self::FlowNodeByFlow),
88			0x1D => Ok(Self::FlowEdge),
89			0x1E => Ok(Self::FlowEdgeByFlow),
90			0x1F => Ok(Self::FlowNodeInternalState),
91			0x20 => Ok(Self::Dictionary),
92			0x21 => Ok(Self::DictionaryEntry),
93			0x22 => Ok(Self::DictionaryEntryIndex),
94			0x23 => Ok(Self::NamespaceDictionary),
95			0x24 => Ok(Self::DictionarySequence),
96			0x25 => Ok(Self::StorageTracker),
97			_ => Err(serde::de::Error::custom(format!("Invalid KeyKind value: {value:#04x}"))),
98		}
99	}
100}