Skip to main content

aws_sdk_kms/operation/
create_key.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `CreateKey`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct CreateKey;
6impl CreateKey {
7    /// Creates a new `CreateKey`
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_key::CreateKeyInput,
14    ) -> ::std::result::Result<
15        crate::operation::create_key::CreateKeyOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::create_key::CreateKeyError,
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_key::CreateKeyError>()
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_key::CreateKeyOutput>()
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_key::CreateKeyInput,
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("KMS", "CreateKey", 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                "KMS.CreateKey",
59                "rpc.service" = "KMS",
60                "rpc.method" = "CreateKey",
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 CreateKey {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreateKey");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            CreateKeyRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            CreateKeyResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("CreateKey")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("CreateKey", "KMS"));
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("CreateKey")
126            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
127                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
128            ))
129            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
130                CreateKeyEndpointParamsInterceptor,
131            ))
132            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
133                crate::operation::create_key::CreateKeyError,
134            >::new())
135            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
136                crate::operation::create_key::CreateKeyError,
137            >::new())
138            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
139                crate::operation::create_key::CreateKeyError,
140            >::new());
141
142        ::std::borrow::Cow::Owned(rcb)
143    }
144}
145
146#[derive(Debug)]
147struct CreateKeyResponseDeserializer;
148impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreateKeyResponseDeserializer {
149    fn deserialize_nonstreaming_with_config(
150        &self,
151        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
152        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
153    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
154        let (success, status) = (response.status().is_success(), response.status().as_u16());
155        let headers = response.headers();
156        let body = response.body().bytes().expect("body loaded");
157        #[allow(unused_mut)]
158        let mut force_error = false;
159        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
160        let parse_result = if !success && status != 200 || force_error {
161            crate::protocol_serde::shape_create_key::de_create_key_http_error(status, headers, body)
162        } else {
163            crate::protocol_serde::shape_create_key::de_create_key_http_response(status, headers, body)
164        };
165        crate::protocol_serde::type_erase_result(parse_result)
166    }
167}
168#[derive(Debug)]
169struct CreateKeyRequestSerializer;
170impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreateKeyRequestSerializer {
171    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
172    fn serialize_input(
173        &self,
174        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
175        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
176    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
177        let input = input.downcast::<crate::operation::create_key::CreateKeyInput>().expect("correct type");
178        let _header_serialization_settings = _cfg
179            .load::<crate::serialization_settings::HeaderSerializationSettings>()
180            .cloned()
181            .unwrap_or_default();
182        let mut request_builder = {
183            #[allow(clippy::uninlined_format_args)]
184            fn uri_base(
185                _input: &crate::operation::create_key::CreateKeyInput,
186                output: &mut ::std::string::String,
187            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
188                use ::std::fmt::Write as _;
189                ::std::write!(output, "/").expect("formatting should succeed");
190                ::std::result::Result::Ok(())
191            }
192            #[allow(clippy::unnecessary_wraps)]
193            fn update_http_builder(
194                input: &crate::operation::create_key::CreateKeyInput,
195                builder: ::http_1x::request::Builder,
196            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
197                let mut uri = ::std::string::String::new();
198                uri_base(input, &mut uri)?;
199                ::std::result::Result::Ok(builder.method("POST").uri(uri))
200            }
201            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
202            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.1");
203            builder = _header_serialization_settings.set_default_header(
204                builder,
205                ::http_1x::header::HeaderName::from_static("x-amz-target"),
206                "TrentService.CreateKey",
207            );
208            builder
209        };
210        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_create_key::ser_create_key_input(&input)?);
211        if let Some(content_length) = body.content_length() {
212            let content_length = content_length.to_string();
213            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
214        }
215        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
216    }
217}
218#[derive(Debug)]
219struct CreateKeyEndpointParamsInterceptor;
220
221#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
222impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateKeyEndpointParamsInterceptor {
223    fn name(&self) -> &'static str {
224        "CreateKeyEndpointParamsInterceptor"
225    }
226
227    fn read_before_execution(
228        &self,
229        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
230            '_,
231            ::aws_smithy_runtime_api::client::interceptors::context::Input,
232            ::aws_smithy_runtime_api::client::interceptors::context::Output,
233            ::aws_smithy_runtime_api::client::interceptors::context::Error,
234        >,
235        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
236    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
237        let _input = context
238            .input()
239            .downcast_ref::<CreateKeyInput>()
240            .ok_or("failed to downcast to CreateKeyInput")?;
241
242        let params = crate::config::endpoint::Params::builder()
243            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
244            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
245            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
246            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
247            .build()
248            .map_err(|err| {
249                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
250            })?;
251        cfg.interceptor_state()
252            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
253        ::std::result::Result::Ok(())
254    }
255}
256
257// The get_* functions below are generated from JMESPath expressions in the
258// operationContextParams trait. They target the operation's input shape.
259
260/// Error type for the `CreateKeyError` operation.
261#[non_exhaustive]
262#[derive(::std::fmt::Debug)]
263pub enum CreateKeyError {
264    /// <p>The request was rejected because the associated CloudHSM cluster did not meet the configuration requirements for an CloudHSM key store.</p>
265    /// <ul>
266    /// <li>
267    /// <p>The CloudHSM cluster must be configured with private subnets in at least two different Availability Zones in the Region.</p></li>
268    /// <li>
269    /// <p>The <a href="https://docs.aws.amazon.com/cloudhsm/latest/userguide/configure-sg.html">security group for the cluster</a> (cloudhsm-cluster-<i><cluster-id></cluster-id></i>-sg) must include inbound rules and outbound rules that allow TCP traffic on ports 2223-2225. The <b>Source</b> in the inbound rules and the <b>Destination</b> in the outbound rules must match the security group ID. These rules are set by default when you create the CloudHSM cluster. Do not delete or change them. To get information about a particular security group, use the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html">DescribeSecurityGroups</a> operation.</p></li>
270    /// <li>
271    /// <p>The CloudHSM cluster must contain at least as many HSMs as the operation requires. To add HSMs, use the CloudHSM <a href="https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_CreateHsm.html">CreateHsm</a> operation.</p>
272    /// <p>For the <code>CreateCustomKeyStore</code>, <code>UpdateCustomKeyStore</code>, and <code>CreateKey</code> operations, the CloudHSM cluster must have at least two active HSMs, each in a different Availability Zone. For the <code>ConnectCustomKeyStore</code> operation, the CloudHSM must contain at least one active HSM.</p></li>
273    /// </ul>
274    /// <p>For information about the requirements for an CloudHSM cluster that is associated with an CloudHSM key store, see <a href="https://docs.aws.amazon.com/kms/latest/developerguide/create-keystore.html#before-keystore">Assemble the Prerequisites</a> in the <i>Key Management Service Developer Guide</i>. For information about creating a private subnet for an CloudHSM cluster, see <a href="https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-subnets.html">Create a Private Subnet</a> in the <i>CloudHSM User Guide</i>. For information about cluster security groups, see <a href="https://docs.aws.amazon.com/cloudhsm/latest/userguide/configure-sg.html">Configure a Default Security Group</a> in the <i> <i>CloudHSM User Guide</i> </i>.</p>
275    CloudHsmClusterInvalidConfigurationException(crate::types::error::CloudHsmClusterInvalidConfigurationException),
276    /// <p>The request was rejected because of the <code>ConnectionState</code> of the custom key store. To get the <code>ConnectionState</code> of a custom key store, use the <code>DescribeCustomKeyStores</code> operation.</p>
277    /// <p>This exception is thrown under the following conditions:</p>
278    /// <ul>
279    /// <li>
280    /// <p>You requested the <code>ConnectCustomKeyStore</code> operation on a custom key store with a <code>ConnectionState</code> of <code>DISCONNECTING</code> or <code>FAILED</code>. This operation is valid for all other <code>ConnectionState</code> values. To reconnect a custom key store in a <code>FAILED</code> state, disconnect it (<code>DisconnectCustomKeyStore</code>), then connect it (<code>ConnectCustomKeyStore</code>).</p></li>
281    /// <li>
282    /// <p>You requested the <code>CreateKey</code> operation in a custom key store that is not connected. This operations is valid only when the custom key store <code>ConnectionState</code> is <code>CONNECTED</code>.</p></li>
283    /// <li>
284    /// <p>You requested the <code>DisconnectCustomKeyStore</code> operation on a custom key store with a <code>ConnectionState</code> of <code>DISCONNECTING</code> or <code>DISCONNECTED</code>. This operation is valid for all other <code>ConnectionState</code> values.</p></li>
285    /// <li>
286    /// <p>You requested the <code>UpdateCustomKeyStore</code> or <code>DeleteCustomKeyStore</code> operation on a custom key store that is not disconnected. <code>UpdateCustomKeyStore</code> can be called on a custom key store in the <code>CONNECTED</code> state only to update <code>NewCustomKeyStoreName</code>. For all other properties, the custom key store <code>ConnectionState</code> must be <code>DISCONNECTED</code>.</p></li>
287    /// <li>
288    /// <p>You requested the <code>GenerateRandom</code> operation in an CloudHSM key store that is not connected. This operation is valid only when the CloudHSM key store <code>ConnectionState</code> is <code>CONNECTED</code>.</p></li>
289    /// </ul>
290    CustomKeyStoreInvalidStateException(crate::types::error::CustomKeyStoreInvalidStateException),
291    /// <p>The request was rejected because KMS cannot find a custom key store with the specified key store name or ID.</p>
292    CustomKeyStoreNotFoundException(crate::types::error::CustomKeyStoreNotFoundException),
293    /// <p>The system timed out while trying to fulfill the request. You can retry the request.</p>
294    DependencyTimeoutException(crate::types::error::DependencyTimeoutException),
295    /// <p>The request was rejected because a specified ARN, or an ARN in a key policy, is not valid.</p>
296    InvalidArnException(crate::types::error::InvalidArnException),
297    /// <p>The request was rejected because an internal exception occurred. The request can be retried.</p>
298    KmsInternalException(crate::types::error::KmsInternalException),
299    /// <p>The request was rejected because a length constraint or quota was exceeded. For more information, see <a href="https://docs.aws.amazon.com/kms/latest/developerguide/limits.html">Quotas</a> in the <i>Key Management Service Developer Guide</i>.</p>
300    LimitExceededException(crate::types::error::LimitExceededException),
301    /// <p>The request was rejected because the specified policy is not syntactically or semantically correct.</p>
302    MalformedPolicyDocumentException(crate::types::error::MalformedPolicyDocumentException),
303    /// <p>The request was rejected because one or more tags are not valid.</p>
304    TagException(crate::types::error::TagException),
305    /// <p>The request was rejected because a specified parameter is not supported or a specified resource is not valid for this operation.</p>
306    UnsupportedOperationException(crate::types::error::UnsupportedOperationException),
307    /// <p>The request was rejected because the (<code>XksKeyId</code>) is already associated with another KMS key in this external key store. Each KMS key in an external key store must be associated with a different external key.</p>
308    XksKeyAlreadyInUseException(crate::types::error::XksKeyAlreadyInUseException),
309    /// <p>The request was rejected because the external key specified by the <code>XksKeyId</code> parameter did not meet the configuration requirements for an external key store.</p>
310    /// <p>The external key must be an AES-256 symmetric key that is enabled and performs encryption and decryption.</p>
311    XksKeyInvalidConfigurationException(crate::types::error::XksKeyInvalidConfigurationException),
312    /// <p>The request was rejected because the external key store proxy could not find the external key. This exception is thrown when the value of the <code>XksKeyId</code> parameter doesn't identify a key in the external key manager associated with the external key proxy.</p>
313    /// <p>Verify that the <code>XksKeyId</code> represents an existing key in the external key manager. Use the key identifier that the external key store proxy uses to identify the key. For details, see the documentation provided with your external key store proxy or key manager.</p>
314    XksKeyNotFoundException(crate::types::error::XksKeyNotFoundException),
315    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
316    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
317    variable wildcard pattern and check `.code()`:
318     \
319    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
320     \
321    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreateKeyError) for what information is available for the error.")]
322    Unhandled(crate::error::sealed_unhandled::Unhandled),
323}
324impl CreateKeyError {
325    /// Creates the `CreateKeyError::Unhandled` variant from any error type.
326    pub fn unhandled(
327        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
328    ) -> Self {
329        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
330            source: err.into(),
331            meta: ::std::default::Default::default(),
332        })
333    }
334
335    /// Creates the `CreateKeyError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
336    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
337        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
338            source: err.clone().into(),
339            meta: err,
340        })
341    }
342    ///
343    /// Returns error metadata, which includes the error code, message,
344    /// request ID, and potentially additional information.
345    ///
346    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
347        match self {
348            Self::CloudHsmClusterInvalidConfigurationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
349            Self::CustomKeyStoreInvalidStateException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
350            Self::CustomKeyStoreNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
351            Self::DependencyTimeoutException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
352            Self::InvalidArnException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
353            Self::KmsInternalException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
354            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
355            Self::MalformedPolicyDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
356            Self::TagException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
357            Self::UnsupportedOperationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
358            Self::XksKeyAlreadyInUseException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
359            Self::XksKeyInvalidConfigurationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
360            Self::XksKeyNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
361            Self::Unhandled(e) => &e.meta,
362        }
363    }
364    /// Returns `true` if the error kind is `CreateKeyError::CloudHsmClusterInvalidConfigurationException`.
365    pub fn is_cloud_hsm_cluster_invalid_configuration_exception(&self) -> bool {
366        matches!(self, Self::CloudHsmClusterInvalidConfigurationException(_))
367    }
368    /// Returns `true` if the error kind is `CreateKeyError::CustomKeyStoreInvalidStateException`.
369    pub fn is_custom_key_store_invalid_state_exception(&self) -> bool {
370        matches!(self, Self::CustomKeyStoreInvalidStateException(_))
371    }
372    /// Returns `true` if the error kind is `CreateKeyError::CustomKeyStoreNotFoundException`.
373    pub fn is_custom_key_store_not_found_exception(&self) -> bool {
374        matches!(self, Self::CustomKeyStoreNotFoundException(_))
375    }
376    /// Returns `true` if the error kind is `CreateKeyError::DependencyTimeoutException`.
377    pub fn is_dependency_timeout_exception(&self) -> bool {
378        matches!(self, Self::DependencyTimeoutException(_))
379    }
380    /// Returns `true` if the error kind is `CreateKeyError::InvalidArnException`.
381    pub fn is_invalid_arn_exception(&self) -> bool {
382        matches!(self, Self::InvalidArnException(_))
383    }
384    /// Returns `true` if the error kind is `CreateKeyError::KmsInternalException`.
385    pub fn is_kms_internal_exception(&self) -> bool {
386        matches!(self, Self::KmsInternalException(_))
387    }
388    /// Returns `true` if the error kind is `CreateKeyError::LimitExceededException`.
389    pub fn is_limit_exceeded_exception(&self) -> bool {
390        matches!(self, Self::LimitExceededException(_))
391    }
392    /// Returns `true` if the error kind is `CreateKeyError::MalformedPolicyDocumentException`.
393    pub fn is_malformed_policy_document_exception(&self) -> bool {
394        matches!(self, Self::MalformedPolicyDocumentException(_))
395    }
396    /// Returns `true` if the error kind is `CreateKeyError::TagException`.
397    pub fn is_tag_exception(&self) -> bool {
398        matches!(self, Self::TagException(_))
399    }
400    /// Returns `true` if the error kind is `CreateKeyError::UnsupportedOperationException`.
401    pub fn is_unsupported_operation_exception(&self) -> bool {
402        matches!(self, Self::UnsupportedOperationException(_))
403    }
404    /// Returns `true` if the error kind is `CreateKeyError::XksKeyAlreadyInUseException`.
405    pub fn is_xks_key_already_in_use_exception(&self) -> bool {
406        matches!(self, Self::XksKeyAlreadyInUseException(_))
407    }
408    /// Returns `true` if the error kind is `CreateKeyError::XksKeyInvalidConfigurationException`.
409    pub fn is_xks_key_invalid_configuration_exception(&self) -> bool {
410        matches!(self, Self::XksKeyInvalidConfigurationException(_))
411    }
412    /// Returns `true` if the error kind is `CreateKeyError::XksKeyNotFoundException`.
413    pub fn is_xks_key_not_found_exception(&self) -> bool {
414        matches!(self, Self::XksKeyNotFoundException(_))
415    }
416}
417impl ::std::error::Error for CreateKeyError {
418    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
419        match self {
420            Self::CloudHsmClusterInvalidConfigurationException(_inner) => ::std::option::Option::Some(_inner),
421            Self::CustomKeyStoreInvalidStateException(_inner) => ::std::option::Option::Some(_inner),
422            Self::CustomKeyStoreNotFoundException(_inner) => ::std::option::Option::Some(_inner),
423            Self::DependencyTimeoutException(_inner) => ::std::option::Option::Some(_inner),
424            Self::InvalidArnException(_inner) => ::std::option::Option::Some(_inner),
425            Self::KmsInternalException(_inner) => ::std::option::Option::Some(_inner),
426            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
427            Self::MalformedPolicyDocumentException(_inner) => ::std::option::Option::Some(_inner),
428            Self::TagException(_inner) => ::std::option::Option::Some(_inner),
429            Self::UnsupportedOperationException(_inner) => ::std::option::Option::Some(_inner),
430            Self::XksKeyAlreadyInUseException(_inner) => ::std::option::Option::Some(_inner),
431            Self::XksKeyInvalidConfigurationException(_inner) => ::std::option::Option::Some(_inner),
432            Self::XksKeyNotFoundException(_inner) => ::std::option::Option::Some(_inner),
433            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
434        }
435    }
436}
437impl ::std::fmt::Display for CreateKeyError {
438    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
439        match self {
440            Self::CloudHsmClusterInvalidConfigurationException(_inner) => _inner.fmt(f),
441            Self::CustomKeyStoreInvalidStateException(_inner) => _inner.fmt(f),
442            Self::CustomKeyStoreNotFoundException(_inner) => _inner.fmt(f),
443            Self::DependencyTimeoutException(_inner) => _inner.fmt(f),
444            Self::InvalidArnException(_inner) => _inner.fmt(f),
445            Self::KmsInternalException(_inner) => _inner.fmt(f),
446            Self::LimitExceededException(_inner) => _inner.fmt(f),
447            Self::MalformedPolicyDocumentException(_inner) => _inner.fmt(f),
448            Self::TagException(_inner) => _inner.fmt(f),
449            Self::UnsupportedOperationException(_inner) => _inner.fmt(f),
450            Self::XksKeyAlreadyInUseException(_inner) => _inner.fmt(f),
451            Self::XksKeyInvalidConfigurationException(_inner) => _inner.fmt(f),
452            Self::XksKeyNotFoundException(_inner) => _inner.fmt(f),
453            Self::Unhandled(_inner) => {
454                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
455                    write!(f, "unhandled error ({code})")
456                } else {
457                    f.write_str("unhandled error")
458                }
459            }
460        }
461    }
462}
463impl ::aws_smithy_types::retry::ProvideErrorKind for CreateKeyError {
464    fn code(&self) -> ::std::option::Option<&str> {
465        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
466    }
467    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
468        ::std::option::Option::None
469    }
470}
471impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreateKeyError {
472    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
473        match self {
474            Self::CloudHsmClusterInvalidConfigurationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
475            Self::CustomKeyStoreInvalidStateException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
476            Self::CustomKeyStoreNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
477            Self::DependencyTimeoutException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
478            Self::InvalidArnException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
479            Self::KmsInternalException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
480            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
481            Self::MalformedPolicyDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
482            Self::TagException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
483            Self::UnsupportedOperationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
484            Self::XksKeyAlreadyInUseException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
485            Self::XksKeyInvalidConfigurationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
486            Self::XksKeyNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
487            Self::Unhandled(_inner) => &_inner.meta,
488        }
489    }
490}
491impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreateKeyError {
492    fn create_unhandled_error(
493        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
494        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
495    ) -> Self {
496        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
497            source,
498            meta: meta.unwrap_or_default(),
499        })
500    }
501}
502impl ::aws_types::request_id::RequestId for crate::operation::create_key::CreateKeyError {
503    fn request_id(&self) -> Option<&str> {
504        self.meta().request_id()
505    }
506}
507
508pub use crate::operation::create_key::_create_key_input::CreateKeyInput;
509
510pub use crate::operation::create_key::_create_key_output::CreateKeyOutput;
511
512mod _create_key_input;
513
514mod _create_key_output;
515
516/// Builders
517pub mod builders;