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::{Ecc, Error, Result};
pub fn table<'a>(primary: impl Into<Ecc>, secondary: impl Into<Ecc>) -> TableBuilder<'a> {
TableBuilder::new(primary.into(), secondary.into())
}
pub fn chunk<'a, T>(
primary: impl Into<Ecc>,
secondary: impl Into<Ecc>,
content: T,
) -> Result<ChunkDesc<'a>>
where
T: TryInto<DataSource<'a>>,
<T as TryInto<DataSource<'a>>>::Error: std::fmt::Debug,
Error: From<<T as TryInto<DataSource<'a>>>::Error>,
{
Ok(ChunkDesc::new(
primary.into(),
secondary.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)
}