harmos_domain/model/storage/query/transform/
project.rs1use super::FieldPath;
22use crate::MemorySize;
23use crate::model::storage::codec::{Nested, Repeated, Text, product};
24
25product!(Project { fields: Repeated<Projection> => 1 });
30product!(Projection { field: Nested<FieldPath> => 1, name: Text => 2 });
31
32#[derive(Clone, Debug)]
37pub struct Project {
38 pub fields: Vec<Projection>,
39}
40#[derive(Clone, Debug)]
41pub struct Projection {
42 pub field: FieldPath,
43 pub name: String,
44}
45
46impl MemorySize for Project {
53 fn memory_size(&self) -> usize {
54 std::mem::size_of::<Self>() + self.fields.memory_size().saturating_sub(std::mem::size_of_val(&self.fields))
55 }
56}
57impl MemorySize for Projection {
58 fn memory_size(&self) -> usize {
59 std::mem::size_of::<Self>() + self.field.memory_size().saturating_sub(std::mem::size_of_val(&self.field)) + self.name.capacity()
60 }
61}
62
63