Skip to main content

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        use ::tracing::Instrument;
54        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("STS", "AssumeRole", input, runtime_plugins, stop_point)
55            // Create a parent span for the entire operation. Includes a random, internal-only,
56            // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
57            .instrument(::tracing::debug_span!(
58                "STS.AssumeRole",
59                "rpc.service" = "STS",
60                "rpc.method" = "AssumeRole",
61                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
62                "rpc.system" = "aws-api",
63            ))
64            .await
65    }
66
67    pub(crate) fn operation_runtime_plugins(
68        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
69        client_config: &crate::config::Config,
70        config_override: ::std::option::Option<crate::config::Builder>,
71    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
72        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
73
74        if let ::std::option::Option::Some(config_override) = config_override {
75            for plugin in config_override.runtime_plugins.iter().cloned() {
76                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
77            }
78            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
79                config_override,
80                client_config.config.clone(),
81                &client_config.runtime_components,
82            ));
83        }
84        runtime_plugins
85    }
86}
87impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for AssumeRole {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("AssumeRole");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            AssumeRoleRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            AssumeRoleResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("AssumeRole")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::SensitiveOutput);
106        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("AssumeRole", "STS"));
107        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
108        signing_options.double_uri_encode = true;
109        signing_options.content_sha256_header = false;
110        signing_options.normalize_uri_path = true;
111        signing_options.payload_override = None;
112
113        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
114            signing_options,
115            ..::std::default::Default::default()
116        });
117
118        ::std::option::Option::Some(cfg.freeze())
119    }
120
121    fn runtime_components(
122        &self,
123        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
124    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
125        #[allow(unused_mut)]
126        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("AssumeRole")
127            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
128                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
129            ))
130            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
131                AssumeRoleEndpointParamsInterceptor,
132            ))
133            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
134                crate::operation::assume_role::AssumeRoleError,
135            >::new())
136            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
137                crate::operation::assume_role::AssumeRoleError,
138            >::new())
139            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
140                crate::operation::assume_role::AssumeRoleError,
141            >::new());
142
143        ::std::borrow::Cow::Owned(rcb)
144    }
145}
146
147#[derive(Debug)]
148struct AssumeRoleResponseDeserializer;
149impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for AssumeRoleResponseDeserializer {
150    fn deserialize_nonstreaming_with_config(
151        &self,
152        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
153        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
154    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
155        let (success, status) = (response.status().is_success(), response.status().as_u16());
156        let headers = response.headers();
157        let body = response.body().bytes().expect("body loaded");
158        #[allow(unused_mut)]
159        let mut force_error = false;
160        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
161        let parse_result = if !success && status != 200 || force_error {
162            crate::protocol_serde::shape_assume_role::de_assume_role_http_error(status, headers, body)
163        } else {
164            crate::protocol_serde::shape_assume_role::de_assume_role_http_response(status, headers, body)
165        };
166        crate::protocol_serde::type_erase_result(parse_result)
167    }
168}
169#[derive(Debug)]
170struct AssumeRoleRequestSerializer;
171impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for AssumeRoleRequestSerializer {
172    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
173    fn serialize_input(
174        &self,
175        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
176        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
177    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
178        let input = input.downcast::<crate::operation::assume_role::AssumeRoleInput>().expect("correct type");
179        let _header_serialization_settings = _cfg
180            .load::<crate::serialization_settings::HeaderSerializationSettings>()
181            .cloned()
182            .unwrap_or_default();
183        let mut request_builder = {
184            #[allow(clippy::uninlined_format_args)]
185            fn uri_base(
186                _input: &crate::operation::assume_role::AssumeRoleInput,
187                output: &mut ::std::string::String,
188            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
189                use ::std::fmt::Write as _;
190                ::std::write!(output, "/").expect("formatting should succeed");
191                ::std::result::Result::Ok(())
192            }
193            #[allow(clippy::unnecessary_wraps)]
194            fn update_http_builder(
195                input: &crate::operation::assume_role::AssumeRoleInput,
196                builder: ::http_1x::request::Builder,
197            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
198                let mut uri = ::std::string::String::new();
199                uri_base(input, &mut uri)?;
200                ::std::result::Result::Ok(builder.method("POST").uri(uri))
201            }
202            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
203            builder =
204                _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
205            builder
206        };
207        let body =
208            ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_assume_role_input::ser_assume_role_input_input_input(&input)?);
209        if let Some(content_length) = body.content_length() {
210            let content_length = content_length.to_string();
211            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
212        }
213        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
214    }
215}
216#[derive(Debug)]
217struct AssumeRoleEndpointParamsInterceptor;
218
219#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
220impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssumeRoleEndpointParamsInterceptor {
221    fn name(&self) -> &'static str {
222        "AssumeRoleEndpointParamsInterceptor"
223    }
224
225    fn read_before_execution(
226        &self,
227        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
228            '_,
229            ::aws_smithy_runtime_api::client::interceptors::context::Input,
230            ::aws_smithy_runtime_api::client::interceptors::context::Output,
231            ::aws_smithy_runtime_api::client::interceptors::context::Error,
232        >,
233        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
234    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
235        let _input = context
236            .input()
237            .downcast_ref::<AssumeRoleInput>()
238            .ok_or("failed to downcast to AssumeRoleInput")?;
239
240        let params = crate::config::endpoint::Params::builder()
241            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
242            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
243            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
244            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
245            .build()
246            .map_err(|err| {
247                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
248            })?;
249        cfg.interceptor_state()
250            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
251        ::std::result::Result::Ok(())
252    }
253}
254
255// The get_* functions below are generated from JMESPath expressions in the
256// operationContextParams trait. They target the operation's input shape.
257
258/// Error type for the `AssumeRoleError` operation.
259#[non_exhaustive]
260#[derive(::std::fmt::Debug)]
261pub enum AssumeRoleError {
262    /// <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>
263    ExpiredTokenException(crate::types::error::ExpiredTokenException),
264    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
265    MalformedPolicyDocumentException(crate::types::error::MalformedPolicyDocumentException),
266    /// <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>
267    /// <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>
268    PackedPolicyTooLargeException(crate::types::error::PackedPolicyTooLargeException),
269    /// <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#sts-regions-activate-deactivate">Activating and Deactivating STS in an Amazon Web Services Region</a> in the <i>IAM User Guide</i>.</p>
270    RegionDisabledException(crate::types::error::RegionDisabledException),
271    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
272    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
273    variable wildcard pattern and check `.code()`:
274     \
275    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
276     \
277    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-AssumeRoleError) for what information is available for the error.")]
278    Unhandled(crate::error::sealed_unhandled::Unhandled),
279}
280impl AssumeRoleError {
281    /// Creates the `AssumeRoleError::Unhandled` variant from any error type.
282    pub fn unhandled(
283        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
284    ) -> Self {
285        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
286            source: err.into(),
287            meta: ::std::default::Default::default(),
288        })
289    }
290
291    /// Creates the `AssumeRoleError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
292    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
293        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
294            source: err.clone().into(),
295            meta: err,
296        })
297    }
298    ///
299    /// Returns error metadata, which includes the error code, message,
300    /// request ID, and potentially additional information.
301    ///
302    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
303        match self {
304            Self::ExpiredTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
305            Self::MalformedPolicyDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
306            Self::PackedPolicyTooLargeException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
307            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
308            Self::Unhandled(e) => &e.meta,
309        }
310    }
311    /// Returns `true` if the error kind is `AssumeRoleError::ExpiredTokenException`.
312    pub fn is_expired_token_exception(&self) -> bool {
313        matches!(self, Self::ExpiredTokenException(_))
314    }
315    /// Returns `true` if the error kind is `AssumeRoleError::MalformedPolicyDocumentException`.
316    pub fn is_malformed_policy_document_exception(&self) -> bool {
317        matches!(self, Self::MalformedPolicyDocumentException(_))
318    }
319    /// Returns `true` if the error kind is `AssumeRoleError::PackedPolicyTooLargeException`.
320    pub fn is_packed_policy_too_large_exception(&self) -> bool {
321        matches!(self, Self::PackedPolicyTooLargeException(_))
322    }
323    /// Returns `true` if the error kind is `AssumeRoleError::RegionDisabledException`.
324    pub fn is_region_disabled_exception(&self) -> bool {
325        matches!(self, Self::RegionDisabledException(_))
326    }
327}
328impl ::std::error::Error for AssumeRoleError {
329    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
330        match self {
331            Self::ExpiredTokenException(_inner) => ::std::option::Option::Some(_inner),
332            Self::MalformedPolicyDocumentException(_inner) => ::std::option::Option::Some(_inner),
333            Self::PackedPolicyTooLargeException(_inner) => ::std::option::Option::Some(_inner),
334            Self::RegionDisabledException(_inner) => ::std::option::Option::Some(_inner),
335            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
336        }
337    }
338}
339impl ::std::fmt::Display for AssumeRoleError {
340    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
341        match self {
342            Self::ExpiredTokenException(_inner) => _inner.fmt(f),
343            Self::MalformedPolicyDocumentException(_inner) => _inner.fmt(f),
344            Self::PackedPolicyTooLargeException(_inner) => _inner.fmt(f),
345            Self::RegionDisabledException(_inner) => _inner.fmt(f),
346            Self::Unhandled(_inner) => {
347                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
348                    write!(f, "unhandled error ({code})")
349                } else {
350                    f.write_str("unhandled error")
351                }
352            }
353        }
354    }
355}
356impl ::aws_smithy_types::retry::ProvideErrorKind for AssumeRoleError {
357    fn code(&self) -> ::std::option::Option<&str> {
358        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
359    }
360    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
361        ::std::option::Option::None
362    }
363}
364impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for AssumeRoleError {
365    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
366        match self {
367            Self::ExpiredTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
368            Self::MalformedPolicyDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
369            Self::PackedPolicyTooLargeException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
370            Self::RegionDisabledException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
371            Self::Unhandled(_inner) => &_inner.meta,
372        }
373    }
374}
375impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for AssumeRoleError {
376    fn create_unhandled_error(
377        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
378        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
379    ) -> Self {
380        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
381            source,
382            meta: meta.unwrap_or_default(),
383        })
384    }
385}
386impl ::aws_types::request_id::RequestId for crate::operation::assume_role::AssumeRoleError {
387    fn request_id(&self) -> Option<&str> {
388        self.meta().request_id()
389    }
390}
391
392pub use crate::operation::assume_role::_assume_role_input::AssumeRoleInput;
393
394pub use crate::operation::assume_role::_assume_role_output::AssumeRoleOutput;
395
396mod _assume_role_input;
397
398mod _assume_role_output;
399
400/// Builders
401pub mod builders;