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        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("kms", "CreateKey", input, runtime_plugins, stop_point).await
54    }
55
56    pub(crate) fn operation_runtime_plugins(
57        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
58        client_config: &crate::config::Config,
59        config_override: ::std::option::Option<crate::config::Builder>,
60    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
61        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
62        runtime_plugins = runtime_plugins.with_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
63            ::aws_runtime::auth::sigv4::SCHEME_ID,
64        ]));
65        if let ::std::option::Option::Some(config_override) = config_override {
66            for plugin in config_override.runtime_plugins.iter().cloned() {
67                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
68            }
69            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
70                config_override,
71                client_config.config.clone(),
72                &client_config.runtime_components,
73            ));
74        }
75        runtime_plugins
76    }
77}
78impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for CreateKey {
79    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
80        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreateKey");
81
82        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
83            CreateKeyRequestSerializer,
84        ));
85        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
86            CreateKeyResponseDeserializer,
87        ));
88
89        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
90            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
91        ));
92
93        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("CreateKey", "kms"));
94        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
95        signing_options.double_uri_encode = true;
96        signing_options.content_sha256_header = false;
97        signing_options.normalize_uri_path = true;
98        signing_options.payload_override = None;
99
100        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
101            signing_options,
102            ..::std::default::Default::default()
103        });
104
105        ::std::option::Option::Some(cfg.freeze())
106    }
107
108    fn runtime_components(
109        &self,
110        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
111    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
112        #[allow(unused_mut)]
113        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreateKey")
114            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
115            .with_interceptor(CreateKeyEndpointParamsInterceptor)
116            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
117                crate::operation::create_key::CreateKeyError,
118            >::new())
119            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
120                crate::operation::create_key::CreateKeyError,
121            >::new())
122            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
123                crate::operation::create_key::CreateKeyError,
124            >::new());
125
126        ::std::borrow::Cow::Owned(rcb)
127    }
128}
129
130#[derive(Debug)]
131struct CreateKeyResponseDeserializer;
132impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreateKeyResponseDeserializer {
133    fn deserialize_nonstreaming(
134        &self,
135        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
136    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
137        let (success, status) = (response.status().is_success(), response.status().as_u16());
138        let headers = response.headers();
139        let body = response.body().bytes().expect("body loaded");
140        #[allow(unused_mut)]
141        let mut force_error = false;
142        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
143        let parse_result = if !success && status != 200 || force_error {
144            crate::protocol_serde::shape_create_key::de_create_key_http_error(status, headers, body)
145        } else {
146            crate::protocol_serde::shape_create_key::de_create_key_http_response(status, headers, body)
147        };
148        crate::protocol_serde::type_erase_result(parse_result)
149    }
150}
151#[derive(Debug)]
152struct CreateKeyRequestSerializer;
153impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreateKeyRequestSerializer {
154    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
155    fn serialize_input(
156        &self,
157        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
158        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
159    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
160        let input = input.downcast::<crate::operation::create_key::CreateKeyInput>().expect("correct type");
161        let _header_serialization_settings = _cfg
162            .load::<crate::serialization_settings::HeaderSerializationSettings>()
163            .cloned()
164            .unwrap_or_default();
165        let mut request_builder = {
166            fn uri_base(
167                _input: &crate::operation::create_key::CreateKeyInput,
168                output: &mut ::std::string::String,
169            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
170                use ::std::fmt::Write as _;
171                ::std::write!(output, "/").expect("formatting should succeed");
172                ::std::result::Result::Ok(())
173            }
174            #[allow(clippy::unnecessary_wraps)]
175            fn update_http_builder(
176                input: &crate::operation::create_key::CreateKeyInput,
177                builder: ::http::request::Builder,
178            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
179                let mut uri = ::std::string::String::new();
180                uri_base(input, &mut uri)?;
181                ::std::result::Result::Ok(builder.method("POST").uri(uri))
182            }
183            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
184            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-amz-json-1.1");
185            builder = _header_serialization_settings.set_default_header(
186                builder,
187                ::http::header::HeaderName::from_static("x-amz-target"),
188                "TrentService.CreateKey",
189            );
190            builder
191        };
192        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_create_key::ser_create_key_input(&input)?);
193        if let Some(content_length) = body.content_length() {
194            let content_length = content_length.to_string();
195            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
196        }
197        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
198    }
199}
200#[derive(Debug)]
201struct CreateKeyEndpointParamsInterceptor;
202
203impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreateKeyEndpointParamsInterceptor {
204    fn name(&self) -> &'static str {
205        "CreateKeyEndpointParamsInterceptor"
206    }
207
208    fn read_before_execution(
209        &self,
210        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
211            '_,
212            ::aws_smithy_runtime_api::client::interceptors::context::Input,
213            ::aws_smithy_runtime_api::client::interceptors::context::Output,
214            ::aws_smithy_runtime_api::client::interceptors::context::Error,
215        >,
216        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
217    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
218        let _input = context
219            .input()
220            .downcast_ref::<CreateKeyInput>()
221            .ok_or("failed to downcast to CreateKeyInput")?;
222
223        let params = crate::config::endpoint::Params::builder()
224            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
225            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
226            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
227            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
228            .build()
229            .map_err(|err| {
230                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
231            })?;
232        cfg.interceptor_state()
233            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
234        ::std::result::Result::Ok(())
235    }
236}
237
238// The get_* functions below are generated from JMESPath expressions in the
239// operationContextParams trait. They target the operation's input shape.
240
241/// Error type for the `CreateKeyError` operation.
242#[non_exhaustive]
243#[derive(::std::fmt::Debug)]
244pub enum CreateKeyError {
245    /// <p>The request was rejected because the associated CloudHSM cluster did not meet the configuration requirements for an CloudHSM key store.</p>
246    /// <ul>
247    /// <li>
248    /// <p>The CloudHSM cluster must be configured with private subnets in at least two different Availability Zones in the Region.</p></li>
249    /// <li>
250    /// <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>
251    /// <li>
252    /// <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>
253    /// <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>
254    /// </ul>
255    /// <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>
256    CloudHsmClusterInvalidConfigurationException(crate::types::error::CloudHsmClusterInvalidConfigurationException),
257    /// <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>
258    /// <p>This exception is thrown under the following conditions:</p>
259    /// <ul>
260    /// <li>
261    /// <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>
262    /// <li>
263    /// <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>
264    /// <li>
265    /// <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>
266    /// <li>
267    /// <p>You requested the <code>UpdateCustomKeyStore</code> or <code>DeleteCustomKeyStore</code> operation on a custom key store that is not disconnected. This operation is valid only when the custom key store <code>ConnectionState</code> is <code>DISCONNECTED</code>.</p></li>
268    /// <li>
269    /// <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>
270    /// </ul>
271    CustomKeyStoreInvalidStateException(crate::types::error::CustomKeyStoreInvalidStateException),
272    /// <p>The request was rejected because KMS cannot find a custom key store with the specified key store name or ID.</p>
273    CustomKeyStoreNotFoundException(crate::types::error::CustomKeyStoreNotFoundException),
274    /// <p>The system timed out while trying to fulfill the request. You can retry the request.</p>
275    DependencyTimeoutException(crate::types::error::DependencyTimeoutException),
276    /// <p>The request was rejected because a specified ARN, or an ARN in a key policy, is not valid.</p>
277    InvalidArnException(crate::types::error::InvalidArnException),
278    /// <p>The request was rejected because an internal exception occurred. The request can be retried.</p>
279    KmsInternalException(crate::types::error::KmsInternalException),
280    /// <p>The request was rejected because a 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>
281    LimitExceededException(crate::types::error::LimitExceededException),
282    /// <p>The request was rejected because the specified policy is not syntactically or semantically correct.</p>
283    MalformedPolicyDocumentException(crate::types::error::MalformedPolicyDocumentException),
284    /// <p>The request was rejected because one or more tags are not valid.</p>
285    TagException(crate::types::error::TagException),
286    /// <p>The request was rejected because a specified parameter is not supported or a specified resource is not valid for this operation.</p>
287    UnsupportedOperationException(crate::types::error::UnsupportedOperationException),
288    /// <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>
289    XksKeyAlreadyInUseException(crate::types::error::XksKeyAlreadyInUseException),
290    /// <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>
291    /// <p>The external key must be an AES-256 symmetric key that is enabled and performs encryption and decryption.</p>
292    XksKeyInvalidConfigurationException(crate::types::error::XksKeyInvalidConfigurationException),
293    /// <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>
294    /// <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>
295    XksKeyNotFoundException(crate::types::error::XksKeyNotFoundException),
296    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
297    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
298    variable wildcard pattern and check `.code()`:
299     \
300    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
301     \
302    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreateKeyError) for what information is available for the error.")]
303    Unhandled(crate::error::sealed_unhandled::Unhandled),
304}
305impl CreateKeyError {
306    /// Creates the `CreateKeyError::Unhandled` variant from any error type.
307    pub fn unhandled(
308        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
309    ) -> Self {
310        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
311            source: err.into(),
312            meta: ::std::default::Default::default(),
313        })
314    }
315
316    /// Creates the `CreateKeyError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
317    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
318        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
319            source: err.clone().into(),
320            meta: err,
321        })
322    }
323    ///
324    /// Returns error metadata, which includes the error code, message,
325    /// request ID, and potentially additional information.
326    ///
327    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
328        match self {
329            Self::CloudHsmClusterInvalidConfigurationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
330            Self::CustomKeyStoreInvalidStateException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::CustomKeyStoreNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::DependencyTimeoutException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::InvalidArnException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
334            Self::KmsInternalException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
335            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
336            Self::MalformedPolicyDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
337            Self::TagException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
338            Self::UnsupportedOperationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
339            Self::XksKeyAlreadyInUseException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
340            Self::XksKeyInvalidConfigurationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
341            Self::XksKeyNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
342            Self::Unhandled(e) => &e.meta,
343        }
344    }
345    /// Returns `true` if the error kind is `CreateKeyError::CloudHsmClusterInvalidConfigurationException`.
346    pub fn is_cloud_hsm_cluster_invalid_configuration_exception(&self) -> bool {
347        matches!(self, Self::CloudHsmClusterInvalidConfigurationException(_))
348    }
349    /// Returns `true` if the error kind is `CreateKeyError::CustomKeyStoreInvalidStateException`.
350    pub fn is_custom_key_store_invalid_state_exception(&self) -> bool {
351        matches!(self, Self::CustomKeyStoreInvalidStateException(_))
352    }
353    /// Returns `true` if the error kind is `CreateKeyError::CustomKeyStoreNotFoundException`.
354    pub fn is_custom_key_store_not_found_exception(&self) -> bool {
355        matches!(self, Self::CustomKeyStoreNotFoundException(_))
356    }
357    /// Returns `true` if the error kind is `CreateKeyError::DependencyTimeoutException`.
358    pub fn is_dependency_timeout_exception(&self) -> bool {
359        matches!(self, Self::DependencyTimeoutException(_))
360    }
361    /// Returns `true` if the error kind is `CreateKeyError::InvalidArnException`.
362    pub fn is_invalid_arn_exception(&self) -> bool {
363        matches!(self, Self::InvalidArnException(_))
364    }
365    /// Returns `true` if the error kind is `CreateKeyError::KmsInternalException`.
366    pub fn is_kms_internal_exception(&self) -> bool {
367        matches!(self, Self::KmsInternalException(_))
368    }
369    /// Returns `true` if the error kind is `CreateKeyError::LimitExceededException`.
370    pub fn is_limit_exceeded_exception(&self) -> bool {
371        matches!(self, Self::LimitExceededException(_))
372    }
373    /// Returns `true` if the error kind is `CreateKeyError::MalformedPolicyDocumentException`.
374    pub fn is_malformed_policy_document_exception(&self) -> bool {
375        matches!(self, Self::MalformedPolicyDocumentException(_))
376    }
377    /// Returns `true` if the error kind is `CreateKeyError::TagException`.
378    pub fn is_tag_exception(&self) -> bool {
379        matches!(self, Self::TagException(_))
380    }
381    /// Returns `true` if the error kind is `CreateKeyError::UnsupportedOperationException`.
382    pub fn is_unsupported_operation_exception(&self) -> bool {
383        matches!(self, Self::UnsupportedOperationException(_))
384    }
385    /// Returns `true` if the error kind is `CreateKeyError::XksKeyAlreadyInUseException`.
386    pub fn is_xks_key_already_in_use_exception(&self) -> bool {
387        matches!(self, Self::XksKeyAlreadyInUseException(_))
388    }
389    /// Returns `true` if the error kind is `CreateKeyError::XksKeyInvalidConfigurationException`.
390    pub fn is_xks_key_invalid_configuration_exception(&self) -> bool {
391        matches!(self, Self::XksKeyInvalidConfigurationException(_))
392    }
393    /// Returns `true` if the error kind is `CreateKeyError::XksKeyNotFoundException`.
394    pub fn is_xks_key_not_found_exception(&self) -> bool {
395        matches!(self, Self::XksKeyNotFoundException(_))
396    }
397}
398impl ::std::error::Error for CreateKeyError {
399    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
400        match self {
401            Self::CloudHsmClusterInvalidConfigurationException(_inner) => ::std::option::Option::Some(_inner),
402            Self::CustomKeyStoreInvalidStateException(_inner) => ::std::option::Option::Some(_inner),
403            Self::CustomKeyStoreNotFoundException(_inner) => ::std::option::Option::Some(_inner),
404            Self::DependencyTimeoutException(_inner) => ::std::option::Option::Some(_inner),
405            Self::InvalidArnException(_inner) => ::std::option::Option::Some(_inner),
406            Self::KmsInternalException(_inner) => ::std::option::Option::Some(_inner),
407            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
408            Self::MalformedPolicyDocumentException(_inner) => ::std::option::Option::Some(_inner),
409            Self::TagException(_inner) => ::std::option::Option::Some(_inner),
410            Self::UnsupportedOperationException(_inner) => ::std::option::Option::Some(_inner),
411            Self::XksKeyAlreadyInUseException(_inner) => ::std::option::Option::Some(_inner),
412            Self::XksKeyInvalidConfigurationException(_inner) => ::std::option::Option::Some(_inner),
413            Self::XksKeyNotFoundException(_inner) => ::std::option::Option::Some(_inner),
414            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
415        }
416    }
417}
418impl ::std::fmt::Display for CreateKeyError {
419    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
420        match self {
421            Self::CloudHsmClusterInvalidConfigurationException(_inner) => _inner.fmt(f),
422            Self::CustomKeyStoreInvalidStateException(_inner) => _inner.fmt(f),
423            Self::CustomKeyStoreNotFoundException(_inner) => _inner.fmt(f),
424            Self::DependencyTimeoutException(_inner) => _inner.fmt(f),
425            Self::InvalidArnException(_inner) => _inner.fmt(f),
426            Self::KmsInternalException(_inner) => _inner.fmt(f),
427            Self::LimitExceededException(_inner) => _inner.fmt(f),
428            Self::MalformedPolicyDocumentException(_inner) => _inner.fmt(f),
429            Self::TagException(_inner) => _inner.fmt(f),
430            Self::UnsupportedOperationException(_inner) => _inner.fmt(f),
431            Self::XksKeyAlreadyInUseException(_inner) => _inner.fmt(f),
432            Self::XksKeyInvalidConfigurationException(_inner) => _inner.fmt(f),
433            Self::XksKeyNotFoundException(_inner) => _inner.fmt(f),
434            Self::Unhandled(_inner) => {
435                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
436                    write!(f, "unhandled error ({code})")
437                } else {
438                    f.write_str("unhandled error")
439                }
440            }
441        }
442    }
443}
444impl ::aws_smithy_types::retry::ProvideErrorKind for CreateKeyError {
445    fn code(&self) -> ::std::option::Option<&str> {
446        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
447    }
448    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
449        ::std::option::Option::None
450    }
451}
452impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreateKeyError {
453    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
454        match self {
455            Self::CloudHsmClusterInvalidConfigurationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
456            Self::CustomKeyStoreInvalidStateException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
457            Self::CustomKeyStoreNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
458            Self::DependencyTimeoutException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
459            Self::InvalidArnException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
460            Self::KmsInternalException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
461            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
462            Self::MalformedPolicyDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
463            Self::TagException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
464            Self::UnsupportedOperationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
465            Self::XksKeyAlreadyInUseException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
466            Self::XksKeyInvalidConfigurationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
467            Self::XksKeyNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
468            Self::Unhandled(_inner) => &_inner.meta,
469        }
470    }
471}
472impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreateKeyError {
473    fn create_unhandled_error(
474        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
475        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
476    ) -> Self {
477        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
478            source,
479            meta: meta.unwrap_or_default(),
480        })
481    }
482}
483impl ::aws_types::request_id::RequestId for crate::operation::create_key::CreateKeyError {
484    fn request_id(&self) -> Option<&str> {
485        self.meta().request_id()
486    }
487}
488
489pub use crate::operation::create_key::_create_key_output::CreateKeyOutput;
490
491pub use crate::operation::create_key::_create_key_input::CreateKeyInput;
492
493mod _create_key_input;
494
495mod _create_key_output;
496
497/// Builders
498pub mod builders;