Skip to main content

aws_sdk_cloudwatch/operation/
associate_dataset_kms_key.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `AssociateDatasetKmsKey`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct AssociateDatasetKmsKey;
6impl AssociateDatasetKmsKey {
7    /// Creates a new `AssociateDatasetKmsKey`
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::associate_dataset_kms_key::AssociateDatasetKmsKeyInput,
14    ) -> ::std::result::Result<
15        crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyError,
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::associate_dataset_kms_key::AssociateDatasetKmsKeyError>()
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::associate_dataset_kms_key::AssociateDatasetKmsKeyOutput>()
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::associate_dataset_kms_key::AssociateDatasetKmsKeyInput,
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("CloudWatch", "AssociateDatasetKmsKey", 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                "CloudWatch.AssociateDatasetKmsKey",
59                "rpc.service" = "CloudWatch",
60                "rpc.method" = "AssociateDatasetKmsKey",
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 AssociateDatasetKmsKey {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("AssociateDatasetKmsKey");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            AssociateDatasetKmsKeyRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            AssociateDatasetKmsKeyResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("AssociateDatasetKmsKey")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
106            "AssociateDatasetKmsKey",
107            "CloudWatch",
108        ));
109        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
110        signing_options.double_uri_encode = true;
111        signing_options.content_sha256_header = false;
112        signing_options.normalize_uri_path = true;
113        signing_options.payload_override = None;
114
115        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
116            signing_options,
117            ..::std::default::Default::default()
118        });
119
120        ::std::option::Option::Some(cfg.freeze())
121    }
122
123    fn runtime_components(
124        &self,
125        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
126    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
127        #[allow(unused_mut)]
128        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("AssociateDatasetKmsKey")
129            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
130                AssociateDatasetKmsKeyTelemetryInputCaptureInterceptor,
131            ))
132            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
133                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
134            ))
135            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
136                AssociateDatasetKmsKeyEndpointParamsInterceptor,
137            ))
138            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
139                crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyError,
140            >::new())
141            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
142                crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyError,
143            >::new())
144            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
145                crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyError,
146            >::new())
147            .with_retry_classifier(::aws_runtime::service_clock_skew::ServiceClockSkewClassifier::<
148                crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyError,
149            >::new());
150
151        ::std::borrow::Cow::Owned(rcb)
152    }
153}
154
155#[derive(Debug)]
156struct AssociateDatasetKmsKeyTelemetryInputCaptureInterceptor;
157
158#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
159impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssociateDatasetKmsKeyTelemetryInputCaptureInterceptor {
160    fn name(&self) -> &'static str {
161        "AssociateDatasetKmsKeyTelemetryInputCaptureInterceptor"
162    }
163
164    fn read_before_execution(
165        &self,
166        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
167            '_,
168            ::aws_smithy_runtime_api::client::interceptors::context::Input,
169            ::aws_smithy_runtime_api::client::interceptors::context::Output,
170            ::aws_smithy_runtime_api::client::interceptors::context::Error,
171        >,
172        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
173    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
174        // Nothing to do unless the customer opted in by naming members to record.
175        let ::std::option::Option::Some(requested) = cfg
176            .load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>()
177            .filter(|r| !r.is_empty())
178        else {
179            return ::std::result::Result::Ok(());
180        };
181
182        let ::std::option::Option::Some(input) = context.input().downcast_ref::<AssociateDatasetKmsKeyInput>() else {
183            // A mismatched input is not this interceptor's concern; skip quietly.
184            return ::std::result::Result::Ok(());
185        };
186
187        let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
188        if requested.should_capture("DatasetIdentifier") {
189            if let ::std::option::Option::Some(value) = input.dataset_identifier.as_deref() {
190                captured.insert("DatasetIdentifier", value);
191            }
192        }
193        if requested.should_capture("KmsKeyArn") {
194            if let ::std::option::Option::Some(value) = input.kms_key_arn.as_deref() {
195                captured.insert("KmsKeyArn", value);
196            }
197        }
198
199        cfg.interceptor_state().store_put(captured);
200        ::std::result::Result::Ok(())
201    }
202}
203#[derive(Debug)]
204struct AssociateDatasetKmsKeyResponseDeserializer;
205impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for AssociateDatasetKmsKeyResponseDeserializer {
206    fn deserialize_nonstreaming_with_config(
207        &self,
208        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
209        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
210    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
211        let (success, status) = (response.status().is_success(), response.status().as_u16());
212        let headers = response.headers();
213        let body = response.body().bytes().expect("body loaded");
214        #[allow(unused_mut)]
215        let mut force_error = false;
216        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
217        let parse_result = if !success && status != 200 || force_error {
218            crate::protocol_serde::shape_associate_dataset_kms_key::de_associate_dataset_kms_key_http_error(status, headers, body)
219        } else {
220            crate::protocol_serde::shape_associate_dataset_kms_key::de_associate_dataset_kms_key_http_response(status, headers, body)
221        };
222        crate::protocol_serde::type_erase_result(parse_result)
223    }
224}
225#[derive(Debug)]
226struct AssociateDatasetKmsKeyRequestSerializer;
227impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for AssociateDatasetKmsKeyRequestSerializer {
228    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
229    fn serialize_input(
230        &self,
231        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
232        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
233    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
234        let input = input
235            .downcast::<crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyInput>()
236            .expect("correct type");
237        let _header_serialization_settings = _cfg
238            .load::<crate::serialization_settings::HeaderSerializationSettings>()
239            .cloned()
240            .unwrap_or_default();
241        let mut request_builder = {
242            #[allow(clippy::uninlined_format_args)]
243            fn uri_base(
244                _input: &crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyInput,
245                output: &mut ::std::string::String,
246            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
247                use ::std::fmt::Write as _;
248                ::std::write!(output, "/service/GraniteServiceVersion20100801/operation/AssociateDatasetKmsKey").expect("formatting should succeed");
249                ::std::result::Result::Ok(())
250            }
251            #[allow(clippy::unnecessary_wraps)]
252            fn update_http_builder(
253                input: &crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyInput,
254                builder: ::http_1x::request::Builder,
255            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
256                let mut uri = ::std::string::String::new();
257                uri_base(input, &mut uri)?;
258                ::std::result::Result::Ok(builder.method("POST").uri(uri))
259            }
260            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
261            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/cbor");
262            builder = _header_serialization_settings.set_default_header(
263                builder,
264                ::http_1x::header::HeaderName::from_static("smithy-protocol"),
265                "rpc-v2-cbor",
266            );
267            builder =
268                _header_serialization_settings.set_default_header(builder, ::http_1x::header::HeaderName::from_static("accept"), "application/cbor");
269            builder =
270                _header_serialization_settings.set_default_header(builder, ::http_1x::header::HeaderName::from_static("x-amzn-query-mode"), "true");
271            builder
272        };
273        let body = ::aws_smithy_types::body::SdkBody::from(
274            crate::protocol_serde::shape_associate_dataset_kms_key::ser_associate_dataset_kms_key_input(&input)?,
275        );
276        if let Some(content_length) = body.content_length() {
277            let content_length = content_length.to_string();
278            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
279        }
280        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
281    }
282}
283#[derive(Debug)]
284struct AssociateDatasetKmsKeyEndpointParamsInterceptor;
285
286#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
287impl ::aws_smithy_runtime_api::client::interceptors::Intercept for AssociateDatasetKmsKeyEndpointParamsInterceptor {
288    fn name(&self) -> &'static str {
289        "AssociateDatasetKmsKeyEndpointParamsInterceptor"
290    }
291
292    fn read_before_execution(
293        &self,
294        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
295            '_,
296            ::aws_smithy_runtime_api::client::interceptors::context::Input,
297            ::aws_smithy_runtime_api::client::interceptors::context::Output,
298            ::aws_smithy_runtime_api::client::interceptors::context::Error,
299        >,
300        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
301    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
302        let _input = context
303            .input()
304            .downcast_ref::<AssociateDatasetKmsKeyInput>()
305            .ok_or("failed to downcast to AssociateDatasetKmsKeyInput")?;
306
307        let params = crate::config::endpoint::Params::builder()
308            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
309            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
310            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
311            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
312            .build()
313            .map_err(|err| {
314                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
315            })?;
316        cfg.interceptor_state()
317            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
318        ::std::result::Result::Ok(())
319    }
320}
321
322// The get_* functions below are generated from JMESPath expressions in the
323// operationContextParams trait. They target the operation's input shape.
324
325/// Error type for the `AssociateDatasetKmsKeyError` operation.
326#[non_exhaustive]
327#[derive(::std::fmt::Debug)]
328pub enum AssociateDatasetKmsKeyError {
329    /// <p>This operation attempted to create a resource that already exists.</p>
330    ConflictException(crate::types::error::ConflictException),
331    /// <p>The operation was denied because either the calling principal lacks the required Amazon Web Services Key Management Service (Amazon Web Services KMS) permission on the key, or the key policy does not grant Amazon CloudWatch the permissions it needs to use the key. Verify that the caller has <code>kms:Decrypt</code> permission on the key, and that the key policy grants the CloudWatch service principal the <code>kms:DescribeKey</code>, <code>kms:GenerateDataKey</code>, <code>kms:Encrypt</code>, <code>kms:Decrypt</code>, and <code>kms:ReEncrypt*</code> permissions described in <a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_AssociateDatasetKmsKey.html">AssociateDatasetKmsKey</a>.</p>
332    KmsAccessDeniedException(crate::types::error::KmsAccessDeniedException),
333    /// <p>The specified Amazon Web Services Key Management Service (Amazon Web Services KMS) key is disabled or pending deletion. Re-enable the key (or restore it, if it is pending deletion) and retry the operation.</p>
334    KmsKeyDisabledException(crate::types::error::KmsKeyDisabledException),
335    /// <p>The specified Amazon Web Services Key Management Service (Amazon Web Services KMS) key could not be found. Verify that the key Amazon Resource Name (ARN) is correct, that the key exists, and that it is in the same Amazon Web Services Region as the resource.</p>
336    KmsKeyNotFoundException(crate::types::error::KmsKeyNotFoundException),
337    /// <p>The named resource does not exist.</p>
338    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
339    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
340    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
341    variable wildcard pattern and check `.code()`:
342     \
343    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
344     \
345    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-AssociateDatasetKmsKeyError) for what information is available for the error.")]
346    Unhandled(crate::error::sealed_unhandled::Unhandled),
347}
348impl AssociateDatasetKmsKeyError {
349    /// Creates the `AssociateDatasetKmsKeyError::Unhandled` variant from any error type.
350    pub fn unhandled(
351        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
352    ) -> Self {
353        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
354            source: err.into(),
355            meta: ::std::default::Default::default(),
356        })
357    }
358
359    /// Creates the `AssociateDatasetKmsKeyError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
360    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
361        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
362            source: err.clone().into(),
363            meta: err,
364        })
365    }
366    ///
367    /// Returns error metadata, which includes the error code, message,
368    /// request ID, and potentially additional information.
369    ///
370    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
371        match self {
372            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
373            Self::KmsAccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
374            Self::KmsKeyDisabledException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
375            Self::KmsKeyNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
376            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
377            Self::Unhandled(e) => &e.meta,
378        }
379    }
380    /// Returns `true` if the error kind is `AssociateDatasetKmsKeyError::ConflictException`.
381    pub fn is_conflict_exception(&self) -> bool {
382        matches!(self, Self::ConflictException(_))
383    }
384    /// Returns `true` if the error kind is `AssociateDatasetKmsKeyError::KmsAccessDeniedException`.
385    pub fn is_kms_access_denied_exception(&self) -> bool {
386        matches!(self, Self::KmsAccessDeniedException(_))
387    }
388    /// Returns `true` if the error kind is `AssociateDatasetKmsKeyError::KmsKeyDisabledException`.
389    pub fn is_kms_key_disabled_exception(&self) -> bool {
390        matches!(self, Self::KmsKeyDisabledException(_))
391    }
392    /// Returns `true` if the error kind is `AssociateDatasetKmsKeyError::KmsKeyNotFoundException`.
393    pub fn is_kms_key_not_found_exception(&self) -> bool {
394        matches!(self, Self::KmsKeyNotFoundException(_))
395    }
396    /// Returns `true` if the error kind is `AssociateDatasetKmsKeyError::ResourceNotFoundException`.
397    pub fn is_resource_not_found_exception(&self) -> bool {
398        matches!(self, Self::ResourceNotFoundException(_))
399    }
400}
401impl ::std::error::Error for AssociateDatasetKmsKeyError {
402    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
403        match self {
404            Self::ConflictException(_inner) => ::std::option::Option::Some(_inner),
405            Self::KmsAccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
406            Self::KmsKeyDisabledException(_inner) => ::std::option::Option::Some(_inner),
407            Self::KmsKeyNotFoundException(_inner) => ::std::option::Option::Some(_inner),
408            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
409            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
410        }
411    }
412}
413impl ::std::fmt::Display for AssociateDatasetKmsKeyError {
414    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
415        match self {
416            Self::ConflictException(_inner) => _inner.fmt(f),
417            Self::KmsAccessDeniedException(_inner) => _inner.fmt(f),
418            Self::KmsKeyDisabledException(_inner) => _inner.fmt(f),
419            Self::KmsKeyNotFoundException(_inner) => _inner.fmt(f),
420            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
421            Self::Unhandled(_inner) => {
422                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
423                    write!(f, "unhandled error ({code})")
424                } else {
425                    f.write_str("unhandled error")
426                }
427            }
428        }
429    }
430}
431impl ::aws_smithy_types::retry::ProvideErrorKind for AssociateDatasetKmsKeyError {
432    fn code(&self) -> ::std::option::Option<&str> {
433        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
434    }
435    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
436        ::std::option::Option::None
437    }
438}
439impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for AssociateDatasetKmsKeyError {
440    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
441        match self {
442            Self::ConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
443            Self::KmsAccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
444            Self::KmsKeyDisabledException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
445            Self::KmsKeyNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
446            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
447            Self::Unhandled(_inner) => &_inner.meta,
448        }
449    }
450}
451impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for AssociateDatasetKmsKeyError {
452    fn create_unhandled_error(
453        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
454        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
455    ) -> Self {
456        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
457            source,
458            meta: meta.unwrap_or_default(),
459        })
460    }
461}
462impl ::aws_types::request_id::RequestId for crate::operation::associate_dataset_kms_key::AssociateDatasetKmsKeyError {
463    fn request_id(&self) -> Option<&str> {
464        self.meta().request_id()
465    }
466}
467
468pub use crate::operation::associate_dataset_kms_key::_associate_dataset_kms_key_input::AssociateDatasetKmsKeyInput;
469
470pub use crate::operation::associate_dataset_kms_key::_associate_dataset_kms_key_output::AssociateDatasetKmsKeyOutput;
471
472mod _associate_dataset_kms_key_input;
473
474mod _associate_dataset_kms_key_output;
475
476/// Builders
477pub mod builders;