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<
15        crate::operation::put_item::PutItemOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::put_item::PutItemError,
18            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
19        >,
20    > {
21        let map_err =
22            |err: ::aws_smithy_runtime_api::client::result::SdkError<
23                ::aws_smithy_runtime_api::client::interceptors::context::Error,
24                ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
25            >| { err.map_service_error(|err| err.downcast::<crate::operation::put_item::PutItemError>().expect("correct error type")) };
26        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
27            .await
28            .map_err(map_err)?;
29        let output = context.finalize().map_err(map_err)?;
30        ::std::result::Result::Ok(
31            output
32                .downcast::<crate::operation::put_item::PutItemOutput>()
33                .expect("correct output type"),
34        )
35    }
36
37    pub(crate) async fn orchestrate_with_stop_point(
38        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
39        input: crate::operation::put_item::PutItemInput,
40        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
41    ) -> ::std::result::Result<
42        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
43        ::aws_smithy_runtime_api::client::result::SdkError<
44            ::aws_smithy_runtime_api::client::interceptors::context::Error,
45            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
46        >,
47    > {
48        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
49        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("dynamodb", "PutItem", input, runtime_plugins, stop_point).await
50    }
51
52    pub(crate) fn operation_runtime_plugins(
53        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
54        client_config: &crate::config::Config,
55        config_override: ::std::option::Option<crate::config::Builder>,
56    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
57        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
58        runtime_plugins = runtime_plugins.with_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
59            ::aws_runtime::auth::sigv4::SCHEME_ID,
60        ]));
61        if let ::std::option::Option::Some(config_override) = config_override {
62            for plugin in config_override.runtime_plugins.iter().cloned() {
63                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
64            }
65            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
66                config_override,
67                client_config.config.clone(),
68                &client_config.runtime_components,
69            ));
70        }
71        runtime_plugins
72    }
73}
74impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for PutItem {
75    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
76        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("PutItem");
77
78        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
79            PutItemRequestSerializer,
80        ));
81        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
82            PutItemResponseDeserializer,
83        ));
84
85        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
86            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
87        ));
88
89        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("PutItem", "dynamodb"));
90        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
91        signing_options.double_uri_encode = true;
92        signing_options.content_sha256_header = false;
93        signing_options.normalize_uri_path = true;
94        signing_options.payload_override = None;
95
96        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
97            signing_options,
98            ..::std::default::Default::default()
99        });
100
101        ::std::option::Option::Some(cfg.freeze())
102    }
103
104    fn runtime_components(
105        &self,
106        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
107    ) -> ::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("PutItem")
110            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
111            .with_interceptor(PutItemEndpointParamsInterceptor)
112            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
113                crate::operation::put_item::PutItemError,
114            >::new())
115            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
116                crate::operation::put_item::PutItemError,
117            >::new())
118            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
119                crate::operation::put_item::PutItemError,
120            >::new());
121
122        ::std::borrow::Cow::Owned(rcb)
123    }
124}
125
126#[derive(Debug)]
127struct PutItemResponseDeserializer;
128impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for PutItemResponseDeserializer {
129    fn deserialize_nonstreaming(
130        &self,
131        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
132    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
133        let (success, status) = (response.status().is_success(), response.status().as_u16());
134        let headers = response.headers();
135        let body = response.body().bytes().expect("body loaded");
136        #[allow(unused_mut)]
137        let mut force_error = false;
138        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
139        let parse_result = if !success && status != 200 || force_error {
140            crate::protocol_serde::shape_put_item::de_put_item_http_error(status, headers, body)
141        } else {
142            crate::protocol_serde::shape_put_item::de_put_item_http_response(status, headers, body)
143        };
144        crate::protocol_serde::type_erase_result(parse_result)
145    }
146}
147#[derive(Debug)]
148struct PutItemRequestSerializer;
149impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for PutItemRequestSerializer {
150    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
151    fn serialize_input(
152        &self,
153        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
154        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
155    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
156        let input = input.downcast::<crate::operation::put_item::PutItemInput>().expect("correct type");
157        let _header_serialization_settings = _cfg
158            .load::<crate::serialization_settings::HeaderSerializationSettings>()
159            .cloned()
160            .unwrap_or_default();
161        let mut request_builder = {
162            fn uri_base(
163                _input: &crate::operation::put_item::PutItemInput,
164                output: &mut ::std::string::String,
165            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
166                use ::std::fmt::Write as _;
167                ::std::write!(output, "/").expect("formatting should succeed");
168                ::std::result::Result::Ok(())
169            }
170            #[allow(clippy::unnecessary_wraps)]
171            fn update_http_builder(
172                input: &crate::operation::put_item::PutItemInput,
173                builder: ::http::request::Builder,
174            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
175                let mut uri = ::std::string::String::new();
176                uri_base(input, &mut uri)?;
177                ::std::result::Result::Ok(builder.method("POST").uri(uri))
178            }
179            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
180            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-amz-json-1.0");
181            builder = _header_serialization_settings.set_default_header(
182                builder,
183                ::http::header::HeaderName::from_static("x-amz-target"),
184                "DynamoDB_20120810.PutItem",
185            );
186            builder
187        };
188        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_put_item::ser_put_item_input(&input)?);
189        if let Some(content_length) = body.content_length() {
190            let content_length = content_length.to_string();
191            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
192        }
193        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
194    }
195}
196#[derive(Debug)]
197struct PutItemEndpointParamsInterceptor;
198
199impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutItemEndpointParamsInterceptor {
200    fn name(&self) -> &'static str {
201        "PutItemEndpointParamsInterceptor"
202    }
203
204    fn read_before_execution(
205        &self,
206        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
207            '_,
208            ::aws_smithy_runtime_api::client::interceptors::context::Input,
209            ::aws_smithy_runtime_api::client::interceptors::context::Output,
210            ::aws_smithy_runtime_api::client::interceptors::context::Error,
211        >,
212        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
213    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
214        let _input = context
215            .input()
216            .downcast_ref::<PutItemInput>()
217            .ok_or("failed to downcast to PutItemInput")?;
218
219        let params = crate::config::endpoint::Params::builder()
220            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
221            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
222            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
223            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
224            .set_account_id(cfg.load::<crate::config::AccountId>().map(|ty| ty.0.clone()))
225            .set_account_id_endpoint_mode(cfg.load::<crate::config::AccountIdEndpointMode>().map(|ty| ty.0.clone()))
226            .build()
227            .map_err(|err| {
228                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
229            })?;
230        cfg.interceptor_state()
231            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
232        ::std::result::Result::Ok(())
233    }
234}
235
236// The get_* functions below are generated from JMESPath expressions in the
237// operationContextParams trait. They target the operation's input shape.
238
239/// Error type for the `PutItemError` operation.
240#[non_exhaustive]
241#[derive(::std::fmt::Debug)]
242pub enum PutItemError {
243    /// <p>A condition specified in the operation could not be evaluated.</p>
244    ConditionalCheckFailedException(crate::types::error::ConditionalCheckFailedException),
245    /// <p>An error occurred on the server side.</p>
246    InternalServerError(crate::types::error::InternalServerError),
247    #[allow(missing_docs)] // documentation missing in model
248    InvalidEndpointException(crate::types::error::InvalidEndpointException),
249    /// <p>An item collection is too large. This exception is only returned for tables that have one or more local secondary indexes.</p>
250    ItemCollectionSizeLimitExceededException(crate::types::error::ItemCollectionSizeLimitExceededException),
251    /// <p>Your request rate is too high. 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>
252    ProvisionedThroughputExceededException(crate::types::error::ProvisionedThroughputExceededException),
253    /// <p>The request was rejected because one or more items in the request are being modified by a request in another Region.</p>
254    ReplicatedWriteConflictException(crate::types::error::ReplicatedWriteConflictException),
255    /// <p>Throughput exceeds the current throughput quota for your account. Please contact <a href="https://aws.amazon.com/support">Amazon Web Services Support</a> to request a quota increase.</p>
256    RequestLimitExceeded(crate::types::error::RequestLimitExceeded),
257    /// <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>
258    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
259    /// <p>Operation was rejected because there is an ongoing transaction for the item.</p>
260    TransactionConflictException(crate::types::error::TransactionConflictException),
261    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
262    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
263    variable wildcard pattern and check `.code()`:
264     \
265    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
266     \
267    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-PutItemError) for what information is available for the error.")]
268    Unhandled(crate::error::sealed_unhandled::Unhandled),
269}
270impl PutItemError {
271    /// Creates the `PutItemError::Unhandled` variant from any error type.
272    pub fn unhandled(
273        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
274    ) -> Self {
275        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
276            source: err.into(),
277            meta: ::std::default::Default::default(),
278        })
279    }
280
281    /// Creates the `PutItemError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
282    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
283        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
284            source: err.clone().into(),
285            meta: err,
286        })
287    }
288    ///
289    /// Returns error metadata, which includes the error code, message,
290    /// request ID, and potentially additional information.
291    ///
292    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
293        match self {
294            Self::ConditionalCheckFailedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
295            Self::InternalServerError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
296            Self::InvalidEndpointException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
297            Self::ItemCollectionSizeLimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
298            Self::ProvisionedThroughputExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
299            Self::ReplicatedWriteConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
300            Self::RequestLimitExceeded(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
301            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
302            Self::TransactionConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
303            Self::Unhandled(e) => &e.meta,
304        }
305    }
306    /// Returns `true` if the error kind is `PutItemError::ConditionalCheckFailedException`.
307    pub fn is_conditional_check_failed_exception(&self) -> bool {
308        matches!(self, Self::ConditionalCheckFailedException(_))
309    }
310    /// Returns `true` if the error kind is `PutItemError::InternalServerError`.
311    pub fn is_internal_server_error(&self) -> bool {
312        matches!(self, Self::InternalServerError(_))
313    }
314    /// Returns `true` if the error kind is `PutItemError::InvalidEndpointException`.
315    pub fn is_invalid_endpoint_exception(&self) -> bool {
316        matches!(self, Self::InvalidEndpointException(_))
317    }
318    /// Returns `true` if the error kind is `PutItemError::ItemCollectionSizeLimitExceededException`.
319    pub fn is_item_collection_size_limit_exceeded_exception(&self) -> bool {
320        matches!(self, Self::ItemCollectionSizeLimitExceededException(_))
321    }
322    /// Returns `true` if the error kind is `PutItemError::ProvisionedThroughputExceededException`.
323    pub fn is_provisioned_throughput_exceeded_exception(&self) -> bool {
324        matches!(self, Self::ProvisionedThroughputExceededException(_))
325    }
326    /// Returns `true` if the error kind is `PutItemError::ReplicatedWriteConflictException`.
327    pub fn is_replicated_write_conflict_exception(&self) -> bool {
328        matches!(self, Self::ReplicatedWriteConflictException(_))
329    }
330    /// Returns `true` if the error kind is `PutItemError::RequestLimitExceeded`.
331    pub fn is_request_limit_exceeded(&self) -> bool {
332        matches!(self, Self::RequestLimitExceeded(_))
333    }
334    /// Returns `true` if the error kind is `PutItemError::ResourceNotFoundException`.
335    pub fn is_resource_not_found_exception(&self) -> bool {
336        matches!(self, Self::ResourceNotFoundException(_))
337    }
338    /// Returns `true` if the error kind is `PutItemError::TransactionConflictException`.
339    pub fn is_transaction_conflict_exception(&self) -> bool {
340        matches!(self, Self::TransactionConflictException(_))
341    }
342}
343impl ::std::error::Error for PutItemError {
344    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
345        match self {
346            Self::ConditionalCheckFailedException(_inner) => ::std::option::Option::Some(_inner),
347            Self::InternalServerError(_inner) => ::std::option::Option::Some(_inner),
348            Self::InvalidEndpointException(_inner) => ::std::option::Option::Some(_inner),
349            Self::ItemCollectionSizeLimitExceededException(_inner) => ::std::option::Option::Some(_inner),
350            Self::ProvisionedThroughputExceededException(_inner) => ::std::option::Option::Some(_inner),
351            Self::ReplicatedWriteConflictException(_inner) => ::std::option::Option::Some(_inner),
352            Self::RequestLimitExceeded(_inner) => ::std::option::Option::Some(_inner),
353            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
354            Self::TransactionConflictException(_inner) => ::std::option::Option::Some(_inner),
355            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
356        }
357    }
358}
359impl ::std::fmt::Display for PutItemError {
360    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
361        match self {
362            Self::ConditionalCheckFailedException(_inner) => _inner.fmt(f),
363            Self::InternalServerError(_inner) => _inner.fmt(f),
364            Self::InvalidEndpointException(_inner) => _inner.fmt(f),
365            Self::ItemCollectionSizeLimitExceededException(_inner) => _inner.fmt(f),
366            Self::ProvisionedThroughputExceededException(_inner) => _inner.fmt(f),
367            Self::ReplicatedWriteConflictException(_inner) => _inner.fmt(f),
368            Self::RequestLimitExceeded(_inner) => _inner.fmt(f),
369            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
370            Self::TransactionConflictException(_inner) => _inner.fmt(f),
371            Self::Unhandled(_inner) => {
372                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
373                    write!(f, "unhandled error ({code})")
374                } else {
375                    f.write_str("unhandled error")
376                }
377            }
378        }
379    }
380}
381impl ::aws_smithy_types::retry::ProvideErrorKind for PutItemError {
382    fn code(&self) -> ::std::option::Option<&str> {
383        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
384    }
385    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
386        ::std::option::Option::None
387    }
388}
389impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for PutItemError {
390    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
391        match self {
392            Self::ConditionalCheckFailedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
393            Self::InternalServerError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
394            Self::InvalidEndpointException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
395            Self::ItemCollectionSizeLimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
396            Self::ProvisionedThroughputExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
397            Self::ReplicatedWriteConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
398            Self::RequestLimitExceeded(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
399            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
400            Self::TransactionConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
401            Self::Unhandled(_inner) => &_inner.meta,
402        }
403    }
404}
405impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for PutItemError {
406    fn create_unhandled_error(
407        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
408        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
409    ) -> Self {
410        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
411            source,
412            meta: meta.unwrap_or_default(),
413        })
414    }
415}
416impl ::aws_types::request_id::RequestId for crate::operation::put_item::PutItemError {
417    fn request_id(&self) -> Option<&str> {
418        self.meta().request_id()
419    }
420}
421
422pub use crate::operation::put_item::_put_item_output::PutItemOutput;
423
424pub use crate::operation::put_item::_put_item_input::PutItemInput;
425
426mod _put_item_input;
427
428mod _put_item_output;
429
430/// Builders
431pub mod builders;