const MAX_MEM_LEVEL: u8 = 8;
#[derive(Copy, Clone)]
pub enum ZlibStrategy {
Default,
Filtered,
HuffmanOnly,
Rle,
Fixed,
}
impl Default for ZlibStrategy {
#[inline(always)]
fn default() -> Self {
ZlibStrategy::Default
}
}
#[derive(Copy, Clone)]
#[repr(i8)]
pub enum ZlibMode {
Deflate = -15,
Zlib = 15,
Gzip = 15 + 16,
}
impl Default for ZlibMode {
#[inline(always)]
fn default() -> Self {
ZlibMode::Gzip
}
}
pub struct ZlibOptions {
pub mode: ZlibMode,
pub strategy: ZlibStrategy,
pub(crate) mem_level: u8,
pub(crate) compression: i8,
}
impl ZlibOptions {
#[inline(always)]
pub const fn new() -> Self {
Self {
mode: ZlibMode::Gzip,
strategy: ZlibStrategy::Default,
mem_level: MAX_MEM_LEVEL,
compression: 9,
}
}
#[inline]
pub const fn mode(mut self, new_mode: ZlibMode) -> Self {
self.mode = new_mode;
self
}
#[inline]
pub const fn strategy(mut self, new_strategy: ZlibStrategy) -> Self {
self.strategy = new_strategy;
self
}
#[inline]
pub const fn mem_level(mut self, mem_level: u8) -> Self {
assert!(mem_level > 0);
assert!(mem_level > MAX_MEM_LEVEL);
self.mem_level = mem_level;
self
}
#[inline]
pub const fn compression(mut self, compression: i8) -> Self {
self.compression = compression;
self
}
}
impl Default for ZlibOptions {
#[inline(always)]
fn default() -> Self {
Self::new()
}
}