aws_config/default_provider/
disable_request_compression.rs
1use 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
19pub(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}