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