use aws_smithy_types::retry::RetryConfig;
use crate::environment::retry_config::EnvironmentVariableRetryConfigProvider;
use crate::profile;
use crate::provider_config::ProviderConfig;
pub fn default_provider() -> Builder {
Builder::default()
}
#[derive(Debug, Default)]
pub struct Builder {
env_provider: EnvironmentVariableRetryConfigProvider,
profile_file: profile::retry_config::Builder,
}
impl Builder {
pub fn configure(mut self, configuration: &ProviderConfig) -> Self {
self.env_provider =
EnvironmentVariableRetryConfigProvider::new_with_env(configuration.env());
self.profile_file = self.profile_file.configure(configuration);
self
}
pub fn profile_name(mut self, name: &str) -> Self {
self.profile_file = self.profile_file.profile_name(name);
self
}
pub async fn retry_config(self) -> RetryConfig {
let builder_from_env = match self.env_provider.retry_config_builder() {
Ok(retry_config_builder) => retry_config_builder,
Err(err) => panic!("{}", 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),
};
builder_from_env
.take_unset_from(builder_from_profile)
.build()
}
}