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