rama_http_headers/encoding/
accept_encoding.rs

1use 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}