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