mod chunk_array;
pub use chunk_array::ChunkArray;
mod data_source;
pub use data_source::DataSource;
mod table_array;
pub use table_array::TableArray;
mod data_array;
pub use data_array::DataArray;
mod chunk_desc;
pub use chunk_desc::ChunkDesc;
mod table_builder;
pub use table_builder::TableBuilder;
mod table_desc;
pub use table_desc::TableDesc;
mod hff_desc;
pub use hff_desc::HffDesc;
use crate::{Error, Identifier, Result};
pub fn table<'a>(identifier: impl Into<Identifier>) -> TableBuilder<'a> {
TableBuilder::new(identifier.into())
}
pub fn chunk<'a, T>(identifier: impl Into<Identifier>, content: T) -> Result<ChunkDesc<'a>>
where
T: TryInto<DataSource<'a>, Error = Error>,
{
Ok(ChunkDesc::new(identifier.into(), content.try_into()?))
}
pub fn hff<'a>(tables: impl IntoIterator<Item = TableBuilder<'a>>) -> HffDesc<'a> {
let mut table_array = TableArray::new();
let mut chunk_array = ChunkArray::new();
let mut data_array = DataArray::new();
let tables = tables
.into_iter()
.map(|desc| desc.finish())
.collect::<Vec<_>>();
let table_count = tables.len();
for (index, table) in tables.into_iter().enumerate() {
let has_sibling = index < table_count - 1;
table.flatten(
has_sibling,
&mut table_array,
&mut chunk_array,
&mut data_array,
);
}
HffDesc::new(table_array, chunk_array, data_array)
}