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