reifydb_core/value/encoded/
named.rs1use std::ops::Deref;
5
6use reifydb_type::{Type, Value};
7
8use super::{EncodedValues, EncodedValuesLayout, EncodedValuesLayoutInner};
9
10#[derive(Debug, Clone)]
12pub struct EncodedValuesNamedLayout {
13 layout: EncodedValuesLayout,
14 names: Vec<String>,
15}
16
17impl EncodedValuesNamedLayout {
18 pub fn new(fields: impl IntoIterator<Item = (String, Type)>) -> Self {
19 let (names, types): (Vec<String>, Vec<Type>) =
20 fields.into_iter().map(|(name, r#type)| (name, r#type)).unzip();
21
22 let layout = EncodedValuesLayout::new(&types);
23
24 Self {
25 layout,
26 names,
27 }
28 }
29
30 pub fn get_name(&self, index: usize) -> Option<&str> {
31 self.names.get(index).map(|s| s.as_str())
32 }
33
34 pub fn names(&self) -> &[String] {
35 &self.names
36 }
37
38 pub fn get_value(&self, row: &EncodedValues, index: usize) -> Value {
39 self.layout.get_value(row, index)
40 }
41
42 pub fn layout(&self) -> &EncodedValuesLayout {
43 &self.layout
44 }
45
46 pub fn allocate_row(&self) -> EncodedValues {
47 self.layout.allocate()
48 }
49
50 pub fn set_values(&self, row: &mut EncodedValues, values: &[Value]) {
51 debug_assert_eq!(self.layout.fields.len(), values.len());
52 self.layout.set_values(row, values)
53 }
54}
55
56impl Deref for EncodedValuesNamedLayout {
57 type Target = EncodedValuesLayoutInner;
58
59 fn deref(&self) -> &Self::Target {
60 &self.layout
61 }
62}