use super::Compression;
use crate::compression_utils::AcceptEncoding;
use tower_layer::Layer;
#[derive(Clone, Debug, Default)]
pub struct CompressionLayer {
_priv: (),
accept: AcceptEncoding,
}
impl<S> Layer<S> for CompressionLayer {
type Service = Compression<S>;
fn layer(&self, inner: S) -> Self::Service {
Compression::new(inner)
}
}
impl CompressionLayer {
pub fn new() -> Self {
Self::default()
}
#[cfg(feature = "compression-gzip")]
#[cfg_attr(docsrs, doc(cfg(feature = "compression-gzip")))]
pub fn gzip(self, enable: bool) -> Self {
self.accept.set_gzip(enable);
self
}
#[cfg(feature = "compression-deflate")]
#[cfg_attr(docsrs, doc(cfg(feature = "compression-deflate")))]
pub fn deflate(self, enable: bool) -> Self {
self.accept.set_deflate(enable);
self
}
#[cfg(feature = "compression-br")]
#[cfg_attr(docsrs, doc(cfg(feature = "compression-br")))]
pub fn br(self, enable: bool) -> Self {
self.accept.set_br(enable);
self
}
pub fn no_gzip(self) -> Self {
self.accept.set_gzip(false);
self
}
pub fn no_deflate(self) -> Self {
self.accept.set_deflate(false);
self
}
pub fn no_br(self) -> Self {
self.accept.set_br(false);
self
}
}