mod reader;
mod writer;
#[cfg(test)]
mod tests;
#[derive(num_enum::TryFromPrimitive, num_enum::IntoPrimitive, Debug, Copy, Clone)]
#[repr(u8)]
enum BlockType {
Uncompressed = 1,
#[cfg(feature = "deflate")]
Deflate = 2,
#[cfg(feature = "lz4")]
Lz4 = 3,
}
pub(crate) use reader::DataBlocksReader;
pub(crate) use writer::DataBlocksWriter;
#[derive(Default, Clone, Copy, Debug)]
pub enum BlockCompression {
#[default]
None,
#[cfg(feature = "deflate")]
#[cfg_attr(docsrs, doc(cfg(feature = "deflate")))]
Deflate(u32),
#[cfg(feature = "lz4")]
#[cfg_attr(docsrs, doc(cfg(feature = "lz4")))]
Lz4,
}
impl BlockCompression {
fn tag(&self) -> BlockType {
match self {
BlockCompression::None => BlockType::Uncompressed,
#[cfg(feature = "deflate")]
BlockCompression::Deflate(_) => BlockType::Deflate,
#[cfg(feature = "lz4")]
BlockCompression::Lz4 => BlockType::Lz4,
}
}
}
#[cfg(feature = "lz4")]
fn map_lz4_err(e: lz4_flex::frame::Error) -> std::io::Error {
match e {
lz4_flex::frame::Error::IoError(e) => e,
other => std::io::Error::new(std::io::ErrorKind::Other, format!("LZ4: {}", other)),
}
}