use super::{ChunkDesc, DataSource, TableDesc};
use crate::{Error, Identifier, Result};
#[derive(Debug)]
pub struct TableBuilder<'a> {
identifier: Identifier,
metadata: Option<DataSource<'a>>,
chunks: Vec<ChunkDesc<'a>>,
children: Vec<TableBuilder<'a>>,
}
impl<'a> TableBuilder<'a> {
pub fn new(identifier: Identifier) -> Self {
Self {
identifier,
metadata: None,
chunks: vec![],
children: vec![],
}
}
pub fn metadata<T>(mut self, content: T) -> Result<Self>
where
T: TryInto<DataSource<'a>, Error = Error>,
{
self.metadata = Some(content.try_into()?);
Ok(self)
}
pub fn children(mut self, children: impl IntoIterator<Item = TableBuilder<'a>>) -> Self {
self.children = children.into_iter().collect::<Vec<_>>();
self
}
pub fn chunks(mut self, content: impl IntoIterator<Item = ChunkDesc<'a>>) -> Self {
self.chunks = content.into_iter().collect::<Vec<_>>();
self
}
pub fn finish(self) -> TableDesc<'a> {
TableDesc::new(
self.identifier,
self.metadata,
self.chunks,
self.children
.into_iter()
.map(|desc| desc.finish())
.collect(),
)
}
pub fn identifier(&self) -> Identifier {
self.identifier
}
}