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    InvalidCiphertextException(crate::types::error::InvalidCiphertextException),
336    /// <p>The request was rejected because the provided import token is invalid or is associated with a different KMS key.</p>
337    InvalidImportTokenException(crate::types::error::InvalidImportTokenException),
338    /// <p>The request was rejected because an internal exception occurred. The request can be retried.</p>
339    KmsInternalException(crate::types::error::KmsInternalException),
340    /// <p>The request was rejected because the state of the specified resource is not valid for this request.</p>
341    /// <p>This exceptions means one of the following:</p>
342    /// <ul>
343    /// <li>
344    /// <p>The key state of the KMS key is not compatible with the operation.</p>
345    /// <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>
346    /// <li>
347    /// <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>
348    /// </ul>
349    KmsInvalidStateException(crate::types::error::KmsInvalidStateException),
350    /// <p>The request was rejected because the specified entity or resource could not be found.</p>
351    NotFoundException(crate::types::error::NotFoundException),
352    /// <p>The request was rejected because a specified parameter is not supported or a specified resource is not valid for this operation.</p>
353    UnsupportedOperationException(crate::types::error::UnsupportedOperationException),
354    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
355    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
356    variable wildcard pattern and check `.code()`:
357     \
358    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
359     \
360    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-ImportKeyMaterialError) for what information is available for the error.")]
361    Unhandled(crate::error::sealed_unhandled::Unhandled),
362}
363impl ImportKeyMaterialError {
364    /// Creates the `ImportKeyMaterialError::Unhandled` variant from any error type.
365    pub fn unhandled(
366        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
367    ) -> Self {
368        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
369            source: err.into(),
370            meta: ::std::default::Default::default(),
371        })
372    }
373
374    /// Creates the `ImportKeyMaterialError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
375    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
376        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
377            source: err.clone().into(),
378            meta: err,
379        })
380    }
381    ///
382    /// Returns error metadata, which includes the error code, message,
383    /// request ID, and potentially additional information.
384    ///
385    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
386        match self {
387            Self::DependencyTimeoutException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
388            Self::ExpiredImportTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
389            Self::IncorrectKeyMaterialException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
390            Self::InvalidArnException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
391            Self::InvalidCiphertextException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
392            Self::InvalidImportTokenException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
393            Self::KmsInternalException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
394            Self::KmsInvalidStateException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
395            Self::NotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
396            Self::UnsupportedOperationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
397            Self::Unhandled(e) => &e.meta,
398        }
399    }
400    /// Returns `true` if the error kind is `ImportKeyMaterialError::DependencyTimeoutException`.
401    pub fn is_dependency_timeout_exception(&self) -> bool {
402        matches!(self, Self::DependencyTimeoutException(_))
403    }
404    /// Returns `true` if the error kind is `ImportKeyMaterialError::ExpiredImportTokenException`.
405    pub fn is_expired_import_token_exception(&self) -> bool {
406        matches!(self, Self::ExpiredImportTokenException(_))
407    }
408    /// Returns `true` if the error kind is `ImportKeyMaterialError::IncorrectKeyMaterialException`.
409    pub fn is_incorrect_key_material_exception(&self) -> bool {
410        matches!(self, Self::IncorrectKeyMaterialException(_))
411    }
412    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidArnException`.
413    pub fn is_invalid_arn_exception(&self) -> bool {
414        matches!(self, Self::InvalidArnException(_))
415    }
416    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidCiphertextException`.
417    pub fn is_invalid_ciphertext_exception(&self) -> bool {
418        matches!(self, Self::InvalidCiphertextException(_))
419    }
420    /// Returns `true` if the error kind is `ImportKeyMaterialError::InvalidImportTokenException`.
421    pub fn is_invalid_import_token_exception(&self) -> bool {
422        matches!(self, Self::InvalidImportTokenException(_))
423    }
424    /// Returns `true` if the error kind is `ImportKeyMaterialError::KmsInternalException`.
425    pub fn is_kms_internal_exception(&self) -> bool {
426        matches!(self, Self::KmsInternalException(_))
427    }
428    /// Returns `true` if the error kind is `ImportKeyMaterialError::KmsInvalidStateException`.
429    pub fn is_kms_invalid_state_exception(&self) -> bool {
430        matches!(self, Self::KmsInvalidStateException(_))
431    }
432    /// Returns `true` if the error kind is `ImportKeyMaterialError::NotFoundException`.
433    pub fn is_not_found_exception(&self) -> bool {
434        matches!(self, Self::NotFoundException(_))
435    }
436    /// Returns `true` if the error kind is `ImportKeyMaterialError::UnsupportedOperationException`.
437    pub fn is_unsupported_operation_exception(&self) -> bool {
438        matches!(self, Self::UnsupportedOperationException(_))
439    }
440}
441impl ::std::error::Error for ImportKeyMaterialError {
442    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
443        match self {
444            Self::DependencyTimeoutException(_inner) => ::std::option::Option::Some(_inner),
445            Self::ExpiredImportTokenException(_inner) => ::std::option::Option::Some(_inner),
446            Self::IncorrectKeyMaterialException(_inner) => ::std::option::Option::Some(_inner),
447            Self::InvalidArnException(_inner) => ::std::option::Option::Some(_inner),
448            Self::InvalidCiphertextException(_inner) => ::std::option::Option::Some(_inner),
449            Self::InvalidImportTokenException(_inner) => ::std::option::Option::Some(_inner),
450            Self::KmsInternalException(_inner) => ::std::option::Option::Some(_inner),
451            Self::KmsInvalidStateException(_inner) => ::std::option::Option::Some(_inner),
452            Self::NotFoundException(_inner) => ::std::option::Option::Some(_inner),
453            Self::UnsupportedOperationException(_inner) => ::std::option::Option::Some(_inner),
454            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
455        }
456    }
457}
458impl ::std::fmt::Display for ImportKeyMaterialError {
459    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
460        match self {
461            Self::DependencyTimeoutException(_inner) => _inner.fmt(f),
462            Self::ExpiredImportTokenException(_inner) => _inner.fmt(f),
463            Self::IncorrectKeyMaterialException(_inner) => _inner.fmt(f),
464            Self::InvalidArnException(_inner) => _inner.fmt(f),
465            Self::InvalidCiphertextException(_inner) => _inner.fmt(f),
466            Self::InvalidImportTokenException(_inner) => _inner.fmt(f),
467            Self::KmsInternalException(_inner) => _inner.fmt(f),
468            Self::KmsInvalidStateException(_inner) => _inner.fmt(f),
469            Self::NotFoundException(_inner) => _inner.fmt(f),
470            Self::UnsupportedOperationException(_inner) => _inner.fmt(f),
471            Self::Unhandled(_inner) => {
472                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
473                    write!(f, "unhandled error ({code})")
474                } else {
475                    f.write_str("unhandled error")
476                }
477            }
478        }
479    }
480}
481impl ::aws_smithy_types::retry::ProvideErrorKind for ImportKeyMaterialError {
482    fn code(&self) -> ::std::option::Option<&str> {
483        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
484    }
485    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
486        ::std::option::Option::None
487    }
488}
489impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for ImportKeyMaterialError {
490    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
491        match self {
492            Self::DependencyTimeoutException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
493            Self::ExpiredImportTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
494            Self::IncorrectKeyMaterialException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
495            Self::InvalidArnException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
496            Self::InvalidCiphertextException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
497            Self::InvalidImportTokenException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
498            Self::KmsInternalException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
499            Self::KmsInvalidStateException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
500            Self::NotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
501            Self::UnsupportedOperationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
502            Self::Unhandled(_inner) => &_inner.meta,
503        }
504    }
505}
506impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for ImportKeyMaterialError {
507    fn create_unhandled_error(
508        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
509        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
510    ) -> Self {
511        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
512            source,
513            meta: meta.unwrap_or_default(),
514        })
515    }
516}
517impl ::aws_types::request_id::RequestId for crate::operation::import_key_material::ImportKeyMaterialError {
518    fn request_id(&self) -> Option<&str> {
519        self.meta().request_id()
520    }
521}
522
523pub use crate::operation::import_key_material::_import_key_material_input::ImportKeyMaterialInput;
524
525pub use crate::operation::import_key_material::_import_key_material_output::ImportKeyMaterialOutput;
526
527mod _import_key_material_input;
528
529mod _import_key_material_output;
530
531/// Builders
532pub mod builders;