use crate::{DataBuilder, TableDesc};
use hff_core::{ByteOrder, Chunk, Ecc, Header, Result, Table};
pub fn write_stream<E: ByteOrder>(
content_type: impl Into<Ecc>,
content: TableDesc,
writer: &mut dyn std::io::Write,
) -> Result<()> {
let table_count = content.table_count();
let chunk_count = content.chunk_count();
let header = Header::new(content_type.into(), table_count as u32, chunk_count as u32);
header.write::<E>(writer)?;
let (tables, chunks, data) = content.flatten_tables()?.finish();
write_tables::<E>(tables, writer)?;
write_chunks::<E>(chunks, writer)?;
write_data(data, writer)?;
writer.flush()?;
Ok(())
}
fn write_tables<E: ByteOrder>(tables: Vec<Table>, writer: &mut dyn std::io::Write) -> Result<()> {
for table in tables {
table.write::<E>(writer)?;
}
Ok(())
}
fn write_chunks<E: ByteOrder>(chunks: Vec<Chunk>, writer: &mut dyn std::io::Write) -> Result<()> {
for chunk in chunks {
chunk.write::<E>(writer)?;
}
Ok(())
}
fn write_data(data: DataBuilder, writer: &mut dyn std::io::Write) -> Result<()> {
data.write(writer)
}