1 - | // Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
|
2 - | /*
|
3 - | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 - | * SPDX-License-Identifier: Apache-2.0
|
5 - | */
|
6 - |
|
7 - | #![allow(dead_code)]
|
8 - |
|
9 - | use aws_smithy_http::header::set_request_header_if_absent;
|
10 - | use aws_smithy_types::config_bag::{Storable, StoreReplace};
|
11 - | use http_1x::header::{HeaderName, CONTENT_LENGTH, CONTENT_TYPE};
|
12 - |
|
13 - | /// Configuration for how default protocol headers are serialized
|
14 - | #[derive(Clone, Debug, Default)]
|
15 - | pub(crate) struct HeaderSerializationSettings {
|
16 - | omit_default_content_length: bool,
|
17 - | omit_default_content_type: bool,
|
18 - | }
|
19 - |
|
20 - | impl HeaderSerializationSettings {
|
21 - | /// Creates new [`HeaderSerializationSettings`]
|
22 - | pub(crate) fn new() -> Self {
|
23 - | Default::default()
|
24 - | }
|
25 - |
|
26 - | /// Omit the default `Content-Length` header during serialization
|
27 - | pub(crate) fn omit_default_content_length(self) -> Self {
|
28 - | Self {
|
29 - | omit_default_content_length: true,
|
30 - | ..self
|
31 - | }
|
32 - | }
|
33 - |
|
34 - | /// Omit the default `Content-Type` header during serialization
|
35 - | pub(crate) fn omit_default_content_type(self) -> Self {
|
36 - | Self {
|
37 - | omit_default_content_type: true,
|
38 - | ..self
|
39 - | }
|
40 - | }
|
41 - |
|
42 - | /// Returns true if the given default header name should be serialized
|
43 - | 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 - | /// Sets a default header on the given request builder if it should be serialized
|
48 - | 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 - |
|
61 - | impl Storable for HeaderSerializationSettings {
|
62 - | type Storer = StoreReplace<Self>;
|
63 - | }
|
64 - |
|
65 - | #[cfg(test)]
|
66 - | mod 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 - | }
|