use brotli::enc::backward_references::{BrotliEncoderMode, BrotliEncoderParams};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct EncoderParams {
window_size: Option<i32>,
block_size: Option<i32>,
size_hint: Option<usize>,
mode: Option<BrotliEncoderMode>,
}
impl EncoderParams {
pub fn window_size(mut self, window_size: i32) -> Self {
self.window_size = Some(window_size.clamp(0, 24));
self
}
pub fn block_size(mut self, block_size: i32) -> Self {
self.block_size = Some(block_size.clamp(16, 24));
self
}
pub fn size_hint(mut self, size_hint: usize) -> Self {
self.size_hint = Some(size_hint);
self
}
pub fn text_mode(mut self) -> Self {
self.mode = Some(BrotliEncoderMode::BROTLI_MODE_TEXT);
self
}
pub(crate) fn as_brotli(&self) -> BrotliEncoderParams {
let mut params = BrotliEncoderParams::default();
let Self {
window_size,
block_size,
size_hint,
mode,
} = self;
if let Some(window_size) = window_size {
params.lgwin = *window_size;
}
if let Some(block_size) = block_size {
params.lgblock = *block_size;
}
if let Some(size_hint) = size_hint {
params.size_hint = *size_hint;
}
if let Some(mode) = mode {
params.mode = *mode;
}
params
}
}