1pub use lz4::liblz4::BlockSize;
4use lz4::{
5 liblz4::{BlockChecksum, FrameType, LZ4FFrameInfo, LZ4FPreferences},
6 BlockMode, ContentChecksum,
7};
8
9#[derive(Clone, Debug, Default)]
25pub struct EncoderParams {
26 block_size: Option<BlockSize>,
27 block_checksum: Option<BlockChecksum>,
28 content_checksum: Option<ContentChecksum>,
29}
30
31impl EncoderParams {
32 pub fn block_size(mut self, block_size: BlockSize) -> Self {
34 self.block_size = Some(block_size);
35 self
36 }
37
38 pub fn content_checksum(mut self, enable: bool) -> Self {
40 self.content_checksum = Some(if enable {
41 ContentChecksum::ChecksumEnabled
42 } else {
43 ContentChecksum::NoChecksum
44 });
45 self
46 }
47
48 pub fn block_checksum(mut self, enable: bool) -> Self {
50 self.block_checksum = Some(if enable {
51 BlockChecksum::BlockChecksumEnabled
52 } else {
53 BlockChecksum::NoBlockChecksum
54 });
55 self
56 }
57
58 pub(crate) fn as_lz4(&self) -> LZ4FPreferences {
59 let block_size_id = self.block_size.clone().unwrap_or(BlockSize::Default);
60 let content_checksum_flag = self
61 .content_checksum
62 .clone()
63 .unwrap_or(ContentChecksum::NoChecksum);
64 let block_checksum_flag = self
65 .block_checksum
66 .clone()
67 .unwrap_or(BlockChecksum::NoBlockChecksum);
68
69 LZ4FPreferences {
70 frame_info: LZ4FFrameInfo {
71 block_size_id,
72 block_mode: BlockMode::Linked,
73 content_checksum_flag,
74 frame_type: FrameType::Frame,
75 content_size: 0,
76 dict_id: 0,
77 block_checksum_flag,
78 },
79 compression_level: 0,
80 auto_flush: 0,
81 favor_dec_speed: 0,
82 reserved: [0; 3],
83 }
84 }
85}