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        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("sts", "GetFederationToken", 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 GetFederationToken {
79    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
80        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("GetFederationToken");
81
82        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
83            GetFederationTokenRequestSerializer,
84        ));
85        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
86            GetFederationTokenResponseDeserializer,
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("GetFederationToken", "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("GetFederationToken")
115            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
116            .with_interceptor(GetFederationTokenEndpointParamsInterceptor)
117            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
118                crate::operation::get_federation_token::GetFederationTokenError,
119            >::new())
120            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
121                crate::operation::get_federation_token::GetFederationTokenError,
122            >::new())
123            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
124                crate::operation::get_federation_token::GetFederationTokenError,
125            >::new());
126
127        ::std::borrow::Cow::Owned(rcb)
128    }
129}
130
131#[derive(Debug)]
132struct GetFederationTokenResponseDeserializer;
133impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for GetFederationTokenResponseDeserializer {
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_get_federation_token::de_get_federation_token_http_error(status, headers, body)
146        } else {
147            crate::protocol_serde::shape_get_federation_token::de_get_federation_token_http_response(status, headers, body)
148        };
149        crate::protocol_serde::type_erase_result(parse_result)
150    }
151}
152#[derive(Debug)]
153struct GetFederationTokenRequestSerializer;
154impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for GetFederationTokenRequestSerializer {
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
162            .downcast::<crate::operation::get_federation_token::GetFederationTokenInput>()
163            .expect("correct type");
164        let _header_serialization_settings = _cfg
165            .load::<crate::serialization_settings::HeaderSerializationSettings>()
166            .cloned()
167            .unwrap_or_default();
168        let mut request_builder = {
169            fn uri_base(
170                _input: &crate::operation::get_federation_token::GetFederationTokenInput,
171                output: &mut ::std::string::String,
172            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
173                use ::std::fmt::Write as _;
174                ::std::write!(output, "/").expect("formatting should succeed");
175                ::std::result::Result::Ok(())
176            }
177            #[allow(clippy::unnecessary_wraps)]
178            fn update_http_builder(
179                input: &crate::operation::get_federation_token::GetFederationTokenInput,
180                builder: ::http::request::Builder,
181            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
182                let mut uri = ::std::string::String::new();
183                uri_base(input, &mut uri)?;
184                ::std::result::Result::Ok(builder.method("POST").uri(uri))
185            }
186            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
187            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
188            builder
189        };
190        let body = ::aws_smithy_types::body::SdkBody::from(
191            crate::protocol_serde::shape_get_federation_token_input::ser_get_federation_token_input_input_input(&input)?,
192        );
193        if let Some(content_length) = body.content_length() {
194            let content_length = content_length.to_string();
195            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
196        }
197        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
198    }
199}
200#[derive(Debug)]
201struct GetFederationTokenEndpointParamsInterceptor;
202
203impl ::aws_smithy_runtime_api::client::interceptors::Intercept for GetFederationTokenEndpointParamsInterceptor {
204    fn name(&self) -> &'static str {
205        "GetFederationTokenEndpointParamsInterceptor"
206    }
207
208    fn read_before_execution(
209        &self,
210        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
211            '_,
212            ::aws_smithy_runtime_api::client::interceptors::context::Input,
213            ::aws_smithy_runtime_api::client::interceptors::context::Output,
214            ::aws_smithy_runtime_api::client::interceptors::context::Error,
215        >,
216        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
217    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
218        let _input = context
219            .input()
220            .downcast_ref::<GetFederationTokenInput>()
221            .ok_or("failed to downcast to GetFederationTokenInput")?;
222
223        let params = crate::config::endpoint::Params::builder()
224            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
225            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
226            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
227            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
228            .build()
229            .map_err(|err| {
230                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
231            })?;
232        cfg.interceptor_state()
233            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
234        ::std::result::Result::Ok(())
235    }
236}
237
238// The get_* functions below are generated from JMESPath expressions in the
239// operationContextParams trait. They target the operation's input shape.
240
241/// Error type for the `GetFederationTokenError` operation.
242#[non_exhaustive]
243#[derive(::std::fmt::Debug)]
244pub enum GetFederationTokenError {
245    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
246    MalformedPolicyDocumentException(crate::types::error::MalformedPolicyDocumentException),
247    /// <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>
248    /// <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>
249    PackedPolicyTooLargeException(crate::types::error::PackedPolicyTooLargeException),
250    /// <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>
251    RegionDisabledException(crate::types::error::RegionDisabledException),
252    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
253    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
254    variable wildcard pattern and check `.code()`:
255     \
256    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
257     \
258    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-GetFederationTokenError) for what information is available for the error.")]
259    Unhandled(crate::error::sealed_unhandled::Unhandled),
260}
261impl GetFederationTokenError {
262    /// Creates the `GetFederationTokenError::Unhandled` variant from any error type.
263    pub fn unhandled(
264        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
265    ) -> Self {
266        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
267            source: err.into(),
268            meta: ::std::default::Default::default(),
269        })
270    }
271
272    /// Creates the `GetFederationTokenError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
273    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
274        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
275            source: err.clone().into(),
276            meta: err,
277        })
278    }
279    ///
280    /// Returns error metadata, which includes the error code, message,
281    /// request ID, and potentially additional information.
282    ///
283    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
284        match self {
285            Self::MalformedPolicyDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
286            Self::PackedPolicyTooLargeException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
287            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
288            Self::Unhandled(e) => &e.meta,
289        }
290    }
291    /// Returns `true` if the error kind is `GetFederationTokenError::MalformedPolicyDocumentException`.
292    pub fn is_malformed_policy_document_exception(&self) -> bool {
293        matches!(self, Self::MalformedPolicyDocumentException(_))
294    }
295    /// Returns `true` if the error kind is `GetFederationTokenError::PackedPolicyTooLargeException`.
296    pub fn is_packed_policy_too_large_exception(&self) -> bool {
297        matches!(self, Self::PackedPolicyTooLargeException(_))
298    }
299    /// Returns `true` if the error kind is `GetFederationTokenError::RegionDisabledException`.
300    pub fn is_region_disabled_exception(&self) -> bool {
301        matches!(self, Self::RegionDisabledException(_))
302    }
303}
304impl ::std::error::Error for GetFederationTokenError {
305    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
306        match self {
307            Self::MalformedPolicyDocumentException(_inner) => ::std::option::Option::Some(_inner),
308            Self::PackedPolicyTooLargeException(_inner) => ::std::option::Option::Some(_inner),
309            Self::RegionDisabledException(_inner) => ::std::option::Option::Some(_inner),
310            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
311        }
312    }
313}
314impl ::std::fmt::Display for GetFederationTokenError {
315    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
316        match self {
317            Self::MalformedPolicyDocumentException(_inner) => _inner.fmt(f),
318            Self::PackedPolicyTooLargeException(_inner) => _inner.fmt(f),
319            Self::RegionDisabledException(_inner) => _inner.fmt(f),
320            Self::Unhandled(_inner) => {
321                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
322                    write!(f, "unhandled error ({code})")
323                } else {
324                    f.write_str("unhandled error")
325                }
326            }
327        }
328    }
329}
330impl ::aws_smithy_types::retry::ProvideErrorKind for GetFederationTokenError {
331    fn code(&self) -> ::std::option::Option<&str> {
332        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
333    }
334    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
335        ::std::option::Option::None
336    }
337}
338impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for GetFederationTokenError {
339    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
340        match self {
341            Self::MalformedPolicyDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
342            Self::PackedPolicyTooLargeException(_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 GetFederationTokenError {
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::get_federation_token::GetFederationTokenError {
360    fn request_id(&self) -> Option<&str> {
361        self.meta().request_id()
362    }
363}
364
365pub use crate::operation::get_federation_token::_get_federation_token_output::GetFederationTokenOutput;
366
367pub use crate::operation::get_federation_token::_get_federation_token_input::GetFederationTokenInput;
368
369mod _get_federation_token_input;
370
371mod _get_federation_token_output;
372
373/// Builders
374pub mod builders;