Skip to main content

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<crate::operation::update_item::UpdateItemOutput, ::aws_smithy_runtime_api::client::result::SdkError<crate::operation::update_item::UpdateItemError, ::aws_smithy_runtime_api::client::orchestrator::HttpResponse>> {
15                        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<::aws_smithy_runtime_api::client::interceptors::context::Error, ::aws_smithy_runtime_api::client::orchestrator::HttpResponse>| {
16                            err.map_service_error(|err| {
17                                err.downcast::<crate::operation::update_item::UpdateItemError>().expect("correct error type")
18                            })
19                        };
20                        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
21                            .await
22                            .map_err(map_err)?;
23                        let output = context.finalize().map_err(map_err)?;
24                        ::std::result::Result::Ok(output.downcast::<crate::operation::update_item::UpdateItemOutput>().expect("correct output type"))
25                    }
26
27                    pub(crate) async fn orchestrate_with_stop_point(
28                        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
29                        input: crate::operation::update_item::UpdateItemInput,
30                        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
31                    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext, ::aws_smithy_runtime_api::client::result::SdkError<::aws_smithy_runtime_api::client::interceptors::context::Error, ::aws_smithy_runtime_api::client::orchestrator::HttpResponse>> {
32                        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
33                        use ::tracing::Instrument;
34                        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point(
35                            "DynamoDB",
36                            "UpdateItem",
37                            input,
38                            runtime_plugins,
39                            stop_point
40                        )
41                        // Create a parent span for the entire operation. Includes a random, internal-only,
42                        // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
43                        .instrument(::tracing::debug_span!(
44                                "DynamoDB.UpdateItem",
45                                "rpc.service" = "DynamoDB",
46                                "rpc.method" = "UpdateItem",
47                                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
48                                "rpc.system" = "aws-api",
49                            ))
50                        .await
51                    }
52
53                    pub(crate) fn operation_runtime_plugins(
54                        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
55                        client_config: &crate::config::Config,
56                        config_override: ::std::option::Option<crate::config::Builder>,
57                    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
58                        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
59
60                        if let ::std::option::Option::Some(config_override) = config_override {
61                            for plugin in config_override.runtime_plugins.iter().cloned() {
62                                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
63                            }
64                            runtime_plugins = runtime_plugins.with_operation_plugin(
65                                crate::config::ConfigOverrideRuntimePlugin::new(config_override, client_config.config.clone(), &client_config.runtime_components)
66                            );
67                        }
68                        runtime_plugins
69                    }
70}
71impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for UpdateItem {
72                fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
73                    let mut cfg = ::aws_smithy_types::config_bag::Layer::new("UpdateItem");
74
75                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(UpdateItemRequestSerializer));
76                    cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(UpdateItemResponseDeserializer));
77
78                    cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
79                        crate::config::auth::Params::builder()
80                            .operation_name("UpdateItem")
81                            .build()
82                            .expect("required fields set")
83                    ));
84
85                    cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
86                            "UpdateItem",
87                            "DynamoDB",
88                        ));
89let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
90                            signing_options.double_uri_encode = true;
91                            signing_options.content_sha256_header = false;
92                            signing_options.normalize_uri_path = true;
93                            signing_options.payload_override = None;
94
95                            cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
96                                signing_options,
97                                ..::std::default::Default::default()
98                            });
99
100                    ::std::option::Option::Some(cfg.freeze())
101                }
102
103                fn runtime_components(&self, _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
104                    #[allow(unused_mut)]
105                    let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("UpdateItem")
106                            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(UpdateItemTelemetryInputCaptureInterceptor))
107.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default()))
108.with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(UpdateItemEndpointParamsInterceptor))
109                            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<crate::operation::update_item::UpdateItemError>::new())
110.with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<crate::operation::update_item::UpdateItemError>::new())
111.with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<crate::operation::update_item::UpdateItemError>::new());
112
113                    ::std::borrow::Cow::Owned(rcb)
114                }
115            }
116
117            #[derive(Debug)]
118            struct UpdateItemTelemetryInputCaptureInterceptor;
119
120            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
121            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for UpdateItemTelemetryInputCaptureInterceptor {
122                fn name(&self) -> &'static str {
123                    "UpdateItemTelemetryInputCaptureInterceptor"
124                }
125
126                fn read_before_execution(
127                    &self,
128                    context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<'_, ::aws_smithy_runtime_api::client::interceptors::context::Input, ::aws_smithy_runtime_api::client::interceptors::context::Output, ::aws_smithy_runtime_api::client::interceptors::context::Error>,
129                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
130                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
131                    // Nothing to do unless the customer opted in by naming members to record.
132                    let ::std::option::Option::Some(requested) = cfg.load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>().filter(|r| !r.is_empty()) else {
133                        return ::std::result::Result::Ok(());
134                    };
135
136                    let ::std::option::Option::Some(input) = context.input().downcast_ref::<UpdateItemInput>() else {
137                        // A mismatched input is not this interceptor's concern; skip quietly.
138                        return ::std::result::Result::Ok(());
139                    };
140
141                    let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
142                    if requested.should_capture("TableName") {
143                        if let ::std::option::Option::Some(value) = input.table_name.as_deref() {
144                            captured.insert("TableName", value);
145                        }
146                    }
147if requested.should_capture("UpdateExpression") {
148                        if let ::std::option::Option::Some(value) = input.update_expression.as_deref() {
149                            captured.insert("UpdateExpression", value);
150                        }
151                    }
152if requested.should_capture("ConditionExpression") {
153                        if let ::std::option::Option::Some(value) = input.condition_expression.as_deref() {
154                            captured.insert("ConditionExpression", value);
155                        }
156                    }
157
158                    cfg.interceptor_state().store_put(captured);
159                    ::std::result::Result::Ok(())
160                }
161            }
162#[derive(Debug)]
163            struct UpdateItemResponseDeserializer;
164            impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for UpdateItemResponseDeserializer {
165
166
167                fn deserialize_nonstreaming_with_config(&self, response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse, _cfg: &::aws_smithy_types::config_bag::ConfigBag) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
168                    let (success, status) = (response.status().is_success(), response.status().as_u16());
169            let headers = response.headers();
170            let body = response.body().bytes().expect("body loaded");
171            #[allow(unused_mut)]
172            let mut force_error = false;
173            ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
174            let parse_result = if !success && status != 200 || force_error {
175                crate::protocol_serde::shape_update_item::de_update_item_http_error(status, headers, body)
176            } else {
177                crate::protocol_serde::shape_update_item::de_update_item_http_response(status, headers, body)
178            };
179            crate::protocol_serde::type_erase_result(parse_result)
180                }
181            }
182#[derive(Debug)]
183            struct UpdateItemRequestSerializer;
184            impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for UpdateItemRequestSerializer {
185                #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
186                fn serialize_input(&self, input: ::aws_smithy_runtime_api::client::interceptors::context::Input, _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
187                    let input = input.downcast::<crate::operation::update_item::UpdateItemInput>().expect("correct type");
188                    let _header_serialization_settings = _cfg.load::<crate::serialization_settings::HeaderSerializationSettings>().cloned().unwrap_or_default();
189                    let mut request_builder = {
190                        #[allow(clippy::uninlined_format_args)]
191fn uri_base(_input: &crate::operation::update_item::UpdateItemInput, output: &mut ::std::string::String) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
192    use ::std::fmt::Write as _;
193    ::std::write!(output, "/").expect("formatting should succeed");
194    ::std::result::Result::Ok(())
195}
196#[allow(clippy::unnecessary_wraps)]
197fn update_http_builder(
198                input: &crate::operation::update_item::UpdateItemInput,
199                builder: ::http_1x::request::Builder
200            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
201    let mut uri = ::std::string::String::new();
202    uri_base(input, &mut uri)?;
203    ::std::result::Result::Ok(builder.method("POST").uri(uri))
204}
205let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
206builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.0");
207builder = _header_serialization_settings.set_default_header(
208                        builder,
209                        ::http_1x::header::HeaderName::from_static("x-amz-target"),
210                        "DynamoDB_20120810.UpdateItem"
211                    );
212builder
213                    };
214                    let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_update_item::ser_update_item_input(&input)?);
215                    if let Some(content_length) = body.content_length() {
216                                let content_length = content_length.to_string();
217                                request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
218                            }
219                    ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
220                }
221            }
222#[derive(Debug)]
223            struct UpdateItemEndpointParamsInterceptor;
224
225            #[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
226            impl ::aws_smithy_runtime_api::client::interceptors::Intercept for UpdateItemEndpointParamsInterceptor {
227                fn name(&self) -> &'static str {
228                    "UpdateItemEndpointParamsInterceptor"
229                }
230
231                fn read_before_execution(
232                    &self,
233                    context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<'_, ::aws_smithy_runtime_api::client::interceptors::context::Input, ::aws_smithy_runtime_api::client::interceptors::context::Output, ::aws_smithy_runtime_api::client::interceptors::context::Error>,
234                    cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
235                ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
236                    let _input = context.input()
237                        .downcast_ref::<UpdateItemInput>()
238                        .ok_or("failed to downcast to UpdateItemInput")?;
239
240
241
242                    let params = crate::config::endpoint::Params::builder()
243                        .set_region(cfg.load::<::aws_types::region::Region>().map(|r|r.as_ref().to_owned()))
244.set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
245.set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
246.set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
247.set_account_id_endpoint_mode(::std::option::Option::Some(cfg.load::<::aws_types::endpoint_config::AccountIdEndpointMode>().cloned().unwrap_or_default().to_string()))
248.set_resource_arn(Some(_input.table_name.clone().filter(|f|!AsRef::<str>::as_ref(f).trim().is_empty()).ok_or_else(||::aws_smithy_types::error::operation::BuildError::missing_field("table_name", "A required field was not set"))?))
249                        .build()
250                        .map_err(|err| ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err))?;
251                    cfg.interceptor_state().store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
252                    ::std::result::Result::Ok(())
253                }
254            }
255
256            // The get_* functions below are generated from JMESPath expressions in the
257            // operationContextParams trait. They target the operation's input shape.
258
259
260
261/// Error type for the `UpdateItemError` operation.
262#[non_exhaustive]
263#[derive(::std::fmt::Debug)]
264pub enum UpdateItemError {
265    /// <p>A condition specified in the operation failed to be evaluated.</p>
266    ConditionalCheckFailedException(crate::types::error::ConditionalCheckFailedException),
267    /// <p>An error occurred on the server side.</p>
268    InternalServerError(crate::types::error::InternalServerError),
269    #[allow(missing_docs)] // documentation missing in model
270    InvalidEndpointException(crate::types::error::InvalidEndpointException),
271    /// <p>An item collection is too large. This exception is only returned for tables that have one or more local secondary indexes.</p>
272    ItemCollectionSizeLimitExceededException(crate::types::error::ItemCollectionSizeLimitExceededException),
273    /// <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>
274    ProvisionedThroughputExceededException(crate::types::error::ProvisionedThroughputExceededException),
275    /// <p>The request was rejected because one or more items in the request are being modified by a request in another Region.</p>
276    ReplicatedWriteConflictException(crate::types::error::ReplicatedWriteConflictException),
277    /// <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>
278    RequestLimitExceeded(crate::types::error::RequestLimitExceeded),
279    /// <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>
280    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
281    /// <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>
282    ThrottlingException(crate::types::error::ThrottlingException),
283    /// <p>Operation was rejected because there is an ongoing transaction for the item.</p>
284    TransactionConflictException(crate::types::error::TransactionConflictException),
285    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
286                    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
287    variable wildcard pattern and check `.code()`:
288     \
289    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
290     \
291    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-UpdateItemError) for what information is available for the error.")]
292                    Unhandled(crate::error::sealed_unhandled::Unhandled),
293}
294impl UpdateItemError {
295    /// Creates the `UpdateItemError::Unhandled` variant from any error type.
296                    pub fn unhandled(err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>) -> Self {
297                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.into(), meta: ::std::default::Default::default() })
298                    }
299
300                    /// Creates the `UpdateItemError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
301                    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
302                        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source: err.clone().into(), meta: err })
303                    }
304    ///
305    /// Returns error metadata, which includes the error code, message,
306    /// request ID, and potentially additional information.
307    ///
308    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
309        match self {
310            Self::ConditionalCheckFailedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
311            Self::InternalServerError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
312            Self::InvalidEndpointException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
313            Self::ItemCollectionSizeLimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
314            Self::ProvisionedThroughputExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
315            Self::ReplicatedWriteConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
316            Self::RequestLimitExceeded(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
317            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
318            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
319            Self::TransactionConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
320            Self::Unhandled(e) => &e.meta,
321        }
322    }
323    /// Returns `true` if the error kind is `UpdateItemError::ConditionalCheckFailedException`.
324    pub fn is_conditional_check_failed_exception(&self) -> bool {
325        matches!(self, Self::ConditionalCheckFailedException(_))
326    }
327    /// Returns `true` if the error kind is `UpdateItemError::InternalServerError`.
328    pub fn is_internal_server_error(&self) -> bool {
329        matches!(self, Self::InternalServerError(_))
330    }
331    /// Returns `true` if the error kind is `UpdateItemError::InvalidEndpointException`.
332    pub fn is_invalid_endpoint_exception(&self) -> bool {
333        matches!(self, Self::InvalidEndpointException(_))
334    }
335    /// Returns `true` if the error kind is `UpdateItemError::ItemCollectionSizeLimitExceededException`.
336    pub fn is_item_collection_size_limit_exceeded_exception(&self) -> bool {
337        matches!(self, Self::ItemCollectionSizeLimitExceededException(_))
338    }
339    /// Returns `true` if the error kind is `UpdateItemError::ProvisionedThroughputExceededException`.
340    pub fn is_provisioned_throughput_exceeded_exception(&self) -> bool {
341        matches!(self, Self::ProvisionedThroughputExceededException(_))
342    }
343    /// Returns `true` if the error kind is `UpdateItemError::ReplicatedWriteConflictException`.
344    pub fn is_replicated_write_conflict_exception(&self) -> bool {
345        matches!(self, Self::ReplicatedWriteConflictException(_))
346    }
347    /// Returns `true` if the error kind is `UpdateItemError::RequestLimitExceeded`.
348    pub fn is_request_limit_exceeded(&self) -> bool {
349        matches!(self, Self::RequestLimitExceeded(_))
350    }
351    /// Returns `true` if the error kind is `UpdateItemError::ResourceNotFoundException`.
352    pub fn is_resource_not_found_exception(&self) -> bool {
353        matches!(self, Self::ResourceNotFoundException(_))
354    }
355    /// Returns `true` if the error kind is `UpdateItemError::ThrottlingException`.
356    pub fn is_throttling_exception(&self) -> bool {
357        matches!(self, Self::ThrottlingException(_))
358    }
359    /// Returns `true` if the error kind is `UpdateItemError::TransactionConflictException`.
360    pub fn is_transaction_conflict_exception(&self) -> bool {
361        matches!(self, Self::TransactionConflictException(_))
362    }
363}
364impl ::std::error::Error for UpdateItemError {
365    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
366        match self {
367            Self::ConditionalCheckFailedException(_inner) =>
368            ::std::option::Option::Some(_inner)
369            ,
370            Self::InternalServerError(_inner) =>
371            ::std::option::Option::Some(_inner)
372            ,
373            Self::InvalidEndpointException(_inner) =>
374            ::std::option::Option::Some(_inner)
375            ,
376            Self::ItemCollectionSizeLimitExceededException(_inner) =>
377            ::std::option::Option::Some(_inner)
378            ,
379            Self::ProvisionedThroughputExceededException(_inner) =>
380            ::std::option::Option::Some(_inner)
381            ,
382            Self::ReplicatedWriteConflictException(_inner) =>
383            ::std::option::Option::Some(_inner)
384            ,
385            Self::RequestLimitExceeded(_inner) =>
386            ::std::option::Option::Some(_inner)
387            ,
388            Self::ResourceNotFoundException(_inner) =>
389            ::std::option::Option::Some(_inner)
390            ,
391            Self::ThrottlingException(_inner) =>
392            ::std::option::Option::Some(_inner)
393            ,
394            Self::TransactionConflictException(_inner) =>
395            ::std::option::Option::Some(_inner)
396            ,
397            Self::Unhandled(_inner) => {
398                ::std::option::Option::Some(&*_inner.source)
399            }
400        }
401    }
402}
403impl ::std::fmt::Display for UpdateItemError {
404    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
405        match self {
406            Self::ConditionalCheckFailedException(_inner) =>
407            _inner.fmt(f)
408            ,
409            Self::InternalServerError(_inner) =>
410            _inner.fmt(f)
411            ,
412            Self::InvalidEndpointException(_inner) =>
413            _inner.fmt(f)
414            ,
415            Self::ItemCollectionSizeLimitExceededException(_inner) =>
416            _inner.fmt(f)
417            ,
418            Self::ProvisionedThroughputExceededException(_inner) =>
419            _inner.fmt(f)
420            ,
421            Self::ReplicatedWriteConflictException(_inner) =>
422            _inner.fmt(f)
423            ,
424            Self::RequestLimitExceeded(_inner) =>
425            _inner.fmt(f)
426            ,
427            Self::ResourceNotFoundException(_inner) =>
428            _inner.fmt(f)
429            ,
430            Self::ThrottlingException(_inner) =>
431            _inner.fmt(f)
432            ,
433            Self::TransactionConflictException(_inner) =>
434            _inner.fmt(f)
435            ,
436            Self::Unhandled(_inner) => {
437                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
438                                                        write!(f, "unhandled error ({code})")
439                                                    } else {
440                                                        f.write_str("unhandled error")
441                                                    }
442            }
443        }
444    }
445}
446impl ::aws_smithy_types::retry::ProvideErrorKind for UpdateItemError {
447    fn code(&self) -> ::std::option::Option<&str> {
448        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
449    }
450    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
451        match self {
452            Self::ReplicatedWriteConflictException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
453            _ => ::std::option::Option::None
454        }
455    }
456}
457impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for UpdateItemError {
458    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
459        match self {
460            Self::ConditionalCheckFailedException(_inner) =>
461            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
462            ,
463            Self::InternalServerError(_inner) =>
464            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
465            ,
466            Self::InvalidEndpointException(_inner) =>
467            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
468            ,
469            Self::ItemCollectionSizeLimitExceededException(_inner) =>
470            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
471            ,
472            Self::ProvisionedThroughputExceededException(_inner) =>
473            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
474            ,
475            Self::ReplicatedWriteConflictException(_inner) =>
476            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
477            ,
478            Self::RequestLimitExceeded(_inner) =>
479            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
480            ,
481            Self::ResourceNotFoundException(_inner) =>
482            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
483            ,
484            Self::ThrottlingException(_inner) =>
485            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
486            ,
487            Self::TransactionConflictException(_inner) =>
488            ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner)
489            ,
490            Self::Unhandled(_inner) => {
491                &_inner.meta
492            }
493        }
494    }
495}
496impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for UpdateItemError {
497    fn create_unhandled_error(
498                        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
499                        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>
500                    ) -> Self {
501        Self::Unhandled(crate::error::sealed_unhandled::Unhandled { source, meta: meta.unwrap_or_default() })
502    }
503}
504impl ::aws_types::request_id::RequestId for crate::operation::update_item::UpdateItemError {
505                                fn request_id(&self) -> Option<&str> {
506                                    self.meta().request_id()
507                                }
508                            }
509
510pub use crate::operation::update_item::_update_item_input::UpdateItemInput;
511
512pub use crate::operation::update_item::_update_item_output::UpdateItemOutput;
513
514mod _update_item_input;
515
516mod _update_item_output;
517
518/// Builders
519pub mod builders;
520