use brotli::enc::backward_references::{BrotliEncoderMode, BrotliEncoderParams};
use compression_core::Level;
#[derive(Debug, Clone, Default)]
pub struct EncoderParams {
inner: BrotliEncoderParams,
}
impl From<EncoderParams> for BrotliEncoderParams {
fn from(value: EncoderParams) -> Self {
value.inner
}
}
impl EncoderParams {
pub fn quality(mut self, level: Level) -> Self {
let quality = match level {
Level::Fastest => Some(0),
Level::Best => Some(11),
Level::Precise(quality) => Some(quality.clamp(0, 11)),
_ => None,
};
match quality {
Some(quality) => self.inner.quality = quality,
None => {
let default_params = BrotliEncoderParams::default();
self.inner.quality = default_params.quality;
}
}
self
}
pub fn window_size(mut self, window_size: i32) -> Self {
self.inner.lgwin = window_size.clamp(0, 24);
self
}
pub fn block_size(mut self, block_size: i32) -> Self {
self.inner.lgblock = block_size.clamp(16, 24);
self
}
pub fn size_hint(mut self, size_hint: usize) -> Self {
self.inner.size_hint = size_hint;
self
}
pub fn text_mode(mut self) -> Self {
self.inner.mode = BrotliEncoderMode::BROTLI_MODE_TEXT;
self
}
pub fn mode(mut self, mode: BrotliEncoderMode) -> Self {
self.inner.mode = mode;
self
}
}