Skip to main content

aws_sdk_ram/operation/
create_permission.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `CreatePermission`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct CreatePermission;
6impl CreatePermission {
7    /// Creates a new `CreatePermission`
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::create_permission::CreatePermissionInput,
14    ) -> ::std::result::Result<
15        crate::operation::create_permission::CreatePermissionOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::create_permission::CreatePermissionError,
18            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
19        >,
20    > {
21        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<
22            ::aws_smithy_runtime_api::client::interceptors::context::Error,
23            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
24        >| {
25            err.map_service_error(|err| {
26                err.downcast::<crate::operation::create_permission::CreatePermissionError>()
27                    .expect("correct error type")
28            })
29        };
30        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
31            .await
32            .map_err(map_err)?;
33        let output = context.finalize().map_err(map_err)?;
34        ::std::result::Result::Ok(
35            output
36                .downcast::<crate::operation::create_permission::CreatePermissionOutput>()
37                .expect("correct output type"),
38        )
39    }
40
41    pub(crate) async fn orchestrate_with_stop_point(
42        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
43        input: crate::operation::create_permission::CreatePermissionInput,
44        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
45    ) -> ::std::result::Result<
46        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
47        ::aws_smithy_runtime_api::client::result::SdkError<
48            ::aws_smithy_runtime_api::client::interceptors::context::Error,
49            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
50        >,
51    > {
52        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
53        use ::tracing::Instrument;
54        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("RAM", "CreatePermission", input, runtime_plugins, stop_point)
55            // Create a parent span for the entire operation. Includes a random, internal-only,
56            // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
57            .instrument(::tracing::debug_span!(
58                "RAM.CreatePermission",
59                "rpc.service" = "RAM",
60                "rpc.method" = "CreatePermission",
61                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
62                "rpc.system" = "aws-api",
63            ))
64            .await
65    }
66
67    pub(crate) fn operation_runtime_plugins(
68        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
69        client_config: &crate::config::Config,
70        config_override: ::std::option::Option<crate::config::Builder>,
71    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
72        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
73
74        if let ::std::option::Option::Some(config_override) = config_override {
75            for plugin in config_override.runtime_plugins.iter().cloned() {
76                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
77            }
78            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
79                config_override,
80                client_config.config.clone(),
81                &client_config.runtime_components,
82            ));
83        }
84        runtime_plugins
85    }
86}
87impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for CreatePermission {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreatePermission");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            CreatePermissionRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            CreatePermissionResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("CreatePermission")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("CreatePermission", "RAM"));
106        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
107        signing_options.double_uri_encode = true;
108        signing_options.content_sha256_header = false;
109        signing_options.normalize_uri_path = true;
110        signing_options.payload_override = None;
111
112        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
113            signing_options,
114            ..::std::default::Default::default()
115        });
116
117        ::std::option::Option::Some(cfg.freeze())
118    }
119
120    fn runtime_components(
121        &self,
122        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
123    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
124        #[allow(unused_mut)]
125        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreatePermission")
126            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
127                CreatePermissionTelemetryInputCaptureInterceptor,
128            ))
129            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
130                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
131            ))
132            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
133                CreatePermissionEndpointParamsInterceptor,
134            ))
135            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
136                crate::operation::create_permission::CreatePermissionError,
137            >::new())
138            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
139                crate::operation::create_permission::CreatePermissionError,
140            >::new())
141            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
142                crate::operation::create_permission::CreatePermissionError,
143            >::new());
144
145        ::std::borrow::Cow::Owned(rcb)
146    }
147}
148
149#[derive(Debug)]
150struct CreatePermissionTelemetryInputCaptureInterceptor;
151
152#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
153impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreatePermissionTelemetryInputCaptureInterceptor {
154    fn name(&self) -> &'static str {
155        "CreatePermissionTelemetryInputCaptureInterceptor"
156    }
157
158    fn read_before_execution(
159        &self,
160        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
161            '_,
162            ::aws_smithy_runtime_api::client::interceptors::context::Input,
163            ::aws_smithy_runtime_api::client::interceptors::context::Output,
164            ::aws_smithy_runtime_api::client::interceptors::context::Error,
165        >,
166        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
167    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
168        // Nothing to do unless the customer opted in by naming members to record.
169        let ::std::option::Option::Some(requested) = cfg
170            .load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>()
171            .filter(|r| !r.is_empty())
172        else {
173            return ::std::result::Result::Ok(());
174        };
175
176        let ::std::option::Option::Some(input) = context.input().downcast_ref::<CreatePermissionInput>() else {
177            // A mismatched input is not this interceptor's concern; skip quietly.
178            return ::std::result::Result::Ok(());
179        };
180
181        let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
182        if requested.should_capture("name") {
183            if let ::std::option::Option::Some(value) = input.name.as_deref() {
184                captured.insert("name", value);
185            }
186        }
187        if requested.should_capture("resourceType") {
188            if let ::std::option::Option::Some(value) = input.resource_type.as_deref() {
189                captured.insert("resourceType", value);
190            }
191        }
192        if requested.should_capture("policyTemplate") {
193            if let ::std::option::Option::Some(value) = input.policy_template.as_deref() {
194                captured.insert("policyTemplate", value);
195            }
196        }
197        if requested.should_capture("clientToken") {
198            if let ::std::option::Option::Some(value) = input.client_token.as_deref() {
199                captured.insert("clientToken", value);
200            }
201        }
202
203        cfg.interceptor_state().store_put(captured);
204        ::std::result::Result::Ok(())
205    }
206}
207#[derive(Debug)]
208struct CreatePermissionResponseDeserializer;
209impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreatePermissionResponseDeserializer {
210    fn deserialize_nonstreaming_with_config(
211        &self,
212        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
213        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
214    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
215        let (success, status) = (response.status().is_success(), response.status().as_u16());
216        let headers = response.headers();
217        let body = response.body().bytes().expect("body loaded");
218        #[allow(unused_mut)]
219        let mut force_error = false;
220        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
221        let parse_result = if !success && status != 200 || force_error {
222            crate::protocol_serde::shape_create_permission::de_create_permission_http_error(status, headers, body)
223        } else {
224            crate::protocol_serde::shape_create_permission::de_create_permission_http_response(status, headers, body)
225        };
226        crate::protocol_serde::type_erase_result(parse_result)
227    }
228}
229#[derive(Debug)]
230struct CreatePermissionRequestSerializer;
231impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreatePermissionRequestSerializer {
232    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
233    fn serialize_input(
234        &self,
235        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
236        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
237    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
238        let input = input
239            .downcast::<crate::operation::create_permission::CreatePermissionInput>()
240            .expect("correct type");
241        let _header_serialization_settings = _cfg
242            .load::<crate::serialization_settings::HeaderSerializationSettings>()
243            .cloned()
244            .unwrap_or_default();
245        let mut request_builder = {
246            #[allow(clippy::uninlined_format_args)]
247            fn uri_base(
248                _input: &crate::operation::create_permission::CreatePermissionInput,
249                output: &mut ::std::string::String,
250            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
251                use ::std::fmt::Write as _;
252                ::std::write!(output, "/createpermission").expect("formatting should succeed");
253                ::std::result::Result::Ok(())
254            }
255            #[allow(clippy::unnecessary_wraps)]
256            fn update_http_builder(
257                input: &crate::operation::create_permission::CreatePermissionInput,
258                builder: ::http_1x::request::Builder,
259            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
260                let mut uri = ::std::string::String::new();
261                uri_base(input, &mut uri)?;
262                ::std::result::Result::Ok(builder.method("POST").uri(uri))
263            }
264            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
265            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/json");
266            builder
267        };
268        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_create_permission::ser_create_permission_input(&input)?);
269        if let Some(content_length) = body.content_length() {
270            let content_length = content_length.to_string();
271            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
272        }
273        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
274    }
275}
276#[derive(Debug)]
277struct CreatePermissionEndpointParamsInterceptor;
278
279#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
280impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreatePermissionEndpointParamsInterceptor {
281    fn name(&self) -> &'static str {
282        "CreatePermissionEndpointParamsInterceptor"
283    }
284
285    fn read_before_execution(
286        &self,
287        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
288            '_,
289            ::aws_smithy_runtime_api::client::interceptors::context::Input,
290            ::aws_smithy_runtime_api::client::interceptors::context::Output,
291            ::aws_smithy_runtime_api::client::interceptors::context::Error,
292        >,
293        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
294    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
295        let _input = context
296            .input()
297            .downcast_ref::<CreatePermissionInput>()
298            .ok_or("failed to downcast to CreatePermissionInput")?;
299
300        let params = crate::config::endpoint::Params::builder()
301            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
302            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
303            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
304            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
305            .build()
306            .map_err(|err| {
307                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
308            })?;
309        cfg.interceptor_state()
310            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
311        ::std::result::Result::Ok(())
312    }
313}
314
315// The get_* functions below are generated from JMESPath expressions in the
316// operationContextParams trait. They target the operation's input shape.
317
318/// Error type for the `CreatePermissionError` operation.
319#[non_exhaustive]
320#[derive(::std::fmt::Debug)]
321pub enum CreatePermissionError {
322    /// <p>The operation failed because the client token input parameter matched one that was used with a previous call to the operation, but at least one of the other input parameters is different from the previous call.</p>
323    IdempotentParameterMismatchException(crate::types::error::IdempotentParameterMismatchException),
324    /// <p>The operation failed because the specified client token isn't valid.</p>
325    InvalidClientTokenException(crate::types::error::InvalidClientTokenException),
326    /// <p>The operation failed because a parameter you specified isn't valid.</p>
327    InvalidParameterException(crate::types::error::InvalidParameterException),
328    /// <p>The operation failed because a policy you specified isn't valid.</p>
329    InvalidPolicyException(crate::types::error::InvalidPolicyException),
330    /// <p>The operation failed because the policy template that you provided isn't valid.</p>
331    MalformedPolicyTemplateException(crate::types::error::MalformedPolicyTemplateException),
332    /// <p>The operation failed because the requested operation isn't permitted.</p>
333    OperationNotPermittedException(crate::types::error::OperationNotPermittedException),
334    /// <p>The operation failed because a permission with the specified name already exists in the requested Amazon Web Services Region. Choose a different name.</p>
335    PermissionAlreadyExistsException(crate::types::error::PermissionAlreadyExistsException),
336    /// <p>The operation failed because it would exceed the maximum number of permissions you can create in each Amazon Web Services Region. To view the limits for your Amazon Web Services account, see the <a href="https://console.aws.amazon.com/servicequotas/home/services/ram/quotas">RAM page in the Service Quotas console</a>.</p>
337    PermissionLimitExceededException(crate::types::error::PermissionLimitExceededException),
338    /// <p>The operation failed because the service could not respond to the request due to an internal problem. Try again later.</p>
339    ServerInternalException(crate::types::error::ServerInternalException),
340    /// <p>The operation failed because the service isn't available. Try again later.</p>
341    ServiceUnavailableException(crate::types::error::ServiceUnavailableException),
342    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
343    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
344    variable wildcard pattern and check `.code()`:
345     \
346    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
347     \
348    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreatePermissionError) for what information is available for the error.")]
349    Unhandled(crate::error::sealed_unhandled::Unhandled),
350}
351impl CreatePermissionError {
352    /// Creates the `CreatePermissionError::Unhandled` variant from any error type.
353    pub fn unhandled(
354        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
355    ) -> Self {
356        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
357            source: err.into(),
358            meta: ::std::default::Default::default(),
359        })
360    }
361
362    /// Creates the `CreatePermissionError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
363    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
364        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
365            source: err.clone().into(),
366            meta: err,
367        })
368    }
369    ///
370    /// Returns error metadata, which includes the error code, message,
371    /// request ID, and potentially additional information.
372    ///
373    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
374        match self {
375            Self::IdempotentParameterMismatchException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
376            Self::InvalidClientTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
377            Self::InvalidParameterException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
378            Self::InvalidPolicyException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
379            Self::MalformedPolicyTemplateException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
380            Self::OperationNotPermittedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
381            Self::PermissionAlreadyExistsException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
382            Self::PermissionLimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
383            Self::ServerInternalException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
384            Self::ServiceUnavailableException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
385            Self::Unhandled(e) => &e.meta,
386        }
387    }
388    /// Returns `true` if the error kind is `CreatePermissionError::IdempotentParameterMismatchException`.
389    pub fn is_idempotent_parameter_mismatch_exception(&self) -> bool {
390        matches!(self, Self::IdempotentParameterMismatchException(_))
391    }
392    /// Returns `true` if the error kind is `CreatePermissionError::InvalidClientTokenException`.
393    pub fn is_invalid_client_token_exception(&self) -> bool {
394        matches!(self, Self::InvalidClientTokenException(_))
395    }
396    /// Returns `true` if the error kind is `CreatePermissionError::InvalidParameterException`.
397    pub fn is_invalid_parameter_exception(&self) -> bool {
398        matches!(self, Self::InvalidParameterException(_))
399    }
400    /// Returns `true` if the error kind is `CreatePermissionError::InvalidPolicyException`.
401    pub fn is_invalid_policy_exception(&self) -> bool {
402        matches!(self, Self::InvalidPolicyException(_))
403    }
404    /// Returns `true` if the error kind is `CreatePermissionError::MalformedPolicyTemplateException`.
405    pub fn is_malformed_policy_template_exception(&self) -> bool {
406        matches!(self, Self::MalformedPolicyTemplateException(_))
407    }
408    /// Returns `true` if the error kind is `CreatePermissionError::OperationNotPermittedException`.
409    pub fn is_operation_not_permitted_exception(&self) -> bool {
410        matches!(self, Self::OperationNotPermittedException(_))
411    }
412    /// Returns `true` if the error kind is `CreatePermissionError::PermissionAlreadyExistsException`.
413    pub fn is_permission_already_exists_exception(&self) -> bool {
414        matches!(self, Self::PermissionAlreadyExistsException(_))
415    }
416    /// Returns `true` if the error kind is `CreatePermissionError::PermissionLimitExceededException`.
417    pub fn is_permission_limit_exceeded_exception(&self) -> bool {
418        matches!(self, Self::PermissionLimitExceededException(_))
419    }
420    /// Returns `true` if the error kind is `CreatePermissionError::ServerInternalException`.
421    pub fn is_server_internal_exception(&self) -> bool {
422        matches!(self, Self::ServerInternalException(_))
423    }
424    /// Returns `true` if the error kind is `CreatePermissionError::ServiceUnavailableException`.
425    pub fn is_service_unavailable_exception(&self) -> bool {
426        matches!(self, Self::ServiceUnavailableException(_))
427    }
428}
429impl ::std::error::Error for CreatePermissionError {
430    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
431        match self {
432            Self::IdempotentParameterMismatchException(_inner) => ::std::option::Option::Some(_inner),
433            Self::InvalidClientTokenException(_inner) => ::std::option::Option::Some(_inner),
434            Self::InvalidParameterException(_inner) => ::std::option::Option::Some(_inner),
435            Self::InvalidPolicyException(_inner) => ::std::option::Option::Some(_inner),
436            Self::MalformedPolicyTemplateException(_inner) => ::std::option::Option::Some(_inner),
437            Self::OperationNotPermittedException(_inner) => ::std::option::Option::Some(_inner),
438            Self::PermissionAlreadyExistsException(_inner) => ::std::option::Option::Some(_inner),
439            Self::PermissionLimitExceededException(_inner) => ::std::option::Option::Some(_inner),
440            Self::ServerInternalException(_inner) => ::std::option::Option::Some(_inner),
441            Self::ServiceUnavailableException(_inner) => ::std::option::Option::Some(_inner),
442            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
443        }
444    }
445}
446impl ::std::fmt::Display for CreatePermissionError {
447    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
448        match self {
449            Self::IdempotentParameterMismatchException(_inner) => _inner.fmt(f),
450            Self::InvalidClientTokenException(_inner) => _inner.fmt(f),
451            Self::InvalidParameterException(_inner) => _inner.fmt(f),
452            Self::InvalidPolicyException(_inner) => _inner.fmt(f),
453            Self::MalformedPolicyTemplateException(_inner) => _inner.fmt(f),
454            Self::OperationNotPermittedException(_inner) => _inner.fmt(f),
455            Self::PermissionAlreadyExistsException(_inner) => _inner.fmt(f),
456            Self::PermissionLimitExceededException(_inner) => _inner.fmt(f),
457            Self::ServerInternalException(_inner) => _inner.fmt(f),
458            Self::ServiceUnavailableException(_inner) => _inner.fmt(f),
459            Self::Unhandled(_inner) => {
460                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
461                    write!(f, "unhandled error ({code})")
462                } else {
463                    f.write_str("unhandled error")
464                }
465            }
466        }
467    }
468}
469impl ::aws_smithy_types::retry::ProvideErrorKind for CreatePermissionError {
470    fn code(&self) -> ::std::option::Option<&str> {
471        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
472    }
473    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
474        ::std::option::Option::None
475    }
476}
477impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreatePermissionError {
478    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
479        match self {
480            Self::IdempotentParameterMismatchException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
481            Self::InvalidClientTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
482            Self::InvalidParameterException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
483            Self::InvalidPolicyException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
484            Self::MalformedPolicyTemplateException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
485            Self::OperationNotPermittedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
486            Self::PermissionAlreadyExistsException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
487            Self::PermissionLimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
488            Self::ServerInternalException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
489            Self::ServiceUnavailableException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
490            Self::Unhandled(_inner) => &_inner.meta,
491        }
492    }
493}
494impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreatePermissionError {
495    fn create_unhandled_error(
496        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
497        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
498    ) -> Self {
499        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
500            source,
501            meta: meta.unwrap_or_default(),
502        })
503    }
504}
505impl ::aws_types::request_id::RequestId for crate::operation::create_permission::CreatePermissionError {
506    fn request_id(&self) -> Option<&str> {
507        self.meta().request_id()
508    }
509}
510
511pub use crate::operation::create_permission::_create_permission_input::CreatePermissionInput;
512
513pub use crate::operation::create_permission::_create_permission_output::CreatePermissionOutput;
514
515mod _create_permission_input;
516
517mod _create_permission_output;
518
519/// Builders
520pub mod builders;