Skip to main content

aws_sdk_dynamodb/operation/
put_item.rs

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