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