use super::config::Config;
use super::config::ContentTypePolicy;
use super::encoding::Encoding;
use super::plugin::CompressionPlugin;
pub struct CompressionBuilder(Config);
impl Default for CompressionBuilder {
fn default() -> Self {
Self::new()
}
}
impl CompressionBuilder {
pub fn new() -> Self {
Self(Config::default())
}
pub fn enable_gzip(mut self, yes: bool) -> Self {
if yes && !self.0.enabled.contains(&Encoding::Gzip) {
self.0.enabled.push(Encoding::Gzip);
}
if !yes {
self.0.enabled.retain(|e| *e != Encoding::Gzip);
}
self
}
pub fn enable_brotli(mut self, yes: bool) -> Self {
if yes && !self.0.enabled.contains(&Encoding::Brotli) {
self.0.enabled.push(Encoding::Brotli);
}
if !yes {
self.0.enabled.retain(|e| *e != Encoding::Brotli);
}
self
}
pub fn enable_deflate(mut self, yes: bool) -> Self {
if yes && !self.0.enabled.contains(&Encoding::Deflate) {
self.0.enabled.push(Encoding::Deflate);
}
if !yes {
self.0.enabled.retain(|e| *e != Encoding::Deflate);
}
self
}
#[cfg(feature = "zstd")]
#[cfg_attr(docsrs, doc(cfg(feature = "zstd")))]
pub fn enable_zstd(mut self, yes: bool) -> Self {
if yes && !self.0.enabled.contains(&Encoding::Zstd) {
self.0.enabled.push(Encoding::Zstd);
}
if !yes {
self.0.enabled.retain(|e| *e != Encoding::Zstd);
}
self
}
pub fn enable_stream(mut self, stream: bool) -> Self {
self.0.stream = stream;
self
}
pub fn min_size(mut self, bytes: usize) -> Self {
self.0.min_size = bytes;
self
}
pub fn content_types(mut self, policy: ContentTypePolicy) -> Self {
self.0.content_types = policy;
self
}
pub fn gzip_level(mut self, lvl: u32) -> Self {
self.0.gzip_level = lvl.min(9);
self
}
pub fn brotli_level(mut self, lvl: u32) -> Self {
self.0.brotli_level = lvl.min(11);
self
}
pub fn deflate_level(mut self, lvl: u32) -> Self {
self.0.deflate_level = lvl.min(9);
self
}
#[cfg(feature = "zstd")]
#[cfg_attr(docsrs, doc(cfg(feature = "zstd")))]
pub fn zstd_level(mut self, lvl: i32) -> Self {
self.0.zstd_level = lvl.clamp(1, 22);
self
}
pub fn protect_sensitive(mut self, on: bool) -> Self {
self.0.protect_sensitive = on;
self
}
pub fn build(self) -> CompressionPlugin {
CompressionPlugin { cfg: self.0 }
}
}