Skip to main content

aws_sdk_sts/operation/
assume_root.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `AssumeRoot`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct AssumeRoot;
6impl AssumeRoot {
7    /// Creates a new `AssumeRoot`
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_root::AssumeRootInput,
14                    ) -> ::std::result::Result<crate::operation::assume_root::AssumeRootOutput, ::aws_smithy_runtime_api::client::result::SdkError<crate::operation::assume_root::AssumeRootError, ::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_root::AssumeRootError>().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_root::AssumeRootOutput>().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_root::AssumeRootInput,
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                            "AssumeRoot",
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.AssumeRoot",
45                                "rpc.service" = "STS",
46                                "rpc.method" = "AssumeRoot",
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
60                        if let ::std::option::Option::Some(config_override) = config_override {
61                            for plugin in config_override.runtime_plugins.iter().cloned() {
62                                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
63                            }
64                            runtime_plugins = runtime_plugins.with_operation_plugin(
65                                crate::config::ConfigOverrideRuntimePlugin::new(config_override, client_config.config.clone(), &client_config.runtime_components)
66                            );
67                        }
68                        runtime_plugins
69                    }
70}
71impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for AssumeRoot {
72                fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
73                    let mut cfg = ::aws_smithy_types::config_bag::Layer::new("AssumeRoot");
74
75                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(AssumeRootRequestSerializer));
76                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(AssumeRootResponseDeserializer));
77
78                    cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
79                        crate::config::auth::Params::builder()
80                            .operation_name("AssumeRoot")
81                            .build()
82                            .expect("required fields set")
83                    ));
84
85                    cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::SensitiveOutput);
86cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
87                            "AssumeRoot",
88                            "STS",
89                        ));
90let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
91                            signing_options.double_uri_encode = true;
92                            signing_options.content_sha256_header = false;
93                            signing_options.normalize_uri_path = true;
94                            signing_options.payload_override = None;
95
96                            cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
97                                signing_options,
98                                ..::std::default::Default::default()
99                            });
100
101                    ::std::option::Option::Some(cfg.freeze())
102                }
103
104                fn runtime_components(&self, _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
105                    #[allow(unused_mut)]
106                    let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("AssumeRoot")
107                            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(AssumeRootTelemetryInputCaptureInterceptor))
108.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default()))
109.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(AssumeRootEndpointParamsInterceptor))
110                            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<crate::operation::assume_root::AssumeRootError>::new())
111.with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<crate::operation::assume_root::AssumeRootError>::new())
112.with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<crate::operation::assume_root::AssumeRootError>::builder().transient_errors({
113                                            let mut transient_errors: Vec<&'static str> = ::aws_runtime::retries::classifiers::TRANSIENT_ERRORS.into();
114                                            transient_errors.push("IDPCommunicationError");
115                                            ::std::borrow::Cow::Owned(transient_errors)
116                                            }).build());
117
118                    ::std::borrow::Cow::Owned(rcb)
119                }
120            }
121
122            #[derive(Debug)]
123            struct AssumeRootTelemetryInputCaptureInterceptor;
124
125            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
126            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssumeRootTelemetryInputCaptureInterceptor {
127                fn name(&self) -> &'static str {
128                    "AssumeRootTelemetryInputCaptureInterceptor"
129                }
130
131                fn read_before_execution(
132                    &self,
133                    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>,
134                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
135                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
136                    // Nothing to do unless the customer opted in by naming members to record.
137                    let ::std::option::Option::Some(requested) = cfg.load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>().filter(|r| !r.is_empty()) else {
138                        return ::std::result::Result::Ok(());
139                    };
140
141                    let ::std::option::Option::Some(input) = context.input().downcast_ref::<AssumeRootInput>() else {
142                        // A mismatched input is not this interceptor's concern; skip quietly.
143                        return ::std::result::Result::Ok(());
144                    };
145
146                    let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
147                    if requested.should_capture("TargetPrincipal") {
148                        if let ::std::option::Option::Some(value) = input.target_principal.as_deref() {
149                            captured.insert("TargetPrincipal", value);
150                        }
151                    }
152
153                    cfg.interceptor_state().store_put(captured);
154                    ::std::result::Result::Ok(())
155                }
156            }
157#[derive(Debug)]
158            struct AssumeRootResponseDeserializer;
159            impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for AssumeRootResponseDeserializer {
160
161
162                fn deserialize_nonstreaming_with_config(&self, response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse, _cfg: &::aws_smithy_types::config_bag::ConfigBag) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
163                    let (success, status) = (response.status().is_success(), response.status().as_u16());
164            let headers = response.headers();
165            let body = response.body().bytes().expect("body loaded");
166            #[allow(unused_mut)]
167            let mut force_error = false;
168            ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
169            let parse_result = if !success && status != 200 || force_error {
170                crate::protocol_serde::shape_assume_root::de_assume_root_http_error(status, headers, body)
171            } else {
172                crate::protocol_serde::shape_assume_root::de_assume_root_http_response(status, headers, body)
173            };
174            crate::protocol_serde::type_erase_result(parse_result)
175                }
176            }
177#[derive(Debug)]
178            struct AssumeRootRequestSerializer;
179            impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for AssumeRootRequestSerializer {
180                #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
181                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> {
182                    let input = input.downcast::<crate::operation::assume_root::AssumeRootInput>().expect("correct type");
183                    let _header_serialization_settings = _cfg.load::<crate::serialization_settings::HeaderSerializationSettings>().cloned().unwrap_or_default();
184                    let mut request_builder = {
185                        #[allow(clippy::uninlined_format_args)]
186fn uri_base(_input: &crate::operation::assume_root::AssumeRootInput, output: &mut ::std::string::String) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
187    use ::std::fmt::Write as _;
188    ::std::write!(output, "/").expect("formatting should succeed");
189    ::std::result::Result::Ok(())
190}
191#[allow(clippy::unnecessary_wraps)]
192fn update_http_builder(
193                input: &crate::operation::assume_root::AssumeRootInput,
194                builder: ::http_1x::request::Builder
195            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
196    let mut uri = ::std::string::String::new();
197    uri_base(input, &mut uri)?;
198    ::std::result::Result::Ok(builder.method("POST").uri(uri))
199}
200let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
201builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
202builder
203                    };
204                    let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_assume_root_input::ser_assume_root_input_input_input(&input)?);
205                    if let Some(content_length) = body.content_length() {
206                                let content_length = content_length.to_string();
207                                request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
208                            }
209                    ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
210                }
211            }
212#[derive(Debug)]
213            struct AssumeRootEndpointParamsInterceptor;
214
215            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
216            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssumeRootEndpointParamsInterceptor {
217                fn name(&self) -> &'static str {
218                    "AssumeRootEndpointParamsInterceptor"
219                }
220
221                fn read_before_execution(
222                    &self,
223                    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>,
224                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
225                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
226                    let _input = context.input()
227                        .downcast_ref::<AssumeRootInput>()
228                        .ok_or("failed to downcast to AssumeRootInput")?;
229
230
231
232                    let params = crate::config::endpoint::Params::builder()
233                        .set_region(cfg.load::<::aws_types::region::Region>().map(|r|r.as_ref().to_owned()))
234.set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
235.set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
236.set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
237                        .build()
238                        .map_err(|err| ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err))?;
239                    cfg.interceptor_state().store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
240                    ::std::result::Result::Ok(())
241                }
242            }
243
244            // The get_* functions below are generated from JMESPath expressions in the
245            // operationContextParams trait. They target the operation's input shape.
246
247
248
249/// Error type for the `AssumeRootError` operation.
250#[non_exhaustive]
251#[derive(::std::fmt::Debug)]
252pub enum AssumeRootError {
253    /// <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>
254    ExpiredTokenException(crate::types::error::ExpiredTokenException),
255    /// <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>
256    RegionDisabledException(crate::types::error::RegionDisabledException),
257    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
258                    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
259    variable wildcard pattern and check `.code()`:
260     \
261    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
262     \
263    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-AssumeRootError) for what information is available for the error.")]
264                    Unhandled(crate::error::sealed_unhandled::Unhandled),
265}
266impl AssumeRootError {
267    /// Creates the `AssumeRootError::Unhandled` variant from any error type.
268                    pub fn unhandled(err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>) -> Self {
269                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.into(), meta: ::std::default::Default::default() })
270                    }
271
272                    /// Creates the `AssumeRootError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
273                    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
274                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.clone().into(), meta: err })
275                    }
276    ///
277    /// Returns error metadata, which includes the error code, message,
278    /// request ID, and potentially additional information.
279    ///
280    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
281        match self {
282            Self::ExpiredTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
283            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
284            Self::Unhandled(e) => &e.meta,
285        }
286    }
287    /// Returns `true` if the error kind is `AssumeRootError::ExpiredTokenException`.
288    pub fn is_expired_token_exception(&self) -> bool {
289        matches!(self, Self::ExpiredTokenException(_))
290    }
291    /// Returns `true` if the error kind is `AssumeRootError::RegionDisabledException`.
292    pub fn is_region_disabled_exception(&self) -> bool {
293        matches!(self, Self::RegionDisabledException(_))
294    }
295}
296impl ::std::error::Error for AssumeRootError {
297    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
298        match self {
299            Self::ExpiredTokenException(_inner) =>
300            ::std::option::Option::Some(_inner)
301            ,
302            Self::RegionDisabledException(_inner) =>
303            ::std::option::Option::Some(_inner)
304            ,
305            Self::Unhandled(_inner) => {
306                ::std::option::Option::Some(&*_inner.source)
307            }
308        }
309    }
310}
311impl ::std::fmt::Display for AssumeRootError {
312    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
313        match self {
314            Self::ExpiredTokenException(_inner) =>
315            _inner.fmt(f)
316            ,
317            Self::RegionDisabledException(_inner) =>
318            _inner.fmt(f)
319            ,
320            Self::Unhandled(_inner) => {
321                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
322                                                        write!(f, "unhandled error ({code})")
323                                                    } else {
324                                                        f.write_str("unhandled error")
325                                                    }
326            }
327        }
328    }
329}
330impl ::aws_smithy_types::retry::ProvideErrorKind for AssumeRootError {
331    fn code(&self) -> ::std::option::Option<&str> {
332        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
333    }
334    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
335        ::std::option::Option::None
336    }
337}
338impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for AssumeRootError {
339    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
340        match self {
341            Self::ExpiredTokenException(_inner) =>
342            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
343            ,
344            Self::RegionDisabledException(_inner) =>
345            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
346            ,
347            Self::Unhandled(_inner) => {
348                &_inner.meta
349            }
350        }
351    }
352}
353impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for AssumeRootError {
354    fn create_unhandled_error(
355                        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
356                        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>
357                    ) -> Self {
358        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source, meta: meta.unwrap_or_default() })
359    }
360}
361impl ::aws_types::request_id::RequestId for crate::operation::assume_root::AssumeRootError {
362                                fn request_id(&self) -> Option<&str> {
363                                    self.meta().request_id()
364                                }
365                            }
366
367pub use crate::operation::assume_root::_assume_root_input::AssumeRootInput;
368
369pub use crate::operation::assume_root::_assume_root_output::AssumeRootOutput;
370
371mod _assume_root_input;
372
373mod _assume_root_output;
374
375/// Builders
376pub mod builders;
377