Skip to main content

aws_sdk_dynamodb/operation/
execute_statement.rs

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