rama_http_headers/encoding/
accept_encoding.rs1use super::SupportedEncodings;
2use rama_http_types::HeaderValue;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub struct AcceptEncoding {
8 gzip: bool,
9 deflate: bool,
10 br: bool,
11 zstd: bool,
12}
13
14impl AcceptEncoding {
15 #[must_use]
16 pub fn new_gzip() -> Self {
17 Self {
18 gzip: true,
19 deflate: false,
20 br: false,
21 zstd: false,
22 }
23 }
24
25 #[must_use]
26 pub fn new_deflate() -> Self {
27 Self {
28 gzip: false,
29 deflate: true,
30 br: false,
31 zstd: false,
32 }
33 }
34
35 #[must_use]
36 pub fn new_br() -> Self {
37 Self {
38 gzip: false,
39 deflate: false,
40 br: true,
41 zstd: false,
42 }
43 }
44
45 #[must_use]
46 pub fn new_zstd() -> Self {
47 Self {
48 gzip: false,
49 deflate: false,
50 br: false,
51 zstd: true,
52 }
53 }
54
55 #[must_use]
56 pub fn maybe_to_header_value(self) -> Option<HeaderValue> {
57 let accept = match (self.gzip(), self.deflate(), self.br(), self.zstd()) {
58 (true, true, true, false) => "gzip,deflate,br",
59 (true, true, false, false) => "gzip,deflate",
60 (true, false, true, false) => "gzip,br",
61 (true, false, false, false) => "gzip",
62 (false, true, true, false) => "deflate,br",
63 (false, true, false, false) => "deflate",
64 (false, false, true, false) => "br",
65 (true, true, true, true) => "zstd,gzip,deflate,br",
66 (true, true, false, true) => "zstd,gzip,deflate",
67 (true, false, true, true) => "zstd,gzip,br",
68 (true, false, false, true) => "zstd,gzip",
69 (false, true, true, true) => "zstd,deflate,br",
70 (false, true, false, true) => "zstd,deflate",
71 (false, false, true, true) => "zstd,br",
72 (false, false, false, true) => "zstd",
73 (false, false, false, false) => return None,
74 };
75 Some(HeaderValue::from_static(accept))
76 }
77
78 rama_utils::macros::generate_set_and_with! {
79 pub fn gzip(mut self, enable: bool) -> Self {
80 self.gzip = enable;
81 self
82 }
83 }
84
85 rama_utils::macros::generate_set_and_with! {
86 pub fn deflate(mut self, enable: bool) -> Self {
87 self.deflate = enable;
88 self
89 }
90 }
91
92 rama_utils::macros::generate_set_and_with! {
93 pub fn br(mut self, enable: bool) -> Self {
94 self.br = enable;
95 self
96 }
97 }
98
99 rama_utils::macros::generate_set_and_with! {
100 pub fn zstd(mut self, enable: bool) -> Self {
101 self.zstd = enable;
102 self
103 }
104 }
105}
106
107impl SupportedEncodings for AcceptEncoding {
108 fn gzip(&self) -> bool {
109 self.gzip
110 }
111
112 fn deflate(&self) -> bool {
113 self.deflate
114 }
115
116 fn br(&self) -> bool {
117 self.br
118 }
119
120 fn zstd(&self) -> bool {
121 self.zstd
122 }
123}
124
125impl Default for AcceptEncoding {
126 fn default() -> Self {
127 Self {
128 gzip: true,
129 deflate: true,
130 br: true,
131 zstd: true,
132 }
133 }
134}