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