aws_sdk_sts/operation/
get_federation_token.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `GetFederationToken`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct GetFederationToken;
6impl GetFederationToken {
7    /// Creates a new `GetFederationToken`
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::get_federation_token::GetFederationTokenInput,
14    ) -> ::std::result::Result<
15        crate::operation::get_federation_token::GetFederationTokenOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::get_federation_token::GetFederationTokenError,
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::get_federation_token::GetFederationTokenError>()
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::get_federation_token::GetFederationTokenOutput>()
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::get_federation_token::GetFederationTokenInput,
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", "GetFederationToken", 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.GetFederationToken",
59                "rpc.service" = "STS",
60                "rpc.method" = "GetFederationToken",
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 GetFederationToken {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("GetFederationToken");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            GetFederationTokenRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            GetFederationTokenResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("GetFederationToken")
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("GetFederationToken", "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("GetFederationToken")
127            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
128            .with_interceptor(GetFederationTokenEndpointParamsInterceptor)
129            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
130                crate::operation::get_federation_token::GetFederationTokenError,
131            >::new())
132            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
133                crate::operation::get_federation_token::GetFederationTokenError,
134            >::new())
135            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
136                crate::operation::get_federation_token::GetFederationTokenError,
137            >::new());
138
139        ::std::borrow::Cow::Owned(rcb)
140    }
141}
142
143#[derive(Debug)]
144struct GetFederationTokenResponseDeserializer;
145impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for GetFederationTokenResponseDeserializer {
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_get_federation_token::de_get_federation_token_http_error(status, headers, body)
158        } else {
159            crate::protocol_serde::shape_get_federation_token::de_get_federation_token_http_response(status, headers, body)
160        };
161        crate::protocol_serde::type_erase_result(parse_result)
162    }
163}
164#[derive(Debug)]
165struct GetFederationTokenRequestSerializer;
166impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for GetFederationTokenRequestSerializer {
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
174            .downcast::<crate::operation::get_federation_token::GetFederationTokenInput>()
175            .expect("correct type");
176        let _header_serialization_settings = _cfg
177            .load::<crate::serialization_settings::HeaderSerializationSettings>()
178            .cloned()
179            .unwrap_or_default();
180        let mut request_builder = {
181            #[allow(clippy::uninlined_format_args)]
182            fn uri_base(
183                _input: &crate::operation::get_federation_token::GetFederationTokenInput,
184                output: &mut ::std::string::String,
185            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
186                use ::std::fmt::Write as _;
187                ::std::write!(output, "/").expect("formatting should succeed");
188                ::std::result::Result::Ok(())
189            }
190            #[allow(clippy::unnecessary_wraps)]
191            fn update_http_builder(
192                input: &crate::operation::get_federation_token::GetFederationTokenInput,
193                builder: ::http::request::Builder,
194            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
195                let mut uri = ::std::string::String::new();
196                uri_base(input, &mut uri)?;
197                ::std::result::Result::Ok(builder.method("POST").uri(uri))
198            }
199            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
200            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
201            builder
202        };
203        let body = ::aws_smithy_types::body::SdkBody::from(
204            crate::protocol_serde::shape_get_federation_token_input::ser_get_federation_token_input_input_input(&input)?,
205        );
206        if let Some(content_length) = body.content_length() {
207            let content_length = content_length.to_string();
208            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
209        }
210        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
211    }
212}
213#[derive(Debug)]
214struct GetFederationTokenEndpointParamsInterceptor;
215
216impl ::aws_smithy_runtime_api::client::interceptors::Intercept for GetFederationTokenEndpointParamsInterceptor {
217    fn name(&self) -> &'static str {
218        "GetFederationTokenEndpointParamsInterceptor"
219    }
220
221    fn read_before_execution(
222        &self,
223        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
224            '_,
225            ::aws_smithy_runtime_api::client::interceptors::context::Input,
226            ::aws_smithy_runtime_api::client::interceptors::context::Output,
227            ::aws_smithy_runtime_api::client::interceptors::context::Error,
228        >,
229        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
230    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
231        let _input = context
232            .input()
233            .downcast_ref::<GetFederationTokenInput>()
234            .ok_or("failed to downcast to GetFederationTokenInput")?;
235
236        let params = crate::config::endpoint::Params::builder()
237            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
238            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
239            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
240            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
241            .build()
242            .map_err(|err| {
243                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
244            })?;
245        cfg.interceptor_state()
246            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
247        ::std::result::Result::Ok(())
248    }
249}
250
251// The get_* functions below are generated from JMESPath expressions in the
252// operationContextParams trait. They target the operation's input shape.
253
254/// Error type for the `GetFederationTokenError` operation.
255#[non_exhaustive]
256#[derive(::std::fmt::Debug)]
257pub enum GetFederationTokenError {
258    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
259    MalformedPolicyDocumentException(crate::types::error::MalformedPolicyDocumentException),
260    /// <p>The request was rejected because the total packed size of the session policies and session tags combined was too large. An Amazon Web Services conversion compresses the session policy document, session policy ARNs, and session tags into a packed binary format that has a separate limit. The error message indicates by percentage how close the policies and tags are to the upper size limit. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html">Passing Session Tags in STS</a> in the <i>IAM User Guide</i>.</p>
261    /// <p>You could receive this error even though you meet other defined session policy and session tag limits. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-limits-entity-length">IAM and STS Entity Character Limits</a> in the <i>IAM User Guide</i>.</p>
262    PackedPolicyTooLargeException(crate::types::error::PackedPolicyTooLargeException),
263    /// <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>
264    RegionDisabledException(crate::types::error::RegionDisabledException),
265    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
266    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
267    variable wildcard pattern and check `.code()`:
268     \
269    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
270     \
271    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-GetFederationTokenError) for what information is available for the error.")]
272    Unhandled(crate::error::sealed_unhandled::Unhandled),
273}
274impl GetFederationTokenError {
275    /// Creates the `GetFederationTokenError::Unhandled` variant from any error type.
276    pub fn unhandled(
277        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
278    ) -> Self {
279        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
280            source: err.into(),
281            meta: ::std::default::Default::default(),
282        })
283    }
284
285    /// Creates the `GetFederationTokenError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
286    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
287        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
288            source: err.clone().into(),
289            meta: err,
290        })
291    }
292    ///
293    /// Returns error metadata, which includes the error code, message,
294    /// request ID, and potentially additional information.
295    ///
296    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
297        match self {
298            Self::MalformedPolicyDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
299            Self::PackedPolicyTooLargeException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
300            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
301            Self::Unhandled(e) => &e.meta,
302        }
303    }
304    /// Returns `true` if the error kind is `GetFederationTokenError::MalformedPolicyDocumentException`.
305    pub fn is_malformed_policy_document_exception(&self) -> bool {
306        matches!(self, Self::MalformedPolicyDocumentException(_))
307    }
308    /// Returns `true` if the error kind is `GetFederationTokenError::PackedPolicyTooLargeException`.
309    pub fn is_packed_policy_too_large_exception(&self) -> bool {
310        matches!(self, Self::PackedPolicyTooLargeException(_))
311    }
312    /// Returns `true` if the error kind is `GetFederationTokenError::RegionDisabledException`.
313    pub fn is_region_disabled_exception(&self) -> bool {
314        matches!(self, Self::RegionDisabledException(_))
315    }
316}
317impl ::std::error::Error for GetFederationTokenError {
318    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
319        match self {
320            Self::MalformedPolicyDocumentException(_inner) => ::std::option::Option::Some(_inner),
321            Self::PackedPolicyTooLargeException(_inner) => ::std::option::Option::Some(_inner),
322            Self::RegionDisabledException(_inner) => ::std::option::Option::Some(_inner),
323            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
324        }
325    }
326}
327impl ::std::fmt::Display for GetFederationTokenError {
328    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
329        match self {
330            Self::MalformedPolicyDocumentException(_inner) => _inner.fmt(f),
331            Self::PackedPolicyTooLargeException(_inner) => _inner.fmt(f),
332            Self::RegionDisabledException(_inner) => _inner.fmt(f),
333            Self::Unhandled(_inner) => {
334                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
335                    write!(f, "unhandled error ({code})")
336                } else {
337                    f.write_str("unhandled error")
338                }
339            }
340        }
341    }
342}
343impl ::aws_smithy_types::retry::ProvideErrorKind for GetFederationTokenError {
344    fn code(&self) -> ::std::option::Option<&str> {
345        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
346    }
347    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
348        ::std::option::Option::None
349    }
350}
351impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for GetFederationTokenError {
352    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
353        match self {
354            Self::MalformedPolicyDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
355            Self::PackedPolicyTooLargeException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
356            Self::RegionDisabledException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
357            Self::Unhandled(_inner) => &_inner.meta,
358        }
359    }
360}
361impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for GetFederationTokenError {
362    fn create_unhandled_error(
363        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
364        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
365    ) -> Self {
366        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
367            source,
368            meta: meta.unwrap_or_default(),
369        })
370    }
371}
372impl ::aws_types::request_id::RequestId for crate::operation::get_federation_token::GetFederationTokenError {
373    fn request_id(&self) -> Option<&str> {
374        self.meta().request_id()
375    }
376}
377
378pub use crate::operation::get_federation_token::_get_federation_token_output::GetFederationTokenOutput;
379
380pub use crate::operation::get_federation_token::_get_federation_token_input::GetFederationTokenInput;
381
382mod _get_federation_token_input;
383
384mod _get_federation_token_output;
385
386/// Builders
387pub mod builders;