aws_sdk_sts/operation/
assume_role.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `AssumeRole`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct AssumeRole;
6impl AssumeRole {
7    /// Creates a new `AssumeRole`
8    pub fn new() -> Self {
9        Self
10    }
11    pub(crate) async fn orchestrate(
12        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
13        input: crate::operation::assume_role::AssumeRoleInput,
14    ) -> ::std::result::Result<
15        crate::operation::assume_role::AssumeRoleOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::assume_role::AssumeRoleError,
18            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
19        >,
20    > {
21        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<
22            ::aws_smithy_runtime_api::client::interceptors::context::Error,
23            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
24        >| {
25            err.map_service_error(|err| {
26                err.downcast::<crate::operation::assume_role::AssumeRoleError>()
27                    .expect("correct error type")
28            })
29        };
30        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
31            .await
32            .map_err(map_err)?;
33        let output = context.finalize().map_err(map_err)?;
34        ::std::result::Result::Ok(
35            output
36                .downcast::<crate::operation::assume_role::AssumeRoleOutput>()
37                .expect("correct output type"),
38        )
39    }
40
41    pub(crate) async fn orchestrate_with_stop_point(
42        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
43        input: crate::operation::assume_role::AssumeRoleInput,
44        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
45    ) -> ::std::result::Result<
46        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
47        ::aws_smithy_runtime_api::client::result::SdkError<
48            ::aws_smithy_runtime_api::client::interceptors::context::Error,
49            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
50        >,
51    > {
52        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
53        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("sts", "AssumeRole", input, runtime_plugins, stop_point).await
54    }
55
56    pub(crate) fn operation_runtime_plugins(
57        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
58        client_config: &crate::config::Config,
59        config_override: ::std::option::Option<crate::config::Builder>,
60    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
61        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
62        runtime_plugins = runtime_plugins.with_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
63            ::aws_runtime::auth::sigv4::SCHEME_ID,
64        ]));
65        if let ::std::option::Option::Some(config_override) = config_override {
66            for plugin in config_override.runtime_plugins.iter().cloned() {
67                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
68            }
69            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
70                config_override,
71                client_config.config.clone(),
72                &client_config.runtime_components,
73            ));
74        }
75        runtime_plugins
76    }
77}
78impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for AssumeRole {
79    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
80        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("AssumeRole");
81
82        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
83            AssumeRoleRequestSerializer,
84        ));
85        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
86            AssumeRoleResponseDeserializer,
87        ));
88
89        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
90            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
91        ));
92
93        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::SensitiveOutput);
94        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("AssumeRole", "sts"));
95        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
96        signing_options.double_uri_encode = true;
97        signing_options.content_sha256_header = false;
98        signing_options.normalize_uri_path = true;
99        signing_options.payload_override = None;
100
101        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
102            signing_options,
103            ..::std::default::Default::default()
104        });
105
106        ::std::option::Option::Some(cfg.freeze())
107    }
108
109    fn runtime_components(
110        &self,
111        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
112    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
113        #[allow(unused_mut)]
114        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("AssumeRole")
115            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
116            .with_interceptor(AssumeRoleEndpointParamsInterceptor)
117            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
118                crate::operation::assume_role::AssumeRoleError,
119            >::new())
120            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
121                crate::operation::assume_role::AssumeRoleError,
122            >::new())
123            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
124                crate::operation::assume_role::AssumeRoleError,
125            >::new());
126
127        ::std::borrow::Cow::Owned(rcb)
128    }
129}
130
131#[derive(Debug)]
132struct AssumeRoleResponseDeserializer;
133impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for AssumeRoleResponseDeserializer {
134    fn deserialize_nonstreaming(
135        &self,
136        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
137    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
138        let (success, status) = (response.status().is_success(), response.status().as_u16());
139        let headers = response.headers();
140        let body = response.body().bytes().expect("body loaded");
141        #[allow(unused_mut)]
142        let mut force_error = false;
143        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
144        let parse_result = if !success && status != 200 || force_error {
145            crate::protocol_serde::shape_assume_role::de_assume_role_http_error(status, headers, body)
146        } else {
147            crate::protocol_serde::shape_assume_role::de_assume_role_http_response(status, headers, body)
148        };
149        crate::protocol_serde::type_erase_result(parse_result)
150    }
151}
152#[derive(Debug)]
153struct AssumeRoleRequestSerializer;
154impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for AssumeRoleRequestSerializer {
155    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
156    fn serialize_input(
157        &self,
158        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
159        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
160    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
161        let input = input.downcast::<crate::operation::assume_role::AssumeRoleInput>().expect("correct type");
162        let _header_serialization_settings = _cfg
163            .load::<crate::serialization_settings::HeaderSerializationSettings>()
164            .cloned()
165            .unwrap_or_default();
166        let mut request_builder = {
167            fn uri_base(
168                _input: &crate::operation::assume_role::AssumeRoleInput,
169                output: &mut ::std::string::String,
170            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
171                use ::std::fmt::Write as _;
172                ::std::write!(output, "/").expect("formatting should succeed");
173                ::std::result::Result::Ok(())
174            }
175            #[allow(clippy::unnecessary_wraps)]
176            fn update_http_builder(
177                input: &crate::operation::assume_role::AssumeRoleInput,
178                builder: ::http::request::Builder,
179            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
180                let mut uri = ::std::string::String::new();
181                uri_base(input, &mut uri)?;
182                ::std::result::Result::Ok(builder.method("POST").uri(uri))
183            }
184            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
185            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
186            builder
187        };
188        let body =
189            ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_assume_role_input::ser_assume_role_input_input_input(&input)?);
190        if let Some(content_length) = body.content_length() {
191            let content_length = content_length.to_string();
192            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
193        }
194        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
195    }
196}
197#[derive(Debug)]
198struct AssumeRoleEndpointParamsInterceptor;
199
200impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssumeRoleEndpointParamsInterceptor {
201    fn name(&self) -> &'static str {
202        "AssumeRoleEndpointParamsInterceptor"
203    }
204
205    fn read_before_execution(
206        &self,
207        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
208            '_,
209            ::aws_smithy_runtime_api::client::interceptors::context::Input,
210            ::aws_smithy_runtime_api::client::interceptors::context::Output,
211            ::aws_smithy_runtime_api::client::interceptors::context::Error,
212        >,
213        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
214    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
215        let _input = context
216            .input()
217            .downcast_ref::<AssumeRoleInput>()
218            .ok_or("failed to downcast to AssumeRoleInput")?;
219
220        let params = crate::config::endpoint::Params::builder()
221            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
222            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
223            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
224            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
225            .build()
226            .map_err(|err| {
227                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
228            })?;
229        cfg.interceptor_state()
230            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
231        ::std::result::Result::Ok(())
232    }
233}
234
235// The get_* functions below are generated from JMESPath expressions in the
236// operationContextParams trait. They target the operation's input shape.
237
238/// Error type for the `AssumeRoleError` operation.
239#[non_exhaustive]
240#[derive(::std::fmt::Debug)]
241pub enum AssumeRoleError {
242    /// <p>The web identity token that was passed is expired or is not valid. Get a new identity token from the identity provider and then retry the request.</p>
243    ExpiredTokenException(crate::types::error::ExpiredTokenException),
244    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
245    MalformedPolicyDocumentException(crate::types::error::MalformedPolicyDocumentException),
246    /// <p>The request was rejected because the total packed size of the session policies and session tags combined was too large. An Amazon Web Services conversion compresses the session policy document, session policy ARNs, and session tags into a packed binary format that has a separate limit. The error message indicates by percentage how close the policies and tags are to the upper size limit. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html">Passing Session Tags in STS</a> in the <i>IAM User Guide</i>.</p>
247    /// <p>You could receive this error even though you meet other defined session policy and session tag limits. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-limits-entity-length">IAM and STS Entity Character Limits</a> in the <i>IAM User Guide</i>.</p>
248    PackedPolicyTooLargeException(crate::types::error::PackedPolicyTooLargeException),
249    /// <p>STS is not activated in the requested region for the account that is being asked to generate credentials. The account administrator must use the IAM console to activate STS in that region. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html">Activating and Deactivating STS in an Amazon Web Services Region</a> in the <i>IAM User Guide</i>.</p>
250    RegionDisabledException(crate::types::error::RegionDisabledException),
251    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
252    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
253    variable wildcard pattern and check `.code()`:
254     \
255    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
256     \
257    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-AssumeRoleError) for what information is available for the error.")]
258    Unhandled(crate::error::sealed_unhandled::Unhandled),
259}
260impl AssumeRoleError {
261    /// Creates the `AssumeRoleError::Unhandled` variant from any error type.
262    pub fn unhandled(
263        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
264    ) -> Self {
265        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
266            source: err.into(),
267            meta: ::std::default::Default::default(),
268        })
269    }
270
271    /// Creates the `AssumeRoleError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
272    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
273        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
274            source: err.clone().into(),
275            meta: err,
276        })
277    }
278    ///
279    /// Returns error metadata, which includes the error code, message,
280    /// request ID, and potentially additional information.
281    ///
282    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
283        match self {
284            Self::ExpiredTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
285            Self::MalformedPolicyDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
286            Self::PackedPolicyTooLargeException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
287            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
288            Self::Unhandled(e) => &e.meta,
289        }
290    }
291    /// Returns `true` if the error kind is `AssumeRoleError::ExpiredTokenException`.
292    pub fn is_expired_token_exception(&self) -> bool {
293        matches!(self, Self::ExpiredTokenException(_))
294    }
295    /// Returns `true` if the error kind is `AssumeRoleError::MalformedPolicyDocumentException`.
296    pub fn is_malformed_policy_document_exception(&self) -> bool {
297        matches!(self, Self::MalformedPolicyDocumentException(_))
298    }
299    /// Returns `true` if the error kind is `AssumeRoleError::PackedPolicyTooLargeException`.
300    pub fn is_packed_policy_too_large_exception(&self) -> bool {
301        matches!(self, Self::PackedPolicyTooLargeException(_))
302    }
303    /// Returns `true` if the error kind is `AssumeRoleError::RegionDisabledException`.
304    pub fn is_region_disabled_exception(&self) -> bool {
305        matches!(self, Self::RegionDisabledException(_))
306    }
307}
308impl ::std::error::Error for AssumeRoleError {
309    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
310        match self {
311            Self::ExpiredTokenException(_inner) => ::std::option::Option::Some(_inner),
312            Self::MalformedPolicyDocumentException(_inner) => ::std::option::Option::Some(_inner),
313            Self::PackedPolicyTooLargeException(_inner) => ::std::option::Option::Some(_inner),
314            Self::RegionDisabledException(_inner) => ::std::option::Option::Some(_inner),
315            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
316        }
317    }
318}
319impl ::std::fmt::Display for AssumeRoleError {
320    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
321        match self {
322            Self::ExpiredTokenException(_inner) => _inner.fmt(f),
323            Self::MalformedPolicyDocumentException(_inner) => _inner.fmt(f),
324            Self::PackedPolicyTooLargeException(_inner) => _inner.fmt(f),
325            Self::RegionDisabledException(_inner) => _inner.fmt(f),
326            Self::Unhandled(_inner) => {
327                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
328                    write!(f, "unhandled error ({code})")
329                } else {
330                    f.write_str("unhandled error")
331                }
332            }
333        }
334    }
335}
336impl ::aws_smithy_types::retry::ProvideErrorKind for AssumeRoleError {
337    fn code(&self) -> ::std::option::Option<&str> {
338        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
339    }
340    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
341        ::std::option::Option::None
342    }
343}
344impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for AssumeRoleError {
345    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
346        match self {
347            Self::ExpiredTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
348            Self::MalformedPolicyDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
349            Self::PackedPolicyTooLargeException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
350            Self::RegionDisabledException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
351            Self::Unhandled(_inner) => &_inner.meta,
352        }
353    }
354}
355impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for AssumeRoleError {
356    fn create_unhandled_error(
357        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
358        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
359    ) -> Self {
360        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
361            source,
362            meta: meta.unwrap_or_default(),
363        })
364    }
365}
366impl ::aws_types::request_id::RequestId for crate::operation::assume_role::AssumeRoleError {
367    fn request_id(&self) -> Option<&str> {
368        self.meta().request_id()
369    }
370}
371
372pub use crate::operation::assume_role::_assume_role_output::AssumeRoleOutput;
373
374pub use crate::operation::assume_role::_assume_role_input::AssumeRoleInput;
375
376mod _assume_role_input;
377
378mod _assume_role_output;
379
380/// Builders
381pub mod builders;