Skip to main content

aws_sdk_dynamodb/operation/
scan.rs

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