Skip to main content

aws_sdk_kms/operation/
import_key_material.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `ImportKeyMaterial`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct ImportKeyMaterial;
6impl ImportKeyMaterial {
7    /// Creates a new `ImportKeyMaterial`
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::import_key_material::ImportKeyMaterialInput,
14    ) -> ::std::result::Result<
15        crate::operation::import_key_material::ImportKeyMaterialOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::import_key_material::ImportKeyMaterialError,
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::import_key_material::ImportKeyMaterialError>()
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::import_key_material::ImportKeyMaterialOutput>()
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::import_key_material::ImportKeyMaterialInput,
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", "ImportKeyMaterial", 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.ImportKeyMaterial",
59                "rpc.service" = "KMS",
60                "rpc.method" = "ImportKeyMaterial",
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 ImportKeyMaterial {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("ImportKeyMaterial");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            ImportKeyMaterialRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            ImportKeyMaterialResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("ImportKeyMaterial")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("ImportKeyMaterial", "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("ImportKeyMaterial")
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                ImportKeyMaterialEndpointParamsInterceptor,
131            ))
132            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
133                crate::operation::import_key_material::ImportKeyMaterialError,
134            >::new())
135            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
136                crate::operation::import_key_material::ImportKeyMaterialError,
137            >::new())
138            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
139                crate::operation::import_key_material::ImportKeyMaterialError,
140            >::new());
141
142        ::std::borrow::Cow::Owned(rcb)
143    }
144}
145
146#[derive(Debug)]
147struct ImportKeyMaterialResponseDeserializer;
148impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for ImportKeyMaterialResponseDeserializer {
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_import_key_material::de_import_key_material_http_error(status, headers, body)
162        } else {
163            crate::protocol_serde::shape_import_key_material::de_import_key_material_http_response(status, headers, body)
164        };
165        crate::protocol_serde::type_erase_result(parse_result)
166    }
167}
168#[derive(Debug)]
169struct ImportKeyMaterialRequestSerializer;
170impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for ImportKeyMaterialRequestSerializer {
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
178            .downcast::<crate::operation::import_key_material::ImportKeyMaterialInput>()
179            .expect("correct type");
180        let _header_serialization_settings = _cfg
181            .load::<crate::serialization_settings::HeaderSerializationSettings>()
182            .cloned()
183            .unwrap_or_default();
184        let mut request_builder = {
185            #[allow(clippy::uninlined_format_args)]
186            fn uri_base(
187                _input: &crate::operation::import_key_material::ImportKeyMaterialInput,
188                output: &mut ::std::string::String,
189            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
190                use ::std::fmt::Write as _;
191                ::std::write!(output, "/").expect("formatting should succeed");
192                ::std::result::Result::Ok(())
193            }
194            #[allow(clippy::unnecessary_wraps)]
195            fn update_http_builder(
196                input: &crate::operation::import_key_material::ImportKeyMaterialInput,
197                builder: ::http_1x::request::Builder,
198            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
199                let mut uri = ::std::string::String::new();
200                uri_base(input, &mut uri)?;
201                ::std::result::Result::Ok(builder.method("POST").uri(uri))
202            }
203            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
204            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.1");
205            builder = _header_serialization_settings.set_default_header(
206                builder,
207                ::http_1x::header::HeaderName::from_static("x-amz-target"),
208                "TrentService.ImportKeyMaterial",
209            );
210            builder
211        };
212        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_import_key_material::ser_import_key_material_input(&input)?);
213        if let Some(content_length) = body.content_length() {
214            let content_length = content_length.to_string();
215            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
216        }
217        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
218    }
219}
220#[derive(Debug)]
221struct ImportKeyMaterialEndpointParamsInterceptor;
222
223#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
224impl ::aws_smithy_runtime_api::client::interceptors::Intercept for ImportKeyMaterialEndpointParamsInterceptor {
225    fn name(&self) -> &'static str {
226        "ImportKeyMaterialEndpointParamsInterceptor"
227    }
228
229    fn read_before_execution(
230        &self,
231        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
232            '_,
233            ::aws_smithy_runtime_api::client::interceptors::context::Input,
234            ::aws_smithy_runtime_api::client::interceptors::context::Output,
235            ::aws_smithy_runtime_api::client::interceptors::context::Error,
236        >,
237        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
238    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
239        let _input = context
240            .input()
241            .downcast_ref::<ImportKeyMaterialInput>()
242            .ok_or("failed to downcast to ImportKeyMaterialInput")?;
243
244        let params = crate::config::endpoint::Params::builder()
245            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
246            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
247            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
248            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
249            .build()
250            .map_err(|err| {
251                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
252            })?;
253        cfg.interceptor_state()
254            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
255        ::std::result::Result::Ok(())
256    }
257}
258
259// The get_* functions below are generated from JMESPath expressions in the
260// operationContextParams trait. They target the operation's input shape.
261
262/// Error type for the `ImportKeyMaterialError` operation.
263#[non_exhaustive]
264#[derive(::std::fmt::Debug)]
265pub enum ImportKeyMaterialError {
266    /// <p>The system timed out while trying to fulfill the request. You can retry the request.</p>
267    DependencyTimeoutException(crate::types::error::DependencyTimeoutException),
268    /// <p>The request was rejected because the specified import token is expired. Use <code>GetParametersForImport</code> to get a new import token and public key, use the new public key to encrypt the key material, and then try the request again.</p>
269    ExpiredImportTokenException(crate::types::error::ExpiredImportTokenException),
270    /// <p>The request was rejected because the key material in the request is, expired, invalid, or does not meet expectations. For example, it is not the same key material that was previously imported or KMS expected new key material but the key material being imported is already associated with the KMS key.</p>
271    IncorrectKeyMaterialException(crate::types::error::IncorrectKeyMaterialException),
272    /// <p>The request was rejected because a specified ARN, or an ARN in a key policy, is not valid.</p>
273    InvalidArnException(crate::types::error::InvalidArnException),
274    /// <p>From the <code>Decrypt</code> or <code>ReEncrypt</code> operation, the request was rejected because the specified ciphertext, or additional authenticated data incorporated into the ciphertext, such as the encryption context, is corrupted, missing, or otherwise invalid.</p>
275    /// <p>From the <code>ImportKeyMaterial</code> operation, the request was rejected because KMS could not decrypt the encrypted (wrapped) key material.</p>
276    InvalidCiphertextException(crate::types::error::InvalidCiphertextException),
277    /// <p>The request was rejected because the provided import token is invalid or is associated with a different KMS key.</p>
278    InvalidImportTokenException(crate::types::error::InvalidImportTokenException),
279    /// <p>The request was rejected because an internal exception occurred. The request can be retried.</p>
280    KmsInternalException(crate::types::error::KmsInternalException),
281    /// <p>The request was rejected because the state of the specified resource is not valid for this request.</p>
282    /// <p>This exceptions means one of the following:</p>
283    /// <ul>
284    /// <li>
285    /// <p>The key state of the KMS key is not compatible with the operation.</p>
286    /// <p>To find the key state, use the <code>DescribeKey</code> operation. For more information about which key states are compatible with each KMS operation, see <a href="https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html">Key states of KMS keys</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p></li>
287    /// <li>
288    /// <p>For cryptographic operations on KMS keys in custom key stores, this exception represents a general failure with many possible causes. To identify the cause, see the error message that accompanies the exception.</p></li>
289    /// </ul>
290    KmsInvalidStateException(crate::types::error::KmsInvalidStateException),
291    /// <p>The request was rejected because the specified entity or resource could not be found.</p>
292    NotFoundException(crate::types::error::NotFoundException),
293    /// <p>The request was rejected because a specified parameter is not supported or a specified resource is not valid for this operation.</p>
294    UnsupportedOperationException(crate::types::error::UnsupportedOperationException),
295    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
296    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
297    variable wildcard pattern and check `.code()`:
298     \
299    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
300     \
301    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-ImportKeyMaterialError) for what information is available for the error.")]
302    Unhandled(crate::error::sealed_unhandled::Unhandled),
303}
304impl ImportKeyMaterialError {
305    /// Creates the `ImportKeyMaterialError::Unhandled` variant from any error type.
306    pub fn unhandled(
307        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
308    ) -> Self {
309        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
310            source: err.into(),
311            meta: ::std::default::Default::default(),
312        })
313    }
314
315    /// Creates the `ImportKeyMaterialError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
316    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
317        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
318            source: err.clone().into(),
319            meta: err,
320        })
321    }
322    ///
323    /// Returns error metadata, which includes the error code, message,
324    /// request ID, and potentially additional information.
325    ///
326    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
327        match self {
328            Self::DependencyTimeoutException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
329            Self::ExpiredImportTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
330            Self::IncorrectKeyMaterialException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::InvalidArnException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::InvalidCiphertextException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::InvalidImportTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
334            Self::KmsInternalException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
335            Self::KmsInvalidStateException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
336            Self::NotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
337            Self::UnsupportedOperationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
338            Self::Unhandled(e) => &e.meta,
339        }
340    }
341    /// Returns `true` if the error kind is `ImportKeyMaterialError::DependencyTimeoutException`.
342    pub fn is_dependency_timeout_exception(&self) -> bool {
343        matches!(self, Self::DependencyTimeoutException(_))
344    }
345    /// Returns `true` if the error kind is `ImportKeyMaterialError::ExpiredImportTokenException`.
346    pub fn is_expired_import_token_exception(&self) -> bool {
347        matches!(self, Self::ExpiredImportTokenException(_))
348    }
349    /// Returns `true` if the error kind is `ImportKeyMaterialError::IncorrectKeyMaterialException`.
350    pub fn is_incorrect_key_material_exception(&self) -> bool {
351        matches!(self, Self::IncorrectKeyMaterialException(_))
352    }
353    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidArnException`.
354    pub fn is_invalid_arn_exception(&self) -> bool {
355        matches!(self, Self::InvalidArnException(_))
356    }
357    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidCiphertextException`.
358    pub fn is_invalid_ciphertext_exception(&self) -> bool {
359        matches!(self, Self::InvalidCiphertextException(_))
360    }
361    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidImportTokenException`.
362    pub fn is_invalid_import_token_exception(&self) -> bool {
363        matches!(self, Self::InvalidImportTokenException(_))
364    }
365    /// Returns `true` if the error kind is `ImportKeyMaterialError::KmsInternalException`.
366    pub fn is_kms_internal_exception(&self) -> bool {
367        matches!(self, Self::KmsInternalException(_))
368    }
369    /// Returns `true` if the error kind is `ImportKeyMaterialError::KmsInvalidStateException`.
370    pub fn is_kms_invalid_state_exception(&self) -> bool {
371        matches!(self, Self::KmsInvalidStateException(_))
372    }
373    /// Returns `true` if the error kind is `ImportKeyMaterialError::NotFoundException`.
374    pub fn is_not_found_exception(&self) -> bool {
375        matches!(self, Self::NotFoundException(_))
376    }
377    /// Returns `true` if the error kind is `ImportKeyMaterialError::UnsupportedOperationException`.
378    pub fn is_unsupported_operation_exception(&self) -> bool {
379        matches!(self, Self::UnsupportedOperationException(_))
380    }
381}
382impl ::std::error::Error for ImportKeyMaterialError {
383    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
384        match self {
385            Self::DependencyTimeoutException(_inner) => ::std::option::Option::Some(_inner),
386            Self::ExpiredImportTokenException(_inner) => ::std::option::Option::Some(_inner),
387            Self::IncorrectKeyMaterialException(_inner) => ::std::option::Option::Some(_inner),
388            Self::InvalidArnException(_inner) => ::std::option::Option::Some(_inner),
389            Self::InvalidCiphertextException(_inner) => ::std::option::Option::Some(_inner),
390            Self::InvalidImportTokenException(_inner) => ::std::option::Option::Some(_inner),
391            Self::KmsInternalException(_inner) => ::std::option::Option::Some(_inner),
392            Self::KmsInvalidStateException(_inner) => ::std::option::Option::Some(_inner),
393            Self::NotFoundException(_inner) => ::std::option::Option::Some(_inner),
394            Self::UnsupportedOperationException(_inner) => ::std::option::Option::Some(_inner),
395            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
396        }
397    }
398}
399impl ::std::fmt::Display for ImportKeyMaterialError {
400    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
401        match self {
402            Self::DependencyTimeoutException(_inner) => _inner.fmt(f),
403            Self::ExpiredImportTokenException(_inner) => _inner.fmt(f),
404            Self::IncorrectKeyMaterialException(_inner) => _inner.fmt(f),
405            Self::InvalidArnException(_inner) => _inner.fmt(f),
406            Self::InvalidCiphertextException(_inner) => _inner.fmt(f),
407            Self::InvalidImportTokenException(_inner) => _inner.fmt(f),
408            Self::KmsInternalException(_inner) => _inner.fmt(f),
409            Self::KmsInvalidStateException(_inner) => _inner.fmt(f),
410            Self::NotFoundException(_inner) => _inner.fmt(f),
411            Self::UnsupportedOperationException(_inner) => _inner.fmt(f),
412            Self::Unhandled(_inner) => {
413                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
414                    write!(f, "unhandled error ({code})")
415                } else {
416                    f.write_str("unhandled error")
417                }
418            }
419        }
420    }
421}
422impl ::aws_smithy_types::retry::ProvideErrorKind for ImportKeyMaterialError {
423    fn code(&self) -> ::std::option::Option<&str> {
424        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
425    }
426    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
427        ::std::option::Option::None
428    }
429}
430impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for ImportKeyMaterialError {
431    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
432        match self {
433            Self::DependencyTimeoutException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
434            Self::ExpiredImportTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
435            Self::IncorrectKeyMaterialException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
436            Self::InvalidArnException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
437            Self::InvalidCiphertextException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
438            Self::InvalidImportTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
439            Self::KmsInternalException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
440            Self::KmsInvalidStateException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
441            Self::NotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
442            Self::UnsupportedOperationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
443            Self::Unhandled(_inner) => &_inner.meta,
444        }
445    }
446}
447impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for ImportKeyMaterialError {
448    fn create_unhandled_error(
449        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
450        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
451    ) -> Self {
452        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
453            source,
454            meta: meta.unwrap_or_default(),
455        })
456    }
457}
458impl ::aws_types::request_id::RequestId for crate::operation::import_key_material::ImportKeyMaterialError {
459    fn request_id(&self) -> Option<&str> {
460        self.meta().request_id()
461    }
462}
463
464pub use crate::operation::import_key_material::_import_key_material_input::ImportKeyMaterialInput;
465
466pub use crate::operation::import_key_material::_import_key_material_output::ImportKeyMaterialOutput;
467
468mod _import_key_material_input;
469
470mod _import_key_material_output;
471
472/// Builders
473pub mod builders;