Skip to main content

aws_sdk_sts/operation/
assume_role_with_saml.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `AssumeRoleWithSAML`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct AssumeRoleWithSAML;
6impl AssumeRoleWithSAML {
7    /// Creates a new `AssumeRoleWithSAML`
8    pub fn new() -> Self {
9        Self
10    }
11    pub(crate) async fn orchestrate(
12                        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
13                        input: crate::operation::assume_role_with_saml::AssumeRoleWithSamlInput,
14                    ) -> ::std::result::Result<crate::operation::assume_role_with_saml::AssumeRoleWithSamlOutput, ::aws_smithy_runtime_api::client::result::SdkError<crate::operation::assume_role_with_saml::AssumeRoleWithSAMLError, ::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::assume_role_with_saml::AssumeRoleWithSAMLError>().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::assume_role_with_saml::AssumeRoleWithSamlOutput>().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::assume_role_with_saml::AssumeRoleWithSamlInput,
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                            "AssumeRoleWithSAML",
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.AssumeRoleWithSAML",
45                                "rpc.service" = "STS",
46                                "rpc.method" = "AssumeRoleWithSAML",
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 AssumeRoleWithSAML {
72                fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
73                    let mut cfg = ::aws_smithy_types::config_bag::Layer::new("AssumeRoleWithSAML");
74
75                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(AssumeRoleWithSAMLRequestSerializer));
76                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(AssumeRoleWithSAMLResponseDeserializer));
77
78                    cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
79                        crate::config::auth::Params::builder()
80                            .operation_name("AssumeRoleWithSAML")
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                            "AssumeRoleWithSAML",
88                            "STS",
89                        ));
90
91                    ::std::option::Option::Some(cfg.freeze())
92                }
93
94                fn runtime_components(&self, _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
95                    #[allow(unused_mut)]
96                    let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("AssumeRoleWithSAML")
97                            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(AssumeRoleWithSAMLTelemetryInputCaptureInterceptor))
98.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default()))
99.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(AssumeRoleWithSAMLEndpointParamsInterceptor))
100                            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<crate::operation::assume_role_with_saml::AssumeRoleWithSAMLError>::new())
101.with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<crate::operation::assume_role_with_saml::AssumeRoleWithSAMLError>::new())
102.with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<crate::operation::assume_role_with_saml::AssumeRoleWithSAMLError>::builder().transient_errors({
103                                            let mut transient_errors: Vec<&'static str> = ::aws_runtime::retries::classifiers::TRANSIENT_ERRORS.into();
104                                            transient_errors.push("IDPCommunicationError");
105                                            ::std::borrow::Cow::Owned(transient_errors)
106                                            }).build());
107
108                    ::std::borrow::Cow::Owned(rcb)
109                }
110            }
111
112            #[derive(Debug)]
113            struct AssumeRoleWithSAMLTelemetryInputCaptureInterceptor;
114
115            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
116            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssumeRoleWithSAMLTelemetryInputCaptureInterceptor {
117                fn name(&self) -> &'static str {
118                    "AssumeRoleWithSAMLTelemetryInputCaptureInterceptor"
119                }
120
121                fn read_before_execution(
122                    &self,
123                    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>,
124                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
125                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
126                    // Nothing to do unless the customer opted in by naming members to record.
127                    let ::std::option::Option::Some(requested) = cfg.load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>().filter(|r| !r.is_empty()) else {
128                        return ::std::result::Result::Ok(());
129                    };
130
131                    let ::std::option::Option::Some(input) = context.input().downcast_ref::<AssumeRoleWithSamlInput>() else {
132                        // A mismatched input is not this interceptor's concern; skip quietly.
133                        return ::std::result::Result::Ok(());
134                    };
135
136                    let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
137                    if requested.should_capture("RoleArn") {
138                        if let ::std::option::Option::Some(value) = input.role_arn.as_deref() {
139                            captured.insert("RoleArn", value);
140                        }
141                    }
142if requested.should_capture("PrincipalArn") {
143                        if let ::std::option::Option::Some(value) = input.principal_arn.as_deref() {
144                            captured.insert("PrincipalArn", value);
145                        }
146                    }
147if requested.should_capture("Policy") {
148                        if let ::std::option::Option::Some(value) = input.policy.as_deref() {
149                            captured.insert("Policy", value);
150                        }
151                    }
152
153                    cfg.interceptor_state().store_put(captured);
154                    ::std::result::Result::Ok(())
155                }
156            }
157#[derive(Debug)]
158            struct AssumeRoleWithSAMLResponseDeserializer;
159            impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for AssumeRoleWithSAMLResponseDeserializer {
160
161
162                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 {
163                    let (success, status) = (response.status().is_success(), response.status().as_u16());
164            let headers = response.headers();
165            let body = response.body().bytes().expect("body loaded");
166            #[allow(unused_mut)]
167            let mut force_error = false;
168            ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
169            let parse_result = if !success && status != 200 || force_error {
170                crate::protocol_serde::shape_assume_role_with_saml::de_assume_role_with_saml_http_error(status, headers, body)
171            } else {
172                crate::protocol_serde::shape_assume_role_with_saml::de_assume_role_with_saml_http_response(status, headers, body)
173            };
174            crate::protocol_serde::type_erase_result(parse_result)
175                }
176            }
177#[derive(Debug)]
178            struct AssumeRoleWithSAMLRequestSerializer;
179            impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for AssumeRoleWithSAMLRequestSerializer {
180                #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
181                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> {
182                    let input = input.downcast::<crate::operation::assume_role_with_saml::AssumeRoleWithSamlInput>().expect("correct type");
183                    let _header_serialization_settings = _cfg.load::<crate::serialization_settings::HeaderSerializationSettings>().cloned().unwrap_or_default();
184                    let mut request_builder = {
185                        #[allow(clippy::uninlined_format_args)]
186fn uri_base(_input: &crate::operation::assume_role_with_saml::AssumeRoleWithSamlInput, output: &mut ::std::string::String) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
187    use ::std::fmt::Write as _;
188    ::std::write!(output, "/").expect("formatting should succeed");
189    ::std::result::Result::Ok(())
190}
191#[allow(clippy::unnecessary_wraps)]
192fn update_http_builder(
193                input: &crate::operation::assume_role_with_saml::AssumeRoleWithSamlInput,
194                builder: ::http_1x::request::Builder
195            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
196    let mut uri = ::std::string::String::new();
197    uri_base(input, &mut uri)?;
198    ::std::result::Result::Ok(builder.method("POST").uri(uri))
199}
200let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
201builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
202builder
203                    };
204                    let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_assume_role_with_saml_input::ser_assume_role_with_saml_input_input_input(&input)?);
205                    if let Some(content_length) = body.content_length() {
206                                let content_length = content_length.to_string();
207                                request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
208                            }
209                    ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
210                }
211            }
212#[derive(Debug)]
213            struct AssumeRoleWithSAMLEndpointParamsInterceptor;
214
215            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
216            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssumeRoleWithSAMLEndpointParamsInterceptor {
217                fn name(&self) -> &'static str {
218                    "AssumeRoleWithSAMLEndpointParamsInterceptor"
219                }
220
221                fn read_before_execution(
222                    &self,
223                    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>,
224                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
225                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
226                    let _input = context.input()
227                        .downcast_ref::<AssumeRoleWithSamlInput>()
228                        .ok_or("failed to downcast to AssumeRoleWithSamlInput")?;
229
230
231
232                    let params = crate::config::endpoint::Params::builder()
233                        .set_region(cfg.load::<::aws_types::region::Region>().map(|r|r.as_ref().to_owned()))
234.set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
235.set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
236.set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
237                        .build()
238                        .map_err(|err| ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err))?;
239                    cfg.interceptor_state().store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
240                    ::std::result::Result::Ok(())
241                }
242            }
243
244            // The get_* functions below are generated from JMESPath expressions in the
245            // operationContextParams trait. They target the operation's input shape.
246
247
248
249/// Error type for the `AssumeRoleWithSAMLError` operation.
250#[non_exhaustive]
251#[derive(::std::fmt::Debug)]
252pub enum AssumeRoleWithSAMLError {
253    /// <p>The web identity token that was passed is expired or is not valid. Get a new identity token from the identity provider and then retry the request.</p>
254    ExpiredTokenException(crate::types::error::ExpiredTokenException),
255    /// <p>The identity provider (IdP) reported that authentication failed. This might be because the claim is invalid.</p>
256    /// <p>If this error is returned for the <code>AssumeRoleWithWebIdentity</code> operation, it can also mean that the claim has expired or has been explicitly revoked.</p>
257    IdpRejectedClaimException(crate::types::error::IdpRejectedClaimException),
258    /// <p>The web identity token that was passed could not be validated by Amazon Web Services. Get a new identity token from the identity provider and then retry the request.</p>
259    InvalidIdentityTokenException(crate::types::error::InvalidIdentityTokenException),
260    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
261    MalformedPolicyDocumentException(crate::types::error::MalformedPolicyDocumentException),
262    /// <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>
263    /// <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>
264    PackedPolicyTooLargeException(crate::types::error::PackedPolicyTooLargeException),
265    /// <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>
266    RegionDisabledException(crate::types::error::RegionDisabledException),
267    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
268                    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
269    variable wildcard pattern and check `.code()`:
270     \
271    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
272     \
273    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-AssumeRoleWithSAMLError) for what information is available for the error.")]
274                    Unhandled(crate::error::sealed_unhandled::Unhandled),
275}
276impl AssumeRoleWithSAMLError {
277    /// Creates the `AssumeRoleWithSAMLError::Unhandled` variant from any error type.
278                    pub fn unhandled(err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>) -> Self {
279                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.into(), meta: ::std::default::Default::default() })
280                    }
281
282                    /// Creates the `AssumeRoleWithSAMLError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
283                    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
284                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.clone().into(), meta: err })
285                    }
286    ///
287    /// Returns error metadata, which includes the error code, message,
288    /// request ID, and potentially additional information.
289    ///
290    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
291        match self {
292            Self::ExpiredTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
293            Self::IdpRejectedClaimException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
294            Self::InvalidIdentityTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
295            Self::MalformedPolicyDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
296            Self::PackedPolicyTooLargeException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
297            Self::RegionDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
298            Self::Unhandled(e) => &e.meta,
299        }
300    }
301    /// Returns `true` if the error kind is `AssumeRoleWithSAMLError::ExpiredTokenException`.
302    pub fn is_expired_token_exception(&self) -> bool {
303        matches!(self, Self::ExpiredTokenException(_))
304    }
305    /// Returns `true` if the error kind is `AssumeRoleWithSAMLError::IdpRejectedClaimException`.
306    pub fn is_idp_rejected_claim_exception(&self) -> bool {
307        matches!(self, Self::IdpRejectedClaimException(_))
308    }
309    /// Returns `true` if the error kind is `AssumeRoleWithSAMLError::InvalidIdentityTokenException`.
310    pub fn is_invalid_identity_token_exception(&self) -> bool {
311        matches!(self, Self::InvalidIdentityTokenException(_))
312    }
313    /// Returns `true` if the error kind is `AssumeRoleWithSAMLError::MalformedPolicyDocumentException`.
314    pub fn is_malformed_policy_document_exception(&self) -> bool {
315        matches!(self, Self::MalformedPolicyDocumentException(_))
316    }
317    /// Returns `true` if the error kind is `AssumeRoleWithSAMLError::PackedPolicyTooLargeException`.
318    pub fn is_packed_policy_too_large_exception(&self) -> bool {
319        matches!(self, Self::PackedPolicyTooLargeException(_))
320    }
321    /// Returns `true` if the error kind is `AssumeRoleWithSAMLError::RegionDisabledException`.
322    pub fn is_region_disabled_exception(&self) -> bool {
323        matches!(self, Self::RegionDisabledException(_))
324    }
325}
326impl ::std::error::Error for AssumeRoleWithSAMLError {
327    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
328        match self {
329            Self::ExpiredTokenException(_inner) =>
330            ::std::option::Option::Some(_inner)
331            ,
332            Self::IdpRejectedClaimException(_inner) =>
333            ::std::option::Option::Some(_inner)
334            ,
335            Self::InvalidIdentityTokenException(_inner) =>
336            ::std::option::Option::Some(_inner)
337            ,
338            Self::MalformedPolicyDocumentException(_inner) =>
339            ::std::option::Option::Some(_inner)
340            ,
341            Self::PackedPolicyTooLargeException(_inner) =>
342            ::std::option::Option::Some(_inner)
343            ,
344            Self::RegionDisabledException(_inner) =>
345            ::std::option::Option::Some(_inner)
346            ,
347            Self::Unhandled(_inner) => {
348                ::std::option::Option::Some(&*_inner.source)
349            }
350        }
351    }
352}
353impl ::std::fmt::Display for AssumeRoleWithSAMLError {
354    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
355        match self {
356            Self::ExpiredTokenException(_inner) =>
357            _inner.fmt(f)
358            ,
359            Self::IdpRejectedClaimException(_inner) =>
360            _inner.fmt(f)
361            ,
362            Self::InvalidIdentityTokenException(_inner) =>
363            _inner.fmt(f)
364            ,
365            Self::MalformedPolicyDocumentException(_inner) =>
366            _inner.fmt(f)
367            ,
368            Self::PackedPolicyTooLargeException(_inner) =>
369            _inner.fmt(f)
370            ,
371            Self::RegionDisabledException(_inner) =>
372            _inner.fmt(f)
373            ,
374            Self::Unhandled(_inner) => {
375                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
376                                                        write!(f, "unhandled error ({code})")
377                                                    } else {
378                                                        f.write_str("unhandled error")
379                                                    }
380            }
381        }
382    }
383}
384impl ::aws_smithy_types::retry::ProvideErrorKind for AssumeRoleWithSAMLError {
385    fn code(&self) -> ::std::option::Option<&str> {
386        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
387    }
388    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
389        ::std::option::Option::None
390    }
391}
392impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for AssumeRoleWithSAMLError {
393    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
394        match self {
395            Self::ExpiredTokenException(_inner) =>
396            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
397            ,
398            Self::IdpRejectedClaimException(_inner) =>
399            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
400            ,
401            Self::InvalidIdentityTokenException(_inner) =>
402            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
403            ,
404            Self::MalformedPolicyDocumentException(_inner) =>
405            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
406            ,
407            Self::PackedPolicyTooLargeException(_inner) =>
408            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
409            ,
410            Self::RegionDisabledException(_inner) =>
411            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
412            ,
413            Self::Unhandled(_inner) => {
414                &_inner.meta
415            }
416        }
417    }
418}
419impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for AssumeRoleWithSAMLError {
420    fn create_unhandled_error(
421                        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
422                        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>
423                    ) -> Self {
424        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source, meta: meta.unwrap_or_default() })
425    }
426}
427impl ::aws_types::request_id::RequestId for crate::operation::assume_role_with_saml::AssumeRoleWithSAMLError {
428                                fn request_id(&self) -> Option<&str> {
429                                    self.meta().request_id()
430                                }
431                            }
432
433pub use crate::operation::assume_role_with_saml::_assume_role_with_saml_input::AssumeRoleWithSamlInput;
434
435pub use crate::operation::assume_role_with_saml::_assume_role_with_saml_output::AssumeRoleWithSamlOutput;
436
437mod _assume_role_with_saml_input;
438
439mod _assume_role_with_saml_output;
440
441/// Builders
442pub mod builders;
443