aws_sdk_accessanalyzer/
serialization_settings.rs1#![allow(dead_code)]
8
9use aws_smithy_http::header::set_request_header_if_absent;
10use aws_smithy_types::config_bag::{Storable, StoreReplace};
11use http_1x::header::{HeaderName, CONTENT_LENGTH, CONTENT_TYPE};
12
13#[derive(Clone, Debug, Default)]
15pub(crate) struct HeaderSerializationSettings {
16 omit_default_content_length: bool,
17 omit_default_content_type: bool,
18}
19
20impl HeaderSerializationSettings {
21 pub(crate) fn new() -> Self {
23 Default::default()
24 }
25
26 pub(crate) fn omit_default_content_length(self) -> Self {
28 Self {
29 omit_default_content_length: true,
30 ..self
31 }
32 }
33
34 pub(crate) fn omit_default_content_type(self) -> Self {
36 Self {
37 omit_default_content_type: true,
38 ..self
39 }
40 }
41
42 fn include_header(&self, header: &HeaderName) -> bool {
44 (!self.omit_default_content_length || header != CONTENT_LENGTH) && (!self.omit_default_content_type || header != CONTENT_TYPE)
45 }
46
47 pub(crate) fn set_default_header(
49 &self,
50 mut request: http_1x::request::Builder,
51 header_name: HeaderName,
52 value: &str,
53 ) -> http_1x::request::Builder {
54 if self.include_header(&header_name) {
55 request = set_request_header_if_absent(request, header_name, value);
56 }
57 request
58 }
59}
60
61impl Storable for HeaderSerializationSettings {
62 type Storer = StoreReplace<Self>;
63}
64
65#[cfg(test)]
66mod tests {
67 use super::*;
68
69 #[test]
70 fn test_include_header() {
71 let settings = HeaderSerializationSettings::default();
72 assert!(settings.include_header(&CONTENT_LENGTH));
73 assert!(settings.include_header(&CONTENT_TYPE));
74
75 let settings = HeaderSerializationSettings::default().omit_default_content_length();
76 assert!(!settings.include_header(&CONTENT_LENGTH));
77 assert!(settings.include_header(&CONTENT_TYPE));
78
79 let settings = HeaderSerializationSettings::default().omit_default_content_type();
80 assert!(settings.include_header(&CONTENT_LENGTH));
81 assert!(!settings.include_header(&CONTENT_TYPE));
82
83 let settings = HeaderSerializationSettings::default()
84 .omit_default_content_type()
85 .omit_default_content_length();
86 assert!(!settings.include_header(&CONTENT_LENGTH));
87 assert!(!settings.include_header(&CONTENT_TYPE));
88 }
89}