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                StartDocumentTextDetectionTelemetryInputCaptureInterceptor,
137            ))
138            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
139                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
140            ))
141            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
142                StartDocumentTextDetectionEndpointParamsInterceptor,
143            ))
144            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
145                crate::operation::start_document_text_detection::StartDocumentTextDetectionError,
146            >::new())
147            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
148                crate::operation::start_document_text_detection::StartDocumentTextDetectionError,
149            >::new())
150            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
151                crate::operation::start_document_text_detection::StartDocumentTextDetectionError,
152            >::new());
153
154        ::std::borrow::Cow::Owned(rcb)
155    }
156}
157
158#[derive(Debug)]
159struct StartDocumentTextDetectionTelemetryInputCaptureInterceptor;
160
161#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
162impl ::aws_smithy_runtime_api::client::interceptors::Intercept for StartDocumentTextDetectionTelemetryInputCaptureInterceptor {
163    fn name(&self) -> &'static str {
164        "StartDocumentTextDetectionTelemetryInputCaptureInterceptor"
165    }
166
167    fn read_before_execution(
168        &self,
169        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
170            '_,
171            ::aws_smithy_runtime_api::client::interceptors::context::Input,
172            ::aws_smithy_runtime_api::client::interceptors::context::Output,
173            ::aws_smithy_runtime_api::client::interceptors::context::Error,
174        >,
175        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
176    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
177        // Nothing to do unless the customer opted in by naming members to record.
178        let ::std::option::Option::Some(requested) = cfg
179            .load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>()
180            .filter(|r| !r.is_empty())
181        else {
182            return ::std::result::Result::Ok(());
183        };
184
185        let ::std::option::Option::Some(input) = context.input().downcast_ref::<StartDocumentTextDetectionInput>() else {
186            // A mismatched input is not this interceptor's concern; skip quietly.
187            return ::std::result::Result::Ok(());
188        };
189
190        let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
191        if requested.should_capture("ClientRequestToken") {
192            if let ::std::option::Option::Some(value) = input.client_request_token.as_deref() {
193                captured.insert("ClientRequestToken", value);
194            }
195        }
196        if requested.should_capture("JobTag") {
197            if let ::std::option::Option::Some(value) = input.job_tag.as_deref() {
198                captured.insert("JobTag", value);
199            }
200        }
201        if requested.should_capture("KMSKeyId") {
202            if let ::std::option::Option::Some(value) = input.kms_key_id.as_deref() {
203                captured.insert("KMSKeyId", value);
204            }
205        }
206
207        cfg.interceptor_state().store_put(captured);
208        ::std::result::Result::Ok(())
209    }
210}
211#[derive(Debug)]
212struct StartDocumentTextDetectionResponseDeserializer;
213impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for StartDocumentTextDetectionResponseDeserializer {
214    fn deserialize_nonstreaming_with_config(
215        &self,
216        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
217        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
218    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
219        let (success, status) = (response.status().is_success(), response.status().as_u16());
220        let headers = response.headers();
221        let body = response.body().bytes().expect("body loaded");
222        #[allow(unused_mut)]
223        let mut force_error = false;
224        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
225        let parse_result = if !success && status != 200 || force_error {
226            crate::protocol_serde::shape_start_document_text_detection::de_start_document_text_detection_http_error(status, headers, body)
227        } else {
228            crate::protocol_serde::shape_start_document_text_detection::de_start_document_text_detection_http_response(status, headers, body)
229        };
230        crate::protocol_serde::type_erase_result(parse_result)
231    }
232}
233#[derive(Debug)]
234struct StartDocumentTextDetectionRequestSerializer;
235impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for StartDocumentTextDetectionRequestSerializer {
236    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
237    fn serialize_input(
238        &self,
239        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
240        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
241    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
242        let input = input
243            .downcast::<crate::operation::start_document_text_detection::StartDocumentTextDetectionInput>()
244            .expect("correct type");
245        let _header_serialization_settings = _cfg
246            .load::<crate::serialization_settings::HeaderSerializationSettings>()
247            .cloned()
248            .unwrap_or_default();
249        let mut request_builder = {
250            #[allow(clippy::uninlined_format_args)]
251            fn uri_base(
252                _input: &crate::operation::start_document_text_detection::StartDocumentTextDetectionInput,
253                output: &mut ::std::string::String,
254            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
255                use ::std::fmt::Write as _;
256                ::std::write!(output, "/").expect("formatting should succeed");
257                ::std::result::Result::Ok(())
258            }
259            #[allow(clippy::unnecessary_wraps)]
260            fn update_http_builder(
261                input: &crate::operation::start_document_text_detection::StartDocumentTextDetectionInput,
262                builder: ::http_1x::request::Builder,
263            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
264                let mut uri = ::std::string::String::new();
265                uri_base(input, &mut uri)?;
266                ::std::result::Result::Ok(builder.method("POST").uri(uri))
267            }
268            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
269            builder = _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-amz-json-1.1");
270            builder = _header_serialization_settings.set_default_header(
271                builder,
272                ::http_1x::header::HeaderName::from_static("x-amz-target"),
273                "Textract.StartDocumentTextDetection",
274            );
275            builder
276        };
277        let body = ::aws_smithy_types::body::SdkBody::from(
278            crate::protocol_serde::shape_start_document_text_detection::ser_start_document_text_detection_input(&input)?,
279        );
280        if let Some(content_length) = body.content_length() {
281            let content_length = content_length.to_string();
282            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
283        }
284        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
285    }
286}
287#[derive(Debug)]
288struct StartDocumentTextDetectionEndpointParamsInterceptor;
289
290#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
291impl ::aws_smithy_runtime_api::client::interceptors::Intercept for StartDocumentTextDetectionEndpointParamsInterceptor {
292    fn name(&self) -> &'static str {
293        "StartDocumentTextDetectionEndpointParamsInterceptor"
294    }
295
296    fn read_before_execution(
297        &self,
298        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
299            '_,
300            ::aws_smithy_runtime_api::client::interceptors::context::Input,
301            ::aws_smithy_runtime_api::client::interceptors::context::Output,
302            ::aws_smithy_runtime_api::client::interceptors::context::Error,
303        >,
304        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
305    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
306        let _input = context
307            .input()
308            .downcast_ref::<StartDocumentTextDetectionInput>()
309            .ok_or("failed to downcast to StartDocumentTextDetectionInput")?;
310
311        let params = crate::config::endpoint::Params::builder()
312            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
313            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
314            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
315            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
316            .build()
317            .map_err(|err| {
318                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
319            })?;
320        cfg.interceptor_state()
321            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
322        ::std::result::Result::Ok(())
323    }
324}
325
326// The get_* functions below are generated from JMESPath expressions in the
327// operationContextParams trait. They target the operation's input shape.
328
329/// Error type for the `StartDocumentTextDetectionError` operation.
330#[non_exhaustive]
331#[derive(::std::fmt::Debug)]
332pub enum StartDocumentTextDetectionError {
333    /// <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>
334    AccessDeniedException(crate::types::error::AccessDeniedException),
335    /// <p>Amazon Textract isn't able to read the document. For more information on the document limits in Amazon Textract, see <a href="https://docs.aws.amazon.com/textract/latest/dg/limits.html">Hard limits</a>.</p>
336    BadDocumentException(crate::types::error::BadDocumentException),
337    /// <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>
338    DocumentTooLargeException(crate::types::error::DocumentTooLargeException),
339    /// <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>
340    IdempotentParameterMismatchException(crate::types::error::IdempotentParameterMismatchException),
341    /// <p>Amazon Textract experienced a service issue. Try your call again.</p>
342    InternalServerError(crate::types::error::InternalServerError),
343    /// <p>Indicates you do not have decrypt permissions with the KMS key entered, or the KMS key was entered incorrectly.</p>
344    InvalidKmsKeyException(crate::types::error::InvalidKmsKeyException),
345    /// <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>
346    InvalidParameterException(crate::types::error::InvalidParameterException),
347    /// <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>
348    InvalidS3ObjectException(crate::types::error::InvalidS3ObjectException),
349    /// <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>
350    LimitExceededException(crate::types::error::LimitExceededException),
351    /// <p>The number of requests exceeded your throughput limit. If you want to increase this limit, contact Amazon Textract.</p>
352    ProvisionedThroughputExceededException(crate::types::error::ProvisionedThroughputExceededException),
353    /// <p>Amazon Textract is temporarily unable to process the request. Try your call again.</p>
354    ThrottlingException(crate::types::error::ThrottlingException),
355    /// <p>The format of the input document isn't supported. Documents for operations can be in PNG, JPEG, PDF, or TIFF format.</p>
356    UnsupportedDocumentException(crate::types::error::UnsupportedDocumentException),
357    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
358    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
359    variable wildcard pattern and check `.code()`:
360     \
361    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
362     \
363    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-StartDocumentTextDetectionError) for what information is available for the error.")]
364    Unhandled(crate::error::sealed_unhandled::Unhandled),
365}
366impl StartDocumentTextDetectionError {
367    /// Creates the `StartDocumentTextDetectionError::Unhandled` variant from any error type.
368    pub fn unhandled(
369        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
370    ) -> Self {
371        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
372            source: err.into(),
373            meta: ::std::default::Default::default(),
374        })
375    }
376
377    /// Creates the `StartDocumentTextDetectionError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
378    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
379        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
380            source: err.clone().into(),
381            meta: err,
382        })
383    }
384    ///
385    /// Returns error metadata, which includes the error code, message,
386    /// request ID, and potentially additional information.
387    ///
388    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
389        match self {
390            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
391            Self::BadDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
392            Self::DocumentTooLargeException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
393            Self::IdempotentParameterMismatchException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
394            Self::InternalServerError(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
395            Self::InvalidKmsKeyException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
396            Self::InvalidParameterException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
397            Self::InvalidS3ObjectException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
398            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
399            Self::ProvisionedThroughputExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
400            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
401            Self::UnsupportedDocumentException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
402            Self::Unhandled(e) => &e.meta,
403        }
404    }
405    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::AccessDeniedException`.
406    pub fn is_access_denied_exception(&self) -> bool {
407        matches!(self, Self::AccessDeniedException(_))
408    }
409    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::BadDocumentException`.
410    pub fn is_bad_document_exception(&self) -> bool {
411        matches!(self, Self::BadDocumentException(_))
412    }
413    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::DocumentTooLargeException`.
414    pub fn is_document_too_large_exception(&self) -> bool {
415        matches!(self, Self::DocumentTooLargeException(_))
416    }
417    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::IdempotentParameterMismatchException`.
418    pub fn is_idempotent_parameter_mismatch_exception(&self) -> bool {
419        matches!(self, Self::IdempotentParameterMismatchException(_))
420    }
421    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::InternalServerError`.
422    pub fn is_internal_server_error(&self) -> bool {
423        matches!(self, Self::InternalServerError(_))
424    }
425    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::InvalidKmsKeyException`.
426    pub fn is_invalid_kms_key_exception(&self) -> bool {
427        matches!(self, Self::InvalidKmsKeyException(_))
428    }
429    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::InvalidParameterException`.
430    pub fn is_invalid_parameter_exception(&self) -> bool {
431        matches!(self, Self::InvalidParameterException(_))
432    }
433    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::InvalidS3ObjectException`.
434    pub fn is_invalid_s3_object_exception(&self) -> bool {
435        matches!(self, Self::InvalidS3ObjectException(_))
436    }
437    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::LimitExceededException`.
438    pub fn is_limit_exceeded_exception(&self) -> bool {
439        matches!(self, Self::LimitExceededException(_))
440    }
441    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::ProvisionedThroughputExceededException`.
442    pub fn is_provisioned_throughput_exceeded_exception(&self) -> bool {
443        matches!(self, Self::ProvisionedThroughputExceededException(_))
444    }
445    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::ThrottlingException`.
446    pub fn is_throttling_exception(&self) -> bool {
447        matches!(self, Self::ThrottlingException(_))
448    }
449    /// Returns `true` if the error kind is `StartDocumentTextDetectionError::UnsupportedDocumentException`.
450    pub fn is_unsupported_document_exception(&self) -> bool {
451        matches!(self, Self::UnsupportedDocumentException(_))
452    }
453}
454impl ::std::error::Error for StartDocumentTextDetectionError {
455    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
456        match self {
457            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
458            Self::BadDocumentException(_inner) => ::std::option::Option::Some(_inner),
459            Self::DocumentTooLargeException(_inner) => ::std::option::Option::Some(_inner),
460            Self::IdempotentParameterMismatchException(_inner) => ::std::option::Option::Some(_inner),
461            Self::InternalServerError(_inner) => ::std::option::Option::Some(_inner),
462            Self::InvalidKmsKeyException(_inner) => ::std::option::Option::Some(_inner),
463            Self::InvalidParameterException(_inner) => ::std::option::Option::Some(_inner),
464            Self::InvalidS3ObjectException(_inner) => ::std::option::Option::Some(_inner),
465            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
466            Self::ProvisionedThroughputExceededException(_inner) => ::std::option::Option::Some(_inner),
467            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
468            Self::UnsupportedDocumentException(_inner) => ::std::option::Option::Some(_inner),
469            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
470        }
471    }
472}
473impl ::std::fmt::Display for StartDocumentTextDetectionError {
474    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
475        match self {
476            Self::AccessDeniedException(_inner) => _inner.fmt(f),
477            Self::BadDocumentException(_inner) => _inner.fmt(f),
478            Self::DocumentTooLargeException(_inner) => _inner.fmt(f),
479            Self::IdempotentParameterMismatchException(_inner) => _inner.fmt(f),
480            Self::InternalServerError(_inner) => _inner.fmt(f),
481            Self::InvalidKmsKeyException(_inner) => _inner.fmt(f),
482            Self::InvalidParameterException(_inner) => _inner.fmt(f),
483            Self::InvalidS3ObjectException(_inner) => _inner.fmt(f),
484            Self::LimitExceededException(_inner) => _inner.fmt(f),
485            Self::ProvisionedThroughputExceededException(_inner) => _inner.fmt(f),
486            Self::ThrottlingException(_inner) => _inner.fmt(f),
487            Self::UnsupportedDocumentException(_inner) => _inner.fmt(f),
488            Self::Unhandled(_inner) => {
489                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
490                    write!(f, "unhandled error ({code})")
491                } else {
492                    f.write_str("unhandled error")
493                }
494            }
495        }
496    }
497}
498impl ::aws_smithy_types::retry::ProvideErrorKind for StartDocumentTextDetectionError {
499    fn code(&self) -> ::std::option::Option<&str> {
500        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
501    }
502    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
503        ::std::option::Option::None
504    }
505}
506impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for StartDocumentTextDetectionError {
507    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
508        match self {
509            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
510            Self::BadDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
511            Self::DocumentTooLargeException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
512            Self::IdempotentParameterMismatchException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
513            Self::InternalServerError(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
514            Self::InvalidKmsKeyException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
515            Self::InvalidParameterException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
516            Self::InvalidS3ObjectException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
517            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
518            Self::ProvisionedThroughputExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
519            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
520            Self::UnsupportedDocumentException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
521            Self::Unhandled(_inner) => &_inner.meta,
522        }
523    }
524}
525impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for StartDocumentTextDetectionError {
526    fn create_unhandled_error(
527        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
528        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
529    ) -> Self {
530        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
531            source,
532            meta: meta.unwrap_or_default(),
533        })
534    }
535}
536impl ::aws_types::request_id::RequestId for crate::operation::start_document_text_detection::StartDocumentTextDetectionError {
537    fn request_id(&self) -> Option<&str> {
538        self.meta().request_id()
539    }
540}
541
542pub use crate::operation::start_document_text_detection::_start_document_text_detection_input::StartDocumentTextDetectionInput;
543
544pub use crate::operation::start_document_text_detection::_start_document_text_detection_output::StartDocumentTextDetectionOutput;
545
546mod _start_document_text_detection_input;
547
548mod _start_document_text_detection_output;
549
550/// Builders
551pub mod builders;