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