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