aws_sdk_iam/operation/
update_user.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `UpdateUser`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct UpdateUser;
6impl UpdateUser {
7    /// Creates a new `UpdateUser`
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_user::UpdateUserInput,
14    ) -> ::std::result::Result<
15        crate::operation::update_user::UpdateUserOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::update_user::UpdateUserError,
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_user::UpdateUserError>()
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_user::UpdateUserOutput>()
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_user::UpdateUserInput,
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", "UpdateUser", 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 UpdateUser {
79    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
80        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("UpdateUser");
81
82        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
83            UpdateUserRequestSerializer,
84        ));
85        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
86            UpdateUserResponseDeserializer,
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("UpdateUser", "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("UpdateUser")
114            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
115            .with_interceptor(UpdateUserEndpointParamsInterceptor)
116            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
117                crate::operation::update_user::UpdateUserError,
118            >::new())
119            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
120                crate::operation::update_user::UpdateUserError,
121            >::new())
122            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
123                crate::operation::update_user::UpdateUserError,
124            >::new());
125
126        ::std::borrow::Cow::Owned(rcb)
127    }
128}
129
130#[derive(Debug)]
131struct UpdateUserResponseDeserializer;
132impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for UpdateUserResponseDeserializer {
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_user::de_update_user_http_error(status, headers, body)
145        } else {
146            crate::protocol_serde::shape_update_user::de_update_user_http_response(status, headers, body)
147        };
148        crate::protocol_serde::type_erase_result(parse_result)
149    }
150}
151#[derive(Debug)]
152struct UpdateUserRequestSerializer;
153impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for UpdateUserRequestSerializer {
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.downcast::<crate::operation::update_user::UpdateUserInput>().expect("correct type");
161        let _header_serialization_settings = _cfg
162            .load::<crate::serialization_settings::HeaderSerializationSettings>()
163            .cloned()
164            .unwrap_or_default();
165        let mut request_builder = {
166            fn uri_base(
167                _input: &crate::operation::update_user::UpdateUserInput,
168                output: &mut ::std::string::String,
169            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
170                use ::std::fmt::Write as _;
171                ::std::write!(output, "/").expect("formatting should succeed");
172                ::std::result::Result::Ok(())
173            }
174            #[allow(clippy::unnecessary_wraps)]
175            fn update_http_builder(
176                input: &crate::operation::update_user::UpdateUserInput,
177                builder: ::http::request::Builder,
178            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
179                let mut uri = ::std::string::String::new();
180                uri_base(input, &mut uri)?;
181                ::std::result::Result::Ok(builder.method("POST").uri(uri))
182            }
183            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
184            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-www-form-urlencoded");
185            builder
186        };
187        let body =
188            ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_update_user_input::ser_update_user_input_input_input(&input)?);
189        if let Some(content_length) = body.content_length() {
190            let content_length = content_length.to_string();
191            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
192        }
193        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
194    }
195}
196#[derive(Debug)]
197struct UpdateUserEndpointParamsInterceptor;
198
199impl ::aws_smithy_runtime_api::client::interceptors::Intercept for UpdateUserEndpointParamsInterceptor {
200    fn name(&self) -> &'static str {
201        "UpdateUserEndpointParamsInterceptor"
202    }
203
204    fn read_before_execution(
205        &self,
206        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
207            '_,
208            ::aws_smithy_runtime_api::client::interceptors::context::Input,
209            ::aws_smithy_runtime_api::client::interceptors::context::Output,
210            ::aws_smithy_runtime_api::client::interceptors::context::Error,
211        >,
212        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
213    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
214        let _input = context
215            .input()
216            .downcast_ref::<UpdateUserInput>()
217            .ok_or("failed to downcast to UpdateUserInput")?;
218
219        let params = crate::config::endpoint::Params::builder()
220            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
221            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
222            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
223            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
224            .build()
225            .map_err(|err| {
226                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
227            })?;
228        cfg.interceptor_state()
229            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
230        ::std::result::Result::Ok(())
231    }
232}
233
234// The get_* functions below are generated from JMESPath expressions in the
235// operationContextParams trait. They target the operation's input shape.
236
237/// Error type for the `UpdateUserError` operation.
238#[non_exhaustive]
239#[derive(::std::fmt::Debug)]
240pub enum UpdateUserError {
241    /// <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>
242    ConcurrentModificationException(crate::types::error::ConcurrentModificationException),
243    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
244    EntityAlreadyExistsException(crate::types::error::EntityAlreadyExistsException),
245    /// <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>
246    EntityTemporarilyUnmodifiableException(crate::types::error::EntityTemporarilyUnmodifiableException),
247    /// <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>
248    LimitExceededException(crate::types::error::LimitExceededException),
249    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
250    NoSuchEntityException(crate::types::error::NoSuchEntityException),
251    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
252    ServiceFailureException(crate::types::error::ServiceFailureException),
253    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
254    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
255    variable wildcard pattern and check `.code()`:
256     \
257    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
258     \
259    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-UpdateUserError) for what information is available for the error.")]
260    Unhandled(crate::error::sealed_unhandled::Unhandled),
261}
262impl UpdateUserError {
263    /// Creates the `UpdateUserError::Unhandled` variant from any error type.
264    pub fn unhandled(
265        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
266    ) -> Self {
267        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
268            source: err.into(),
269            meta: ::std::default::Default::default(),
270        })
271    }
272
273    /// Creates the `UpdateUserError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
274    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
275        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
276            source: err.clone().into(),
277            meta: err,
278        })
279    }
280    ///
281    /// Returns error metadata, which includes the error code, message,
282    /// request ID, and potentially additional information.
283    ///
284    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
285        match self {
286            Self::ConcurrentModificationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
287            Self::EntityAlreadyExistsException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
288            Self::EntityTemporarilyUnmodifiableException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
289            Self::LimitExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
290            Self::NoSuchEntityException(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 `UpdateUserError::ConcurrentModificationException`.
296    pub fn is_concurrent_modification_exception(&self) -> bool {
297        matches!(self, Self::ConcurrentModificationException(_))
298    }
299    /// Returns `true` if the error kind is `UpdateUserError::EntityAlreadyExistsException`.
300    pub fn is_entity_already_exists_exception(&self) -> bool {
301        matches!(self, Self::EntityAlreadyExistsException(_))
302    }
303    /// Returns `true` if the error kind is `UpdateUserError::EntityTemporarilyUnmodifiableException`.
304    pub fn is_entity_temporarily_unmodifiable_exception(&self) -> bool {
305        matches!(self, Self::EntityTemporarilyUnmodifiableException(_))
306    }
307    /// Returns `true` if the error kind is `UpdateUserError::LimitExceededException`.
308    pub fn is_limit_exceeded_exception(&self) -> bool {
309        matches!(self, Self::LimitExceededException(_))
310    }
311    /// Returns `true` if the error kind is `UpdateUserError::NoSuchEntityException`.
312    pub fn is_no_such_entity_exception(&self) -> bool {
313        matches!(self, Self::NoSuchEntityException(_))
314    }
315    /// Returns `true` if the error kind is `UpdateUserError::ServiceFailureException`.
316    pub fn is_service_failure_exception(&self) -> bool {
317        matches!(self, Self::ServiceFailureException(_))
318    }
319}
320impl ::std::error::Error for UpdateUserError {
321    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
322        match self {
323            Self::ConcurrentModificationException(_inner) => ::std::option::Option::Some(_inner),
324            Self::EntityAlreadyExistsException(_inner) => ::std::option::Option::Some(_inner),
325            Self::EntityTemporarilyUnmodifiableException(_inner) => ::std::option::Option::Some(_inner),
326            Self::LimitExceededException(_inner) => ::std::option::Option::Some(_inner),
327            Self::NoSuchEntityException(_inner) => ::std::option::Option::Some(_inner),
328            Self::ServiceFailureException(_inner) => ::std::option::Option::Some(_inner),
329            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
330        }
331    }
332}
333impl ::std::fmt::Display for UpdateUserError {
334    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
335        match self {
336            Self::ConcurrentModificationException(_inner) => _inner.fmt(f),
337            Self::EntityAlreadyExistsException(_inner) => _inner.fmt(f),
338            Self::EntityTemporarilyUnmodifiableException(_inner) => _inner.fmt(f),
339            Self::LimitExceededException(_inner) => _inner.fmt(f),
340            Self::NoSuchEntityException(_inner) => _inner.fmt(f),
341            Self::ServiceFailureException(_inner) => _inner.fmt(f),
342            Self::Unhandled(_inner) => {
343                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
344                    write!(f, "unhandled error ({code})")
345                } else {
346                    f.write_str("unhandled error")
347                }
348            }
349        }
350    }
351}
352impl ::aws_smithy_types::retry::ProvideErrorKind for UpdateUserError {
353    fn code(&self) -> ::std::option::Option<&str> {
354        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
355    }
356    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
357        ::std::option::Option::None
358    }
359}
360impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for UpdateUserError {
361    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
362        match self {
363            Self::ConcurrentModificationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
364            Self::EntityAlreadyExistsException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
365            Self::EntityTemporarilyUnmodifiableException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
366            Self::LimitExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
367            Self::NoSuchEntityException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
368            Self::ServiceFailureException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
369            Self::Unhandled(_inner) => &_inner.meta,
370        }
371    }
372}
373impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for UpdateUserError {
374    fn create_unhandled_error(
375        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
376        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
377    ) -> Self {
378        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
379            source,
380            meta: meta.unwrap_or_default(),
381        })
382    }
383}
384impl ::aws_types::request_id::RequestId for crate::operation::update_user::UpdateUserError {
385    fn request_id(&self) -> Option<&str> {
386        self.meta().request_id()
387    }
388}
389
390pub use crate::operation::update_user::_update_user_output::UpdateUserOutput;
391
392pub use crate::operation::update_user::_update_user_input::UpdateUserInput;
393
394mod _update_user_input;
395
396mod _update_user_output;
397
398/// Builders
399pub mod builders;