Skip to main content

aws_sdk_dynamodb/operation/
query.rs

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