use reifydb_value::error::Error;
use serde::{Deserialize, Serialize, de};
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(try_from = "u8", into = "u8")]
pub enum KeyKind {
Namespace = 0x01,
Table = 0x02,
Row = 0x03,
NamespaceTable = 0x04,
SystemSequence = 0x05,
Columns = 0x06,
Column = 0x07,
RowSequence = 0x08,
ColumnProperty = 0x09,
SystemVersion = 0x0A,
TransactionVersion = 0x0B,
Index = 0x0C,
IndexEntry = 0x0D,
ColumnSequence = 0x0E,
CdcConsumer = 0x0F,
View = 0x10,
NamespaceView = 0x11,
PrimaryKey = 0x12,
OperatorState = 0x13,
RingBuffer = 0x14,
NamespaceRingBuffer = 0x15,
RingBufferMetadata = 0x16,
Flow = 0x17,
NamespaceFlow = 0x18,
Operator = 0x19,
OperatorByFlow = 0x1A,
FlowEdge = 0x1B,
FlowEdgeByFlow = 0x1C,
OutputFrontier = 0x1D,
Dictionary = 0x1E,
DictionaryEntry = 0x1F,
DictionaryEntryIndex = 0x20,
NamespaceDictionary = 0x21,
Metric = 0x22,
FlowVersion = 0x23,
Subscription = 0x24,
SubscriptionRow = 0x25,
SubscriptionColumn = 0x26,
RowShape = 0x27,
RowShapeField = 0x28,
SumType = 0x29,
NamespaceSumType = 0x2A,
Handler = 0x2B,
NamespaceHandler = 0x2C,
VariantHandler = 0x2D,
Series = 0x2E,
NamespaceSeries = 0x2F,
SeriesMetadata = 0x30,
Identity = 0x31,
Role = 0x32,
GrantedRole = 0x33,
Policy = 0x34,
PolicyOp = 0x35,
Migration = 0x36,
MigrationEvent = 0x37,
Authentication = 0x38,
ConfigStorage = 0x39,
Token = 0x3A,
Source = 0x3B,
NamespaceSource = 0x3C,
Sink = 0x3D,
NamespaceSink = 0x3E,
SourceCheckpoint = 0x3F,
RowSettings = 0x40,
Procedure = 0x41,
NamespaceProcedure = 0x42,
ProcedureParam = 0x43,
Binding = 0x44,
NamespaceBinding = 0x45,
OperatorSettings = 0x46,
ColumnSnapshot = 0x47,
SeriesColumnSnapshot = 0x48,
TableColumnSnapshot = 0x49,
VersionEpoch = 0x4A,
IdentityAttribute = 0x4B,
IdentityAttributeValue = 0x4C,
PartitionedRow = 0x4D,
Partition = 0x4E,
Queue = 0x4F,
NamespaceQueue = 0x50,
QueueDeduplication = 0x51,
Relationship = 0x52,
}
impl From<KeyKind> for u8 {
fn from(kind: KeyKind) -> Self {
kind as u8
}
}
impl TryFrom<u8> for KeyKind {
type Error = Error;
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
0x01 => Ok(Self::Namespace),
0x02 => Ok(Self::Table),
0x03 => Ok(Self::Row),
0x04 => Ok(Self::NamespaceTable),
0x05 => Ok(Self::SystemSequence),
0x06 => Ok(Self::Columns),
0x07 => Ok(Self::Column),
0x08 => Ok(Self::RowSequence),
0x09 => Ok(Self::ColumnProperty),
0x0A => Ok(Self::SystemVersion),
0x0B => Ok(Self::TransactionVersion),
0x0C => Ok(Self::Index),
0x0D => Ok(Self::IndexEntry),
0x0E => Ok(Self::ColumnSequence),
0x0F => Ok(Self::CdcConsumer),
0x10 => Ok(Self::View),
0x11 => Ok(Self::NamespaceView),
0x12 => Ok(Self::PrimaryKey),
0x13 => Ok(Self::OperatorState),
0x14 => Ok(Self::RingBuffer),
0x15 => Ok(Self::NamespaceRingBuffer),
0x16 => Ok(Self::RingBufferMetadata),
0x17 => Ok(Self::Flow),
0x18 => Ok(Self::NamespaceFlow),
0x19 => Ok(Self::Operator),
0x1A => Ok(Self::OperatorByFlow),
0x1B => Ok(Self::FlowEdge),
0x1C => Ok(Self::FlowEdgeByFlow),
0x1D => Ok(Self::OutputFrontier),
0x1E => Ok(Self::Dictionary),
0x1F => Ok(Self::DictionaryEntry),
0x20 => Ok(Self::DictionaryEntryIndex),
0x21 => Ok(Self::NamespaceDictionary),
0x22 => Ok(Self::Metric),
0x23 => Ok(Self::FlowVersion),
0x24 => Ok(Self::Subscription),
0x25 => Ok(Self::SubscriptionRow),
0x26 => Ok(Self::SubscriptionColumn),
0x27 => Ok(Self::RowShape),
0x28 => Ok(Self::RowShapeField),
0x29 => Ok(Self::SumType),
0x2A => Ok(Self::NamespaceSumType),
0x2B => Ok(Self::Handler),
0x2C => Ok(Self::NamespaceHandler),
0x2D => Ok(Self::VariantHandler),
0x2E => Ok(Self::Series),
0x2F => Ok(Self::NamespaceSeries),
0x30 => Ok(Self::SeriesMetadata),
0x31 => Ok(Self::Identity),
0x32 => Ok(Self::Role),
0x33 => Ok(Self::GrantedRole),
0x34 => Ok(Self::Policy),
0x35 => Ok(Self::PolicyOp),
0x36 => Ok(Self::Migration),
0x37 => Ok(Self::MigrationEvent),
0x38 => Ok(Self::Authentication),
0x39 => Ok(Self::ConfigStorage),
0x3A => Ok(Self::Token),
0x3B => Ok(Self::Source),
0x3C => Ok(Self::NamespaceSource),
0x3D => Ok(Self::Sink),
0x3E => Ok(Self::NamespaceSink),
0x3F => Ok(Self::SourceCheckpoint),
0x40 => Ok(Self::RowSettings),
0x41 => Ok(Self::Procedure),
0x42 => Ok(Self::NamespaceProcedure),
0x43 => Ok(Self::ProcedureParam),
0x44 => Ok(Self::Binding),
0x45 => Ok(Self::NamespaceBinding),
0x46 => Ok(Self::OperatorSettings),
0x47 => Ok(Self::ColumnSnapshot),
0x48 => Ok(Self::SeriesColumnSnapshot),
0x49 => Ok(Self::TableColumnSnapshot),
0x4A => Ok(Self::VersionEpoch),
0x4B => Ok(Self::IdentityAttribute),
0x4C => Ok(Self::IdentityAttributeValue),
0x4D => Ok(Self::PartitionedRow),
0x4E => Ok(Self::Partition),
0x4F => Ok(Self::Queue),
0x50 => Ok(Self::NamespaceQueue),
0x51 => Ok(Self::QueueDeduplication),
0x52 => Ok(Self::Relationship),
_ => Err(de::Error::custom(format!("Invalid KeyKind value: {value:#04x}"))),
}
}
}