aws_sdk_sts/
serialization_settings.rs

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
9use aws_smithy_http::header::set_request_header_if_absent;
10use aws_smithy_types::config_bag::{Storable, StoreReplace};
11use http::header::{HeaderName, CONTENT_LENGTH, CONTENT_TYPE};
12
13/// Configuration for how default protocol headers are serialized
14#[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    /// 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(&self, mut request: http::request::Builder, header_name: HeaderName, value: &str) -> http::request::Builder {
49        if self.include_header(&header_name) {
50            request = set_request_header_if_absent(request, header_name, value);
51        }
52        request
53    }
54}
55
56impl Storable for HeaderSerializationSettings {
57    type Storer = StoreReplace<Self>;
58}
59
60#[cfg(test)]
61mod tests {
62    use super::*;
63
64    #[test]
65    fn test_include_header() {
66        let settings = HeaderSerializationSettings::default();
67        assert!(settings.include_header(&CONTENT_LENGTH));
68        assert!(settings.include_header(&CONTENT_TYPE));
69
70        let settings = HeaderSerializationSettings::default().omit_default_content_length();
71        assert!(!settings.include_header(&CONTENT_LENGTH));
72        assert!(settings.include_header(&CONTENT_TYPE));
73
74        let settings = HeaderSerializationSettings::default().omit_default_content_type();
75        assert!(settings.include_header(&CONTENT_LENGTH));
76        assert!(!settings.include_header(&CONTENT_TYPE));
77
78        let settings = HeaderSerializationSettings::default()
79            .omit_default_content_type()
80            .omit_default_content_length();
81        assert!(!settings.include_header(&CONTENT_LENGTH));
82        assert!(!settings.include_header(&CONTENT_TYPE));
83    }
84}