aws_sdk_iam/operation/
change_password.rs

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