reifydb_core/interface/catalog/
policy.rs1use std::fmt::{Display, Formatter};
5
6use serde::{Deserialize, Serialize};
7
8use crate::interface::catalog::{ColumnId, ColumnPolicyId};
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub struct ColumnPolicy {
12 pub id: ColumnPolicyId,
13 pub column: ColumnId,
14 pub policy: ColumnPolicyKind,
15}
16
17#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
18pub enum ColumnPolicyKind {
19 Saturation(ColumnSaturationPolicy),
20}
21
22impl ColumnPolicyKind {
23 pub fn to_u8(&self) -> (u8, u8) {
24 match self {
25 ColumnPolicyKind::Saturation(policy) => match policy {
26 ColumnSaturationPolicy::Error => (0x01, 0x01),
27 ColumnSaturationPolicy::Undefined => (0x01, 0x02),
28 },
29 }
30 }
31
32 pub fn from_u8(policy: u8, value: u8) -> ColumnPolicyKind {
33 match (policy, value) {
34 (0x01, 0x01) => ColumnPolicyKind::Saturation(ColumnSaturationPolicy::Error),
35 (0x01, 0x02) => ColumnPolicyKind::Saturation(ColumnSaturationPolicy::Undefined),
36 _ => unimplemented!(),
37 }
38 }
39
40 pub fn default_saturation_policy() -> Self {
41 Self::Saturation(ColumnSaturationPolicy::default())
42 }
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
46pub enum ColumnSaturationPolicy {
47 Error,
48 Undefined,
52}
53
54impl Display for ColumnPolicyKind {
55 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
56 match self {
57 ColumnPolicyKind::Saturation(_) => f.write_str("saturation"),
58 }
59 }
60}
61
62pub const DEFAULT_COLUMN_SATURATION_POLICY: ColumnSaturationPolicy = ColumnSaturationPolicy::Error;
63
64impl Default for ColumnSaturationPolicy {
65 fn default() -> Self {
66 Self::Error
67 }
68}