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(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default()))
108.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(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_1x::request::Builder
156            ) -> ::std::result::Result<::http_1x::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_1x::request::Builder::new())?;
162builder = _header_serialization_settings.set_default_header(builder, ::http_1x::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_1x::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            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
177            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssumeRootEndpointParamsInterceptor {
178                fn name(&self) -> &'static str {
179                    "AssumeRootEndpointParamsInterceptor"
180                }
181
182                fn read_before_execution(
183                    &self,
184                    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>,
185                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
186                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
187                    let _input = context.input()
188                        .downcast_ref::<AssumeRootInput>()
189                        .ok_or("failed to downcast to AssumeRootInput")?;
190
191                    
192
193                    let params = crate::config::endpoint::Params::builder()
194                        .set_region(cfg.load::<::aws_types::region::Region>().map(|r|r.as_ref().to_owned()))
195.set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
196.set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
197.set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
198                        .build()
199                        .map_err(|err| ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err))?;
200                    cfg.interceptor_state().store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
201                    ::std::result::Result::Ok(())
202                }
203            }
204
205            // The get_* functions below are generated from JMESPath expressions in the
206            // operationContextParams trait. They target the operation's input shape.
207
208            
209
210/// Error type for the `AssumeRootError` operation.
211#[non_exhaustive]
212#[derive(::std::fmt::Debug)]
213pub enum AssumeRootError {
214    /// <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>
215    ExpiredTokenException(crate::types::error::ExpiredTokenException),
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 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-AssumeRootError) for what information is available for the error.")]
225                    Unhandled(crate::error::sealed_unhandled::Unhandled),
226}
227impl AssumeRootError {
228    /// Creates the `AssumeRootError::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 `AssumeRootError::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::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
245            Self::Unhandled(e) => &e.meta,
246        }
247    }
248    /// Returns `true` if the error kind is `AssumeRootError::ExpiredTokenException`.
249    pub fn is_expired_token_exception(&self) -> bool {
250        matches!(self, Self::ExpiredTokenException(_))
251    }
252    /// Returns `true` if the error kind is `AssumeRootError::RegionDisabledException`.
253    pub fn is_region_disabled_exception(&self) -> bool {
254        matches!(self, Self::RegionDisabledException(_))
255    }
256}
257impl ::std::error::Error for AssumeRootError {
258    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
259        match self {
260            Self::ExpiredTokenException(_inner) =>
261            ::std::option::Option::Some(_inner)
262            ,
263            Self::RegionDisabledException(_inner) =>
264            ::std::option::Option::Some(_inner)
265            ,
266            Self::Unhandled(_inner) => {
267                ::std::option::Option::Some(&*_inner.source)
268            }
269        }
270    }
271}
272impl ::std::fmt::Display for AssumeRootError {
273    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
274        match self {
275            Self::ExpiredTokenException(_inner) =>
276            _inner.fmt(f)
277            ,
278            Self::RegionDisabledException(_inner) =>
279            _inner.fmt(f)
280            ,
281            Self::Unhandled(_inner) => {
282                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
283                                                        write!(f, "unhandled error ({code})")
284                                                    } else {
285                                                        f.write_str("unhandled error")
286                                                    }
287            }
288        }
289    }
290}
291impl ::aws_smithy_types::retry::ProvideErrorKind for AssumeRootError {
292    fn code(&self) -> ::std::option::Option<&str> {
293        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
294    }
295    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
296        ::std::option::Option::None
297    }
298}
299impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for AssumeRootError {
300    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
301        match self {
302            Self::ExpiredTokenException(_inner) =>
303            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
304            ,
305            Self::RegionDisabledException(_inner) =>
306            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
307            ,
308            Self::Unhandled(_inner) => {
309                &_inner.meta
310            }
311        }
312    }
313}
314impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for AssumeRootError {
315    fn create_unhandled_error(
316                        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
317                        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>
318                    ) -> Self {
319        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source, meta: meta.unwrap_or_default() })
320    }
321}
322impl ::aws_types::request_id::RequestId for crate::operation::assume_root::AssumeRootError {
323                                fn request_id(&self) -> Option<&str> {
324                                    self.meta().request_id()
325                                }
326                            }
327
328pub use crate::operation::assume_root::_assume_root_input::AssumeRootInput;
329
330pub use crate::operation::assume_root::_assume_root_output::AssumeRootOutput;
331
332mod _assume_root_input;
333
334mod _assume_root_output;
335
336/// Builders
337pub mod builders;
338