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