Skip to main content

aws_sdk_rds/operation/
restore_db_cluster_from_s3.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `RestoreDBClusterFromS3`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct RestoreDBClusterFromS3;
6impl RestoreDBClusterFromS3 {
7    /// Creates a new `RestoreDBClusterFromS3`
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::restore_db_cluster_from_s3::RestoreDbClusterFromS3Input,
14    ) -> ::std::result::Result<
15        crate::operation::restore_db_cluster_from_s3::RestoreDbClusterFromS3Output,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::restore_db_cluster_from_s3::RestoreDBClusterFromS3Error,
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::restore_db_cluster_from_s3::RestoreDBClusterFromS3Error>()
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::restore_db_cluster_from_s3::RestoreDbClusterFromS3Output>()
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::restore_db_cluster_from_s3::RestoreDbClusterFromS3Input,
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("RDS", "RestoreDBClusterFromS3", input, runtime_plugins, stop_point)
55            // Create a parent span for the entire operation. Includes a random, internal-only,
56            // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
57            .instrument(::tracing::debug_span!(
58                "RDS.RestoreDBClusterFromS3",
59                "rpc.service" = "RDS",
60                "rpc.method" = "RestoreDBClusterFromS3",
61                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
62                "rpc.system" = "aws-api",
63            ))
64            .await
65    }
66
67    pub(crate) fn operation_runtime_plugins(
68        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
69        client_config: &crate::config::Config,
70        config_override: ::std::option::Option<crate::config::Builder>,
71    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
72        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
73
74        if let ::std::option::Option::Some(config_override) = config_override {
75            for plugin in config_override.runtime_plugins.iter().cloned() {
76                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
77            }
78            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
79                config_override,
80                client_config.config.clone(),
81                &client_config.runtime_components,
82            ));
83        }
84        runtime_plugins
85    }
86}
87impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for RestoreDBClusterFromS3 {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("RestoreDBClusterFromS3");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            RestoreDBClusterFromS3RequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            RestoreDBClusterFromS3ResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("RestoreDBClusterFromS3")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::SensitiveOutput);
106        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
107            "RestoreDBClusterFromS3",
108            "RDS",
109        ));
110        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
111        signing_options.double_uri_encode = true;
112        signing_options.content_sha256_header = false;
113        signing_options.normalize_uri_path = true;
114        signing_options.payload_override = None;
115
116        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
117            signing_options,
118            ..::std::default::Default::default()
119        });
120
121        ::std::option::Option::Some(cfg.freeze())
122    }
123
124    fn runtime_components(
125        &self,
126        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
127    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
128        #[allow(unused_mut)]
129        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("RestoreDBClusterFromS3")
130            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
131                RestoreDBClusterFromS3TelemetryInputCaptureInterceptor,
132            ))
133            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
134                ::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default(),
135            ))
136            .with_interceptor(::aws_smithy_runtime_api::client::interceptors::SharedInterceptor::permanent(
137                RestoreDBClusterFromS3EndpointParamsInterceptor,
138            ))
139            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
140                crate::operation::restore_db_cluster_from_s3::RestoreDBClusterFromS3Error,
141            >::new())
142            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
143                crate::operation::restore_db_cluster_from_s3::RestoreDBClusterFromS3Error,
144            >::new())
145            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
146                crate::operation::restore_db_cluster_from_s3::RestoreDBClusterFromS3Error,
147            >::new());
148
149        ::std::borrow::Cow::Owned(rcb)
150    }
151}
152
153#[derive(Debug)]
154struct RestoreDBClusterFromS3TelemetryInputCaptureInterceptor;
155
156#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
157impl ::aws_smithy_runtime_api::client::interceptors::Intercept for RestoreDBClusterFromS3TelemetryInputCaptureInterceptor {
158    fn name(&self) -> &'static str {
159        "RestoreDBClusterFromS3TelemetryInputCaptureInterceptor"
160    }
161
162    fn read_before_execution(
163        &self,
164        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
165            '_,
166            ::aws_smithy_runtime_api::client::interceptors::context::Input,
167            ::aws_smithy_runtime_api::client::interceptors::context::Output,
168            ::aws_smithy_runtime_api::client::interceptors::context::Error,
169        >,
170        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
171    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
172        // Nothing to do unless the customer opted in by naming members to record.
173        let ::std::option::Option::Some(requested) = cfg
174            .load::<::aws_smithy_types::telemetry::RequestedTelemetryAttributes>()
175            .filter(|r| !r.is_empty())
176        else {
177            return ::std::result::Result::Ok(());
178        };
179
180        let ::std::option::Option::Some(input) = context.input().downcast_ref::<RestoreDbClusterFromS3Input>() else {
181            // A mismatched input is not this interceptor's concern; skip quietly.
182            return ::std::result::Result::Ok(());
183        };
184
185        let mut captured = ::aws_smithy_types::telemetry::CapturedTelemetryAttributes::default();
186        if requested.should_capture("CharacterSetName") {
187            if let ::std::option::Option::Some(value) = input.character_set_name.as_deref() {
188                captured.insert("CharacterSetName", value);
189            }
190        }
191        if requested.should_capture("DatabaseName") {
192            if let ::std::option::Option::Some(value) = input.database_name.as_deref() {
193                captured.insert("DatabaseName", value);
194            }
195        }
196        if requested.should_capture("DBClusterIdentifier") {
197            if let ::std::option::Option::Some(value) = input.db_cluster_identifier.as_deref() {
198                captured.insert("DBClusterIdentifier", value);
199            }
200        }
201        if requested.should_capture("DBClusterParameterGroupName") {
202            if let ::std::option::Option::Some(value) = input.db_cluster_parameter_group_name.as_deref() {
203                captured.insert("DBClusterParameterGroupName", value);
204            }
205        }
206        if requested.should_capture("DBSubnetGroupName") {
207            if let ::std::option::Option::Some(value) = input.db_subnet_group_name.as_deref() {
208                captured.insert("DBSubnetGroupName", value);
209            }
210        }
211        if requested.should_capture("Engine") {
212            if let ::std::option::Option::Some(value) = input.engine.as_deref() {
213                captured.insert("Engine", value);
214            }
215        }
216        if requested.should_capture("EngineVersion") {
217            if let ::std::option::Option::Some(value) = input.engine_version.as_deref() {
218                captured.insert("EngineVersion", value);
219            }
220        }
221        if requested.should_capture("MasterUsername") {
222            if let ::std::option::Option::Some(value) = input.master_username.as_deref() {
223                captured.insert("MasterUsername", value);
224            }
225        }
226        if requested.should_capture("OptionGroupName") {
227            if let ::std::option::Option::Some(value) = input.option_group_name.as_deref() {
228                captured.insert("OptionGroupName", value);
229            }
230        }
231        if requested.should_capture("PreferredBackupWindow") {
232            if let ::std::option::Option::Some(value) = input.preferred_backup_window.as_deref() {
233                captured.insert("PreferredBackupWindow", value);
234            }
235        }
236        if requested.should_capture("PreferredMaintenanceWindow") {
237            if let ::std::option::Option::Some(value) = input.preferred_maintenance_window.as_deref() {
238                captured.insert("PreferredMaintenanceWindow", value);
239            }
240        }
241        if requested.should_capture("KmsKeyId") {
242            if let ::std::option::Option::Some(value) = input.kms_key_id.as_deref() {
243                captured.insert("KmsKeyId", value);
244            }
245        }
246        if requested.should_capture("SourceEngine") {
247            if let ::std::option::Option::Some(value) = input.source_engine.as_deref() {
248                captured.insert("SourceEngine", value);
249            }
250        }
251        if requested.should_capture("SourceEngineVersion") {
252            if let ::std::option::Option::Some(value) = input.source_engine_version.as_deref() {
253                captured.insert("SourceEngineVersion", value);
254            }
255        }
256        if requested.should_capture("S3BucketName") {
257            if let ::std::option::Option::Some(value) = input.s3_bucket_name.as_deref() {
258                captured.insert("S3BucketName", value);
259            }
260        }
261        if requested.should_capture("S3Prefix") {
262            if let ::std::option::Option::Some(value) = input.s3_prefix.as_deref() {
263                captured.insert("S3Prefix", value);
264            }
265        }
266        if requested.should_capture("S3IngestionRoleArn") {
267            if let ::std::option::Option::Some(value) = input.s3_ingestion_role_arn.as_deref() {
268                captured.insert("S3IngestionRoleArn", value);
269            }
270        }
271        if requested.should_capture("Domain") {
272            if let ::std::option::Option::Some(value) = input.domain.as_deref() {
273                captured.insert("Domain", value);
274            }
275        }
276        if requested.should_capture("DomainIAMRoleName") {
277            if let ::std::option::Option::Some(value) = input.domain_iam_role_name.as_deref() {
278                captured.insert("DomainIAMRoleName", value);
279            }
280        }
281        if requested.should_capture("StorageType") {
282            if let ::std::option::Option::Some(value) = input.storage_type.as_deref() {
283                captured.insert("StorageType", value);
284            }
285        }
286        if requested.should_capture("NetworkType") {
287            if let ::std::option::Option::Some(value) = input.network_type.as_deref() {
288                captured.insert("NetworkType", value);
289            }
290        }
291        if requested.should_capture("MasterUserSecretKmsKeyId") {
292            if let ::std::option::Option::Some(value) = input.master_user_secret_kms_key_id.as_deref() {
293                captured.insert("MasterUserSecretKmsKeyId", value);
294            }
295        }
296        if requested.should_capture("EngineLifecycleSupport") {
297            if let ::std::option::Option::Some(value) = input.engine_lifecycle_support.as_deref() {
298                captured.insert("EngineLifecycleSupport", value);
299            }
300        }
301
302        cfg.interceptor_state().store_put(captured);
303        ::std::result::Result::Ok(())
304    }
305}
306#[derive(Debug)]
307struct RestoreDBClusterFromS3ResponseDeserializer;
308impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for RestoreDBClusterFromS3ResponseDeserializer {
309    fn deserialize_nonstreaming_with_config(
310        &self,
311        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
312        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
313    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
314        let (success, status) = (response.status().is_success(), response.status().as_u16());
315        let headers = response.headers();
316        let body = response.body().bytes().expect("body loaded");
317        #[allow(unused_mut)]
318        let mut force_error = false;
319        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
320        let parse_result = if !success && status != 200 || force_error {
321            crate::protocol_serde::shape_restore_db_cluster_from_s3::de_restore_db_cluster_from_s3_http_error(status, headers, body)
322        } else {
323            crate::protocol_serde::shape_restore_db_cluster_from_s3::de_restore_db_cluster_from_s3_http_response(status, headers, body)
324        };
325        crate::protocol_serde::type_erase_result(parse_result)
326    }
327}
328#[derive(Debug)]
329struct RestoreDBClusterFromS3RequestSerializer;
330impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for RestoreDBClusterFromS3RequestSerializer {
331    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
332    fn serialize_input(
333        &self,
334        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
335        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
336    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
337        let input = input
338            .downcast::<crate::operation::restore_db_cluster_from_s3::RestoreDbClusterFromS3Input>()
339            .expect("correct type");
340        let _header_serialization_settings = _cfg
341            .load::<crate::serialization_settings::HeaderSerializationSettings>()
342            .cloned()
343            .unwrap_or_default();
344        let mut request_builder = {
345            #[allow(clippy::uninlined_format_args)]
346            fn uri_base(
347                _input: &crate::operation::restore_db_cluster_from_s3::RestoreDbClusterFromS3Input,
348                output: &mut ::std::string::String,
349            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
350                use ::std::fmt::Write as _;
351                ::std::write!(output, "/").expect("formatting should succeed");
352                ::std::result::Result::Ok(())
353            }
354            #[allow(clippy::unnecessary_wraps)]
355            fn update_http_builder(
356                input: &crate::operation::restore_db_cluster_from_s3::RestoreDbClusterFromS3Input,
357                builder: ::http_1x::request::Builder,
358            ) -> ::std::result::Result<::http_1x::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
359                let mut uri = ::std::string::String::new();
360                uri_base(input, &mut uri)?;
361                ::std::result::Result::Ok(builder.method("POST").uri(uri))
362            }
363            let mut builder = update_http_builder(&input, ::http_1x::request::Builder::new())?;
364            builder =
365                _header_serialization_settings.set_default_header(builder, ::http_1x::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
366            builder
367        };
368        let body = ::aws_smithy_types::body::SdkBody::from(
369            crate::protocol_serde::shape_restore_db_cluster_from_s3_input::ser_restore_db_cluster_from_s3_input_input_input(&input)?,
370        );
371        if let Some(content_length) = body.content_length() {
372            let content_length = content_length.to_string();
373            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http_1x::header::CONTENT_LENGTH, &content_length);
374        }
375        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
376    }
377}
378#[derive(Debug)]
379struct RestoreDBClusterFromS3EndpointParamsInterceptor;
380
381#[::aws_smithy_runtime_api::client::interceptors::dyn_dispatch_hint]
382impl ::aws_smithy_runtime_api::client::interceptors::Intercept for RestoreDBClusterFromS3EndpointParamsInterceptor {
383    fn name(&self) -> &'static str {
384        "RestoreDBClusterFromS3EndpointParamsInterceptor"
385    }
386
387    fn read_before_execution(
388        &self,
389        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
390            '_,
391            ::aws_smithy_runtime_api::client::interceptors::context::Input,
392            ::aws_smithy_runtime_api::client::interceptors::context::Output,
393            ::aws_smithy_runtime_api::client::interceptors::context::Error,
394        >,
395        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
396    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
397        let _input = context
398            .input()
399            .downcast_ref::<RestoreDbClusterFromS3Input>()
400            .ok_or("failed to downcast to RestoreDbClusterFromS3Input")?;
401
402        let params = crate::config::endpoint::Params::builder()
403            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
404            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
405            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
406            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
407            .build()
408            .map_err(|err| {
409                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
410            })?;
411        cfg.interceptor_state()
412            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
413        ::std::result::Result::Ok(())
414    }
415}
416
417// The get_* functions below are generated from JMESPath expressions in the
418// operationContextParams trait. They target the operation's input shape.
419
420/// Error type for the `RestoreDBClusterFromS3Error` operation.
421#[non_exhaustive]
422#[derive(::std::fmt::Debug)]
423pub enum RestoreDBClusterFromS3Error {
424    /// <p>The user already has a DB cluster with the given identifier.</p>
425    DbClusterAlreadyExistsFault(crate::types::error::DbClusterAlreadyExistsFault),
426    /// <p><code>DBClusterIdentifier</code> doesn't refer to an existing DB cluster.</p>
427    DbClusterNotFoundFault(crate::types::error::DbClusterNotFoundFault),
428    /// <p><code>DBClusterParameterGroupName</code> doesn't refer to an existing DB cluster parameter group.</p>
429    DbClusterParameterGroupNotFoundFault(crate::types::error::DbClusterParameterGroupNotFoundFault),
430    /// <p>The user attempted to create a new DB cluster and the user has already reached the maximum allowed DB cluster quota.</p>
431    DbClusterQuotaExceededFault(crate::types::error::DbClusterQuotaExceededFault),
432    /// <p>You have exceeded the maximum number of IAM roles that can be associated with the specified DB cluster.</p>
433    DbClusterRoleQuotaExceededFault(crate::types::error::DbClusterRoleQuotaExceededFault),
434    /// <p><code>DBSubnetGroupName</code> doesn't refer to an existing DB subnet group.</p>
435    DbSubnetGroupNotFoundFault(crate::types::error::DbSubnetGroupNotFoundFault),
436    /// <p><code>Domain</code> doesn't refer to an existing Active Directory domain.</p>
437    DomainNotFoundFault(crate::types::error::DomainNotFoundFault),
438    /// <p>There is insufficient storage available for the current action. You might be able to resolve this error by updating your subnet group to use different Availability Zones that have more storage available.</p>
439    InsufficientStorageClusterCapacityFault(crate::types::error::InsufficientStorageClusterCapacityFault),
440    /// <p>The requested operation can't be performed while the cluster is in this state.</p>
441    InvalidDbClusterStateFault(crate::types::error::InvalidDbClusterStateFault),
442    /// <p>The DB subnet group cannot be deleted because it's in use.</p>
443    InvalidDbSubnetGroupStateFault(crate::types::error::InvalidDbSubnetGroupStateFault),
444    /// <p>The specified Amazon S3 bucket name can't be found or Amazon RDS isn't authorized to access the specified Amazon S3 bucket. Verify the <b>SourceS3BucketName</b> and <b>S3IngestionRoleArn</b> values and try again.</p>
445    InvalidS3BucketFault(crate::types::error::InvalidS3BucketFault),
446    /// <p>The requested subnet is invalid, or multiple subnets were requested that are not all in a common VPC.</p>
447    InvalidSubnet(crate::types::error::InvalidSubnet),
448    /// <p>The DB subnet group doesn't cover all Availability Zones after it's created because of users' change.</p>
449    InvalidVpcNetworkStateFault(crate::types::error::InvalidVpcNetworkStateFault),
450    /// <p>An error occurred accessing an Amazon Web Services KMS key.</p>
451    KmsKeyNotAccessibleFault(crate::types::error::KmsKeyNotAccessibleFault),
452    /// <p>The network type is invalid for the DB instance. Valid nework type values are <code>IPV4</code> and <code>DUAL</code>.</p>
453    NetworkTypeNotSupported(crate::types::error::NetworkTypeNotSupported),
454    /// <p>The request would result in the user exceeding the allowed amount of storage available across all DB instances.</p>
455    StorageQuotaExceededFault(crate::types::error::StorageQuotaExceededFault),
456    /// <p>The specified <code>StorageType</code> can't be associated with the DB instance.</p>
457    StorageTypeNotSupportedFault(crate::types::error::StorageTypeNotSupportedFault),
458    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
459    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
460    variable wildcard pattern and check `.code()`:
461     \
462    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
463     \
464    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-RestoreDBClusterFromS3Error) for what information is available for the error.")]
465    Unhandled(crate::error::sealed_unhandled::Unhandled),
466}
467impl RestoreDBClusterFromS3Error {
468    /// Creates the `RestoreDBClusterFromS3Error::Unhandled` variant from any error type.
469    pub fn unhandled(
470        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
471    ) -> Self {
472        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
473            source: err.into(),
474            meta: ::std::default::Default::default(),
475        })
476    }
477
478    /// Creates the `RestoreDBClusterFromS3Error::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
479    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
480        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
481            source: err.clone().into(),
482            meta: err,
483        })
484    }
485    ///
486    /// Returns error metadata, which includes the error code, message,
487    /// request ID, and potentially additional information.
488    ///
489    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
490        match self {
491            Self::DbClusterAlreadyExistsFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
492            Self::DbClusterNotFoundFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
493            Self::DbClusterParameterGroupNotFoundFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
494            Self::DbClusterQuotaExceededFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
495            Self::DbClusterRoleQuotaExceededFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
496            Self::DbSubnetGroupNotFoundFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
497            Self::DomainNotFoundFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
498            Self::InsufficientStorageClusterCapacityFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
499            Self::InvalidDbClusterStateFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
500            Self::InvalidDbSubnetGroupStateFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
501            Self::InvalidS3BucketFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
502            Self::InvalidSubnet(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
503            Self::InvalidVpcNetworkStateFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
504            Self::KmsKeyNotAccessibleFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
505            Self::NetworkTypeNotSupported(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
506            Self::StorageQuotaExceededFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
507            Self::StorageTypeNotSupportedFault(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
508            Self::Unhandled(e) => &e.meta,
509        }
510    }
511    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::DbClusterAlreadyExistsFault`.
512    pub fn is_db_cluster_already_exists_fault(&self) -> bool {
513        matches!(self, Self::DbClusterAlreadyExistsFault(_))
514    }
515    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::DbClusterNotFoundFault`.
516    pub fn is_db_cluster_not_found_fault(&self) -> bool {
517        matches!(self, Self::DbClusterNotFoundFault(_))
518    }
519    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::DbClusterParameterGroupNotFoundFault`.
520    pub fn is_db_cluster_parameter_group_not_found_fault(&self) -> bool {
521        matches!(self, Self::DbClusterParameterGroupNotFoundFault(_))
522    }
523    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::DbClusterQuotaExceededFault`.
524    pub fn is_db_cluster_quota_exceeded_fault(&self) -> bool {
525        matches!(self, Self::DbClusterQuotaExceededFault(_))
526    }
527    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::DbClusterRoleQuotaExceededFault`.
528    pub fn is_db_cluster_role_quota_exceeded_fault(&self) -> bool {
529        matches!(self, Self::DbClusterRoleQuotaExceededFault(_))
530    }
531    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::DbSubnetGroupNotFoundFault`.
532    pub fn is_db_subnet_group_not_found_fault(&self) -> bool {
533        matches!(self, Self::DbSubnetGroupNotFoundFault(_))
534    }
535    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::DomainNotFoundFault`.
536    pub fn is_domain_not_found_fault(&self) -> bool {
537        matches!(self, Self::DomainNotFoundFault(_))
538    }
539    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::InsufficientStorageClusterCapacityFault`.
540    pub fn is_insufficient_storage_cluster_capacity_fault(&self) -> bool {
541        matches!(self, Self::InsufficientStorageClusterCapacityFault(_))
542    }
543    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::InvalidDbClusterStateFault`.
544    pub fn is_invalid_db_cluster_state_fault(&self) -> bool {
545        matches!(self, Self::InvalidDbClusterStateFault(_))
546    }
547    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::InvalidDbSubnetGroupStateFault`.
548    pub fn is_invalid_db_subnet_group_state_fault(&self) -> bool {
549        matches!(self, Self::InvalidDbSubnetGroupStateFault(_))
550    }
551    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::InvalidS3BucketFault`.
552    pub fn is_invalid_s3_bucket_fault(&self) -> bool {
553        matches!(self, Self::InvalidS3BucketFault(_))
554    }
555    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::InvalidSubnet`.
556    pub fn is_invalid_subnet(&self) -> bool {
557        matches!(self, Self::InvalidSubnet(_))
558    }
559    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::InvalidVpcNetworkStateFault`.
560    pub fn is_invalid_vpc_network_state_fault(&self) -> bool {
561        matches!(self, Self::InvalidVpcNetworkStateFault(_))
562    }
563    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::KmsKeyNotAccessibleFault`.
564    pub fn is_kms_key_not_accessible_fault(&self) -> bool {
565        matches!(self, Self::KmsKeyNotAccessibleFault(_))
566    }
567    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::NetworkTypeNotSupported`.
568    pub fn is_network_type_not_supported(&self) -> bool {
569        matches!(self, Self::NetworkTypeNotSupported(_))
570    }
571    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::StorageQuotaExceededFault`.
572    pub fn is_storage_quota_exceeded_fault(&self) -> bool {
573        matches!(self, Self::StorageQuotaExceededFault(_))
574    }
575    /// Returns `true` if the error kind is `RestoreDBClusterFromS3Error::StorageTypeNotSupportedFault`.
576    pub fn is_storage_type_not_supported_fault(&self) -> bool {
577        matches!(self, Self::StorageTypeNotSupportedFault(_))
578    }
579}
580impl ::std::error::Error for RestoreDBClusterFromS3Error {
581    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
582        match self {
583            Self::DbClusterAlreadyExistsFault(_inner) => ::std::option::Option::Some(_inner),
584            Self::DbClusterNotFoundFault(_inner) => ::std::option::Option::Some(_inner),
585            Self::DbClusterParameterGroupNotFoundFault(_inner) => ::std::option::Option::Some(_inner),
586            Self::DbClusterQuotaExceededFault(_inner) => ::std::option::Option::Some(_inner),
587            Self::DbClusterRoleQuotaExceededFault(_inner) => ::std::option::Option::Some(_inner),
588            Self::DbSubnetGroupNotFoundFault(_inner) => ::std::option::Option::Some(_inner),
589            Self::DomainNotFoundFault(_inner) => ::std::option::Option::Some(_inner),
590            Self::InsufficientStorageClusterCapacityFault(_inner) => ::std::option::Option::Some(_inner),
591            Self::InvalidDbClusterStateFault(_inner) => ::std::option::Option::Some(_inner),
592            Self::InvalidDbSubnetGroupStateFault(_inner) => ::std::option::Option::Some(_inner),
593            Self::InvalidS3BucketFault(_inner) => ::std::option::Option::Some(_inner),
594            Self::InvalidSubnet(_inner) => ::std::option::Option::Some(_inner),
595            Self::InvalidVpcNetworkStateFault(_inner) => ::std::option::Option::Some(_inner),
596            Self::KmsKeyNotAccessibleFault(_inner) => ::std::option::Option::Some(_inner),
597            Self::NetworkTypeNotSupported(_inner) => ::std::option::Option::Some(_inner),
598            Self::StorageQuotaExceededFault(_inner) => ::std::option::Option::Some(_inner),
599            Self::StorageTypeNotSupportedFault(_inner) => ::std::option::Option::Some(_inner),
600            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
601        }
602    }
603}
604impl ::std::fmt::Display for RestoreDBClusterFromS3Error {
605    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
606        match self {
607            Self::DbClusterAlreadyExistsFault(_inner) => _inner.fmt(f),
608            Self::DbClusterNotFoundFault(_inner) => _inner.fmt(f),
609            Self::DbClusterParameterGroupNotFoundFault(_inner) => _inner.fmt(f),
610            Self::DbClusterQuotaExceededFault(_inner) => _inner.fmt(f),
611            Self::DbClusterRoleQuotaExceededFault(_inner) => _inner.fmt(f),
612            Self::DbSubnetGroupNotFoundFault(_inner) => _inner.fmt(f),
613            Self::DomainNotFoundFault(_inner) => _inner.fmt(f),
614            Self::InsufficientStorageClusterCapacityFault(_inner) => _inner.fmt(f),
615            Self::InvalidDbClusterStateFault(_inner) => _inner.fmt(f),
616            Self::InvalidDbSubnetGroupStateFault(_inner) => _inner.fmt(f),
617            Self::InvalidS3BucketFault(_inner) => _inner.fmt(f),
618            Self::InvalidSubnet(_inner) => _inner.fmt(f),
619            Self::InvalidVpcNetworkStateFault(_inner) => _inner.fmt(f),
620            Self::KmsKeyNotAccessibleFault(_inner) => _inner.fmt(f),
621            Self::NetworkTypeNotSupported(_inner) => _inner.fmt(f),
622            Self::StorageQuotaExceededFault(_inner) => _inner.fmt(f),
623            Self::StorageTypeNotSupportedFault(_inner) => _inner.fmt(f),
624            Self::Unhandled(_inner) => {
625                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
626                    write!(f, "unhandled error ({code})")
627                } else {
628                    f.write_str("unhandled error")
629                }
630            }
631        }
632    }
633}
634impl ::aws_smithy_types::retry::ProvideErrorKind for RestoreDBClusterFromS3Error {
635    fn code(&self) -> ::std::option::Option<&str> {
636        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
637    }
638    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
639        ::std::option::Option::None
640    }
641}
642impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for RestoreDBClusterFromS3Error {
643    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
644        match self {
645            Self::DbClusterAlreadyExistsFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
646            Self::DbClusterNotFoundFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
647            Self::DbClusterParameterGroupNotFoundFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
648            Self::DbClusterQuotaExceededFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
649            Self::DbClusterRoleQuotaExceededFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
650            Self::DbSubnetGroupNotFoundFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
651            Self::DomainNotFoundFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
652            Self::InsufficientStorageClusterCapacityFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
653            Self::InvalidDbClusterStateFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
654            Self::InvalidDbSubnetGroupStateFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
655            Self::InvalidS3BucketFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
656            Self::InvalidSubnet(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
657            Self::InvalidVpcNetworkStateFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
658            Self::KmsKeyNotAccessibleFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
659            Self::NetworkTypeNotSupported(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
660            Self::StorageQuotaExceededFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
661            Self::StorageTypeNotSupportedFault(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
662            Self::Unhandled(_inner) => &_inner.meta,
663        }
664    }
665}
666impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for RestoreDBClusterFromS3Error {
667    fn create_unhandled_error(
668        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
669        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
670    ) -> Self {
671        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
672            source,
673            meta: meta.unwrap_or_default(),
674        })
675    }
676}
677impl ::aws_types::request_id::RequestId for crate::operation::restore_db_cluster_from_s3::RestoreDBClusterFromS3Error {
678    fn request_id(&self) -> Option<&str> {
679        self.meta().request_id()
680    }
681}
682
683pub use crate::operation::restore_db_cluster_from_s3::_restore_db_cluster_from_s3_input::RestoreDbClusterFromS3Input;
684
685pub use crate::operation::restore_db_cluster_from_s3::_restore_db_cluster_from_s3_output::RestoreDbClusterFromS3Output;
686
687mod _restore_db_cluster_from_s3_input;
688
689mod _restore_db_cluster_from_s3_output;
690
691/// Builders
692pub mod builders;