#![deny(missing_docs)]
use std::sync::Arc;
use aws_smithy_async::rt::sleep::AsyncSleep;
use aws_smithy_types::retry::RetryConfig;
use aws_smithy_types::timeout::TimeoutConfig;
use crate::app_name::AppName;
use crate::credentials::SharedCredentialsProvider;
use crate::region::Region;
#[derive(Debug)]
pub struct Config {
app_name: Option<AppName>,
credentials_provider: Option<SharedCredentialsProvider>,
region: Option<Region>,
retry_config: Option<RetryConfig>,
sleep_impl: Option<Arc<dyn AsyncSleep>>,
timeout_config: Option<TimeoutConfig>,
}
#[derive(Debug, Default)]
pub struct Builder {
app_name: Option<AppName>,
credentials_provider: Option<SharedCredentialsProvider>,
region: Option<Region>,
retry_config: Option<RetryConfig>,
sleep_impl: Option<Arc<dyn AsyncSleep>>,
timeout_config: Option<TimeoutConfig>,
}
impl Builder {
pub fn region(mut self, region: impl Into<Option<Region>>) -> Self {
self.set_region(region);
self
}
pub fn set_region(&mut self, region: impl Into<Option<Region>>) -> &mut Self {
self.region = region.into();
self
}
pub fn retry_config(mut self, retry_config: RetryConfig) -> Self {
self.set_retry_config(Some(retry_config));
self
}
pub fn set_retry_config(&mut self, retry_config: Option<RetryConfig>) -> &mut Self {
self.retry_config = retry_config;
self
}
pub fn timeout_config(mut self, timeout_config: TimeoutConfig) -> Self {
self.set_timeout_config(Some(timeout_config));
self
}
pub fn set_timeout_config(&mut self, timeout_config: Option<TimeoutConfig>) -> &mut Self {
self.timeout_config = timeout_config;
self
}
#[doc(hidden)]
pub fn sleep_impl(mut self, sleep_impl: Arc<dyn AsyncSleep>) -> Self {
self.set_sleep_impl(Some(sleep_impl));
self
}
#[doc(hidden)]
pub fn set_sleep_impl(&mut self, sleep_impl: Option<Arc<dyn AsyncSleep>>) -> &mut Self {
self.sleep_impl = sleep_impl;
self
}
pub fn credentials_provider(mut self, provider: SharedCredentialsProvider) -> Self {
self.set_credentials_provider(Some(provider));
self
}
pub fn set_credentials_provider(
&mut self,
provider: Option<SharedCredentialsProvider>,
) -> &mut Self {
self.credentials_provider = provider;
self
}
pub fn app_name(mut self, app_name: AppName) -> Self {
self.set_app_name(Some(app_name));
self
}
pub fn set_app_name(&mut self, app_name: Option<AppName>) -> &mut Self {
self.app_name = app_name;
self
}
pub fn build(self) -> Config {
Config {
app_name: self.app_name,
credentials_provider: self.credentials_provider,
region: self.region,
retry_config: self.retry_config,
sleep_impl: self.sleep_impl,
timeout_config: self.timeout_config,
}
}
}
impl Config {
pub fn region(&self) -> Option<&Region> {
self.region.as_ref()
}
pub fn retry_config(&self) -> Option<&RetryConfig> {
self.retry_config.as_ref()
}
pub fn timeout_config(&self) -> Option<&TimeoutConfig> {
self.timeout_config.as_ref()
}
#[doc(hidden)]
pub fn sleep_impl(&self) -> Option<Arc<dyn AsyncSleep>> {
self.sleep_impl.clone()
}
pub fn credentials_provider(&self) -> Option<&SharedCredentialsProvider> {
self.credentials_provider.as_ref()
}
pub fn app_name(&self) -> Option<&AppName> {
self.app_name.as_ref()
}
pub fn builder() -> Builder {
Builder::default()
}
}