rama_http_headers/encoding/
accept_encoding.rs1use super::SupportedEncodings;
2use rama_http_types::HeaderValue;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub struct AcceptEncoding {
6 gzip: bool,
7 deflate: bool,
8 br: bool,
9 zstd: bool,
10}
11
12impl AcceptEncoding {
13 pub fn maybe_to_header_value(self) -> Option<HeaderValue> {
14 let accept = match (self.gzip(), self.deflate(), self.br(), self.zstd()) {
15 (true, true, true, false) => "gzip,deflate,br",
16 (true, true, false, false) => "gzip,deflate",
17 (true, false, true, false) => "gzip,br",
18 (true, false, false, false) => "gzip",
19 (false, true, true, false) => "deflate,br",
20 (false, true, false, false) => "deflate",
21 (false, false, true, false) => "br",
22 (true, true, true, true) => "zstd,gzip,deflate,br",
23 (true, true, false, true) => "zstd,gzip,deflate",
24 (true, false, true, true) => "zstd,gzip,br",
25 (true, false, false, true) => "zstd,gzip",
26 (false, true, true, true) => "zstd,deflate,br",
27 (false, true, false, true) => "zstd,deflate",
28 (false, false, true, true) => "zstd,br",
29 (false, false, false, true) => "zstd",
30 (false, false, false, false) => return None,
31 };
32 Some(HeaderValue::from_static(accept))
33 }
34
35 pub fn set_gzip(&mut self, enable: bool) {
36 self.gzip = enable;
37 }
38
39 pub fn with_gzip(mut self, enable: bool) -> Self {
40 self.gzip = enable;
41 self
42 }
43
44 pub fn set_deflate(&mut self, enable: bool) {
45 self.deflate = enable;
46 }
47
48 pub fn with_deflate(mut self, enable: bool) -> Self {
49 self.deflate = enable;
50 self
51 }
52
53 pub fn set_br(&mut self, enable: bool) {
54 self.br = enable;
55 }
56
57 pub fn with_br(mut self, enable: bool) -> Self {
58 self.br = enable;
59 self
60 }
61
62 pub fn set_zstd(&mut self, enable: bool) {
63 self.zstd = enable;
64 }
65
66 pub fn with_zstd(mut self, enable: bool) -> Self {
67 self.zstd = enable;
68 self
69 }
70}
71
72impl SupportedEncodings for AcceptEncoding {
73 fn gzip(&self) -> bool {
74 self.gzip
75 }
76
77 fn deflate(&self) -> bool {
78 self.deflate
79 }
80
81 fn br(&self) -> bool {
82 self.br
83 }
84
85 fn zstd(&self) -> bool {
86 self.zstd
87 }
88}
89
90impl Default for AcceptEncoding {
91 fn default() -> Self {
92 AcceptEncoding {
93 gzip: true,
94 deflate: true,
95 br: true,
96 zstd: true,
97 }
98 }
99}