aws_sdk_dynamodb/operation/
update_item.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `UpdateItem`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct UpdateItem;
6impl UpdateItem {
7    /// Creates a new `UpdateItem`
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::update_item::UpdateItemInput,
14    ) -> ::std::result::Result<
15        crate::operation::update_item::UpdateItemOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::update_item::UpdateItemError,
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::update_item::UpdateItemError>()
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::update_item::UpdateItemOutput>()
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::update_item::UpdateItemInput,
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("DynamoDB", "UpdateItem", 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                "DynamoDB.UpdateItem",
59                "rpc.service" = "DynamoDB",
60                "rpc.method" = "UpdateItem",
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 UpdateItem {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("UpdateItem");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            UpdateItemRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            UpdateItemResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("UpdateItem")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("UpdateItem", "DynamoDB"));
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("UpdateItem")
126            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
127            .with_interceptor(UpdateItemEndpointParamsInterceptor)
128            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
129                crate::operation::update_item::UpdateItemError,
130            >::new())
131            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
132                crate::operation::update_item::UpdateItemError,
133            >::new())
134            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
135                crate::operation::update_item::UpdateItemError,
136            >::new());
137
138        ::std::borrow::Cow::Owned(rcb)
139    }
140}
141
142#[derive(Debug)]
143struct UpdateItemResponseDeserializer;
144impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for UpdateItemResponseDeserializer {
145    fn deserialize_nonstreaming(
146        &self,
147        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
148    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
149        let (success, status) = (response.status().is_success(), response.status().as_u16());
150        let headers = response.headers();
151        let body = response.body().bytes().expect("body loaded");
152        #[allow(unused_mut)]
153        let mut force_error = false;
154        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
155        let parse_result = if !success && status != 200 || force_error {
156            crate::protocol_serde::shape_update_item::de_update_item_http_error(status, headers, body)
157        } else {
158            crate::protocol_serde::shape_update_item::de_update_item_http_response(status, headers, body)
159        };
160        crate::protocol_serde::type_erase_result(parse_result)
161    }
162}
163#[derive(Debug)]
164struct UpdateItemRequestSerializer;
165impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for UpdateItemRequestSerializer {
166    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
167    fn serialize_input(
168        &self,
169        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
170        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
171    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
172        let input = input.downcast::<crate::operation::update_item::UpdateItemInput>().expect("correct type");
173        let _header_serialization_settings = _cfg
174            .load::<crate::serialization_settings::HeaderSerializationSettings>()
175            .cloned()
176            .unwrap_or_default();
177        let mut request_builder = {
178            fn uri_base(
179                _input: &crate::operation::update_item::UpdateItemInput,
180                output: &mut ::std::string::String,
181            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
182                use ::std::fmt::Write as _;
183                ::std::write!(output, "/").expect("formatting should succeed");
184                ::std::result::Result::Ok(())
185            }
186            #[allow(clippy::unnecessary_wraps)]
187            fn update_http_builder(
188                input: &crate::operation::update_item::UpdateItemInput,
189                builder: ::http::request::Builder,
190            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
191                let mut uri = ::std::string::String::new();
192                uri_base(input, &mut uri)?;
193                ::std::result::Result::Ok(builder.method("POST").uri(uri))
194            }
195            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
196            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-amz-json-1.0");
197            builder = _header_serialization_settings.set_default_header(
198                builder,
199                ::http::header::HeaderName::from_static("x-amz-target"),
200                "DynamoDB_20120810.UpdateItem",
201            );
202            builder
203        };
204        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_update_item::ser_update_item_input(&input)?);
205        if let Some(content_length) = body.content_length() {
206            let content_length = content_length.to_string();
207            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
208        }
209        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
210    }
211}
212#[derive(Debug)]
213struct UpdateItemEndpointParamsInterceptor;
214
215impl ::aws_smithy_runtime_api::client::interceptors::Intercept for UpdateItemEndpointParamsInterceptor {
216    fn name(&self) -> &'static str {
217        "UpdateItemEndpointParamsInterceptor"
218    }
219
220    fn read_before_execution(
221        &self,
222        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
223            '_,
224            ::aws_smithy_runtime_api::client::interceptors::context::Input,
225            ::aws_smithy_runtime_api::client::interceptors::context::Output,
226            ::aws_smithy_runtime_api::client::interceptors::context::Error,
227        >,
228        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
229    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
230        let _input = context
231            .input()
232            .downcast_ref::<UpdateItemInput>()
233            .ok_or("failed to downcast to UpdateItemInput")?;
234
235        let params = crate::config::endpoint::Params::builder()
236            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
237            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
238            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
239            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
240            .set_account_id_endpoint_mode(::std::option::Option::Some(
241                cfg.load::<::aws_types::endpoint_config::AccountIdEndpointMode>()
242                    .cloned()
243                    .unwrap_or_default()
244                    .to_string(),
245            ))
246            .set_resource_arn(Some(
247                _input
248                    .table_name
249                    .clone()
250                    .filter(|f| !AsRef::<str>::as_ref(f).trim().is_empty())
251                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("table_name", "A required field was not set"))?,
252            ))
253            .build()
254            .map_err(|err| {
255                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
256            })?;
257        cfg.interceptor_state()
258            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
259        ::std::result::Result::Ok(())
260    }
261}
262
263// The get_* functions below are generated from JMESPath expressions in the
264// operationContextParams trait. They target the operation's input shape.
265
266/// Error type for the `UpdateItemError` operation.
267#[non_exhaustive]
268#[derive(::std::fmt::Debug)]
269pub enum UpdateItemError {
270    /// <p>A condition specified in the operation failed to be evaluated.</p>
271    ConditionalCheckFailedException(crate::types::error::ConditionalCheckFailedException),
272    /// <p>An error occurred on the server side.</p>
273    InternalServerError(crate::types::error::InternalServerError),
274    #[allow(missing_docs)] // documentation missing in model
275    InvalidEndpointException(crate::types::error::InvalidEndpointException),
276    /// <p>An item collection is too large. This exception is only returned for tables that have one or more local secondary indexes.</p>
277    ItemCollectionSizeLimitExceededException(crate::types::error::ItemCollectionSizeLimitExceededException),
278    /// <p>The request was denied due to request throttling. For detailed information about why the request was throttled and the ARN of the impacted resource, find the <a href="https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html">ThrottlingReason</a> field in the returned exception. The Amazon Web Services SDKs for DynamoDB automatically retry requests that receive this exception. Your request is eventually successful, unless your retry queue is too large to finish. Reduce the frequency of requests and use exponential backoff. For more information, go to <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html#Programming.Errors.RetryAndBackoff">Error Retries and Exponential Backoff</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
279    ProvisionedThroughputExceededException(crate::types::error::ProvisionedThroughputExceededException),
280    /// <p>The request was rejected because one or more items in the request are being modified by a request in another Region.</p>
281    ReplicatedWriteConflictException(crate::types::error::ReplicatedWriteConflictException),
282    /// <p>Throughput exceeds the current throughput quota for your account. For detailed information about why the request was throttled and the ARN of the impacted resource, find the <a href="https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html">ThrottlingReason</a> field in the returned exception. Contact <a href="https://aws.amazon.com/support">Amazon Web Services Support</a> to request a quota increase.</p>
283    RequestLimitExceeded(crate::types::error::RequestLimitExceeded),
284    /// <p>The operation tried to access a nonexistent table or index. The resource might not be specified correctly, or its status might not be <code>ACTIVE</code>.</p>
285    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
286    /// <p>The request was denied due to request throttling. For detailed information about why the request was throttled and the ARN of the impacted resource, find the <a href="https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html">ThrottlingReason</a> field in the returned exception.</p>
287    ThrottlingException(crate::types::error::ThrottlingException),
288    /// <p>Operation was rejected because there is an ongoing transaction for the item.</p>
289    TransactionConflictException(crate::types::error::TransactionConflictException),
290    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
291    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
292    variable wildcard pattern and check `.code()`:
293     \
294    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
295     \
296    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-UpdateItemError) for what information is available for the error.")]
297    Unhandled(crate::error::sealed_unhandled::Unhandled),
298}
299impl UpdateItemError {
300    /// Creates the `UpdateItemError::Unhandled` variant from any error type.
301    pub fn unhandled(
302        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
303    ) -> Self {
304        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
305            source: err.into(),
306            meta: ::std::default::Default::default(),
307        })
308    }
309
310    /// Creates the `UpdateItemError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
311    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
312        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
313            source: err.clone().into(),
314            meta: err,
315        })
316    }
317    ///
318    /// Returns error metadata, which includes the error code, message,
319    /// request ID, and potentially additional information.
320    ///
321    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
322        match self {
323            Self::ConditionalCheckFailedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
324            Self::InternalServerError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
325            Self::InvalidEndpointException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
326            Self::ItemCollectionSizeLimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
327            Self::ProvisionedThroughputExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
328            Self::ReplicatedWriteConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
329            Self::RequestLimitExceeded(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
330            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::TransactionConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::Unhandled(e) => &e.meta,
334        }
335    }
336    /// Returns `true` if the error kind is `UpdateItemError::ConditionalCheckFailedException`.
337    pub fn is_conditional_check_failed_exception(&self) -> bool {
338        matches!(self, Self::ConditionalCheckFailedException(_))
339    }
340    /// Returns `true` if the error kind is `UpdateItemError::InternalServerError`.
341    pub fn is_internal_server_error(&self) -> bool {
342        matches!(self, Self::InternalServerError(_))
343    }
344    /// Returns `true` if the error kind is `UpdateItemError::InvalidEndpointException`.
345    pub fn is_invalid_endpoint_exception(&self) -> bool {
346        matches!(self, Self::InvalidEndpointException(_))
347    }
348    /// Returns `true` if the error kind is `UpdateItemError::ItemCollectionSizeLimitExceededException`.
349    pub fn is_item_collection_size_limit_exceeded_exception(&self) -> bool {
350        matches!(self, Self::ItemCollectionSizeLimitExceededException(_))
351    }
352    /// Returns `true` if the error kind is `UpdateItemError::ProvisionedThroughputExceededException`.
353    pub fn is_provisioned_throughput_exceeded_exception(&self) -> bool {
354        matches!(self, Self::ProvisionedThroughputExceededException(_))
355    }
356    /// Returns `true` if the error kind is `UpdateItemError::ReplicatedWriteConflictException`.
357    pub fn is_replicated_write_conflict_exception(&self) -> bool {
358        matches!(self, Self::ReplicatedWriteConflictException(_))
359    }
360    /// Returns `true` if the error kind is `UpdateItemError::RequestLimitExceeded`.
361    pub fn is_request_limit_exceeded(&self) -> bool {
362        matches!(self, Self::RequestLimitExceeded(_))
363    }
364    /// Returns `true` if the error kind is `UpdateItemError::ResourceNotFoundException`.
365    pub fn is_resource_not_found_exception(&self) -> bool {
366        matches!(self, Self::ResourceNotFoundException(_))
367    }
368    /// Returns `true` if the error kind is `UpdateItemError::ThrottlingException`.
369    pub fn is_throttling_exception(&self) -> bool {
370        matches!(self, Self::ThrottlingException(_))
371    }
372    /// Returns `true` if the error kind is `UpdateItemError::TransactionConflictException`.
373    pub fn is_transaction_conflict_exception(&self) -> bool {
374        matches!(self, Self::TransactionConflictException(_))
375    }
376}
377impl ::std::error::Error for UpdateItemError {
378    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
379        match self {
380            Self::ConditionalCheckFailedException(_inner) => ::std::option::Option::Some(_inner),
381            Self::InternalServerError(_inner) => ::std::option::Option::Some(_inner),
382            Self::InvalidEndpointException(_inner) => ::std::option::Option::Some(_inner),
383            Self::ItemCollectionSizeLimitExceededException(_inner) => ::std::option::Option::Some(_inner),
384            Self::ProvisionedThroughputExceededException(_inner) => ::std::option::Option::Some(_inner),
385            Self::ReplicatedWriteConflictException(_inner) => ::std::option::Option::Some(_inner),
386            Self::RequestLimitExceeded(_inner) => ::std::option::Option::Some(_inner),
387            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
388            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
389            Self::TransactionConflictException(_inner) => ::std::option::Option::Some(_inner),
390            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
391        }
392    }
393}
394impl ::std::fmt::Display for UpdateItemError {
395    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
396        match self {
397            Self::ConditionalCheckFailedException(_inner) => _inner.fmt(f),
398            Self::InternalServerError(_inner) => _inner.fmt(f),
399            Self::InvalidEndpointException(_inner) => _inner.fmt(f),
400            Self::ItemCollectionSizeLimitExceededException(_inner) => _inner.fmt(f),
401            Self::ProvisionedThroughputExceededException(_inner) => _inner.fmt(f),
402            Self::ReplicatedWriteConflictException(_inner) => _inner.fmt(f),
403            Self::RequestLimitExceeded(_inner) => _inner.fmt(f),
404            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
405            Self::ThrottlingException(_inner) => _inner.fmt(f),
406            Self::TransactionConflictException(_inner) => _inner.fmt(f),
407            Self::Unhandled(_inner) => {
408                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
409                    write!(f, "unhandled error ({code})")
410                } else {
411                    f.write_str("unhandled error")
412                }
413            }
414        }
415    }
416}
417impl ::aws_smithy_types::retry::ProvideErrorKind for UpdateItemError {
418    fn code(&self) -> ::std::option::Option<&str> {
419        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
420    }
421    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
422        match self {
423            Self::ReplicatedWriteConflictException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
424            _ => ::std::option::Option::None,
425        }
426    }
427}
428impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for UpdateItemError {
429    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
430        match self {
431            Self::ConditionalCheckFailedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
432            Self::InternalServerError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
433            Self::InvalidEndpointException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
434            Self::ItemCollectionSizeLimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
435            Self::ProvisionedThroughputExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
436            Self::ReplicatedWriteConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
437            Self::RequestLimitExceeded(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
438            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
439            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
440            Self::TransactionConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
441            Self::Unhandled(_inner) => &_inner.meta,
442        }
443    }
444}
445impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for UpdateItemError {
446    fn create_unhandled_error(
447        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
448        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
449    ) -> Self {
450        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
451            source,
452            meta: meta.unwrap_or_default(),
453        })
454    }
455}
456impl ::aws_types::request_id::RequestId for crate::operation::update_item::UpdateItemError {
457    fn request_id(&self) -> Option<&str> {
458        self.meta().request_id()
459    }
460}
461
462pub use crate::operation::update_item::_update_item_output::UpdateItemOutput;
463
464pub use crate::operation::update_item::_update_item_input::UpdateItemInput;
465
466mod _update_item_input;
467
468mod _update_item_output;
469
470/// Builders
471pub mod builders;