aws_sdk_iam/operation/
enable_mfa_device.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `EnableMFADevice`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct EnableMFADevice;
6impl EnableMFADevice {
7    /// Creates a new `EnableMFADevice`
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::enable_mfa_device::EnableMfaDeviceInput,
14    ) -> ::std::result::Result<
15        crate::operation::enable_mfa_device::EnableMfaDeviceOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::enable_mfa_device::EnableMFADeviceError,
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::enable_mfa_device::EnableMFADeviceError>()
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::enable_mfa_device::EnableMfaDeviceOutput>()
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::enable_mfa_device::EnableMfaDeviceInput,
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        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("iam", "EnableMFADevice", input, runtime_plugins, stop_point).await
54    }
55
56    pub(crate) fn operation_runtime_plugins(
57        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
58        client_config: &crate::config::Config,
59        config_override: ::std::option::Option<crate::config::Builder>,
60    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
61        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
62        runtime_plugins = runtime_plugins.with_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
63            ::aws_runtime::auth::sigv4::SCHEME_ID,
64        ]));
65        if let ::std::option::Option::Some(config_override) = config_override {
66            for plugin in config_override.runtime_plugins.iter().cloned() {
67                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
68            }
69            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
70                config_override,
71                client_config.config.clone(),
72                &client_config.runtime_components,
73            ));
74        }
75        runtime_plugins
76    }
77}
78impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for EnableMFADevice {
79    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
80        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("EnableMFADevice");
81
82        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
83            EnableMFADeviceRequestSerializer,
84        ));
85        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
86            EnableMFADeviceResponseDeserializer,
87        ));
88
89        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
90            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
91        ));
92
93        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new("EnableMFADevice", "iam"));
94        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
95        signing_options.double_uri_encode = true;
96        signing_options.content_sha256_header = false;
97        signing_options.normalize_uri_path = true;
98        signing_options.payload_override = None;
99
100        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
101            signing_options,
102            ..::std::default::Default::default()
103        });
104
105        ::std::option::Option::Some(cfg.freeze())
106    }
107
108    fn runtime_components(
109        &self,
110        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
111    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
112        #[allow(unused_mut)]
113        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("EnableMFADevice")
114            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
115            .with_interceptor(EnableMFADeviceEndpointParamsInterceptor)
116            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
117                crate::operation::enable_mfa_device::EnableMFADeviceError,
118            >::new())
119            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
120                crate::operation::enable_mfa_device::EnableMFADeviceError,
121            >::new())
122            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
123                crate::operation::enable_mfa_device::EnableMFADeviceError,
124            >::new());
125
126        ::std::borrow::Cow::Owned(rcb)
127    }
128}
129
130#[derive(Debug)]
131struct EnableMFADeviceResponseDeserializer;
132impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for EnableMFADeviceResponseDeserializer {
133    fn deserialize_nonstreaming(
134        &self,
135        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
136    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
137        let (success, status) = (response.status().is_success(), response.status().as_u16());
138        let headers = response.headers();
139        let body = response.body().bytes().expect("body loaded");
140        #[allow(unused_mut)]
141        let mut force_error = false;
142        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
143        let parse_result = if !success && status != 200 || force_error {
144            crate::protocol_serde::shape_enable_mfa_device::de_enable_mfa_device_http_error(status, headers, body)
145        } else {
146            crate::protocol_serde::shape_enable_mfa_device::de_enable_mfa_device_http_response(status, headers, body)
147        };
148        crate::protocol_serde::type_erase_result(parse_result)
149    }
150}
151#[derive(Debug)]
152struct EnableMFADeviceRequestSerializer;
153impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for EnableMFADeviceRequestSerializer {
154    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
155    fn serialize_input(
156        &self,
157        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
158        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
159    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
160        let input = input
161            .downcast::<crate::operation::enable_mfa_device::EnableMfaDeviceInput>()
162            .expect("correct type");
163        let _header_serialization_settings = _cfg
164            .load::<crate::serialization_settings::HeaderSerializationSettings>()
165            .cloned()
166            .unwrap_or_default();
167        let mut request_builder = {
168            fn uri_base(
169                _input: &crate::operation::enable_mfa_device::EnableMfaDeviceInput,
170                output: &mut ::std::string::String,
171            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
172                use ::std::fmt::Write as _;
173                ::std::write!(output, "/").expect("formatting should succeed");
174                ::std::result::Result::Ok(())
175            }
176            #[allow(clippy::unnecessary_wraps)]
177            fn update_http_builder(
178                input: &crate::operation::enable_mfa_device::EnableMfaDeviceInput,
179                builder: ::http::request::Builder,
180            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
181                let mut uri = ::std::string::String::new();
182                uri_base(input, &mut uri)?;
183                ::std::result::Result::Ok(builder.method("POST").uri(uri))
184            }
185            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
186            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
187            builder
188        };
189        let body = ::aws_smithy_types::body::SdkBody::from(
190            crate::protocol_serde::shape_enable_mfa_device_input::ser_enable_mfa_device_input_input_input(&input)?,
191        );
192        if let Some(content_length) = body.content_length() {
193            let content_length = content_length.to_string();
194            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
195        }
196        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
197    }
198}
199#[derive(Debug)]
200struct EnableMFADeviceEndpointParamsInterceptor;
201
202impl ::aws_smithy_runtime_api::client::interceptors::Intercept for EnableMFADeviceEndpointParamsInterceptor {
203    fn name(&self) -> &'static str {
204        "EnableMFADeviceEndpointParamsInterceptor"
205    }
206
207    fn read_before_execution(
208        &self,
209        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
210            '_,
211            ::aws_smithy_runtime_api::client::interceptors::context::Input,
212            ::aws_smithy_runtime_api::client::interceptors::context::Output,
213            ::aws_smithy_runtime_api::client::interceptors::context::Error,
214        >,
215        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
216    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
217        let _input = context
218            .input()
219            .downcast_ref::<EnableMfaDeviceInput>()
220            .ok_or("failed to downcast to EnableMfaDeviceInput")?;
221
222        let params = crate::config::endpoint::Params::builder()
223            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
224            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
225            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
226            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
227            .build()
228            .map_err(|err| {
229                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
230            })?;
231        cfg.interceptor_state()
232            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
233        ::std::result::Result::Ok(())
234    }
235}
236
237// The get_* functions below are generated from JMESPath expressions in the
238// operationContextParams trait. They target the operation's input shape.
239
240/// Error type for the `EnableMFADeviceError` operation.
241#[non_exhaustive]
242#[derive(::std::fmt::Debug)]
243pub enum EnableMFADeviceError {
244    /// <p>The request was rejected because multiple requests to change this object were submitted simultaneously. Wait a few minutes and submit your request again.</p>
245    ConcurrentModificationException(crate::types::error::ConcurrentModificationException),
246    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
247    EntityAlreadyExistsException(crate::types::error::EntityAlreadyExistsException),
248    /// <p>The request was rejected because it referenced an entity that is temporarily unmodifiable, such as a user name that was deleted and then recreated. The error indicates that the request is likely to succeed if you try again after waiting several minutes. The error message describes the entity.</p>
249    EntityTemporarilyUnmodifiableException(crate::types::error::EntityTemporarilyUnmodifiableException),
250    /// <p>The request was rejected because the authentication code was not recognized. The error message describes the specific error.</p>
251    InvalidAuthenticationCodeException(crate::types::error::InvalidAuthenticationCodeException),
252    /// <p>The request was rejected because it attempted to create resources beyond the current Amazon Web Services account limits. The error message describes the limit exceeded.</p>
253    LimitExceededException(crate::types::error::LimitExceededException),
254    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
255    NoSuchEntityException(crate::types::error::NoSuchEntityException),
256    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
257    ServiceFailureException(crate::types::error::ServiceFailureException),
258    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
259    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
260    variable wildcard pattern and check `.code()`:
261     \
262    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
263     \
264    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-EnableMFADeviceError) for what information is available for the error.")]
265    Unhandled(crate::error::sealed_unhandled::Unhandled),
266}
267impl EnableMFADeviceError {
268    /// Creates the `EnableMFADeviceError::Unhandled` variant from any error type.
269    pub fn unhandled(
270        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
271    ) -> Self {
272        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
273            source: err.into(),
274            meta: ::std::default::Default::default(),
275        })
276    }
277
278    /// Creates the `EnableMFADeviceError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
279    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
280        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
281            source: err.clone().into(),
282            meta: err,
283        })
284    }
285    ///
286    /// Returns error metadata, which includes the error code, message,
287    /// request ID, and potentially additional information.
288    ///
289    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
290        match self {
291            Self::ConcurrentModificationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
292            Self::EntityAlreadyExistsException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
293            Self::EntityTemporarilyUnmodifiableException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
294            Self::InvalidAuthenticationCodeException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
295            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
296            Self::NoSuchEntityException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
297            Self::ServiceFailureException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
298            Self::Unhandled(e) => &e.meta,
299        }
300    }
301    /// Returns `true` if the error kind is `EnableMFADeviceError::ConcurrentModificationException`.
302    pub fn is_concurrent_modification_exception(&self) -> bool {
303        matches!(self, Self::ConcurrentModificationException(_))
304    }
305    /// Returns `true` if the error kind is `EnableMFADeviceError::EntityAlreadyExistsException`.
306    pub fn is_entity_already_exists_exception(&self) -> bool {
307        matches!(self, Self::EntityAlreadyExistsException(_))
308    }
309    /// Returns `true` if the error kind is `EnableMFADeviceError::EntityTemporarilyUnmodifiableException`.
310    pub fn is_entity_temporarily_unmodifiable_exception(&self) -> bool {
311        matches!(self, Self::EntityTemporarilyUnmodifiableException(_))
312    }
313    /// Returns `true` if the error kind is `EnableMFADeviceError::InvalidAuthenticationCodeException`.
314    pub fn is_invalid_authentication_code_exception(&self) -> bool {
315        matches!(self, Self::InvalidAuthenticationCodeException(_))
316    }
317    /// Returns `true` if the error kind is `EnableMFADeviceError::LimitExceededException`.
318    pub fn is_limit_exceeded_exception(&self) -> bool {
319        matches!(self, Self::LimitExceededException(_))
320    }
321    /// Returns `true` if the error kind is `EnableMFADeviceError::NoSuchEntityException`.
322    pub fn is_no_such_entity_exception(&self) -> bool {
323        matches!(self, Self::NoSuchEntityException(_))
324    }
325    /// Returns `true` if the error kind is `EnableMFADeviceError::ServiceFailureException`.
326    pub fn is_service_failure_exception(&self) -> bool {
327        matches!(self, Self::ServiceFailureException(_))
328    }
329}
330impl ::std::error::Error for EnableMFADeviceError {
331    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
332        match self {
333            Self::ConcurrentModificationException(_inner) => ::std::option::Option::Some(_inner),
334            Self::EntityAlreadyExistsException(_inner) => ::std::option::Option::Some(_inner),
335            Self::EntityTemporarilyUnmodifiableException(_inner) => ::std::option::Option::Some(_inner),
336            Self::InvalidAuthenticationCodeException(_inner) => ::std::option::Option::Some(_inner),
337            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
338            Self::NoSuchEntityException(_inner) => ::std::option::Option::Some(_inner),
339            Self::ServiceFailureException(_inner) => ::std::option::Option::Some(_inner),
340            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
341        }
342    }
343}
344impl ::std::fmt::Display for EnableMFADeviceError {
345    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
346        match self {
347            Self::ConcurrentModificationException(_inner) => _inner.fmt(f),
348            Self::EntityAlreadyExistsException(_inner) => _inner.fmt(f),
349            Self::EntityTemporarilyUnmodifiableException(_inner) => _inner.fmt(f),
350            Self::InvalidAuthenticationCodeException(_inner) => _inner.fmt(f),
351            Self::LimitExceededException(_inner) => _inner.fmt(f),
352            Self::NoSuchEntityException(_inner) => _inner.fmt(f),
353            Self::ServiceFailureException(_inner) => _inner.fmt(f),
354            Self::Unhandled(_inner) => {
355                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
356                    write!(f, "unhandled error ({code})")
357                } else {
358                    f.write_str("unhandled error")
359                }
360            }
361        }
362    }
363}
364impl ::aws_smithy_types::retry::ProvideErrorKind for EnableMFADeviceError {
365    fn code(&self) -> ::std::option::Option<&str> {
366        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
367    }
368    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
369        ::std::option::Option::None
370    }
371}
372impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for EnableMFADeviceError {
373    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
374        match self {
375            Self::ConcurrentModificationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
376            Self::EntityAlreadyExistsException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
377            Self::EntityTemporarilyUnmodifiableException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
378            Self::InvalidAuthenticationCodeException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
379            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
380            Self::NoSuchEntityException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
381            Self::ServiceFailureException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
382            Self::Unhandled(_inner) => &_inner.meta,
383        }
384    }
385}
386impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for EnableMFADeviceError {
387    fn create_unhandled_error(
388        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
389        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
390    ) -> Self {
391        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
392            source,
393            meta: meta.unwrap_or_default(),
394        })
395    }
396}
397impl ::aws_types::request_id::RequestId for crate::operation::enable_mfa_device::EnableMFADeviceError {
398    fn request_id(&self) -> Option<&str> {
399        self.meta().request_id()
400    }
401}
402
403pub use crate::operation::enable_mfa_device::_enable_mfa_device_output::EnableMfaDeviceOutput;
404
405pub use crate::operation::enable_mfa_device::_enable_mfa_device_input::EnableMfaDeviceInput;
406
407mod _enable_mfa_device_input;
408
409mod _enable_mfa_device_output;
410
411/// Builders
412pub mod builders;