Skip to main content

aws_sdk_textract/operation/
start_document_text_detection.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `StartDocumentTextDetection`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct StartDocumentTextDetection;
6impl StartDocumentTextDetection {
7    /// Creates a new `StartDocumentTextDetection`
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::start_document_text_detection::StartDocumentTextDetectionInput,
14    ) -> ::std::result::Result<
15        crate::operation::start_document_text_detection::StartDocumentTextDetectionOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::start_document_text_detection::StartDocumentTextDetectionError,
18            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
19        >,
20    > {
21        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<
22            ::aws_smithy_runtime_api::client::interceptors::context::Error,
23            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
24        >| {
25            err.map_service_error(|err| {
26                err.downcast::<crate::operation::start_document_text_detection::StartDocumentTextDetectionError>()
27                    .expect("correct error type")
28            })
29        };
30        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
31            .await
32            .map_err(map_err)?;
33        let output = context.finalize().map_err(map_err)?;
34        ::std::result::Result::Ok(
35            output
36                .downcast::<crate::operation::start_document_text_detection::StartDocumentTextDetectionOutput>()
37                .expect("correct output type"),
38        )
39    }
40
41    pub(crate) async fn orchestrate_with_stop_point(
42        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
43        input: crate::operation::start_document_text_detection::StartDocumentTextDetectionInput,
44        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
45    ) -> ::std::result::Result<
46        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
47        ::aws_smithy_runtime_api::client::result::SdkError<
48            ::aws_smithy_runtime_api::client::interceptors::context::Error,
49            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
50        >,
51    > {
52        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
53        use ::tracing::Instrument;
54        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point(
55            "Textract",
56            "StartDocumentTextDetection",
57            input,
58            runtime_plugins,
59            stop_point,
60        )
61        // Create a parent span for the entire operation. Includes a random, internal-only,
62        // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
63        .instrument(::tracing::debug_span!(
64            "Textract.StartDocumentTextDetection",
65            "rpc.service" = "Textract",
66            "rpc.method" = "StartDocumentTextDetection",
67            "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
68            "rpc.system" = "aws-api",
69        ))
70        .await
71    }
72
73    pub(crate) fn operation_runtime_plugins(
74        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
75        client_config: &crate::config::Config,
76        config_override: ::std::option::Option<crate::config::Builder>,
77    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
78        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
79
80        if let ::std::option::Option::Some(config_override) = config_override {
81            for plugin in config_override.runtime_plugins.iter().cloned() {
82                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
83            }
84            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
85                config_override,
86                client_config.config.clone(),
87                &client_config.runtime_components,
88            ));
89        }
90        runtime_plugins
91    }
92}
93impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for StartDocumentTextDetection {
94    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
95        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("StartDocumentTextDetection");
96
97        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
98            StartDocumentTextDetectionRequestSerializer,
99        ));
100        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
101            StartDocumentTextDetectionResponseDeserializer,
102        ));
103
104        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
105            crate::config::auth::Params::builder()
106                .operation_name("StartDocumentTextDetection")
107                .build()
108                .expect("required fields set"),
109        ));
110
111        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
112            "StartDocumentTextDetection",
113            "Textract",
114        ));
115        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
116        signing_options.double_uri_encode = true;
117        signing_options.content_sha256_header = false;
118        signing_options.normalize_uri_path = true;
119        signing_options.payload_override = None;
120
121        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
122            signing_options,
123            ..::std::default::Default::default()
124        });
125
126        ::std::option::Option::Some(cfg.freeze())
127    }
128
129    fn runtime_components(
130        &self,
131        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
132    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
133        #[allow(unused_mut)]
134        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("StartDocumentTextDetection")
135            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
136                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
137            ))
138            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
139                StartDocumentTextDetectionEndpointParamsInterceptor,
140            ))
141            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
142                crate::operation::start_document_text_detection::StartDocumentTextDetectionError,
143            >::new())
144            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
145                crate::operation::start_document_text_detection::StartDocumentTextDetectionError,
146            >::new())
147            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
148                crate::operation::start_document_text_detection::StartDocumentTextDetectionError,
149            >::new());
150
151        ::std::borrow::Cow::Owned(rcb)
152    }
153}
154
155#[derive(Debug)]
156struct StartDocumentTextDetectionResponseDeserializer;
157impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for StartDocumentTextDetectionResponseDeserializer {
158    fn deserialize_nonstreaming_with_config(
159        &self,
160        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
161        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
162    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
163        let (success, status) = (response.status().is_success(), response.status().as_u16());
164        let headers = response.headers();
165        let body = response.body().bytes().expect("body loaded");
166        #[allow(unused_mut)]
167        let mut force_error = false;
168        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
169        let parse_result = if !success && status != 200 || force_error {
170            crate::protocol_serde::shape_start_document_text_detection::de_start_document_text_detection_http_error(status, headers, body)
171        } else {
172            crate::protocol_serde::shape_start_document_text_detection::de_start_document_text_detection_http_response(status, headers, body)
173        };
174        crate::protocol_serde::type_erase_result(parse_result)
175    }
176}
177#[derive(Debug)]
178struct StartDocumentTextDetectionRequestSerializer;
179impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for StartDocumentTextDetectionRequestSerializer {
180    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
181    fn serialize_input(
182        &self,
183        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
184        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
185    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
186        let input = input
187            .downcast::<crate::operation::start_document_text_detection::StartDocumentTextDetectionInput>()
188            .expect("correct type");
189        let _header_serialization_settings = _cfg
190            .load::<crate::serialization_settings::HeaderSerializationSettings>()
191            .cloned()
192            .unwrap_or_default();
193        let mut request_builder = {
194            #[allow(clippy::uninlined_format_args)]
195            fn uri_base(
196                _input: &crate::operation::start_document_text_detection::StartDocumentTextDetectionInput,
197                output: &mut ::std::string::String,
198            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
199                use ::std::fmt::Write as _;
200                ::std::write!(output, "/").expect("formatting should succeed");
201                ::std::result::Result::Ok(())
202            }
203            #[allow(clippy::unnecessary_wraps)]
204            fn update_http_builder(
205                input: &crate::operation::start_document_text_detection::StartDocumentTextDetectionInput,
206                builder: ::http_1x::request::Builder,
207            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
208                let mut uri = ::std::string::String::new();
209                uri_base(input, &mut uri)?;
210                ::std::result::Result::Ok(builder.method("POST").uri(uri))
211            }
212            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
213            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.1");
214            builder = _header_serialization_settings.set_default_header(
215                builder,
216                ::http_1x::header::HeaderName::from_static("x-amz-target"),
217                "Textract.StartDocumentTextDetection",
218            );
219            builder
220        };
221        let body = ::aws_smithy_types::body::SdkBody::from(
222            crate::protocol_serde::shape_start_document_text_detection::ser_start_document_text_detection_input(&input)?,
223        );
224        if let Some(content_length) = body.content_length() {
225            let content_length = content_length.to_string();
226            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
227        }
228        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
229    }
230}
231#[derive(Debug)]
232struct StartDocumentTextDetectionEndpointParamsInterceptor;
233
234#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
235impl ::aws_smithy_runtime_api::client::interceptors::Intercept for StartDocumentTextDetectionEndpointParamsInterceptor {
236    fn name(&self) -> &'static str {
237        "StartDocumentTextDetectionEndpointParamsInterceptor"
238    }
239
240    fn read_before_execution(
241        &self,
242        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
243            '_,
244            ::aws_smithy_runtime_api::client::interceptors::context::Input,
245            ::aws_smithy_runtime_api::client::interceptors::context::Output,
246            ::aws_smithy_runtime_api::client::interceptors::context::Error,
247        >,
248        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
249    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
250        let _input = context
251            .input()
252            .downcast_ref::<StartDocumentTextDetectionInput>()
253            .ok_or("failed to downcast to StartDocumentTextDetectionInput")?;
254
255        let params = crate::config::endpoint::Params::builder()
256            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
257            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
258            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
259            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
260            .build()
261            .map_err(|err| {
262                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
263            })?;
264        cfg.interceptor_state()
265            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
266        ::std::result::Result::Ok(())
267    }
268}
269
270// The get_* functions below are generated from JMESPath expressions in the
271// operationContextParams trait. They target the operation's input shape.
272
273/// Error type for the `StartDocumentTextDetectionError` operation.
274#[non_exhaustive]
275#[derive(::std::fmt::Debug)]
276pub enum StartDocumentTextDetectionError {
277    /// <p>You aren't authorized to perform the action. Use the Amazon Resource Name (ARN) of an authorized user or IAM role to perform the operation.</p>
278    AccessDeniedException(crate::types::error::AccessDeniedException),
279    /// <p>Amazon Textract isn't able to read the document. For more information on the document limits in Amazon Textract, see <code>limits</code>.</p>
280    BadDocumentException(crate::types::error::BadDocumentException),
281    /// <p>The document can't be processed because it's too large. The maximum document size for synchronous operations 10 MB. The maximum document size for asynchronous operations is 500 MB for PDF files.</p>
282    DocumentTooLargeException(crate::types::error::DocumentTooLargeException),
283    /// <p>A <code>ClientRequestToken</code> input parameter was reused with an operation, but at least one of the other input parameters is different from the previous call to the operation.</p>
284    IdempotentParameterMismatchException(crate::types::error::IdempotentParameterMismatchException),
285    /// <p>Amazon Textract experienced a service issue. Try your call again.</p>
286    InternalServerError(crate::types::error::InternalServerError),
287    /// <p>Indicates you do not have decrypt permissions with the KMS key entered, or the KMS key was entered incorrectly.</p>
288    InvalidKmsKeyException(crate::types::error::InvalidKmsKeyException),
289    /// <p>An input parameter violated a constraint. For example, in synchronous operations, an <code>InvalidParameterException</code> exception occurs when neither of the <code>S3Object</code> or <code>Bytes</code> values are supplied in the <code>Document</code> request parameter. Validate your parameter before calling the API operation again.</p>
290    InvalidParameterException(crate::types::error::InvalidParameterException),
291    /// <p>Amazon Textract is unable to access the S3 object that's specified in the request. for more information, <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html">Configure Access to Amazon S3</a> For troubleshooting information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/troubleshooting.html">Troubleshooting Amazon S3</a></p>
292    InvalidS3ObjectException(crate::types::error::InvalidS3ObjectException),
293    /// <p>An Amazon Textract service limit was exceeded. For example, if you start too many asynchronous jobs concurrently, calls to start operations (<code>StartDocumentTextDetection</code>, for example) raise a LimitExceededException exception (HTTP status code: 400) until the number of concurrently running jobs is below the Amazon Textract service limit.</p>
294    LimitExceededException(crate::types::error::LimitExceededException),
295    /// <p>The number of requests exceeded your throughput limit. If you want to increase this limit, contact Amazon Textract.</p>
296    ProvisionedThroughputExceededException(crate::types::error::ProvisionedThroughputExceededException),
297    /// <p>Amazon Textract is temporarily unable to process the request. Try your call again.</p>
298    ThrottlingException(crate::types::error::ThrottlingException),
299    /// <p>The format of the input document isn't supported. Documents for operations can be in PNG, JPEG, PDF, or TIFF format.</p>
300    UnsupportedDocumentException(crate::types::error::UnsupportedDocumentException),
301    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
302    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
303    variable wildcard pattern and check `.code()`:
304     \
305    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
306     \
307    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-StartDocumentTextDetectionError) for what information is available for the error.")]
308    Unhandled(crate::error::sealed_unhandled::Unhandled),
309}
310impl StartDocumentTextDetectionError {
311    /// Creates the `StartDocumentTextDetectionError::Unhandled` variant from any error type.
312    pub fn unhandled(
313        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
314    ) -> Self {
315        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
316            source: err.into(),
317            meta: ::std::default::Default::default(),
318        })
319    }
320
321    /// Creates the `StartDocumentTextDetectionError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
322    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
323        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
324            source: err.clone().into(),
325            meta: err,
326        })
327    }
328    ///
329    /// Returns error metadata, which includes the error code, message,
330    /// request ID, and potentially additional information.
331    ///
332    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
333        match self {
334            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
335            Self::BadDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
336            Self::DocumentTooLargeException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
337            Self::IdempotentParameterMismatchException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
338            Self::InternalServerError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
339            Self::InvalidKmsKeyException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
340            Self::InvalidParameterException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
341            Self::InvalidS3ObjectException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
342            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
343            Self::ProvisionedThroughputExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
344            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
345            Self::UnsupportedDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
346            Self::Unhandled(e) => &e.meta,
347        }
348    }
349    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::AccessDeniedException`.
350    pub fn is_access_denied_exception(&self) -> bool {
351        matches!(self, Self::AccessDeniedException(_))
352    }
353    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::BadDocumentException`.
354    pub fn is_bad_document_exception(&self) -> bool {
355        matches!(self, Self::BadDocumentException(_))
356    }
357    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::DocumentTooLargeException`.
358    pub fn is_document_too_large_exception(&self) -> bool {
359        matches!(self, Self::DocumentTooLargeException(_))
360    }
361    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::IdempotentParameterMismatchException`.
362    pub fn is_idempotent_parameter_mismatch_exception(&self) -> bool {
363        matches!(self, Self::IdempotentParameterMismatchException(_))
364    }
365    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::InternalServerError`.
366    pub fn is_internal_server_error(&self) -> bool {
367        matches!(self, Self::InternalServerError(_))
368    }
369    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::InvalidKmsKeyException`.
370    pub fn is_invalid_kms_key_exception(&self) -> bool {
371        matches!(self, Self::InvalidKmsKeyException(_))
372    }
373    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::InvalidParameterException`.
374    pub fn is_invalid_parameter_exception(&self) -> bool {
375        matches!(self, Self::InvalidParameterException(_))
376    }
377    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::InvalidS3ObjectException`.
378    pub fn is_invalid_s3_object_exception(&self) -> bool {
379        matches!(self, Self::InvalidS3ObjectException(_))
380    }
381    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::LimitExceededException`.
382    pub fn is_limit_exceeded_exception(&self) -> bool {
383        matches!(self, Self::LimitExceededException(_))
384    }
385    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::ProvisionedThroughputExceededException`.
386    pub fn is_provisioned_throughput_exceeded_exception(&self) -> bool {
387        matches!(self, Self::ProvisionedThroughputExceededException(_))
388    }
389    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::ThrottlingException`.
390    pub fn is_throttling_exception(&self) -> bool {
391        matches!(self, Self::ThrottlingException(_))
392    }
393    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::UnsupportedDocumentException`.
394    pub fn is_unsupported_document_exception(&self) -> bool {
395        matches!(self, Self::UnsupportedDocumentException(_))
396    }
397}
398impl ::std::error::Error for StartDocumentTextDetectionError {
399    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
400        match self {
401            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
402            Self::BadDocumentException(_inner) => ::std::option::Option::Some(_inner),
403            Self::DocumentTooLargeException(_inner) => ::std::option::Option::Some(_inner),
404            Self::IdempotentParameterMismatchException(_inner) => ::std::option::Option::Some(_inner),
405            Self::InternalServerError(_inner) => ::std::option::Option::Some(_inner),
406            Self::InvalidKmsKeyException(_inner) => ::std::option::Option::Some(_inner),
407            Self::InvalidParameterException(_inner) => ::std::option::Option::Some(_inner),
408            Self::InvalidS3ObjectException(_inner) => ::std::option::Option::Some(_inner),
409            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
410            Self::ProvisionedThroughputExceededException(_inner) => ::std::option::Option::Some(_inner),
411            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
412            Self::UnsupportedDocumentException(_inner) => ::std::option::Option::Some(_inner),
413            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
414        }
415    }
416}
417impl ::std::fmt::Display for StartDocumentTextDetectionError {
418    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
419        match self {
420            Self::AccessDeniedException(_inner) => _inner.fmt(f),
421            Self::BadDocumentException(_inner) => _inner.fmt(f),
422            Self::DocumentTooLargeException(_inner) => _inner.fmt(f),
423            Self::IdempotentParameterMismatchException(_inner) => _inner.fmt(f),
424            Self::InternalServerError(_inner) => _inner.fmt(f),
425            Self::InvalidKmsKeyException(_inner) => _inner.fmt(f),
426            Self::InvalidParameterException(_inner) => _inner.fmt(f),
427            Self::InvalidS3ObjectException(_inner) => _inner.fmt(f),
428            Self::LimitExceededException(_inner) => _inner.fmt(f),
429            Self::ProvisionedThroughputExceededException(_inner) => _inner.fmt(f),
430            Self::ThrottlingException(_inner) => _inner.fmt(f),
431            Self::UnsupportedDocumentException(_inner) => _inner.fmt(f),
432            Self::Unhandled(_inner) => {
433                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
434                    write!(f, "unhandled error ({code})")
435                } else {
436                    f.write_str("unhandled error")
437                }
438            }
439        }
440    }
441}
442impl ::aws_smithy_types::retry::ProvideErrorKind for StartDocumentTextDetectionError {
443    fn code(&self) -> ::std::option::Option<&str> {
444        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
445    }
446    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
447        ::std::option::Option::None
448    }
449}
450impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for StartDocumentTextDetectionError {
451    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
452        match self {
453            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
454            Self::BadDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
455            Self::DocumentTooLargeException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
456            Self::IdempotentParameterMismatchException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
457            Self::InternalServerError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
458            Self::InvalidKmsKeyException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
459            Self::InvalidParameterException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
460            Self::InvalidS3ObjectException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
461            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
462            Self::ProvisionedThroughputExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
463            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
464            Self::UnsupportedDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
465            Self::Unhandled(_inner) => &_inner.meta,
466        }
467    }
468}
469impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for StartDocumentTextDetectionError {
470    fn create_unhandled_error(
471        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
472        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
473    ) -> Self {
474        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
475            source,
476            meta: meta.unwrap_or_default(),
477        })
478    }
479}
480impl ::aws_types::request_id::RequestId for crate::operation::start_document_text_detection::StartDocumentTextDetectionError {
481    fn request_id(&self) -> Option<&str> {
482        self.meta().request_id()
483    }
484}
485
486pub use crate::operation::start_document_text_detection::_start_document_text_detection_input::StartDocumentTextDetectionInput;
487
488pub use crate::operation::start_document_text_detection::_start_document_text_detection_output::StartDocumentTextDetectionOutput;
489
490mod _start_document_text_detection_input;
491
492mod _start_document_text_detection_output;
493
494/// Builders
495pub mod builders;