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