reifydb_core/interface/catalog/
layout.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use reifydb_type::Type;
5
6use super::{RingBufferDef, TableDef, ViewDef};
7use crate::value::encoded::{EncodedValuesLayout, EncodedValuesNamedLayout};
8
9pub trait GetEncodedRowLayout {
10	fn get_layout(&self) -> EncodedValuesLayout;
11}
12
13pub trait GetEncodedRowNamedLayout {
14	fn get_named_layout(&self) -> EncodedValuesNamedLayout;
15}
16
17impl GetEncodedRowLayout for TableDef {
18	fn get_layout(&self) -> EncodedValuesLayout {
19		let types: Vec<_> = self.columns.iter().map(|col| col.constraint.get_type()).collect();
20		EncodedValuesLayout::new(&types)
21	}
22}
23
24impl GetEncodedRowLayout for ViewDef {
25	fn get_layout(&self) -> EncodedValuesLayout {
26		let types: Vec<_> = self.columns.iter().map(|col| col.constraint.get_type()).collect();
27		EncodedValuesLayout::new(&types)
28	}
29}
30
31impl GetEncodedRowLayout for RingBufferDef {
32	fn get_layout(&self) -> EncodedValuesLayout {
33		let types: Vec<_> = self.columns.iter().map(|col| col.constraint.get_type()).collect();
34		EncodedValuesLayout::new(&types)
35	}
36}
37
38impl GetEncodedRowNamedLayout for TableDef {
39	fn get_named_layout(&self) -> EncodedValuesNamedLayout {
40		let fields: Vec<(String, Type)> =
41			self.columns.iter().map(|col| (col.name.clone(), col.constraint.get_type())).collect();
42		EncodedValuesNamedLayout::new(fields)
43	}
44}
45
46impl GetEncodedRowNamedLayout for ViewDef {
47	fn get_named_layout(&self) -> EncodedValuesNamedLayout {
48		let fields: Vec<(String, Type)> =
49			self.columns.iter().map(|col| (col.name.clone(), col.constraint.get_type())).collect();
50		EncodedValuesNamedLayout::new(fields)
51	}
52}
53
54impl GetEncodedRowNamedLayout for RingBufferDef {
55	fn get_named_layout(&self) -> EncodedValuesNamedLayout {
56		let fields: Vec<(String, Type)> =
57			self.columns.iter().map(|col| (col.name.clone(), col.constraint.get_type())).collect();
58		EncodedValuesNamedLayout::new(fields)
59	}
60}