Skip to main content

reifydb_core/interface/catalog/
property.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use std::{
5	fmt,
6	fmt::{Display, Formatter},
7};
8
9use serde::{Deserialize, Serialize};
10
11use crate::interface::catalog::id::{ColumnId, ColumnPropertyId};
12
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
14pub struct ColumnProperty {
15	pub id: ColumnPropertyId,
16	pub column: ColumnId,
17	pub property: ColumnPropertyKind,
18}
19
20#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
21pub enum ColumnPropertyKind {
22	Saturation(ColumnSaturationStrategy),
23}
24
25impl ColumnPropertyKind {
26	pub fn to_u8(&self) -> (u8, u8) {
27		match self {
28			ColumnPropertyKind::Saturation(strategy) => match strategy {
29				ColumnSaturationStrategy::Error => (0x01, 0x01),
30				ColumnSaturationStrategy::None => (0x01, 0x02),
31			},
32		}
33	}
34
35	pub fn from_u8(strategy: u8, value: u8) -> ColumnPropertyKind {
36		match (strategy, value) {
37			(0x01, 0x01) => ColumnPropertyKind::Saturation(ColumnSaturationStrategy::Error),
38			(0x01, 0x02) => ColumnPropertyKind::Saturation(ColumnSaturationStrategy::None),
39			_ => unimplemented!(),
40		}
41	}
42
43	pub fn default_saturation_strategy() -> Self {
44		Self::Saturation(ColumnSaturationStrategy::default())
45	}
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
49pub enum ColumnSaturationStrategy {
50	#[default]
51	Error,
52	// Saturate,
53	// Wrap,
54	// Zero,
55	None,
56}
57
58impl Display for ColumnPropertyKind {
59	fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
60		match self {
61			ColumnPropertyKind::Saturation(_) => f.write_str("saturation"),
62		}
63	}
64}
65
66pub const DEFAULT_COLUMN_SATURATION_STRATEGY: ColumnSaturationStrategy = ColumnSaturationStrategy::Error;