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::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
108.with_interceptor(AssumeRootEndpointParamsInterceptor)
109                            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<crate::operation::assume_root::AssumeRootError>::new())
110.with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<crate::operation::assume_root::AssumeRootError>::new())
111.with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<crate::operation::assume_root::AssumeRootError>::new());
112
113                    ::std::borrow::Cow::Owned(rcb)
114                }
115            }
116
117            
118#[derive(Debug)]
119            struct AssumeRootResponseDeserializer;
120            impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for AssumeRootResponseDeserializer {
121                
122
123                fn deserialize_nonstreaming(&self, response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
124                    let (success, status) = (response.status().is_success(), response.status().as_u16());
125            let headers = response.headers();
126            let body = response.body().bytes().expect("body loaded");
127            #[allow(unused_mut)]
128            let mut force_error = false;
129            ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
130            let parse_result = if !success && status != 200 || force_error {
131                crate::protocol_serde::shape_assume_root::de_assume_root_http_error(status, headers, body)
132            } else {
133                crate::protocol_serde::shape_assume_root::de_assume_root_http_response(status, headers, body)
134            };
135            crate::protocol_serde::type_erase_result(parse_result)
136                }
137            }
138#[derive(Debug)]
139            struct AssumeRootRequestSerializer;
140            impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for AssumeRootRequestSerializer {
141                #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
142                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> {
143                    let input = input.downcast::<crate::operation::assume_root::AssumeRootInput>().expect("correct type");
144                    let _header_serialization_settings = _cfg.load::<crate::serialization_settings::HeaderSerializationSettings>().cloned().unwrap_or_default();
145                    let mut request_builder = {
146                        #[allow(clippy::uninlined_format_args)]
147fn uri_base(_input: &crate::operation::assume_root::AssumeRootInput, output: &mut ::std::string::String) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
148    use ::std::fmt::Write as _;
149    ::std::write!(output, "/").expect("formatting should succeed");
150    ::std::result::Result::Ok(())
151}
152#[allow(clippy::unnecessary_wraps)]
153fn update_http_builder(
154                input: &crate::operation::assume_root::AssumeRootInput,
155                builder: ::http::request::Builder
156            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
157    let mut uri = ::std::string::String::new();
158    uri_base(input, &mut uri)?;
159    ::std::result::Result::Ok(builder.method("POST").uri(uri))
160}
161let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
162builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
163builder
164                    };
165                    let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_assume_root_input::ser_assume_root_input_input_input(&input)?);
166                    if let Some(content_length) = body.content_length() {
167                                let content_length = content_length.to_string();
168                                request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
169                            }
170                    ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
171                }
172            }
173#[derive(Debug)]
174            struct AssumeRootEndpointParamsInterceptor;
175
176            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssumeRootEndpointParamsInterceptor {
177                fn name(&self) -> &'static str {
178                    "AssumeRootEndpointParamsInterceptor"
179                }
180
181                fn read_before_execution(
182                    &self,
183                    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>,
184                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
185                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
186                    let _input = context.input()
187                        .downcast_ref::<AssumeRootInput>()
188                        .ok_or("failed to downcast to AssumeRootInput")?;
189
190                    
191
192                    let params = crate::config::endpoint::Params::builder()
193                        .set_region(cfg.load::<::aws_types::region::Region>().map(|r|r.as_ref().to_owned()))
194.set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
195.set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
196.set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
197                        .build()
198                        .map_err(|err| ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err))?;
199                    cfg.interceptor_state().store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
200                    ::std::result::Result::Ok(())
201                }
202            }
203
204            // The get_* functions below are generated from JMESPath expressions in the
205            // operationContextParams trait. They target the operation's input shape.
206
207            
208
209/// Error type for the `AssumeRootError` operation.
210#[non_exhaustive]
211#[derive(::std::fmt::Debug)]
212pub enum AssumeRootError {
213    /// <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>
214    ExpiredTokenException(crate::types::error::ExpiredTokenException),
215    /// <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>
216    RegionDisabledException(crate::types::error::RegionDisabledException),
217    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
218                    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
219    variable wildcard pattern and check `.code()`:
220     \
221    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
222     \
223    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-AssumeRootError) for what information is available for the error.")]
224                    Unhandled(crate::error::sealed_unhandled::Unhandled),
225}
226impl AssumeRootError {
227    /// Creates the `AssumeRootError::Unhandled` variant from any error type.
228                    pub fn unhandled(err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>) -> Self {
229                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.into(), meta: ::std::default::Default::default() })
230                    }
231    
232                    /// Creates the `AssumeRootError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
233                    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
234                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.clone().into(), meta: err })
235                    }
236    /// 
237    /// Returns error metadata, which includes the error code, message,
238    /// request ID, and potentially additional information.
239    /// 
240    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
241        match self {
242            Self::ExpiredTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
243            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
244            Self::Unhandled(e) => &e.meta,
245        }
246    }
247    /// Returns `true` if the error kind is `AssumeRootError::ExpiredTokenException`.
248    pub fn is_expired_token_exception(&self) -> bool {
249        matches!(self, Self::ExpiredTokenException(_))
250    }
251    /// Returns `true` if the error kind is `AssumeRootError::RegionDisabledException`.
252    pub fn is_region_disabled_exception(&self) -> bool {
253        matches!(self, Self::RegionDisabledException(_))
254    }
255}
256impl ::std::error::Error for AssumeRootError {
257    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
258        match self {
259            Self::ExpiredTokenException(_inner) =>
260            ::std::option::Option::Some(_inner)
261            ,
262            Self::RegionDisabledException(_inner) =>
263            ::std::option::Option::Some(_inner)
264            ,
265            Self::Unhandled(_inner) => {
266                ::std::option::Option::Some(&*_inner.source)
267            }
268        }
269    }
270}
271impl ::std::fmt::Display for AssumeRootError {
272    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
273        match self {
274            Self::ExpiredTokenException(_inner) =>
275            _inner.fmt(f)
276            ,
277            Self::RegionDisabledException(_inner) =>
278            _inner.fmt(f)
279            ,
280            Self::Unhandled(_inner) => {
281                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
282                                                        write!(f, "unhandled error ({code})")
283                                                    } else {
284                                                        f.write_str("unhandled error")
285                                                    }
286            }
287        }
288    }
289}
290impl ::aws_smithy_types::retry::ProvideErrorKind for AssumeRootError {
291    fn code(&self) -> ::std::option::Option<&str> {
292        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
293    }
294    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
295        ::std::option::Option::None
296    }
297}
298impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for AssumeRootError {
299    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
300        match self {
301            Self::ExpiredTokenException(_inner) =>
302            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
303            ,
304            Self::RegionDisabledException(_inner) =>
305            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
306            ,
307            Self::Unhandled(_inner) => {
308                &_inner.meta
309            }
310        }
311    }
312}
313impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for AssumeRootError {
314    fn create_unhandled_error(
315                        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
316                        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>
317                    ) -> Self {
318        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source, meta: meta.unwrap_or_default() })
319    }
320}
321impl ::aws_types::request_id::RequestId for crate::operation::assume_root::AssumeRootError {
322                                fn request_id(&self) -> Option<&str> {
323                                    self.meta().request_id()
324                                }
325                            }
326
327pub use crate::operation::assume_root::_assume_root_output::AssumeRootOutput;
328
329pub use crate::operation::assume_root::_assume_root_input::AssumeRootInput;
330
331mod _assume_root_input;
332
333mod _assume_root_output;
334
335/// Builders
336pub mod builders;
337