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