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