Loading aws/rust-runtime/aws-config/external-types.toml +3 −2 Original line number Diff line number Diff line Loading @@ -16,8 +16,9 @@ allowed_external_types = [ "aws_smithy_types::retry", "aws_smithy_types::retry::*", "aws_smithy_types::timeout", "aws_smithy_types::timeout::config::TimeoutConfig", "aws_smithy_types::timeout::error::ConfigError", "aws_smithy_types::timeout::OperationTimeoutConfig", "aws_smithy_types::timeout::TimeoutConfig", "aws_smithy_types::timeout::TimeoutConfigBuilder", "aws_types::*", "http::response::Response", "http::uri::Uri", Loading aws/rust-runtime/aws-config/src/default_provider.rs +5 −2 Original line number Diff line number Diff line Loading @@ -3,8 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ //! Default Provider chains for [`region`](default_provider::region), [`credentials`](default_provider::credentials), //! [retries](default_provider::retry_config), [timeouts](default_provider::timeout_config) and [app name](default_provider::app_name). //! Providers that implement the default AWS provider chain //! //! Default Provider chains for [`region`](crate::default_provider::region), [`credentials`](crate::default_provider::credentials), //! [retries](crate::default_provider::retry_config), [timeouts](crate::default_provider::timeout_config) and //! [app name](crate::default_provider::app_name). //! //! Typically, this module is used via [`load_from_env`](crate::load_from_env) or [`from_env`](crate::from_env). It should only be used directly //! if you need to set custom configuration options to override the default resolution chain. Loading aws/rust-runtime/aws-config/src/default_provider/retry_config.rs +4 −4 Original line number Diff line number Diff line Loading @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ use aws_smithy_types::retry::RetryConfig; use crate::environment::retry_config::EnvironmentVariableRetryConfigProvider; use crate::profile; use crate::provider_config::ProviderConfig; use aws_smithy_types::error::display::DisplayErrorContext; use aws_smithy_types::retry::RetryConfig; /// Default RetryConfig Provider chain /// Loading Loading @@ -90,11 +90,11 @@ impl Builder { // We match this instead of unwrapping so we can print the error with the `Display` impl instead of the `Debug` impl that unwrap uses let builder_from_env = match self.env_provider.retry_config_builder() { Ok(retry_config_builder) => retry_config_builder, Err(err) => panic!("{}", err), Err(err) => panic!("{}", DisplayErrorContext(&err)), }; let builder_from_profile = match self.profile_file.build().retry_config_builder().await { Ok(retry_config_builder) => retry_config_builder, Err(err) => panic!("{}", err), Err(err) => panic!("{}", DisplayErrorContext(&err)), }; builder_from_env Loading aws/rust-runtime/aws-config/src/environment/mod.rs +2 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ * SPDX-License-Identifier: Apache-2.0 */ //! Providers that load configuration from environment variables /// Load app name from the environment pub mod app_name; pub use app_name::EnvironmentVariableAppNameProvider; Loading aws/rust-runtime/aws-config/src/environment/retry_config.rs +24 −15 Original line number Diff line number Diff line Loading @@ -3,10 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ use std::str::FromStr; use aws_smithy_types::retry::{RetryConfigBuilder, RetryConfigErr, RetryMode}; use crate::retry::{ error::RetryConfigError, error::RetryConfigErrorKind, RetryConfigBuilder, RetryMode, }; use aws_types::os_shim_internal::Env; use std::str::FromStr; const ENV_VAR_MAX_ATTEMPTS: &str = "AWS_MAX_ATTEMPTS"; const ENV_VAR_RETRY_MODE: &str = "AWS_RETRY_MODE"; Loading Loading @@ -35,20 +36,22 @@ impl EnvironmentVariableRetryConfigProvider { } /// Attempt to create a new `RetryConfig` from environment variables pub fn retry_config_builder(&self) -> Result<RetryConfigBuilder, RetryConfigErr> { pub fn retry_config_builder(&self) -> Result<RetryConfigBuilder, RetryConfigError> { let max_attempts = match self.env.get(ENV_VAR_MAX_ATTEMPTS).ok() { Some(max_attempts) => match max_attempts.parse::<u32>() { Ok(max_attempts) if max_attempts == 0 => { return Err(RetryConfigErr::MaxAttemptsMustNotBeZero { return Err(RetryConfigErrorKind::MaxAttemptsMustNotBeZero { set_by: "environment variable".into(), }); } .into()); } Ok(max_attempts) => Some(max_attempts), Err(source) => { return Err(RetryConfigErr::FailedToParseMaxAttempts { return Err(RetryConfigErrorKind::FailedToParseMaxAttempts { set_by: "environment variable".into(), source, }); } .into()); } }, None => None, Loading @@ -58,10 +61,11 @@ impl EnvironmentVariableRetryConfigProvider { Ok(retry_mode) => match RetryMode::from_str(&retry_mode) { Ok(retry_mode) => Some(retry_mode), Err(retry_mode_err) => { return Err(RetryConfigErr::InvalidRetryMode { return Err(RetryConfigErrorKind::InvalidRetryMode { set_by: "environment variable".into(), source: retry_mode_err, }); } .into()); } }, Err(_) => None, Loading @@ -78,10 +82,11 @@ impl EnvironmentVariableRetryConfigProvider { #[cfg(test)] mod test { use aws_smithy_types::retry::{RetryConfig, RetryConfigErr, RetryMode}; use aws_types::os_shim_internal::Env; use super::{EnvironmentVariableRetryConfigProvider, ENV_VAR_MAX_ATTEMPTS, ENV_VAR_RETRY_MODE}; use crate::retry::{ error::RetryConfigError, error::RetryConfigErrorKind, RetryConfig, RetryMode, }; use aws_types::os_shim_internal::Env; fn test_provider(vars: &[(&str, &str)]) -> EnvironmentVariableRetryConfigProvider { EnvironmentVariableRetryConfigProvider::new_with_env(Env::from_slice(vars)) Loading Loading @@ -112,7 +117,9 @@ mod test { test_provider(&[(ENV_VAR_MAX_ATTEMPTS, "not an integer")]) .retry_config_builder() .unwrap_err(), RetryConfigErr::FailedToParseMaxAttempts { .. } RetryConfigError { kind: RetryConfigErrorKind::FailedToParseMaxAttempts { .. } } )); } Loading Loading @@ -148,7 +155,9 @@ mod test { .unwrap_err(); assert!(matches!( err, RetryConfigErr::MaxAttemptsMustNotBeZero { .. } RetryConfigError { kind: RetryConfigErrorKind::MaxAttemptsMustNotBeZero { .. } } )); } } Loading
aws/rust-runtime/aws-config/external-types.toml +3 −2 Original line number Diff line number Diff line Loading @@ -16,8 +16,9 @@ allowed_external_types = [ "aws_smithy_types::retry", "aws_smithy_types::retry::*", "aws_smithy_types::timeout", "aws_smithy_types::timeout::config::TimeoutConfig", "aws_smithy_types::timeout::error::ConfigError", "aws_smithy_types::timeout::OperationTimeoutConfig", "aws_smithy_types::timeout::TimeoutConfig", "aws_smithy_types::timeout::TimeoutConfigBuilder", "aws_types::*", "http::response::Response", "http::uri::Uri", Loading
aws/rust-runtime/aws-config/src/default_provider.rs +5 −2 Original line number Diff line number Diff line Loading @@ -3,8 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ //! Default Provider chains for [`region`](default_provider::region), [`credentials`](default_provider::credentials), //! [retries](default_provider::retry_config), [timeouts](default_provider::timeout_config) and [app name](default_provider::app_name). //! Providers that implement the default AWS provider chain //! //! Default Provider chains for [`region`](crate::default_provider::region), [`credentials`](crate::default_provider::credentials), //! [retries](crate::default_provider::retry_config), [timeouts](crate::default_provider::timeout_config) and //! [app name](crate::default_provider::app_name). //! //! Typically, this module is used via [`load_from_env`](crate::load_from_env) or [`from_env`](crate::from_env). It should only be used directly //! if you need to set custom configuration options to override the default resolution chain. Loading
aws/rust-runtime/aws-config/src/default_provider/retry_config.rs +4 −4 Original line number Diff line number Diff line Loading @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ use aws_smithy_types::retry::RetryConfig; use crate::environment::retry_config::EnvironmentVariableRetryConfigProvider; use crate::profile; use crate::provider_config::ProviderConfig; use aws_smithy_types::error::display::DisplayErrorContext; use aws_smithy_types::retry::RetryConfig; /// Default RetryConfig Provider chain /// Loading Loading @@ -90,11 +90,11 @@ impl Builder { // We match this instead of unwrapping so we can print the error with the `Display` impl instead of the `Debug` impl that unwrap uses let builder_from_env = match self.env_provider.retry_config_builder() { Ok(retry_config_builder) => retry_config_builder, Err(err) => panic!("{}", err), Err(err) => panic!("{}", DisplayErrorContext(&err)), }; let builder_from_profile = match self.profile_file.build().retry_config_builder().await { Ok(retry_config_builder) => retry_config_builder, Err(err) => panic!("{}", err), Err(err) => panic!("{}", DisplayErrorContext(&err)), }; builder_from_env Loading
aws/rust-runtime/aws-config/src/environment/mod.rs +2 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ * SPDX-License-Identifier: Apache-2.0 */ //! Providers that load configuration from environment variables /// Load app name from the environment pub mod app_name; pub use app_name::EnvironmentVariableAppNameProvider; Loading
aws/rust-runtime/aws-config/src/environment/retry_config.rs +24 −15 Original line number Diff line number Diff line Loading @@ -3,10 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ use std::str::FromStr; use aws_smithy_types::retry::{RetryConfigBuilder, RetryConfigErr, RetryMode}; use crate::retry::{ error::RetryConfigError, error::RetryConfigErrorKind, RetryConfigBuilder, RetryMode, }; use aws_types::os_shim_internal::Env; use std::str::FromStr; const ENV_VAR_MAX_ATTEMPTS: &str = "AWS_MAX_ATTEMPTS"; const ENV_VAR_RETRY_MODE: &str = "AWS_RETRY_MODE"; Loading Loading @@ -35,20 +36,22 @@ impl EnvironmentVariableRetryConfigProvider { } /// Attempt to create a new `RetryConfig` from environment variables pub fn retry_config_builder(&self) -> Result<RetryConfigBuilder, RetryConfigErr> { pub fn retry_config_builder(&self) -> Result<RetryConfigBuilder, RetryConfigError> { let max_attempts = match self.env.get(ENV_VAR_MAX_ATTEMPTS).ok() { Some(max_attempts) => match max_attempts.parse::<u32>() { Ok(max_attempts) if max_attempts == 0 => { return Err(RetryConfigErr::MaxAttemptsMustNotBeZero { return Err(RetryConfigErrorKind::MaxAttemptsMustNotBeZero { set_by: "environment variable".into(), }); } .into()); } Ok(max_attempts) => Some(max_attempts), Err(source) => { return Err(RetryConfigErr::FailedToParseMaxAttempts { return Err(RetryConfigErrorKind::FailedToParseMaxAttempts { set_by: "environment variable".into(), source, }); } .into()); } }, None => None, Loading @@ -58,10 +61,11 @@ impl EnvironmentVariableRetryConfigProvider { Ok(retry_mode) => match RetryMode::from_str(&retry_mode) { Ok(retry_mode) => Some(retry_mode), Err(retry_mode_err) => { return Err(RetryConfigErr::InvalidRetryMode { return Err(RetryConfigErrorKind::InvalidRetryMode { set_by: "environment variable".into(), source: retry_mode_err, }); } .into()); } }, Err(_) => None, Loading @@ -78,10 +82,11 @@ impl EnvironmentVariableRetryConfigProvider { #[cfg(test)] mod test { use aws_smithy_types::retry::{RetryConfig, RetryConfigErr, RetryMode}; use aws_types::os_shim_internal::Env; use super::{EnvironmentVariableRetryConfigProvider, ENV_VAR_MAX_ATTEMPTS, ENV_VAR_RETRY_MODE}; use crate::retry::{ error::RetryConfigError, error::RetryConfigErrorKind, RetryConfig, RetryMode, }; use aws_types::os_shim_internal::Env; fn test_provider(vars: &[(&str, &str)]) -> EnvironmentVariableRetryConfigProvider { EnvironmentVariableRetryConfigProvider::new_with_env(Env::from_slice(vars)) Loading Loading @@ -112,7 +117,9 @@ mod test { test_provider(&[(ENV_VAR_MAX_ATTEMPTS, "not an integer")]) .retry_config_builder() .unwrap_err(), RetryConfigErr::FailedToParseMaxAttempts { .. } RetryConfigError { kind: RetryConfigErrorKind::FailedToParseMaxAttempts { .. } } )); } Loading Loading @@ -148,7 +155,9 @@ mod test { .unwrap_err(); assert!(matches!( err, RetryConfigErr::MaxAttemptsMustNotBeZero { .. } RetryConfigError { kind: RetryConfigErrorKind::MaxAttemptsMustNotBeZero { .. } } )); } }