aws_config/default_provider/
disable_request_compression.rs

1/*
2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6use crate::environment::parse_bool;
7use crate::provider_config::ProviderConfig;
8use aws_runtime::env_config::EnvConfigValue;
9use aws_smithy_types::error::display::DisplayErrorContext;
10
11mod env {
12    pub(super) const DISABLE_REQUEST_COMPRESSION: &str = "AWS_DISABLE_REQUEST_COMPRESSION";
13}
14
15mod profile_key {
16    pub(super) const DISABLE_REQUEST_COMPRESSION: &str = "disable_request_compression";
17}
18
19/// Load the value for "disable request compression".
20///
21/// This checks the following sources:
22/// 1. The environment variable `AWS_DISABLE_REQUEST_COMPRESSION=true/false`
23/// 2. The profile key `disable_request_compression=true/false`
24///
25/// If invalid values are found, the provider will return None and an error will be logged.
26pub(crate) async fn disable_request_compression_provider(
27    provider_config: &ProviderConfig,
28) -> Option<bool> {
29    let env = provider_config.env();
30    let profiles = provider_config.profile().await;
31
32    EnvConfigValue::new()
33        .env(env::DISABLE_REQUEST_COMPRESSION)
34        .profile(profile_key::DISABLE_REQUEST_COMPRESSION)
35        .validate(&env, profiles, parse_bool)
36        .map_err(
37            |err| tracing::warn!(err = %DisplayErrorContext(&err), "invalid value for `disable request compression` setting"),
38        )
39        .unwrap_or(None)
40}
41
42#[cfg(test)]
43mod test {
44    use super::disable_request_compression_provider;
45    #[allow(deprecated)]
46    use crate::profile::profile_file::{ProfileFileKind, ProfileFiles};
47    use crate::provider_config::ProviderConfig;
48    use aws_types::os_shim_internal::{Env, Fs};
49    use tracing_test::traced_test;
50
51    #[tokio::test]
52    #[traced_test]
53    async fn log_error_on_invalid_value() {
54        let conf = ProviderConfig::empty().with_env(Env::from_slice(&[(
55            "AWS_DISABLE_REQUEST_COMPRESSION",
56            "not-a-boolean",
57        )]));
58        assert_eq!(disable_request_compression_provider(&conf).await, None);
59        assert!(logs_contain(
60            "invalid value for `disable request compression` setting"
61        ));
62        assert!(logs_contain("AWS_DISABLE_REQUEST_COMPRESSION"));
63    }
64
65    #[tokio::test]
66    #[traced_test]
67    async fn environment_priority() {
68        let conf = ProviderConfig::empty()
69            .with_env(Env::from_slice(&[(
70                "AWS_DISABLE_REQUEST_COMPRESSION",
71                "TRUE",
72            )]))
73            .with_profile_config(
74                Some(
75                    #[allow(deprecated)]
76                    ProfileFiles::builder()
77                        .with_file(
78                            #[allow(deprecated)]
79                            ProfileFileKind::Config,
80                            "conf",
81                        )
82                        .build(),
83                ),
84                None,
85            )
86            .with_fs(Fs::from_slice(&[(
87                "conf",
88                "[default]\ndisable_request_compression = false",
89            )]));
90        assert_eq!(
91            disable_request_compression_provider(&conf).await,
92            Some(true)
93        );
94    }
95
96    #[tokio::test]
97    #[traced_test]
98    async fn profile_config_works() {
99        let conf = ProviderConfig::empty()
100            .with_profile_config(
101                Some(
102                    #[allow(deprecated)]
103                    ProfileFiles::builder()
104                        .with_file(
105                            #[allow(deprecated)]
106                            ProfileFileKind::Config,
107                            "conf",
108                        )
109                        .build(),
110                ),
111                None,
112            )
113            .with_fs(Fs::from_slice(&[(
114                "conf",
115                "[default]\ndisable_request_compression = true",
116            )]));
117        assert_eq!(
118            disable_request_compression_provider(&conf).await,
119            Some(true)
120        );
121    }
122}