hff_core/write/
table_builder.rs1use super::{ChunkDesc, DataSource, TableDesc};
2use crate::{Error, Identifier, Result};
3
4#[derive(Debug)]
6pub struct TableBuilder<'a> {
7 identifier: Identifier,
9 metadata: Option<DataSource<'a>>,
11 chunks: Vec<ChunkDesc<'a>>,
13 children: Vec<TableBuilder<'a>>,
15}
16
17impl<'a> TableBuilder<'a> {
18 pub fn new(identifier: Identifier) -> Self {
20 Self {
21 identifier,
22 metadata: None,
23 chunks: vec![],
24 children: vec![],
25 }
26 }
27
28 pub fn metadata<T>(mut self, content: T) -> Result<Self>
30 where
31 T: TryInto<DataSource<'a>, Error = Error>,
32 {
33 self.metadata = Some(content.try_into()?);
34 Ok(self)
35 }
36
37 pub fn children(mut self, children: impl IntoIterator<Item = TableBuilder<'a>>) -> Self {
39 self.children = children.into_iter().collect::<Vec<_>>();
40 self
41 }
42
43 pub fn chunks(mut self, content: impl IntoIterator<Item = ChunkDesc<'a>>) -> Self {
45 self.chunks = content.into_iter().collect::<Vec<_>>();
46 self
47 }
48
49 pub fn finish(self) -> TableDesc<'a> {
51 TableDesc::new(
52 self.identifier,
53 self.metadata,
54 self.chunks,
55 self.children
56 .into_iter()
57 .map(|desc| desc.finish())
58 .collect(),
59 )
60 }
61
62 pub fn identifier(&self) -> Identifier {
64 self.identifier
65 }
66}