Skip to main content

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