aws_sdk_iam/operation/
update_login_profile.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `UpdateLoginProfile`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct UpdateLoginProfile;
6impl UpdateLoginProfile {
7    /// Creates a new `UpdateLoginProfile`
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::update_login_profile::UpdateLoginProfileInput,
14    ) -> ::std::result::Result<
15        crate::operation::update_login_profile::UpdateLoginProfileOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::update_login_profile::UpdateLoginProfileError,
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::update_login_profile::UpdateLoginProfileError>()
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::update_login_profile::UpdateLoginProfileOutput>()
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::update_login_profile::UpdateLoginProfileInput,
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", "UpdateLoginProfile", 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 UpdateLoginProfile {
79    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
80        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("UpdateLoginProfile");
81
82        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
83            UpdateLoginProfileRequestSerializer,
84        ));
85        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
86            UpdateLoginProfileResponseDeserializer,
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("UpdateLoginProfile", "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("UpdateLoginProfile")
114            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
115            .with_interceptor(UpdateLoginProfileEndpointParamsInterceptor)
116            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
117                crate::operation::update_login_profile::UpdateLoginProfileError,
118            >::new())
119            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
120                crate::operation::update_login_profile::UpdateLoginProfileError,
121            >::new())
122            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
123                crate::operation::update_login_profile::UpdateLoginProfileError,
124            >::new());
125
126        ::std::borrow::Cow::Owned(rcb)
127    }
128}
129
130#[derive(Debug)]
131struct UpdateLoginProfileResponseDeserializer;
132impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for UpdateLoginProfileResponseDeserializer {
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_update_login_profile::de_update_login_profile_http_error(status, headers, body)
145        } else {
146            crate::protocol_serde::shape_update_login_profile::de_update_login_profile_http_response(status, headers, body)
147        };
148        crate::protocol_serde::type_erase_result(parse_result)
149    }
150}
151#[derive(Debug)]
152struct UpdateLoginProfileRequestSerializer;
153impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for UpdateLoginProfileRequestSerializer {
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::update_login_profile::UpdateLoginProfileInput>()
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::update_login_profile::UpdateLoginProfileInput,
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::update_login_profile::UpdateLoginProfileInput,
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_update_login_profile_input::ser_update_login_profile_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 UpdateLoginProfileEndpointParamsInterceptor;
201
202impl ::aws_smithy_runtime_api::client::interceptors::Intercept for UpdateLoginProfileEndpointParamsInterceptor {
203    fn name(&self) -> &'static str {
204        "UpdateLoginProfileEndpointParamsInterceptor"
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::<UpdateLoginProfileInput>()
220            .ok_or("failed to downcast to UpdateLoginProfileInput")?;
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 `UpdateLoginProfileError` operation.
241#[non_exhaustive]
242#[derive(::std::fmt::Debug)]
243pub enum UpdateLoginProfileError {
244    /// <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>
245    EntityTemporarilyUnmodifiableException(crate::types::error::EntityTemporarilyUnmodifiableException),
246    /// <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>
247    LimitExceededException(crate::types::error::LimitExceededException),
248    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
249    NoSuchEntityException(crate::types::error::NoSuchEntityException),
250    /// <p>The request was rejected because the provided password did not meet the requirements imposed by the account password policy.</p>
251    PasswordPolicyViolationException(crate::types::error::PasswordPolicyViolationException),
252    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
253    ServiceFailureException(crate::types::error::ServiceFailureException),
254    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
255    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
256    variable wildcard pattern and check `.code()`:
257     \
258    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
259     \
260    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-UpdateLoginProfileError) for what information is available for the error.")]
261    Unhandled(crate::error::sealed_unhandled::Unhandled),
262}
263impl UpdateLoginProfileError {
264    /// Creates the `UpdateLoginProfileError::Unhandled` variant from any error type.
265    pub fn unhandled(
266        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
267    ) -> Self {
268        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
269            source: err.into(),
270            meta: ::std::default::Default::default(),
271        })
272    }
273
274    /// Creates the `UpdateLoginProfileError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
275    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
276        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
277            source: err.clone().into(),
278            meta: err,
279        })
280    }
281    ///
282    /// Returns error metadata, which includes the error code, message,
283    /// request ID, and potentially additional information.
284    ///
285    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
286        match self {
287            Self::EntityTemporarilyUnmodifiableException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
288            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
289            Self::NoSuchEntityException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
290            Self::PasswordPolicyViolationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
291            Self::ServiceFailureException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
292            Self::Unhandled(e) => &e.meta,
293        }
294    }
295    /// Returns `true` if the error kind is `UpdateLoginProfileError::EntityTemporarilyUnmodifiableException`.
296    pub fn is_entity_temporarily_unmodifiable_exception(&self) -> bool {
297        matches!(self, Self::EntityTemporarilyUnmodifiableException(_))
298    }
299    /// Returns `true` if the error kind is `UpdateLoginProfileError::LimitExceededException`.
300    pub fn is_limit_exceeded_exception(&self) -> bool {
301        matches!(self, Self::LimitExceededException(_))
302    }
303    /// Returns `true` if the error kind is `UpdateLoginProfileError::NoSuchEntityException`.
304    pub fn is_no_such_entity_exception(&self) -> bool {
305        matches!(self, Self::NoSuchEntityException(_))
306    }
307    /// Returns `true` if the error kind is `UpdateLoginProfileError::PasswordPolicyViolationException`.
308    pub fn is_password_policy_violation_exception(&self) -> bool {
309        matches!(self, Self::PasswordPolicyViolationException(_))
310    }
311    /// Returns `true` if the error kind is `UpdateLoginProfileError::ServiceFailureException`.
312    pub fn is_service_failure_exception(&self) -> bool {
313        matches!(self, Self::ServiceFailureException(_))
314    }
315}
316impl ::std::error::Error for UpdateLoginProfileError {
317    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
318        match self {
319            Self::EntityTemporarilyUnmodifiableException(_inner) => ::std::option::Option::Some(_inner),
320            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
321            Self::NoSuchEntityException(_inner) => ::std::option::Option::Some(_inner),
322            Self::PasswordPolicyViolationException(_inner) => ::std::option::Option::Some(_inner),
323            Self::ServiceFailureException(_inner) => ::std::option::Option::Some(_inner),
324            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
325        }
326    }
327}
328impl ::std::fmt::Display for UpdateLoginProfileError {
329    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
330        match self {
331            Self::EntityTemporarilyUnmodifiableException(_inner) => _inner.fmt(f),
332            Self::LimitExceededException(_inner) => _inner.fmt(f),
333            Self::NoSuchEntityException(_inner) => _inner.fmt(f),
334            Self::PasswordPolicyViolationException(_inner) => _inner.fmt(f),
335            Self::ServiceFailureException(_inner) => _inner.fmt(f),
336            Self::Unhandled(_inner) => {
337                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
338                    write!(f, "unhandled error ({code})")
339                } else {
340                    f.write_str("unhandled error")
341                }
342            }
343        }
344    }
345}
346impl ::aws_smithy_types::retry::ProvideErrorKind for UpdateLoginProfileError {
347    fn code(&self) -> ::std::option::Option<&str> {
348        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
349    }
350    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
351        ::std::option::Option::None
352    }
353}
354impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for UpdateLoginProfileError {
355    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
356        match self {
357            Self::EntityTemporarilyUnmodifiableException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
358            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
359            Self::NoSuchEntityException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
360            Self::PasswordPolicyViolationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
361            Self::ServiceFailureException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
362            Self::Unhandled(_inner) => &_inner.meta,
363        }
364    }
365}
366impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for UpdateLoginProfileError {
367    fn create_unhandled_error(
368        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
369        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
370    ) -> Self {
371        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
372            source,
373            meta: meta.unwrap_or_default(),
374        })
375    }
376}
377impl ::aws_types::request_id::RequestId for crate::operation::update_login_profile::UpdateLoginProfileError {
378    fn request_id(&self) -> Option<&str> {
379        self.meta().request_id()
380    }
381}
382
383pub use crate::operation::update_login_profile::_update_login_profile_output::UpdateLoginProfileOutput;
384
385pub use crate::operation::update_login_profile::_update_login_profile_input::UpdateLoginProfileInput;
386
387mod _update_login_profile_input;
388
389mod _update_login_profile_output;
390
391/// Builders
392pub mod builders;