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                ImportKeyMaterialTelemetryInputCaptureInterceptor,
128            ))
129            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
130                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
131            ))
132            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
133                ImportKeyMaterialEndpointParamsInterceptor,
134            ))
135            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
136                crate::operation::import_key_material::ImportKeyMaterialError,
137            >::new())
138            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
139                crate::operation::import_key_material::ImportKeyMaterialError,
140            >::new())
141            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
142                crate::operation::import_key_material::ImportKeyMaterialError,
143            >::new())
144            .with_retry_classifier(::aws_runtime::service_clock_skew::ServiceClockSkewClassifier::<
145                crate::operation::import_key_material::ImportKeyMaterialError,
146            >::new());
147
148        ::std::borrow::Cow::Owned(rcb)
149    }
150}
151
152#[derive(Debug)]
153struct ImportKeyMaterialTelemetryInputCaptureInterceptor;
154
155#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
156impl ::aws_smithy_runtime_api::client::interceptors::Intercept for ImportKeyMaterialTelemetryInputCaptureInterceptor {
157    fn name(&self) -> &'static str {
158        "ImportKeyMaterialTelemetryInputCaptureInterceptor"
159    }
160
161    fn read_before_execution(
162        &self,
163        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
164            '_,
165            ::aws_smithy_runtime_api::client::interceptors::context::Input,
166            ::aws_smithy_runtime_api::client::interceptors::context::Output,
167            ::aws_smithy_runtime_api::client::interceptors::context::Error,
168        >,
169        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
170    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
171        // Nothing to do unless the customer opted in by naming members to record.
172        let ::std::option::Option::Some(requested) = cfg
173            .load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>()
174            .filter(|r| !r.is_empty())
175        else {
176            return ::std::result::Result::Ok(());
177        };
178
179        let ::std::option::Option::Some(input) = context.input().downcast_ref::<ImportKeyMaterialInput>() else {
180            // A mismatched input is not this interceptor's concern; skip quietly.
181            return ::std::result::Result::Ok(());
182        };
183
184        let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
185        if requested.should_capture("KeyId") {
186            if let ::std::option::Option::Some(value) = input.key_id.as_deref() {
187                captured.insert("KeyId", value);
188            }
189        }
190        if requested.should_capture("KeyMaterialDescription") {
191            if let ::std::option::Option::Some(value) = input.key_material_description.as_deref() {
192                captured.insert("KeyMaterialDescription", value);
193            }
194        }
195        if requested.should_capture("KeyMaterialId") {
196            if let ::std::option::Option::Some(value) = input.key_material_id.as_deref() {
197                captured.insert("KeyMaterialId", value);
198            }
199        }
200
201        cfg.interceptor_state().store_put(captured);
202        ::std::result::Result::Ok(())
203    }
204}
205#[derive(Debug)]
206struct ImportKeyMaterialResponseDeserializer;
207impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for ImportKeyMaterialResponseDeserializer {
208    fn deserialize_nonstreaming_with_config(
209        &self,
210        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
211        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
212    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
213        let (success, status) = (response.status().is_success(), response.status().as_u16());
214        let headers = response.headers();
215        let body = response.body().bytes().expect("body loaded");
216        #[allow(unused_mut)]
217        let mut force_error = false;
218        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
219        let parse_result = if !success && status != 200 || force_error {
220            crate::protocol_serde::shape_import_key_material::de_import_key_material_http_error(status, headers, body, _cfg)
221        } else {
222            crate::protocol_serde::shape_import_key_material::de_import_key_material_http_response(status, headers, body, _cfg)
223        };
224        crate::protocol_serde::type_erase_result(parse_result)
225    }
226}
227#[derive(Debug)]
228struct ImportKeyMaterialRequestSerializer;
229impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for ImportKeyMaterialRequestSerializer {
230    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
231    fn serialize_input(
232        &self,
233        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
234        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
235    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
236        let input = input
237            .downcast::<crate::operation::import_key_material::ImportKeyMaterialInput>()
238            .expect("correct type");
239        let _header_serialization_settings = _cfg
240            .load::<crate::serialization_settings::HeaderSerializationSettings>()
241            .cloned()
242            .unwrap_or_default();
243        let mut request_builder = {
244            #[allow(clippy::uninlined_format_args)]
245            fn uri_base(
246                _input: &crate::operation::import_key_material::ImportKeyMaterialInput,
247                output: &mut ::std::string::String,
248            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
249                use ::std::fmt::Write as _;
250                ::std::write!(output, "/").expect("formatting should succeed");
251                ::std::result::Result::Ok(())
252            }
253            #[allow(clippy::unnecessary_wraps)]
254            fn update_http_builder(
255                input: &crate::operation::import_key_material::ImportKeyMaterialInput,
256                builder: ::http_1x::request::Builder,
257            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
258                let mut uri = ::std::string::String::new();
259                uri_base(input, &mut uri)?;
260                ::std::result::Result::Ok(builder.method("POST").uri(uri))
261            }
262            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
263            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.1");
264            builder = _header_serialization_settings.set_default_header(
265                builder,
266                ::http_1x::header::HeaderName::from_static("x-amz-target"),
267                "TrentService.ImportKeyMaterial",
268            );
269            builder
270        };
271        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_import_key_material::ser_import_key_material_input(&input)?);
272        if let Some(content_length) = body.content_length() {
273            let content_length = content_length.to_string();
274            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
275        }
276        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
277    }
278}
279#[derive(Debug)]
280struct ImportKeyMaterialEndpointParamsInterceptor;
281
282#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
283impl ::aws_smithy_runtime_api::client::interceptors::Intercept for ImportKeyMaterialEndpointParamsInterceptor {
284    fn name(&self) -> &'static str {
285        "ImportKeyMaterialEndpointParamsInterceptor"
286    }
287
288    fn read_before_execution(
289        &self,
290        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
291            '_,
292            ::aws_smithy_runtime_api::client::interceptors::context::Input,
293            ::aws_smithy_runtime_api::client::interceptors::context::Output,
294            ::aws_smithy_runtime_api::client::interceptors::context::Error,
295        >,
296        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
297    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
298        let _input = context
299            .input()
300            .downcast_ref::<ImportKeyMaterialInput>()
301            .ok_or("failed to downcast to ImportKeyMaterialInput")?;
302
303        let params = crate::config::endpoint::Params::builder()
304            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
305            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
306            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
307            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
308            .build()
309            .map_err(|err| {
310                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
311            })?;
312        cfg.interceptor_state()
313            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
314        ::std::result::Result::Ok(())
315    }
316}
317
318// The get_* functions below are generated from JMESPath expressions in the
319// operationContextParams trait. They target the operation's input shape.
320
321/// Error type for the `ImportKeyMaterialError` operation.
322#[non_exhaustive]
323#[derive(::std::fmt::Debug)]
324pub enum ImportKeyMaterialError {
325    /// <p>The system timed out while trying to fulfill the request. You can retry the request.</p>
326    DependencyTimeoutException(crate::types::error::DependencyTimeoutException),
327    /// <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>
328    ExpiredImportTokenException(crate::types::error::ExpiredImportTokenException),
329    /// <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>
330    IncorrectKeyMaterialException(crate::types::error::IncorrectKeyMaterialException),
331    /// <p>The request was rejected because a specified ARN, or an ARN in a key policy, is not valid.</p>
332    InvalidArnException(crate::types::error::InvalidArnException),
333    /// <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>
334    /// <p>From the <code>ImportKeyMaterial</code> operation, the request was rejected because KMS could not decrypt the encrypted (wrapped) key material.</p>
335    /// <p>From the <code>Decapsulate</code> operation, the request was rejected because the length of the <code>SharedSecretCiphertextBlob</code> is inconsistent with the specified ML-KEM key spec.</p>
336    InvalidCiphertextException(crate::types::error::InvalidCiphertextException),
337    /// <p>The request was rejected because the provided import token is invalid or is associated with a different KMS key.</p>
338    InvalidImportTokenException(crate::types::error::InvalidImportTokenException),
339    /// <p>The request was rejected because an internal exception occurred. The request can be retried.</p>
340    KmsInternalException(crate::types::error::KmsInternalException),
341    /// <p>The request was rejected because the state of the specified resource is not valid for this request.</p>
342    /// <p>This exceptions means one of the following:</p>
343    /// <ul>
344    /// <li>
345    /// <p>The key state of the KMS key is not compatible with the operation.</p>
346    /// <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>
347    /// <li>
348    /// <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>
349    /// </ul>
350    KmsInvalidStateException(crate::types::error::KmsInvalidStateException),
351    /// <p>The request was rejected because the specified entity or resource could not be found.</p>
352    NotFoundException(crate::types::error::NotFoundException),
353    /// <p>The request was rejected because a specified parameter is not supported or a specified resource is not valid for this operation.</p>
354    UnsupportedOperationException(crate::types::error::UnsupportedOperationException),
355    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
356    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
357    variable wildcard pattern and check `.code()`:
358     \
359    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
360     \
361    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-ImportKeyMaterialError) for what information is available for the error.")]
362    Unhandled(crate::error::sealed_unhandled::Unhandled),
363}
364impl ImportKeyMaterialError {
365    /// Creates the `ImportKeyMaterialError::Unhandled` variant from any error type.
366    pub fn unhandled(
367        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
368    ) -> Self {
369        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
370            source: err.into(),
371            meta: ::std::default::Default::default(),
372        })
373    }
374
375    /// Creates the `ImportKeyMaterialError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
376    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
377        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
378            source: err.clone().into(),
379            meta: err,
380        })
381    }
382    ///
383    /// Returns error metadata, which includes the error code, message,
384    /// request ID, and potentially additional information.
385    ///
386    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
387        match self {
388            Self::DependencyTimeoutException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
389            Self::ExpiredImportTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
390            Self::IncorrectKeyMaterialException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
391            Self::InvalidArnException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
392            Self::InvalidCiphertextException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
393            Self::InvalidImportTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
394            Self::KmsInternalException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
395            Self::KmsInvalidStateException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
396            Self::NotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
397            Self::UnsupportedOperationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
398            Self::Unhandled(e) => &e.meta,
399        }
400    }
401    /// Returns `true` if the error kind is `ImportKeyMaterialError::DependencyTimeoutException`.
402    pub fn is_dependency_timeout_exception(&self) -> bool {
403        matches!(self, Self::DependencyTimeoutException(_))
404    }
405    /// Returns `true` if the error kind is `ImportKeyMaterialError::ExpiredImportTokenException`.
406    pub fn is_expired_import_token_exception(&self) -> bool {
407        matches!(self, Self::ExpiredImportTokenException(_))
408    }
409    /// Returns `true` if the error kind is `ImportKeyMaterialError::IncorrectKeyMaterialException`.
410    pub fn is_incorrect_key_material_exception(&self) -> bool {
411        matches!(self, Self::IncorrectKeyMaterialException(_))
412    }
413    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidArnException`.
414    pub fn is_invalid_arn_exception(&self) -> bool {
415        matches!(self, Self::InvalidArnException(_))
416    }
417    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidCiphertextException`.
418    pub fn is_invalid_ciphertext_exception(&self) -> bool {
419        matches!(self, Self::InvalidCiphertextException(_))
420    }
421    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidImportTokenException`.
422    pub fn is_invalid_import_token_exception(&self) -> bool {
423        matches!(self, Self::InvalidImportTokenException(_))
424    }
425    /// Returns `true` if the error kind is `ImportKeyMaterialError::KmsInternalException`.
426    pub fn is_kms_internal_exception(&self) -> bool {
427        matches!(self, Self::KmsInternalException(_))
428    }
429    /// Returns `true` if the error kind is `ImportKeyMaterialError::KmsInvalidStateException`.
430    pub fn is_kms_invalid_state_exception(&self) -> bool {
431        matches!(self, Self::KmsInvalidStateException(_))
432    }
433    /// Returns `true` if the error kind is `ImportKeyMaterialError::NotFoundException`.
434    pub fn is_not_found_exception(&self) -> bool {
435        matches!(self, Self::NotFoundException(_))
436    }
437    /// Returns `true` if the error kind is `ImportKeyMaterialError::UnsupportedOperationException`.
438    pub fn is_unsupported_operation_exception(&self) -> bool {
439        matches!(self, Self::UnsupportedOperationException(_))
440    }
441}
442impl ::std::error::Error for ImportKeyMaterialError {
443    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
444        match self {
445            Self::DependencyTimeoutException(_inner) => ::std::option::Option::Some(_inner),
446            Self::ExpiredImportTokenException(_inner) => ::std::option::Option::Some(_inner),
447            Self::IncorrectKeyMaterialException(_inner) => ::std::option::Option::Some(_inner),
448            Self::InvalidArnException(_inner) => ::std::option::Option::Some(_inner),
449            Self::InvalidCiphertextException(_inner) => ::std::option::Option::Some(_inner),
450            Self::InvalidImportTokenException(_inner) => ::std::option::Option::Some(_inner),
451            Self::KmsInternalException(_inner) => ::std::option::Option::Some(_inner),
452            Self::KmsInvalidStateException(_inner) => ::std::option::Option::Some(_inner),
453            Self::NotFoundException(_inner) => ::std::option::Option::Some(_inner),
454            Self::UnsupportedOperationException(_inner) => ::std::option::Option::Some(_inner),
455            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
456        }
457    }
458}
459impl ::std::fmt::Display for ImportKeyMaterialError {
460    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
461        match self {
462            Self::DependencyTimeoutException(_inner) => _inner.fmt(f),
463            Self::ExpiredImportTokenException(_inner) => _inner.fmt(f),
464            Self::IncorrectKeyMaterialException(_inner) => _inner.fmt(f),
465            Self::InvalidArnException(_inner) => _inner.fmt(f),
466            Self::InvalidCiphertextException(_inner) => _inner.fmt(f),
467            Self::InvalidImportTokenException(_inner) => _inner.fmt(f),
468            Self::KmsInternalException(_inner) => _inner.fmt(f),
469            Self::KmsInvalidStateException(_inner) => _inner.fmt(f),
470            Self::NotFoundException(_inner) => _inner.fmt(f),
471            Self::UnsupportedOperationException(_inner) => _inner.fmt(f),
472            Self::Unhandled(_inner) => {
473                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
474                    write!(f, "unhandled error ({code})")
475                } else {
476                    f.write_str("unhandled error")
477                }
478            }
479        }
480    }
481}
482impl ::aws_smithy_types::retry::ProvideErrorKind for ImportKeyMaterialError {
483    fn code(&self) -> ::std::option::Option<&str> {
484        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
485    }
486    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
487        ::std::option::Option::None
488    }
489}
490impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for ImportKeyMaterialError {
491    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
492        match self {
493            Self::DependencyTimeoutException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
494            Self::ExpiredImportTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
495            Self::IncorrectKeyMaterialException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
496            Self::InvalidArnException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
497            Self::InvalidCiphertextException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
498            Self::InvalidImportTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
499            Self::KmsInternalException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
500            Self::KmsInvalidStateException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
501            Self::NotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
502            Self::UnsupportedOperationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
503            Self::Unhandled(_inner) => &_inner.meta,
504        }
505    }
506}
507impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for ImportKeyMaterialError {
508    fn create_unhandled_error(
509        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
510        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
511    ) -> Self {
512        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
513            source,
514            meta: meta.unwrap_or_default(),
515        })
516    }
517}
518impl ::aws_types::request_id::RequestId for crate::operation::import_key_material::ImportKeyMaterialError {
519    fn request_id(&self) -> Option<&str> {
520        self.meta().request_id()
521    }
522}
523
524pub use crate::operation::import_key_material::_import_key_material_input::ImportKeyMaterialInput;
525
526pub use crate::operation::import_key_material::_import_key_material_output::ImportKeyMaterialOutput;
527
528mod _import_key_material_input;
529
530mod _import_key_material_output;
531
532/// Builders
533pub mod builders;