rama_http/layer/decompression/
layer.rs1use super::{Decompression, service::DefaultDecompressionMatcher};
2use crate::headers::encoding::AcceptEncoding;
3use rama_core::Layer;
4
5#[derive(Debug, Clone)]
12pub struct DecompressionLayer<M = DefaultDecompressionMatcher> {
13 accept: AcceptEncoding,
14 insert_accept_encoding_header: bool,
15 tolerate_decode_errors: bool,
16 matcher: M,
17}
18
19impl<M: Default> Default for DecompressionLayer<M> {
20 fn default() -> Self {
21 Self {
22 accept: Default::default(),
23 insert_accept_encoding_header: true,
24 tolerate_decode_errors: false,
25 matcher: Default::default(),
26 }
27 }
28}
29
30impl<S, M> Layer<S> for DecompressionLayer<M>
31where
32 M: Clone,
33{
34 type Service = Decompression<S, M>;
35
36 fn layer(&self, service: S) -> Self::Service {
37 Decompression {
38 inner: service,
39 accept: self.accept,
40 insert_accept_encoding_header: self.insert_accept_encoding_header,
41 tolerate_decode_errors: self.tolerate_decode_errors,
42 matcher: self.matcher.clone(),
43 }
44 }
45}
46
47impl DecompressionLayer {
48 #[must_use]
50 pub fn new() -> Self {
51 Default::default()
52 }
53}
54
55impl<M> DecompressionLayer<M> {
56 rama_utils::macros::generate_set_and_with! {
57 pub fn insert_accept_encoding_header(mut self, insert: bool) -> Self {
61 self.insert_accept_encoding_header = insert;
62 self
63 }
64 }
65
66 pub fn with_matcher<T>(self, matcher: T) -> DecompressionLayer<T> {
71 DecompressionLayer {
72 accept: self.accept,
73 insert_accept_encoding_header: self.insert_accept_encoding_header,
74 tolerate_decode_errors: self.tolerate_decode_errors,
75 matcher,
76 }
77 }
78
79 rama_utils::macros::generate_set_and_with! {
80 pub fn tolerate_decode_errors(mut self, tolerate: bool) -> Self {
87 self.tolerate_decode_errors = tolerate;
88 self
89 }
90 }
91
92 rama_utils::macros::generate_set_and_with! {
93 pub fn gzip(mut self, enable: bool) -> Self {
95 self.accept.set_gzip(enable);
96 self
97 }
98 }
99
100 rama_utils::macros::generate_set_and_with! {
101 pub fn deflate(mut self, enable: bool) -> Self {
103 self.accept.set_deflate(enable);
104 self
105 }
106 }
107
108 rama_utils::macros::generate_set_and_with! {
109 pub fn br(mut self, enable: bool) -> Self {
111 self.accept.set_br(enable);
112 self
113 }
114 }
115
116 rama_utils::macros::generate_set_and_with! {
117 pub fn zstd(mut self, enable: bool) -> Self {
119 self.accept.set_zstd(enable);
120 self
121 }
122 }
123}