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.with_retry_classifier(::aws_runtime::service_clock_skew::ServiceClockSkewClassifier::<crate::operation::put_resource_permission_statement::PutResourcePermissionStatementError>::new());
119
120                    ::std::borrow::Cow::Owned(rcb)
121                }
122            }
123
124            #[derive(Debug)]
125            struct PutResourcePermissionStatementTelemetryInputCaptureInterceptor;
126
127            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
128            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutResourcePermissionStatementTelemetryInputCaptureInterceptor {
129                fn name(&self) -> &'static str {
130                    "PutResourcePermissionStatementTelemetryInputCaptureInterceptor"
131                }
132
133                fn read_before_execution(
134                    &self,
135                    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>,
136                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
137                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
138                    // Nothing to do unless the customer opted in by naming members to record.
139                    let ::std::option::Option::Some(requested) = cfg.load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>().filter(|r| !r.is_empty()) else {
140                        return ::std::result::Result::Ok(());
141                    };
142
143                    let ::std::option::Option::Some(input) = context.input().downcast_ref::<PutResourcePermissionStatementInput>() else {
144                        // A mismatched input is not this interceptor's concern; skip quietly.
145                        return ::std::result::Result::Ok(());
146                    };
147
148                    let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
149                    if requested.should_capture("sourceVpc") {
150                            if let ::std::option::Option::Some(value) = input.source_vpc.as_deref() {
151                                captured.insert("sourceVpc", value);
152                            }
153                        }
154if requested.should_capture("signinSourceVpce") {
155                            if let ::std::option::Option::Some(value) = input.signin_source_vpce.as_deref() {
156                                captured.insert("signinSourceVpce", value);
157                            }
158                        }
159if requested.should_capture("consoleSourceVpce") {
160                            if let ::std::option::Option::Some(value) = input.console_source_vpce.as_deref() {
161                                captured.insert("consoleSourceVpce", value);
162                            }
163                        }
164if requested.should_capture("vpcSourceIp") {
165                            if let ::std::option::Option::Some(value) = input.vpc_source_ip.as_deref() {
166                                captured.insert("vpcSourceIp", value);
167                            }
168                        }
169if requested.should_capture("sourceIp") {
170                            if let ::std::option::Option::Some(value) = input.source_ip.as_deref() {
171                                captured.insert("sourceIp", value);
172                            }
173                        }
174if requested.should_capture("requestedRegion") {
175                            if let ::std::option::Option::Some(value) = input.requested_region.as_deref() {
176                                captured.insert("requestedRegion", value);
177                            }
178                        }
179if requested.should_capture("excludedPrincipal") {
180                            if let ::std::option::Option::Some(value) = input.excluded_principal.as_deref() {
181                                captured.insert("excludedPrincipal", value);
182                            }
183                        }
184if requested.should_capture("clientToken") {
185                            if let ::std::option::Option::Some(value) = input.client_token.as_deref() {
186                                captured.insert("clientToken", value);
187                            }
188                        }
189
190                    cfg.interceptor_state().store_put(captured);
191                    ::std::result::Result::Ok(())
192                }
193            }
194#[derive(Debug)]
195            struct PutResourcePermissionStatementResponseDeserializer;
196            impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for PutResourcePermissionStatementResponseDeserializer {
197
198
199                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 {
200                    let (success, status) = (response.status().is_success(), response.status().as_u16());
201            let headers = response.headers();
202            let body = response.body().bytes().expect("body loaded");
203            #[allow(unused_mut)]
204            let mut force_error = false;
205            ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
206            let parse_result = if !success && status != 200 || force_error {
207                crate::protocol_serde::shape_put_resource_permission_statement::de_put_resource_permission_statement_http_error(status, headers, body, _cfg)
208            } else {
209                crate::protocol_serde::shape_put_resource_permission_statement::de_put_resource_permission_statement_http_response(status, headers, body, _cfg)
210            };
211            crate::protocol_serde::type_erase_result(parse_result)
212                }
213            }
214#[derive(Debug)]
215            struct PutResourcePermissionStatementRequestSerializer;
216            impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for PutResourcePermissionStatementRequestSerializer {
217                #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
218                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> {
219                    let input = input.downcast::<crate::operation::put_resource_permission_statement::PutResourcePermissionStatementInput>().expect("correct type");
220                    let _header_serialization_settings = _cfg.load::<crate::serialization_settings::HeaderSerializationSettings>().cloned().unwrap_or_default();
221                    let mut request_builder = {
222                        #[allow(clippy::uninlined_format_args)]
223fn uri_base(_input: &crate::operation::put_resource_permission_statement::PutResourcePermissionStatementInput, output: &mut ::std::string::String) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
224    use ::std::fmt::Write as _;
225    ::std::write!(output, "/put-resource-permission-statement").expect("formatting should succeed");
226    ::std::result::Result::Ok(())
227}
228#[allow(clippy::unnecessary_wraps)]
229fn update_http_builder(
230                input: &crate::operation::put_resource_permission_statement::PutResourcePermissionStatementInput,
231                builder: ::http_1x::request::Builder
232            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
233    let mut uri = ::std::string::String::new();
234    uri_base(input, &mut uri)?;
235    ::std::result::Result::Ok(builder.method("POST").uri(uri))
236}
237let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
238builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/json");
239builder
240                    };
241                    let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_put_resource_permission_statement::ser_put_resource_permission_statement_input(&input)?);
242                    if let Some(content_length) = body.content_length() {
243                                let content_length = content_length.to_string();
244                                request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
245                            }
246                    ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
247                }
248            }
249#[derive(Debug)]
250            struct PutResourcePermissionStatementEndpointParamsInterceptor;
251
252            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
253            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutResourcePermissionStatementEndpointParamsInterceptor {
254                fn name(&self) -> &'static str {
255                    "PutResourcePermissionStatementEndpointParamsInterceptor"
256                }
257
258                fn read_before_execution(
259                    &self,
260                    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>,
261                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
262                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
263                    let _input = context.input()
264                        .downcast_ref::<PutResourcePermissionStatementInput>()
265                        .ok_or("failed to downcast to PutResourcePermissionStatementInput")?;
266
267
268
269                    let params = crate::config::endpoint::Params::builder()
270                        .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
271.set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
272.set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
273.set_region(cfg.load::<::aws_types::region::Region>().map(|r|r.as_ref().to_owned()))
274.set_is_control_plane(Some(true))
275                        .build()
276                        .map_err(|err| ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err))?;
277                    cfg.interceptor_state().store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
278                    ::std::result::Result::Ok(())
279                }
280            }
281
282            // The get_* functions below are generated from JMESPath expressions in the
283            // operationContextParams trait. They target the operation's input shape.
284
285
286
287/// Error type for the `PutResourcePermissionStatementError` operation.
288#[non_exhaustive]
289#[derive(::std::fmt::Debug)]
290pub enum PutResourcePermissionStatementError {
291    /// 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.
292    AccessDeniedException(crate::types::error::AccessDeniedException),
293    /// 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
294    ConflictException(crate::types::error::ConflictException),
295    /// 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.
296    InternalServerException(crate::types::error::InternalServerException),
297    /// 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
298    ServiceQuotaExceededException(crate::types::error::ServiceQuotaExceededException),
299    /// 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
300    TooManyRequestsError(crate::types::error::TooManyRequestsError),
301    /// 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.
302    ValidationException(crate::types::error::ValidationException),
303    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
304                    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
305    variable wildcard pattern and check `.code()`:
306     \
307    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
308     \
309    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-PutResourcePermissionStatementError) for what information is available for the error.")]
310                    Unhandled(crate::error::sealed_unhandled::Unhandled),
311}
312impl PutResourcePermissionStatementError {
313    /// Creates the `PutResourcePermissionStatementError::Unhandled` variant from any error type.
314                    pub fn unhandled(err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>) -> Self {
315                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.into(), meta: ::std::default::Default::default() })
316                    }
317
318                    /// Creates the `PutResourcePermissionStatementError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
319                    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
320                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.clone().into(), meta: err })
321                    }
322    ///
323    /// Returns error metadata, which includes the error code, message,
324    /// request ID, and potentially additional information.
325    ///
326    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
327        match self {
328            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
329            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
330            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::ServiceQuotaExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::TooManyRequestsError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
334            Self::Unhandled(e) => &e.meta,
335        }
336    }
337    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::AccessDeniedException`.
338    pub fn is_access_denied_exception(&self) -> bool {
339        matches!(self, Self::AccessDeniedException(_))
340    }
341    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::ConflictException`.
342    pub fn is_conflict_exception(&self) -> bool {
343        matches!(self, Self::ConflictException(_))
344    }
345    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::InternalServerException`.
346    pub fn is_internal_server_exception(&self) -> bool {
347        matches!(self, Self::InternalServerException(_))
348    }
349    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::ServiceQuotaExceededException`.
350    pub fn is_service_quota_exceeded_exception(&self) -> bool {
351        matches!(self, Self::ServiceQuotaExceededException(_))
352    }
353    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::TooManyRequestsError`.
354    pub fn is_too_many_requests_error(&self) -> bool {
355        matches!(self, Self::TooManyRequestsError(_))
356    }
357    /// Returns `true` if the error kind is `PutResourcePermissionStatementError::ValidationException`.
358    pub fn is_validation_exception(&self) -> bool {
359        matches!(self, Self::ValidationException(_))
360    }
361}
362impl ::std::error::Error for PutResourcePermissionStatementError {
363    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
364        match self {
365            Self::AccessDeniedException(_inner) =>
366            ::std::option::Option::Some(_inner)
367            ,
368            Self::ConflictException(_inner) =>
369            ::std::option::Option::Some(_inner)
370            ,
371            Self::InternalServerException(_inner) =>
372            ::std::option::Option::Some(_inner)
373            ,
374            Self::ServiceQuotaExceededException(_inner) =>
375            ::std::option::Option::Some(_inner)
376            ,
377            Self::TooManyRequestsError(_inner) =>
378            ::std::option::Option::Some(_inner)
379            ,
380            Self::ValidationException(_inner) =>
381            ::std::option::Option::Some(_inner)
382            ,
383            Self::Unhandled(_inner) => {
384                ::std::option::Option::Some(&*_inner.source)
385            }
386        }
387    }
388}
389impl ::std::fmt::Display for PutResourcePermissionStatementError {
390    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
391        match self {
392            Self::AccessDeniedException(_inner) =>
393            _inner.fmt(f)
394            ,
395            Self::ConflictException(_inner) =>
396            _inner.fmt(f)
397            ,
398            Self::InternalServerException(_inner) =>
399            _inner.fmt(f)
400            ,
401            Self::ServiceQuotaExceededException(_inner) =>
402            _inner.fmt(f)
403            ,
404            Self::TooManyRequestsError(_inner) =>
405            _inner.fmt(f)
406            ,
407            Self::ValidationException(_inner) =>
408            _inner.fmt(f)
409            ,
410            Self::Unhandled(_inner) => {
411                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
412                                                        write!(f, "unhandled error ({code})")
413                                                    } else {
414                                                        f.write_str("unhandled error")
415                                                    }
416            }
417        }
418    }
419}
420impl ::aws_smithy_types::retry::ProvideErrorKind for PutResourcePermissionStatementError {
421    fn code(&self) -> ::std::option::Option<&str> {
422        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
423    }
424    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
425        ::std::option::Option::None
426    }
427}
428impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for PutResourcePermissionStatementError {
429    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
430        match self {
431            Self::AccessDeniedException(_inner) =>
432            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
433            ,
434            Self::ConflictException(_inner) =>
435            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
436            ,
437            Self::InternalServerException(_inner) =>
438            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
439            ,
440            Self::ServiceQuotaExceededException(_inner) =>
441            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
442            ,
443            Self::TooManyRequestsError(_inner) =>
444            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
445            ,
446            Self::ValidationException(_inner) =>
447            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
448            ,
449            Self::Unhandled(_inner) => {
450                &_inner.meta
451            }
452        }
453    }
454}
455impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for PutResourcePermissionStatementError {
456    fn create_unhandled_error(
457                        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
458                        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>
459                    ) -> Self {
460        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source, meta: meta.unwrap_or_default() })
461    }
462}
463impl ::aws_types::request_id::RequestId for crate::operation::put_resource_permission_statement::PutResourcePermissionStatementError {
464                                fn request_id(&self) -> Option<&str> {
465                                    self.meta().request_id()
466                                }
467                            }
468
469pub use crate::operation::put_resource_permission_statement::_put_resource_permission_statement_input::PutResourcePermissionStatementInput;
470
471pub use crate::operation::put_resource_permission_statement::_put_resource_permission_statement_output::PutResourcePermissionStatementOutput;
472
473mod _put_resource_permission_statement_input;
474
475mod _put_resource_permission_statement_output;
476
477/// Builders
478pub mod builders;
479