reifydb-core 0.4.5

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

use std::{
	fmt,
	fmt::{Display, Formatter},
};

use serde::{Deserialize, Serialize};

use crate::interface::catalog::id::{ColumnId, ColumnPropertyId};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ColumnProperty {
	pub id: ColumnPropertyId,
	pub column: ColumnId,
	pub property: ColumnPropertyKind,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ColumnPropertyKind {
	Saturation(ColumnSaturationPolicy),
}

impl ColumnPropertyKind {
	pub fn to_u8(&self) -> (u8, u8) {
		match self {
			ColumnPropertyKind::Saturation(policy) => match policy {
				ColumnSaturationPolicy::Error => (0x01, 0x01),
				ColumnSaturationPolicy::None => (0x01, 0x02),
			},
		}
	}

	pub fn from_u8(policy: u8, value: u8) -> ColumnPropertyKind {
		match (policy, value) {
			(0x01, 0x01) => ColumnPropertyKind::Saturation(ColumnSaturationPolicy::Error),
			(0x01, 0x02) => ColumnPropertyKind::Saturation(ColumnSaturationPolicy::None),
			_ => unimplemented!(),
		}
	}

	pub fn default_saturation_policy() -> Self {
		Self::Saturation(ColumnSaturationPolicy::default())
	}
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ColumnSaturationPolicy {
	Error,
	// Saturate,
	// Wrap,
	// Zero,
	None,
}

impl Display for ColumnPropertyKind {
	fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
		match self {
			ColumnPropertyKind::Saturation(_) => f.write_str("saturation"),
		}
	}
}

pub const DEFAULT_COLUMN_SATURATION_POLICY: ColumnSaturationPolicy = ColumnSaturationPolicy::Error;

impl Default for ColumnSaturationPolicy {
	fn default() -> Self {
		Self::Error
	}
}