Skip to main content

aws_sdk_signin/operation/
put_resource_permission_statement.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `PutResourcePermissionStatement`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct PutResourcePermissionStatement;
6impl PutResourcePermissionStatement {
7    /// Creates a new `PutResourcePermissionStatement`
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::put_resource_permission_statement::PutResourcePermissionStatementInput,
14                    ) -> ::std::result::Result<crate::operation::put_resource_permission_statement::PutResourcePermissionStatementOutput, ::aws_smithy_runtime_api::client::result::SdkError<crate::operation::put_resource_permission_statement::PutResourcePermissionStatementError, ::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::put_resource_permission_statement::PutResourcePermissionStatementError>().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::put_resource_permission_statement::PutResourcePermissionStatementOutput>().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::put_resource_permission_statement::PutResourcePermissionStatementInput,
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                            "Signin",
36                            "PutResourcePermissionStatement",
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                                "Signin.PutResourcePermissionStatement",
45                                "rpc.service" = "Signin",
46                                "rpc.method" = "PutResourcePermissionStatement",
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_operation_plugin(crate::client_idempotency_token::IdempotencyTokenRuntimePlugin::new(|token_provider, input| {
61                                    let input: &mut crate::operation::put_resource_permission_statement::PutResourcePermissionStatementInput = input.downcast_mut().expect("correct type");
62                                    if input.client_token.is_none() {
63                                        input.client_token = ::std::option::Option::Some(token_provider.make_idempotency_token());
64                                    }
65                                }));
66                        if let ::std::option::Option::Some(config_override) = config_override {
67                            for plugin in config_override.runtime_plugins.iter().cloned() {
68                                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
69                            }
70                            runtime_plugins = runtime_plugins.with_operation_plugin(
71                                crate::config::ConfigOverrideRuntimePlugin::new(config_override, client_config.config.clone(), &client_config.runtime_components)
72                            );
73                        }
74                        runtime_plugins
75                    }
76}
77impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for PutResourcePermissionStatement {
78                fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
79                    let mut cfg = ::aws_smithy_types::config_bag::Layer::new("PutResourcePermissionStatement");
80
81                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(PutResourcePermissionStatementRequestSerializer));
82                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(PutResourcePermissionStatementResponseDeserializer));
83
84                    cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
85                        crate::config::auth::Params::builder()
86                            .operation_name("PutResourcePermissionStatement")
87                            .build()
88                            .expect("required fields set")
89                    ));
90
91                    cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
92                            "PutResourcePermissionStatement",
93                            "Signin",
94                        ));
95let 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(&self, _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
110                    #[allow(unused_mut)]
111                    let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("PutResourcePermissionStatement")
112                            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(PutResourcePermissionStatementTelemetryInputCaptureInterceptor))
113.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default()))
114.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(PutResourcePermissionStatementEndpointParamsInterceptor))
115                            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<crate::operation::put_resource_permission_statement::PutResourcePermissionStatementError>::new())
116.with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<crate::operation::put_resource_permission_statement::PutResourcePermissionStatementError>::new())
117.with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<crate::operation::put_resource_permission_statement::PutResourcePermissionStatementError>::new());
118
119                    ::std::borrow::Cow::Owned(rcb)
120                }
121            }
122
123            #[derive(Debug)]
124            struct PutResourcePermissionStatementTelemetryInputCaptureInterceptor;
125
126            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
127            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutResourcePermissionStatementTelemetryInputCaptureInterceptor {
128                fn name(&self) -> &'static str {
129                    "PutResourcePermissionStatementTelemetryInputCaptureInterceptor"
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::<PutResourcePermissionStatementInput>() 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("sourceVpc") {
149                        if let ::std::option::Option::Some(value) = input.source_vpc.as_deref() {
150                            captured.insert("sourceVpc", value);
151                        }
152                    }
153if requested.should_capture("signinSourceVpce") {
154                        if let ::std::option::Option::Some(value) = input.signin_source_vpce.as_deref() {
155                            captured.insert("signinSourceVpce", value);
156                        }
157                    }
158if requested.should_capture("consoleSourceVpce") {
159                        if let ::std::option::Option::Some(value) = input.console_source_vpce.as_deref() {
160                            captured.insert("consoleSourceVpce", value);
161                        }
162                    }
163if requested.should_capture("vpcSourceIp") {
164                        if let ::std::option::Option::Some(value) = input.vpc_source_ip.as_deref() {
165                            captured.insert("vpcSourceIp", value);
166                        }
167                    }
168if requested.should_capture("sourceIp") {
169                        if let ::std::option::Option::Some(value) = input.source_ip.as_deref() {
170                            captured.insert("sourceIp", value);
171                        }
172                    }
173if requested.should_capture("requestedRegion") {
174                        if let ::std::option::Option::Some(value) = input.requested_region.as_deref() {
175                            captured.insert("requestedRegion", value);
176                        }
177                    }
178if requested.should_capture("excludedPrincipal") {
179                        if let ::std::option::Option::Some(value) = input.excluded_principal.as_deref() {
180                            captured.insert("excludedPrincipal", value);
181                        }
182                    }
183if requested.should_capture("clientToken") {
184                        if let ::std::option::Option::Some(value) = input.client_token.as_deref() {
185                            captured.insert("clientToken", value);
186                        }
187                    }
188
189                    cfg.interceptor_state().store_put(captured);
190                    ::std::result::Result::Ok(())
191                }
192            }
193#[derive(Debug)]
194            struct PutResourcePermissionStatementResponseDeserializer;
195            impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for PutResourcePermissionStatementResponseDeserializer {
196
197
198                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 {
199                    let (success, status) = (response.status().is_success(), response.status().as_u16());
200            let headers = response.headers();
201            let body = response.body().bytes().expect("body loaded");
202            #[allow(unused_mut)]
203            let mut force_error = false;
204            ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
205            let parse_result = if !success && status != 200 || force_error {
206                crate::protocol_serde::shape_put_resource_permission_statement::de_put_resource_permission_statement_http_error(status, headers, body)
207            } else {
208                crate::protocol_serde::shape_put_resource_permission_statement::de_put_resource_permission_statement_http_response(status, headers, body)
209            };
210            crate::protocol_serde::type_erase_result(parse_result)
211                }
212            }
213#[derive(Debug)]
214            struct PutResourcePermissionStatementRequestSerializer;
215            impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for PutResourcePermissionStatementRequestSerializer {
216                #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
217                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> {
218                    let input = input.downcast::<crate::operation::put_resource_permission_statement::PutResourcePermissionStatementInput>().expect("correct type");
219                    let _header_serialization_settings = _cfg.load::<crate::serialization_settings::HeaderSerializationSettings>().cloned().unwrap_or_default();
220                    let mut request_builder = {
221                        #[allow(clippy::uninlined_format_args)]
222fn uri_base(_input: &crate::operation::put_resource_permission_statement::PutResourcePermissionStatementInput, output: &mut ::std::string::String) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
223    use ::std::fmt::Write as _;
224    ::std::write!(output, "/put-resource-permission-statement").expect("formatting should succeed");
225    ::std::result::Result::Ok(())
226}
227#[allow(clippy::unnecessary_wraps)]
228fn update_http_builder(
229                input: &crate::operation::put_resource_permission_statement::PutResourcePermissionStatementInput,
230                builder: ::http_1x::request::Builder
231            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
232    let mut uri = ::std::string::String::new();
233    uri_base(input, &mut uri)?;
234    ::std::result::Result::Ok(builder.method("POST").uri(uri))
235}
236let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
237builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/json");
238builder
239                    };
240                    let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_put_resource_permission_statement::ser_put_resource_permission_statement_input(&input)?);
241                    if let Some(content_length) = body.content_length() {
242                                let content_length = content_length.to_string();
243                                request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
244                            }
245                    ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
246                }
247            }
248#[derive(Debug)]
249            struct PutResourcePermissionStatementEndpointParamsInterceptor;
250
251            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
252            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutResourcePermissionStatementEndpointParamsInterceptor {
253                fn name(&self) -> &'static str {
254                    "PutResourcePermissionStatementEndpointParamsInterceptor"
255                }
256
257                fn read_before_execution(
258                    &self,
259                    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>,
260                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
261                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
262                    let _input = context.input()
263                        .downcast_ref::<PutResourcePermissionStatementInput>()
264                        .ok_or("failed to downcast to PutResourcePermissionStatementInput")?;
265
266
267
268                    let params = crate::config::endpoint::Params::builder()
269                        .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
270.set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
271.set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
272.set_region(cfg.load::<::aws_types::region::Region>().map(|r|r.as_ref().to_owned()))
273.set_is_control_plane(Some(true))
274                        .build()
275                        .map_err(|err| ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err))?;
276                    cfg.interceptor_state().store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
277                    ::std::result::Result::Ok(())
278                }
279            }
280
281            // The get_* functions below are generated from JMESPath expressions in the
282            // operationContextParams trait. They target the operation's input shape.
283
284
285
286/// Error type for the `PutResourcePermissionStatementError` operation.
287#[non_exhaustive]
288#[derive(::std::fmt::Debug)]
289pub enum PutResourcePermissionStatementError {
290    /// Error thrown for access denied scenarios with flexible HTTP status mapping Runtime HTTP Status Code Mapping: - HTTP 401 (Unauthorized): TOKEN_EXPIRED, AUTHCODE_EXPIRED - HTTP 403 (Forbidden): USER_CREDENTIALS_CHANGED, INSUFFICIENT_PERMISSIONS The specific HTTP status code is determined at runtime based on the error enum value. Consumers should use the error field to determine the specific access denial reason.
291    AccessDeniedException(crate::types::error::AccessDeniedException),
292    /// Error thrown when request conflicts with current state HTTP Status Code: 409 Conflict Used when the request conflicts with the current state of the resource
293    ConflictException(crate::types::error::ConflictException),
294    /// Error thrown when an internal server error occurs HTTP Status Code: 500 Internal Server Error Used for unexpected server-side errors that prevent request processing.
295    InternalServerException(crate::types::error::InternalServerException),
296    /// Error thrown when service quota is exceeded HTTP Status Code: 402 Payment Required (used as quota exceeded indicator) Used when the request would cause a service quota to be exceeded
297    ServiceQuotaExceededException(crate::types::error::ServiceQuotaExceededException),
298    /// Error thrown when rate limit is exceeded HTTP Status Code: 429 Too Many Requests Possible OAuth2ErrorCode values: - INVALID_REQUEST: Rate limiting, too many requests, abuse prevention Possible causes: - Too many token requests from the same client - Rate limiting based on client_id or IP address - Abuse prevention mechanisms triggered - Service protection against excessive token generation
299    TooManyRequestsError(crate::types::error::TooManyRequestsError),
300    /// Error thrown when request validation fails HTTP Status Code: 400 Bad Request Used for request validation errors such as malformed parameters, missing required fields, or invalid parameter values.
301    ValidationException(crate::types::error::ValidationException),
302    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
303                    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
304    variable wildcard pattern and check `.code()`:
305     \
306    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
307     \
308    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-PutResourcePermissionStatementError) for what information is available for the error.")]
309                    Unhandled(crate::error::sealed_unhandled::Unhandled),
310}
311impl PutResourcePermissionStatementError {
312    /// Creates the `PutResourcePermissionStatementError::Unhandled` variant from any error type.
313                    pub fn unhandled(err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>) -> Self {
314                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.into(), meta: ::std::default::Default::default() })
315                    }
316
317                    /// Creates the `PutResourcePermissionStatementError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
318                    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
319                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.clone().into(), meta: err })
320                    }
321    ///
322    /// Returns error metadata, which includes the error code, message,
323    /// request ID, and potentially additional information.
324    ///
325    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
326        match self {
327            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
328            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
329            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
330            Self::ServiceQuotaExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::TooManyRequestsError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::Unhandled(e) => &e.meta,
334        }
335    }
336    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::AccessDeniedException`.
337    pub fn is_access_denied_exception(&self) -> bool {
338        matches!(self, Self::AccessDeniedException(_))
339    }
340    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::ConflictException`.
341    pub fn is_conflict_exception(&self) -> bool {
342        matches!(self, Self::ConflictException(_))
343    }
344    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::InternalServerException`.
345    pub fn is_internal_server_exception(&self) -> bool {
346        matches!(self, Self::InternalServerException(_))
347    }
348    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::ServiceQuotaExceededException`.
349    pub fn is_service_quota_exceeded_exception(&self) -> bool {
350        matches!(self, Self::ServiceQuotaExceededException(_))
351    }
352    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::TooManyRequestsError`.
353    pub fn is_too_many_requests_error(&self) -> bool {
354        matches!(self, Self::TooManyRequestsError(_))
355    }
356    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::ValidationException`.
357    pub fn is_validation_exception(&self) -> bool {
358        matches!(self, Self::ValidationException(_))
359    }
360}
361impl ::std::error::Error for PutResourcePermissionStatementError {
362    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
363        match self {
364            Self::AccessDeniedException(_inner) =>
365            ::std::option::Option::Some(_inner)
366            ,
367            Self::ConflictException(_inner) =>
368            ::std::option::Option::Some(_inner)
369            ,
370            Self::InternalServerException(_inner) =>
371            ::std::option::Option::Some(_inner)
372            ,
373            Self::ServiceQuotaExceededException(_inner) =>
374            ::std::option::Option::Some(_inner)
375            ,
376            Self::TooManyRequestsError(_inner) =>
377            ::std::option::Option::Some(_inner)
378            ,
379            Self::ValidationException(_inner) =>
380            ::std::option::Option::Some(_inner)
381            ,
382            Self::Unhandled(_inner) => {
383                ::std::option::Option::Some(&*_inner.source)
384            }
385        }
386    }
387}
388impl ::std::fmt::Display for PutResourcePermissionStatementError {
389    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
390        match self {
391            Self::AccessDeniedException(_inner) =>
392            _inner.fmt(f)
393            ,
394            Self::ConflictException(_inner) =>
395            _inner.fmt(f)
396            ,
397            Self::InternalServerException(_inner) =>
398            _inner.fmt(f)
399            ,
400            Self::ServiceQuotaExceededException(_inner) =>
401            _inner.fmt(f)
402            ,
403            Self::TooManyRequestsError(_inner) =>
404            _inner.fmt(f)
405            ,
406            Self::ValidationException(_inner) =>
407            _inner.fmt(f)
408            ,
409            Self::Unhandled(_inner) => {
410                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
411                                                        write!(f, "unhandled error ({code})")
412                                                    } else {
413                                                        f.write_str("unhandled error")
414                                                    }
415            }
416        }
417    }
418}
419impl ::aws_smithy_types::retry::ProvideErrorKind for PutResourcePermissionStatementError {
420    fn code(&self) -> ::std::option::Option<&str> {
421        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
422    }
423    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
424        ::std::option::Option::None
425    }
426}
427impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for PutResourcePermissionStatementError {
428    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
429        match self {
430            Self::AccessDeniedException(_inner) =>
431            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
432            ,
433            Self::ConflictException(_inner) =>
434            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
435            ,
436            Self::InternalServerException(_inner) =>
437            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
438            ,
439            Self::ServiceQuotaExceededException(_inner) =>
440            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
441            ,
442            Self::TooManyRequestsError(_inner) =>
443            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
444            ,
445            Self::ValidationException(_inner) =>
446            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
447            ,
448            Self::Unhandled(_inner) => {
449                &_inner.meta
450            }
451        }
452    }
453}
454impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for PutResourcePermissionStatementError {
455    fn create_unhandled_error(
456                        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
457                        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>
458                    ) -> Self {
459        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source, meta: meta.unwrap_or_default() })
460    }
461}
462impl ::aws_types::request_id::RequestId for crate::operation::put_resource_permission_statement::PutResourcePermissionStatementError {
463                                fn request_id(&self) -> Option<&str> {
464                                    self.meta().request_id()
465                                }
466                            }
467
468pub use crate::operation::put_resource_permission_statement::_put_resource_permission_statement_input::PutResourcePermissionStatementInput;
469
470pub use crate::operation::put_resource_permission_statement::_put_resource_permission_statement_output::PutResourcePermissionStatementOutput;
471
472mod _put_resource_permission_statement_input;
473
474mod _put_resource_permission_statement_output;
475
476/// Builders
477pub mod builders;
478