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