reifydb-core 0.4.12

Core database interfaces and data structures for ReifyDB
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2025 ReifyDB

use reifydb_type::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,
	FlowNodeState = 0x13,
	RingBuffer = 0x14,
	NamespaceRingBuffer = 0x15,
	RingBufferMetadata = 0x16,
	ShapeRetentionStrategy = 0x17,
	OperatorRetentionStrategy = 0x18,
	Flow = 0x19,
	NamespaceFlow = 0x1A,
	FlowNode = 0x1B,
	FlowNodeByFlow = 0x1C,
	FlowEdge = 0x1D,
	FlowEdgeByFlow = 0x1E,
	FlowNodeInternalState = 0x1F,
	Dictionary = 0x20,
	DictionaryEntry = 0x21,
	DictionaryEntryIndex = 0x22,
	NamespaceDictionary = 0x23,
	DictionarySequence = 0x24,
	Metric = 0x25,
	FlowVersion = 0x26,
	Subscription = 0x27,
	SubscriptionRow = 0x28,
	SubscriptionColumn = 0x29,
	Shape = 0x2A,
	RowShapeField = 0x2B,
	SumType = 0x2C,
	NamespaceSumType = 0x2D,
	Handler = 0x2E,
	NamespaceHandler = 0x2F,
	VariantHandler = 0x30,
	Series = 0x31,
	NamespaceSeries = 0x32,
	SeriesMetadata = 0x33,
	Identity = 0x34,
	Role = 0x35,
	GrantedRole = 0x36,
	Policy = 0x37,
	PolicyOp = 0x38,
	Migration = 0x39,
	MigrationEvent = 0x3A,
	Authentication = 0x3B,
	ConfigStorage = 0x3C,
	Token = 0x3D,
	Source = 0x3E,
	NamespaceSource = 0x3F,
	Sink = 0x40,
	NamespaceSink = 0x41,
	SourceCheckpoint = 0x42,
	RowTtl = 0x43,
	Procedure = 0x44,
	NamespaceProcedure = 0x45,
	ProcedureParam = 0x46,
	Binding = 0x47,
	NamespaceBinding = 0x48,
}

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::FlowNodeState),
			0x14 => Ok(Self::RingBuffer),
			0x15 => Ok(Self::NamespaceRingBuffer),
			0x16 => Ok(Self::RingBufferMetadata),
			0x17 => Ok(Self::ShapeRetentionStrategy),
			0x18 => Ok(Self::OperatorRetentionStrategy),
			0x19 => Ok(Self::Flow),
			0x1A => Ok(Self::NamespaceFlow),
			0x1B => Ok(Self::FlowNode),
			0x1C => Ok(Self::FlowNodeByFlow),
			0x1D => Ok(Self::FlowEdge),
			0x1E => Ok(Self::FlowEdgeByFlow),
			0x1F => Ok(Self::FlowNodeInternalState),
			0x20 => Ok(Self::Dictionary),
			0x21 => Ok(Self::DictionaryEntry),
			0x22 => Ok(Self::DictionaryEntryIndex),
			0x23 => Ok(Self::NamespaceDictionary),
			0x24 => Ok(Self::DictionarySequence),
			0x25 => Ok(Self::Metric),
			0x26 => Ok(Self::FlowVersion),
			0x27 => Ok(Self::Subscription),
			0x28 => Ok(Self::SubscriptionRow),
			0x29 => Ok(Self::SubscriptionColumn),
			0x2A => Ok(Self::Shape),
			0x2B => Ok(Self::RowShapeField),
			0x2C => Ok(Self::SumType),
			0x2D => Ok(Self::NamespaceSumType),
			0x2E => Ok(Self::Handler),
			0x2F => Ok(Self::NamespaceHandler),
			0x30 => Ok(Self::VariantHandler),
			0x31 => Ok(Self::Series),
			0x32 => Ok(Self::NamespaceSeries),
			0x33 => Ok(Self::SeriesMetadata),
			0x34 => Ok(Self::Identity),
			0x35 => Ok(Self::Role),
			0x36 => Ok(Self::GrantedRole),
			0x37 => Ok(Self::Policy),
			0x38 => Ok(Self::PolicyOp),
			0x39 => Ok(Self::Migration),
			0x3A => Ok(Self::MigrationEvent),
			0x3B => Ok(Self::Authentication),
			0x3C => Ok(Self::ConfigStorage),
			0x3D => Ok(Self::Token),
			0x3E => Ok(Self::Source),
			0x3F => Ok(Self::NamespaceSource),
			0x40 => Ok(Self::Sink),
			0x41 => Ok(Self::NamespaceSink),
			0x42 => Ok(Self::SourceCheckpoint),
			0x43 => Ok(Self::RowTtl),
			0x44 => Ok(Self::Procedure),
			0x45 => Ok(Self::NamespaceProcedure),
			0x46 => Ok(Self::ProcedureParam),
			0x47 => Ok(Self::Binding),
			0x48 => Ok(Self::NamespaceBinding),
			_ => Err(de::Error::custom(format!("Invalid KeyKind value: {value:#04x}"))),
		}
	}
}