aws_sdk_route53/operation/
disassociate_vpc_from_hosted_zone.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `DisassociateVPCFromHostedZone`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct DisassociateVPCFromHostedZone;
6impl DisassociateVPCFromHostedZone {
7    /// Creates a new `DisassociateVPCFromHostedZone`
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::disassociate_vpc_from_hosted_zone::DisassociateVpcFromHostedZoneInput,
14    ) -> ::std::result::Result<
15        crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVpcFromHostedZoneOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVPCFromHostedZoneError,
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::disassociate_vpc_from_hosted_zone::DisassociateVPCFromHostedZoneError>()
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::disassociate_vpc_from_hosted_zone::DisassociateVpcFromHostedZoneOutput>()
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::disassociate_vpc_from_hosted_zone::DisassociateVpcFromHostedZoneInput,
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            "Route 53",
56            "DisassociateVPCFromHostedZone",
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            "Route 53.DisassociateVPCFromHostedZone",
65            "rpc.service" = "Route 53",
66            "rpc.method" = "DisassociateVPCFromHostedZone",
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 DisassociateVPCFromHostedZone {
94    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
95        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("DisassociateVPCFromHostedZone");
96
97        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
98            DisassociateVPCFromHostedZoneRequestSerializer,
99        ));
100        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
101            DisassociateVPCFromHostedZoneResponseDeserializer,
102        ));
103
104        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
105            crate::config::auth::Params::builder()
106                .operation_name("DisassociateVPCFromHostedZone")
107                .build()
108                .expect("required fields set"),
109        ));
110
111        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
112            "DisassociateVPCFromHostedZone",
113            "Route 53",
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("DisassociateVPCFromHostedZone")
135            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
136            .with_interceptor(DisassociateVPCFromHostedZoneEndpointParamsInterceptor)
137            .with_interceptor(crate::route53_resource_id_preprocessor::Route53ResourceIdInterceptor::new(
138                |input: &mut crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVpcFromHostedZoneInput| &mut input.hosted_zone_id,
139            ))
140            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
141                crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVPCFromHostedZoneError,
142            >::new())
143            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
144                crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVPCFromHostedZoneError,
145            >::new())
146            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
147                crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVPCFromHostedZoneError,
148            >::new());
149
150        ::std::borrow::Cow::Owned(rcb)
151    }
152}
153
154#[derive(Debug)]
155struct DisassociateVPCFromHostedZoneResponseDeserializer;
156impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for DisassociateVPCFromHostedZoneResponseDeserializer {
157    fn deserialize_nonstreaming(
158        &self,
159        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
160    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
161        let (success, status) = (response.status().is_success(), response.status().as_u16());
162        let headers = response.headers();
163        let body = response.body().bytes().expect("body loaded");
164        #[allow(unused_mut)]
165        let mut force_error = false;
166        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
167        let parse_result = if !success && status != 200 || force_error {
168            crate::protocol_serde::shape_disassociate_vpc_from_hosted_zone::de_disassociate_vpc_from_hosted_zone_http_error(status, headers, body)
169        } else {
170            crate::protocol_serde::shape_disassociate_vpc_from_hosted_zone::de_disassociate_vpc_from_hosted_zone_http_response(status, headers, body)
171        };
172        crate::protocol_serde::type_erase_result(parse_result)
173    }
174}
175#[derive(Debug)]
176struct DisassociateVPCFromHostedZoneRequestSerializer;
177impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for DisassociateVPCFromHostedZoneRequestSerializer {
178    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
179    fn serialize_input(
180        &self,
181        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
182        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
183    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
184        let input = input
185            .downcast::<crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVpcFromHostedZoneInput>()
186            .expect("correct type");
187        let _header_serialization_settings = _cfg
188            .load::<crate::serialization_settings::HeaderSerializationSettings>()
189            .cloned()
190            .unwrap_or_default();
191        let mut request_builder = {
192            #[allow(clippy::uninlined_format_args)]
193            fn uri_base(
194                _input: &crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVpcFromHostedZoneInput,
195                output: &mut ::std::string::String,
196            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
197                use ::std::fmt::Write as _;
198                let input_1 = &_input.hosted_zone_id;
199                let input_1 = input_1
200                    .as_ref()
201                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("hosted_zone_id", "cannot be empty or unset"))?;
202                let hosted_zone_id = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Default);
203                if hosted_zone_id.is_empty() {
204                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
205                        "hosted_zone_id",
206                        "cannot be empty or unset",
207                    ));
208                }
209                ::std::write!(
210                    output,
211                    "/2013-04-01/hostedzone/{HostedZoneId}/disassociatevpc",
212                    HostedZoneId = hosted_zone_id
213                )
214                .expect("formatting should succeed");
215                ::std::result::Result::Ok(())
216            }
217            #[allow(clippy::unnecessary_wraps)]
218            fn update_http_builder(
219                input: &crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVpcFromHostedZoneInput,
220                builder: ::http::request::Builder,
221            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
222                let mut uri = ::std::string::String::new();
223                uri_base(input, &mut uri)?;
224                ::std::result::Result::Ok(builder.method("POST").uri(uri))
225            }
226            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
227            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/xml");
228            builder
229        };
230        let body = ::aws_smithy_types::body::SdkBody::from(
231            crate::protocol_serde::shape_disassociate_vpc_from_hosted_zone::ser_disassociate_vpc_from_hosted_zone_op_input(&input)?,
232        );
233        if let Some(content_length) = body.content_length() {
234            let content_length = content_length.to_string();
235            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
236        }
237        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
238    }
239}
240#[derive(Debug)]
241struct DisassociateVPCFromHostedZoneEndpointParamsInterceptor;
242
243impl ::aws_smithy_runtime_api::client::interceptors::Intercept for DisassociateVPCFromHostedZoneEndpointParamsInterceptor {
244    fn name(&self) -> &'static str {
245        "DisassociateVPCFromHostedZoneEndpointParamsInterceptor"
246    }
247
248    fn read_before_execution(
249        &self,
250        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
251            '_,
252            ::aws_smithy_runtime_api::client::interceptors::context::Input,
253            ::aws_smithy_runtime_api::client::interceptors::context::Output,
254            ::aws_smithy_runtime_api::client::interceptors::context::Error,
255        >,
256        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
257    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
258        let _input = context
259            .input()
260            .downcast_ref::<DisassociateVpcFromHostedZoneInput>()
261            .ok_or("failed to downcast to DisassociateVpcFromHostedZoneInput")?;
262
263        let params = crate::config::endpoint::Params::builder()
264            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
265            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
266            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
267            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
268            .build()
269            .map_err(|err| {
270                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
271            })?;
272        cfg.interceptor_state()
273            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
274        ::std::result::Result::Ok(())
275    }
276}
277
278// The get_* functions below are generated from JMESPath expressions in the
279// operationContextParams trait. They target the operation's input shape.
280
281/// Error type for the `DisassociateVPCFromHostedZoneError` operation.
282#[non_exhaustive]
283#[derive(::std::fmt::Debug)]
284pub enum DisassociateVPCFromHostedZoneError {
285    /// <p>The input is not valid.</p>
286    InvalidInput(crate::types::error::InvalidInput),
287    /// <p>The VPC ID that you specified either isn't a valid ID or the current account is not authorized to access this VPC.</p>
288    InvalidVpcId(crate::types::error::InvalidVpcId),
289    /// <p>The VPC that you're trying to disassociate from the private hosted zone is the last VPC that is associated with the hosted zone. Amazon Route 53 doesn't support disassociating the last VPC from a hosted zone.</p>
290    LastVpcAssociation(crate::types::error::LastVpcAssociation),
291    /// <p>No hosted zone exists with the ID that you specified.</p>
292    NoSuchHostedZone(crate::types::error::NoSuchHostedZone),
293    /// <p>The specified VPC and hosted zone are not currently associated.</p>
294    VpcAssociationNotFound(crate::types::error::VpcAssociationNotFound),
295    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
296    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
297    variable wildcard pattern and check `.code()`:
298     \
299    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
300     \
301    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-DisassociateVPCFromHostedZoneError) for what information is available for the error.")]
302    Unhandled(crate::error::sealed_unhandled::Unhandled),
303}
304impl DisassociateVPCFromHostedZoneError {
305    /// Creates the `DisassociateVPCFromHostedZoneError::Unhandled` variant from any error type.
306    pub fn unhandled(
307        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
308    ) -> Self {
309        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
310            source: err.into(),
311            meta: ::std::default::Default::default(),
312        })
313    }
314
315    /// Creates the `DisassociateVPCFromHostedZoneError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
316    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
317        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
318            source: err.clone().into(),
319            meta: err,
320        })
321    }
322    ///
323    /// Returns error metadata, which includes the error code, message,
324    /// request ID, and potentially additional information.
325    ///
326    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
327        match self {
328            Self::InvalidInput(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
329            Self::InvalidVpcId(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
330            Self::LastVpcAssociation(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::NoSuchHostedZone(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::VpcAssociationNotFound(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::Unhandled(e) => &e.meta,
334        }
335    }
336    /// Returns `true` if the error kind is `DisassociateVPCFromHostedZoneError::InvalidInput`.
337    pub fn is_invalid_input(&self) -> bool {
338        matches!(self, Self::InvalidInput(_))
339    }
340    /// Returns `true` if the error kind is `DisassociateVPCFromHostedZoneError::InvalidVpcId`.
341    pub fn is_invalid_vpc_id(&self) -> bool {
342        matches!(self, Self::InvalidVpcId(_))
343    }
344    /// Returns `true` if the error kind is `DisassociateVPCFromHostedZoneError::LastVpcAssociation`.
345    pub fn is_last_vpc_association(&self) -> bool {
346        matches!(self, Self::LastVpcAssociation(_))
347    }
348    /// Returns `true` if the error kind is `DisassociateVPCFromHostedZoneError::NoSuchHostedZone`.
349    pub fn is_no_such_hosted_zone(&self) -> bool {
350        matches!(self, Self::NoSuchHostedZone(_))
351    }
352    /// Returns `true` if the error kind is `DisassociateVPCFromHostedZoneError::VpcAssociationNotFound`.
353    pub fn is_vpc_association_not_found(&self) -> bool {
354        matches!(self, Self::VpcAssociationNotFound(_))
355    }
356}
357impl ::std::error::Error for DisassociateVPCFromHostedZoneError {
358    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
359        match self {
360            Self::InvalidInput(_inner) => ::std::option::Option::Some(_inner),
361            Self::InvalidVpcId(_inner) => ::std::option::Option::Some(_inner),
362            Self::LastVpcAssociation(_inner) => ::std::option::Option::Some(_inner),
363            Self::NoSuchHostedZone(_inner) => ::std::option::Option::Some(_inner),
364            Self::VpcAssociationNotFound(_inner) => ::std::option::Option::Some(_inner),
365            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
366        }
367    }
368}
369impl ::std::fmt::Display for DisassociateVPCFromHostedZoneError {
370    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
371        match self {
372            Self::InvalidInput(_inner) => _inner.fmt(f),
373            Self::InvalidVpcId(_inner) => _inner.fmt(f),
374            Self::LastVpcAssociation(_inner) => _inner.fmt(f),
375            Self::NoSuchHostedZone(_inner) => _inner.fmt(f),
376            Self::VpcAssociationNotFound(_inner) => _inner.fmt(f),
377            Self::Unhandled(_inner) => {
378                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
379                    write!(f, "unhandled error ({code})")
380                } else {
381                    f.write_str("unhandled error")
382                }
383            }
384        }
385    }
386}
387impl ::aws_smithy_types::retry::ProvideErrorKind for DisassociateVPCFromHostedZoneError {
388    fn code(&self) -> ::std::option::Option<&str> {
389        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
390    }
391    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
392        ::std::option::Option::None
393    }
394}
395impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for DisassociateVPCFromHostedZoneError {
396    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
397        match self {
398            Self::InvalidInput(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
399            Self::InvalidVpcId(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
400            Self::LastVpcAssociation(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
401            Self::NoSuchHostedZone(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
402            Self::VpcAssociationNotFound(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
403            Self::Unhandled(_inner) => &_inner.meta,
404        }
405    }
406}
407impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for DisassociateVPCFromHostedZoneError {
408    fn create_unhandled_error(
409        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
410        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
411    ) -> Self {
412        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
413            source,
414            meta: meta.unwrap_or_default(),
415        })
416    }
417}
418impl ::aws_types::request_id::RequestId for crate::operation::disassociate_vpc_from_hosted_zone::DisassociateVPCFromHostedZoneError {
419    fn request_id(&self) -> Option<&str> {
420        self.meta().request_id()
421    }
422}
423
424pub use crate::operation::disassociate_vpc_from_hosted_zone::_disassociate_vpc_from_hosted_zone_output::DisassociateVpcFromHostedZoneOutput;
425
426pub use crate::operation::disassociate_vpc_from_hosted_zone::_disassociate_vpc_from_hosted_zone_input::DisassociateVpcFromHostedZoneInput;
427
428mod _disassociate_vpc_from_hosted_zone_input;
429
430mod _disassociate_vpc_from_hosted_zone_output;
431
432/// Builders
433pub mod builders;