1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#![deny(missing_docs)]
//! AWS Shared Config
//!
//! This module contains an shared configuration representation that is agnostic from a specific service.
use aws_smithy_types::retry::RetryConfig;
use crate::credentials::SharedCredentialsProvider;
use crate::region::Region;
/// AWS Shared Configuration
pub struct Config {
region: Option<Region>,
retry_config: Option<RetryConfig>,
credentials_provider: Option<SharedCredentialsProvider>,
}
/// Builder for AWS Shared Configuration
#[derive(Default)]
pub struct Builder {
region: Option<Region>,
retry_config: Option<RetryConfig>,
credentials_provider: Option<SharedCredentialsProvider>,
}
impl Builder {
/// Set the region for the builder
///
/// # Examples
/// ```rust
/// use aws_types::config::Config;
/// use aws_types::region::Region;
/// let config = Config::builder().region(Region::new("us-east-1")).build();
/// ```
pub fn region(mut self, region: impl Into<Option<Region>>) -> Self {
self.set_region(region);
self
}
/// Set the region for the builder
///
/// # Examples
/// ```rust
/// fn region_override() -> Option<Region> {
/// // ...
/// # None
/// }
/// use aws_types::config::Config;
/// use aws_types::region::Region;
/// let mut builder = Config::builder();
/// if let Some(region) = region_override() {
/// builder.set_region(region);
/// }
/// let config = builder.build();
/// ```
pub fn set_region(&mut self, region: impl Into<Option<Region>>) -> &mut Self {
self.region = region.into();
self
}
/// Set the retry_config for the builder
///
/// # Examples
/// ```rust
/// use aws_types::config::Config;
/// use aws_smithy_types::retry::RetryConfig;
///
/// let retry_config = RetryConfig::new().with_max_attempts(5);
/// let config = Config::builder().retry_config(retry_config).build();
/// ```
pub fn retry_config(mut self, retry_config: RetryConfig) -> Self {
self.set_retry_config(Some(retry_config));
self
}
/// Set the retry_config for the builder
///
/// # Examples
/// ```rust
/// use aws_types::config::{Config, Builder};
/// use aws_smithy_types::retry::RetryConfig;
///
/// fn disable_retries(builder: &mut Builder) {
/// let retry_config = RetryConfig::new().with_max_attempts(1);
/// builder.set_retry_config(Some(retry_config));
/// }
///
/// let mut builder = Config::builder();
/// disable_retries(&mut builder);
/// let config = builder.build();
/// ```
pub fn set_retry_config(&mut self, retry_config: Option<RetryConfig>) -> &mut Self {
self.retry_config = retry_config;
self
}
/// Set the credentials provider for the builder
///
/// # Examples
/// ```rust
/// use aws_types::credentials::{ProvideCredentials, SharedCredentialsProvider};
/// use aws_types::config::Config;
/// fn make_provider() -> impl ProvideCredentials {
/// // ...
/// # use aws_types::Credentials;
/// # Credentials::from_keys("test", "test", None)
/// }
///
/// let config = Config::builder()
/// .credentials_provider(SharedCredentialsProvider::new(make_provider()))
/// .build();
/// ```
pub fn credentials_provider(mut self, provider: SharedCredentialsProvider) -> Self {
self.set_credentials_provider(Some(provider));
self
}
/// Set the credentials provider for the builder
///
/// # Examples
/// ```rust
/// use aws_types::credentials::{ProvideCredentials, SharedCredentialsProvider};
/// use aws_types::config::Config;
/// fn make_provider() -> impl ProvideCredentials {
/// // ...
/// # use aws_types::Credentials;
/// # Credentials::from_keys("test", "test", None)
/// }
///
/// fn override_provider() -> bool {
/// // ...
/// # true
/// }
///
/// let mut builder = Config::builder();
/// if override_provider() {
/// builder.set_credentials_provider(Some(SharedCredentialsProvider::new(make_provider())));
/// }
/// let config = builder.build();
/// ```
pub fn set_credentials_provider(
&mut self,
provider: Option<SharedCredentialsProvider>,
) -> &mut Self {
self.credentials_provider = provider;
self
}
/// Build a [`Config`](Config) from this builder
pub fn build(self) -> Config {
Config {
region: self.region,
retry_config: self.retry_config,
credentials_provider: self.credentials_provider,
}
}
}
impl Config {
/// Configured region
pub fn region(&self) -> Option<&Region> {
self.region.as_ref()
}
/// Configured retry config
pub fn retry_config(&self) -> Option<&RetryConfig> {
self.retry_config.as_ref()
}
/// Configured credentials provider
pub fn credentials_provider(&self) -> Option<&SharedCredentialsProvider> {
self.credentials_provider.as_ref()
}
/// Config builder
pub fn builder() -> Builder {
Builder::default()
}
}