pub use lz4::liblz4::BlockSize;
use lz4::{
liblz4::{BlockChecksum, FrameType, LZ4FFrameInfo, LZ4FPreferences},
BlockMode, ContentChecksum,
};
#[derive(Clone, Debug, Default)]
pub struct EncoderParams {
block_size: Option<BlockSize>,
block_checksum: Option<BlockChecksum>,
content_checksum: Option<ContentChecksum>,
}
impl EncoderParams {
pub fn block_size(mut self, block_size: BlockSize) -> Self {
self.block_size = Some(block_size);
self
}
pub fn content_checksum(mut self, enable: bool) -> Self {
self.content_checksum = Some(if enable {
ContentChecksum::ChecksumEnabled
} else {
ContentChecksum::NoChecksum
});
self
}
pub fn block_checksum(mut self, enable: bool) -> Self {
self.block_checksum = Some(if enable {
BlockChecksum::BlockChecksumEnabled
} else {
BlockChecksum::NoBlockChecksum
});
self
}
pub(crate) fn as_lz4(&self) -> LZ4FPreferences {
let block_size_id = self.block_size.clone().unwrap_or(BlockSize::Default);
let content_checksum_flag = self
.content_checksum
.clone()
.unwrap_or(ContentChecksum::NoChecksum);
let block_checksum_flag = self
.block_checksum
.clone()
.unwrap_or(BlockChecksum::NoBlockChecksum);
LZ4FPreferences {
frame_info: LZ4FFrameInfo {
block_size_id,
block_mode: BlockMode::Linked,
content_checksum_flag,
frame_type: FrameType::Frame,
content_size: 0,
dict_id: 0,
block_checksum_flag,
},
compression_level: 0,
auto_flush: 0,
favor_dec_speed: 0,
reserved: [0; 3],
}
}
}