rusoto_iam/
generated.rs

1// =================================================================
2//
3//                           * WARNING *
4//
5//                    This file is generated!
6//
7//  Changes made to this file will be overwritten. If changes are
8//  required to the generated code, the service_crategen project
9//  must be updated to generate the changes.
10//
11// =================================================================
12
13use std::error::Error;
14use std::fmt;
15
16use async_trait::async_trait;
17use rusoto_core::credential::ProvideAwsCredentials;
18use rusoto_core::region;
19use rusoto_core::request::{BufferedHttpResponse, DispatchSignedRequest};
20use rusoto_core::{Client, RusotoError};
21
22use rusoto_core::param::{Params, ServiceParams};
23use rusoto_core::proto::xml::error::*;
24use rusoto_core::proto::xml::util::{
25    self as xml_util, deserialize_elements, find_start_element, skip_tree,
26};
27use rusoto_core::proto::xml::util::{Next, Peek, XmlParseError, XmlResponse};
28use rusoto_core::request::HttpResponse;
29use rusoto_core::signature::SignedRequest;
30#[cfg(feature = "deserialize_structs")]
31use serde::Deserialize;
32#[cfg(feature = "serialize_structs")]
33use serde::Serialize;
34use serde_urlencoded;
35use std::str::FromStr;
36use xml::EventReader;
37
38impl IamClient {
39    fn new_params(&self, operation_name: &str) -> Params {
40        let mut params = Params::new();
41
42        params.put("Action", operation_name);
43        params.put("Version", "2010-05-08");
44
45        params
46    }
47
48    async fn sign_and_dispatch<E>(
49        &self,
50        request: SignedRequest,
51        from_response: fn(BufferedHttpResponse) -> RusotoError<E>,
52    ) -> Result<HttpResponse, RusotoError<E>> {
53        let mut response = self.client.sign_and_dispatch(request).await?;
54        if !response.status.is_success() {
55            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
56            return Err(from_response(response));
57        }
58
59        Ok(response)
60    }
61}
62
63#[allow(dead_code)]
64struct AccessAdvisorUsageGranularityTypeDeserializer;
65impl AccessAdvisorUsageGranularityTypeDeserializer {
66    #[allow(dead_code, unused_variables)]
67    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
68        xml_util::deserialize_primitive(tag_name, stack, Ok)
69    }
70}
71/// <p>An object that contains details about when a principal in the reported AWS Organizations entity last attempted to access an AWS service. A principal can be an IAM user, an IAM role, or the AWS account root user within the reported Organizations entity.</p> <p>This data type is a response element in the <a>GetOrganizationsAccessReport</a> operation.</p>
72#[derive(Clone, Debug, Default, PartialEq)]
73#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
74pub struct AccessDetail {
75    /// <p>The path of the Organizations entity (root, organizational unit, or account) from which an authenticated principal last attempted to access the service. AWS does not report unauthenticated requests.</p> <p>This field is null if no principals (IAM users, IAM roles, or root users) in the reported Organizations entity attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
76    pub entity_path: Option<String>,
77    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when an authenticated principal most recently attempted to access the service. AWS does not report unauthenticated requests.</p> <p>This field is null if no principals in the reported Organizations entity attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
78    pub last_authenticated_time: Option<String>,
79    /// <p>The Region where the last service access attempt occurred.</p> <p>This field is null if no principals in the reported Organizations entity attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
80    pub region: Option<String>,
81    /// <p>The name of the service in which access was attempted.</p>
82    pub service_name: String,
83    /// <p>The namespace of the service in which access was attempted.</p> <p>To learn the service namespace of a service, see <a href="https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html">Actions, resources, and condition keys for AWS services</a> in the <i>Service Authorization Reference</i>. Choose the name of the service to view details for that service. In the first paragraph, find the service prefix. For example, <code>(service prefix: a4b)</code>. For more information about service namespaces, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces">AWS service namespaces</a> in the <i>AWS General Reference</i>.</p>
84    pub service_namespace: String,
85    /// <p>The number of accounts with authenticated principals (root users, IAM users, and IAM roles) that attempted to access the service in the reporting period.</p>
86    pub total_authenticated_entities: Option<i64>,
87}
88
89#[allow(dead_code)]
90struct AccessDetailDeserializer;
91impl AccessDetailDeserializer {
92    #[allow(dead_code, unused_variables)]
93    fn deserialize<T: Peek + Next>(
94        tag_name: &str,
95        stack: &mut T,
96    ) -> Result<AccessDetail, XmlParseError> {
97        deserialize_elements::<_, AccessDetail, _>(tag_name, stack, |name, stack, obj| {
98            match name {
99                "EntityPath" => {
100                    obj.entity_path = Some(OrganizationsEntityPathTypeDeserializer::deserialize(
101                        "EntityPath",
102                        stack,
103                    )?);
104                }
105                "LastAuthenticatedTime" => {
106                    obj.last_authenticated_time = Some(DateTypeDeserializer::deserialize(
107                        "LastAuthenticatedTime",
108                        stack,
109                    )?);
110                }
111                "Region" => {
112                    obj.region = Some(StringTypeDeserializer::deserialize("Region", stack)?);
113                }
114                "ServiceName" => {
115                    obj.service_name =
116                        ServiceNameTypeDeserializer::deserialize("ServiceName", stack)?;
117                }
118                "ServiceNamespace" => {
119                    obj.service_namespace =
120                        ServiceNamespaceTypeDeserializer::deserialize("ServiceNamespace", stack)?;
121                }
122                "TotalAuthenticatedEntities" => {
123                    obj.total_authenticated_entities = Some(IntegerTypeDeserializer::deserialize(
124                        "TotalAuthenticatedEntities",
125                        stack,
126                    )?);
127                }
128                _ => skip_tree(stack),
129            }
130            Ok(())
131        })
132    }
133}
134#[allow(dead_code)]
135struct AccessDetailsDeserializer;
136impl AccessDetailsDeserializer {
137    #[allow(dead_code, unused_variables)]
138    fn deserialize<T: Peek + Next>(
139        tag_name: &str,
140        stack: &mut T,
141    ) -> Result<Vec<AccessDetail>, XmlParseError> {
142        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
143            if name == "member" {
144                obj.push(AccessDetailDeserializer::deserialize("member", stack)?);
145            } else {
146                skip_tree(stack);
147            }
148            Ok(())
149        })
150    }
151}
152/// <p><p>Contains information about an AWS access key.</p> <p> This data type is used as a response element in the <a>CreateAccessKey</a> and <a>ListAccessKeys</a> operations. </p> <note> <p>The <code>SecretAccessKey</code> value is returned only in response to <a>CreateAccessKey</a>. You can get a secret access key only when you first create an access key; you cannot recover the secret access key later. If you lose a secret access key, you must create a new access key.</p> </note></p>
153#[derive(Clone, Debug, Default, PartialEq)]
154#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
155pub struct AccessKey {
156    /// <p>The ID for this access key.</p>
157    pub access_key_id: String,
158    /// <p>The date when the access key was created.</p>
159    pub create_date: Option<String>,
160    /// <p>The secret key used to sign requests.</p>
161    pub secret_access_key: String,
162    /// <p>The status of the access key. <code>Active</code> means that the key is valid for API calls, while <code>Inactive</code> means it is not. </p>
163    pub status: String,
164    /// <p>The name of the IAM user that the access key is associated with.</p>
165    pub user_name: String,
166}
167
168#[allow(dead_code)]
169struct AccessKeyDeserializer;
170impl AccessKeyDeserializer {
171    #[allow(dead_code, unused_variables)]
172    fn deserialize<T: Peek + Next>(
173        tag_name: &str,
174        stack: &mut T,
175    ) -> Result<AccessKey, XmlParseError> {
176        deserialize_elements::<_, AccessKey, _>(tag_name, stack, |name, stack, obj| {
177            match name {
178                "AccessKeyId" => {
179                    obj.access_key_id =
180                        AccessKeyIdTypeDeserializer::deserialize("AccessKeyId", stack)?;
181                }
182                "CreateDate" => {
183                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
184                }
185                "SecretAccessKey" => {
186                    obj.secret_access_key =
187                        AccessKeySecretTypeDeserializer::deserialize("SecretAccessKey", stack)?;
188                }
189                "Status" => {
190                    obj.status = StatusTypeDeserializer::deserialize("Status", stack)?;
191                }
192                "UserName" => {
193                    obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
194                }
195                _ => skip_tree(stack),
196            }
197            Ok(())
198        })
199    }
200}
201#[allow(dead_code)]
202struct AccessKeyIdTypeDeserializer;
203impl AccessKeyIdTypeDeserializer {
204    #[allow(dead_code, unused_variables)]
205    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
206        xml_util::deserialize_primitive(tag_name, stack, Ok)
207    }
208}
209/// <p>Contains information about the last time an AWS access key was used since IAM began tracking this information on April 22, 2015.</p> <p>This data type is used as a response element in the <a>GetAccessKeyLastUsed</a> operation.</p>
210#[derive(Clone, Debug, Default, PartialEq)]
211#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
212pub struct AccessKeyLastUsed {
213    /// <p><p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the access key was most recently used. This field is null in the following situations:</p> <ul> <li> <p>The user does not have an access key.</p> </li> <li> <p>An access key exists but has not been used since IAM began tracking this information.</p> </li> <li> <p>There is no sign-in data associated with the user.</p> </li> </ul></p>
214    pub last_used_date: String,
215    /// <p>The AWS Region where this access key was most recently used. The value for this field is "N/A" in the following situations:</p> <ul> <li> <p>The user does not have an access key.</p> </li> <li> <p>An access key exists but has not been used since IAM began tracking this information.</p> </li> <li> <p>There is no sign-in data associated with the user.</p> </li> </ul> <p>For more information about AWS Regions, see <a href="https://docs.aws.amazon.com/general/latest/gr/rande.html">Regions and endpoints</a> in the Amazon Web Services General Reference.</p>
216    pub region: String,
217    /// <p><p>The name of the AWS service with which this access key was most recently used. The value of this field is &quot;N/A&quot; in the following situations:</p> <ul> <li> <p>The user does not have an access key.</p> </li> <li> <p>An access key exists but has not been used since IAM started tracking this information.</p> </li> <li> <p>There is no sign-in data associated with the user.</p> </li> </ul></p>
218    pub service_name: String,
219}
220
221#[allow(dead_code)]
222struct AccessKeyLastUsedDeserializer;
223impl AccessKeyLastUsedDeserializer {
224    #[allow(dead_code, unused_variables)]
225    fn deserialize<T: Peek + Next>(
226        tag_name: &str,
227        stack: &mut T,
228    ) -> Result<AccessKeyLastUsed, XmlParseError> {
229        deserialize_elements::<_, AccessKeyLastUsed, _>(tag_name, stack, |name, stack, obj| {
230            match name {
231                "LastUsedDate" => {
232                    obj.last_used_date = DateTypeDeserializer::deserialize("LastUsedDate", stack)?;
233                }
234                "Region" => {
235                    obj.region = StringTypeDeserializer::deserialize("Region", stack)?;
236                }
237                "ServiceName" => {
238                    obj.service_name = StringTypeDeserializer::deserialize("ServiceName", stack)?;
239                }
240                _ => skip_tree(stack),
241            }
242            Ok(())
243        })
244    }
245}
246/// <p>Contains information about an AWS access key, without its secret key.</p> <p>This data type is used as a response element in the <a>ListAccessKeys</a> operation.</p>
247#[derive(Clone, Debug, Default, PartialEq)]
248#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
249pub struct AccessKeyMetadata {
250    /// <p>The ID for this access key.</p>
251    pub access_key_id: Option<String>,
252    /// <p>The date when the access key was created.</p>
253    pub create_date: Option<String>,
254    /// <p>The status of the access key. <code>Active</code> means that the key is valid for API calls; <code>Inactive</code> means it is not.</p>
255    pub status: Option<String>,
256    /// <p>The name of the IAM user that the key is associated with.</p>
257    pub user_name: Option<String>,
258}
259
260#[allow(dead_code)]
261struct AccessKeyMetadataDeserializer;
262impl AccessKeyMetadataDeserializer {
263    #[allow(dead_code, unused_variables)]
264    fn deserialize<T: Peek + Next>(
265        tag_name: &str,
266        stack: &mut T,
267    ) -> Result<AccessKeyMetadata, XmlParseError> {
268        deserialize_elements::<_, AccessKeyMetadata, _>(tag_name, stack, |name, stack, obj| {
269            match name {
270                "AccessKeyId" => {
271                    obj.access_key_id = Some(AccessKeyIdTypeDeserializer::deserialize(
272                        "AccessKeyId",
273                        stack,
274                    )?);
275                }
276                "CreateDate" => {
277                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
278                }
279                "Status" => {
280                    obj.status = Some(StatusTypeDeserializer::deserialize("Status", stack)?);
281                }
282                "UserName" => {
283                    obj.user_name = Some(UserNameTypeDeserializer::deserialize("UserName", stack)?);
284                }
285                _ => skip_tree(stack),
286            }
287            Ok(())
288        })
289    }
290}
291#[allow(dead_code)]
292struct AccessKeyMetadataListTypeDeserializer;
293impl AccessKeyMetadataListTypeDeserializer {
294    #[allow(dead_code, unused_variables)]
295    fn deserialize<T: Peek + Next>(
296        tag_name: &str,
297        stack: &mut T,
298    ) -> Result<Vec<AccessKeyMetadata>, XmlParseError> {
299        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
300            if name == "member" {
301                obj.push(AccessKeyMetadataDeserializer::deserialize("member", stack)?);
302            } else {
303                skip_tree(stack);
304            }
305            Ok(())
306        })
307    }
308}
309#[allow(dead_code)]
310struct AccessKeySecretTypeDeserializer;
311impl AccessKeySecretTypeDeserializer {
312    #[allow(dead_code, unused_variables)]
313    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
314        xml_util::deserialize_primitive(tag_name, stack, Ok)
315    }
316}
317#[allow(dead_code)]
318struct AccountAliasListTypeDeserializer;
319impl AccountAliasListTypeDeserializer {
320    #[allow(dead_code, unused_variables)]
321    fn deserialize<T: Peek + Next>(
322        tag_name: &str,
323        stack: &mut T,
324    ) -> Result<Vec<String>, XmlParseError> {
325        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
326            if name == "member" {
327                obj.push(AccountAliasTypeDeserializer::deserialize("member", stack)?);
328            } else {
329                skip_tree(stack);
330            }
331            Ok(())
332        })
333    }
334}
335#[allow(dead_code)]
336struct AccountAliasTypeDeserializer;
337impl AccountAliasTypeDeserializer {
338    #[allow(dead_code, unused_variables)]
339    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
340        xml_util::deserialize_primitive(tag_name, stack, Ok)
341    }
342}
343
344/// Serialize `ActionNameListType` contents to a `SignedRequest`.
345struct ActionNameListTypeSerializer;
346impl ActionNameListTypeSerializer {
347    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
348        for (index, obj) in obj.iter().enumerate() {
349            let key = format!("{}.member.{}", name, index + 1);
350            params.put(&key, &obj);
351        }
352    }
353}
354
355#[allow(dead_code)]
356struct ActionNameTypeDeserializer;
357impl ActionNameTypeDeserializer {
358    #[allow(dead_code, unused_variables)]
359    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
360        xml_util::deserialize_primitive(tag_name, stack, Ok)
361    }
362}
363#[derive(Clone, Debug, Default, PartialEq)]
364#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
365pub struct AddClientIDToOpenIDConnectProviderRequest {
366    /// <p>The client ID (also known as audience) to add to the IAM OpenID Connect provider resource.</p>
367    pub client_id: String,
368    /// <p>The Amazon Resource Name (ARN) of the IAM OpenID Connect (OIDC) provider resource to add the client ID to. You can get a list of OIDC provider ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p>
369    pub open_id_connect_provider_arn: String,
370}
371
372/// Serialize `AddClientIDToOpenIDConnectProviderRequest` contents to a `SignedRequest`.
373struct AddClientIDToOpenIDConnectProviderRequestSerializer;
374impl AddClientIDToOpenIDConnectProviderRequestSerializer {
375    fn serialize(params: &mut Params, name: &str, obj: &AddClientIDToOpenIDConnectProviderRequest) {
376        let mut prefix = name.to_string();
377        if prefix != "" {
378            prefix.push_str(".");
379        }
380
381        params.put(&format!("{}{}", prefix, "ClientID"), &obj.client_id);
382        params.put(
383            &format!("{}{}", prefix, "OpenIDConnectProviderArn"),
384            &obj.open_id_connect_provider_arn,
385        );
386    }
387}
388
389#[derive(Clone, Debug, Default, PartialEq)]
390#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
391pub struct AddRoleToInstanceProfileRequest {
392    /// <p>The name of the instance profile to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
393    pub instance_profile_name: String,
394    /// <p>The name of the role to add.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
395    pub role_name: String,
396}
397
398/// Serialize `AddRoleToInstanceProfileRequest` contents to a `SignedRequest`.
399struct AddRoleToInstanceProfileRequestSerializer;
400impl AddRoleToInstanceProfileRequestSerializer {
401    fn serialize(params: &mut Params, name: &str, obj: &AddRoleToInstanceProfileRequest) {
402        let mut prefix = name.to_string();
403        if prefix != "" {
404            prefix.push_str(".");
405        }
406
407        params.put(
408            &format!("{}{}", prefix, "InstanceProfileName"),
409            &obj.instance_profile_name,
410        );
411        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
412    }
413}
414
415#[derive(Clone, Debug, Default, PartialEq)]
416#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
417pub struct AddUserToGroupRequest {
418    /// <p>The name of the group to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
419    pub group_name: String,
420    /// <p>The name of the user to add.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
421    pub user_name: String,
422}
423
424/// Serialize `AddUserToGroupRequest` contents to a `SignedRequest`.
425struct AddUserToGroupRequestSerializer;
426impl AddUserToGroupRequestSerializer {
427    fn serialize(params: &mut Params, name: &str, obj: &AddUserToGroupRequest) {
428        let mut prefix = name.to_string();
429        if prefix != "" {
430            prefix.push_str(".");
431        }
432
433        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
434        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
435    }
436}
437
438#[allow(dead_code)]
439struct ArnListTypeDeserializer;
440impl ArnListTypeDeserializer {
441    #[allow(dead_code, unused_variables)]
442    fn deserialize<T: Peek + Next>(
443        tag_name: &str,
444        stack: &mut T,
445    ) -> Result<Vec<String>, XmlParseError> {
446        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
447            if name == "member" {
448                obj.push(ArnTypeDeserializer::deserialize("member", stack)?);
449            } else {
450                skip_tree(stack);
451            }
452            Ok(())
453        })
454    }
455}
456#[allow(dead_code)]
457struct ArnTypeDeserializer;
458impl ArnTypeDeserializer {
459    #[allow(dead_code, unused_variables)]
460    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
461        xml_util::deserialize_primitive(tag_name, stack, Ok)
462    }
463}
464#[derive(Clone, Debug, Default, PartialEq)]
465#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
466pub struct AttachGroupPolicyRequest {
467    /// <p>The name (friendly name, not ARN) of the group to attach the policy to.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
468    pub group_name: String,
469    /// <p>The Amazon Resource Name (ARN) of the IAM policy you want to attach.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
470    pub policy_arn: String,
471}
472
473/// Serialize `AttachGroupPolicyRequest` contents to a `SignedRequest`.
474struct AttachGroupPolicyRequestSerializer;
475impl AttachGroupPolicyRequestSerializer {
476    fn serialize(params: &mut Params, name: &str, obj: &AttachGroupPolicyRequest) {
477        let mut prefix = name.to_string();
478        if prefix != "" {
479            prefix.push_str(".");
480        }
481
482        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
483        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
484    }
485}
486
487#[derive(Clone, Debug, Default, PartialEq)]
488#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
489pub struct AttachRolePolicyRequest {
490    /// <p>The Amazon Resource Name (ARN) of the IAM policy you want to attach.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
491    pub policy_arn: String,
492    /// <p>The name (friendly name, not ARN) of the role to attach the policy to.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
493    pub role_name: String,
494}
495
496/// Serialize `AttachRolePolicyRequest` contents to a `SignedRequest`.
497struct AttachRolePolicyRequestSerializer;
498impl AttachRolePolicyRequestSerializer {
499    fn serialize(params: &mut Params, name: &str, obj: &AttachRolePolicyRequest) {
500        let mut prefix = name.to_string();
501        if prefix != "" {
502            prefix.push_str(".");
503        }
504
505        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
506        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
507    }
508}
509
510#[derive(Clone, Debug, Default, PartialEq)]
511#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
512pub struct AttachUserPolicyRequest {
513    /// <p>The Amazon Resource Name (ARN) of the IAM policy you want to attach.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
514    pub policy_arn: String,
515    /// <p>The name (friendly name, not ARN) of the IAM user to attach the policy to.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
516    pub user_name: String,
517}
518
519/// Serialize `AttachUserPolicyRequest` contents to a `SignedRequest`.
520struct AttachUserPolicyRequestSerializer;
521impl AttachUserPolicyRequestSerializer {
522    fn serialize(params: &mut Params, name: &str, obj: &AttachUserPolicyRequest) {
523        let mut prefix = name.to_string();
524        if prefix != "" {
525            prefix.push_str(".");
526        }
527
528        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
529        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
530    }
531}
532
533/// <p>Contains information about an attached permissions boundary.</p> <p>An attached permissions boundary is a managed policy that has been attached to a user or role to set the permissions boundary.</p> <p>For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM identities </a> in the <i>IAM User Guide</i>.</p>
534#[derive(Clone, Debug, Default, PartialEq)]
535#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
536pub struct AttachedPermissionsBoundary {
537    /// <p> The ARN of the policy used to set the permissions boundary for the user or role.</p>
538    pub permissions_boundary_arn: Option<String>,
539    /// <p> The permissions boundary usage type that indicates what type of IAM resource is used as the permissions boundary for an entity. This data type can only have a value of <code>Policy</code>.</p>
540    pub permissions_boundary_type: Option<String>,
541}
542
543#[allow(dead_code)]
544struct AttachedPermissionsBoundaryDeserializer;
545impl AttachedPermissionsBoundaryDeserializer {
546    #[allow(dead_code, unused_variables)]
547    fn deserialize<T: Peek + Next>(
548        tag_name: &str,
549        stack: &mut T,
550    ) -> Result<AttachedPermissionsBoundary, XmlParseError> {
551        deserialize_elements::<_, AttachedPermissionsBoundary, _>(
552            tag_name,
553            stack,
554            |name, stack, obj| {
555                match name {
556                    "PermissionsBoundaryArn" => {
557                        obj.permissions_boundary_arn = Some(ArnTypeDeserializer::deserialize(
558                            "PermissionsBoundaryArn",
559                            stack,
560                        )?);
561                    }
562                    "PermissionsBoundaryType" => {
563                        obj.permissions_boundary_type =
564                            Some(PermissionsBoundaryAttachmentTypeDeserializer::deserialize(
565                                "PermissionsBoundaryType",
566                                stack,
567                            )?);
568                    }
569                    _ => skip_tree(stack),
570                }
571                Ok(())
572            },
573        )
574    }
575}
576#[allow(dead_code)]
577struct AttachedPoliciesListTypeDeserializer;
578impl AttachedPoliciesListTypeDeserializer {
579    #[allow(dead_code, unused_variables)]
580    fn deserialize<T: Peek + Next>(
581        tag_name: &str,
582        stack: &mut T,
583    ) -> Result<Vec<AttachedPolicy>, XmlParseError> {
584        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
585            if name == "member" {
586                obj.push(AttachedPolicyDeserializer::deserialize("member", stack)?);
587            } else {
588                skip_tree(stack);
589            }
590            Ok(())
591        })
592    }
593}
594/// <p>Contains information about an attached policy.</p> <p>An attached policy is a managed policy that has been attached to a user, group, or role. This data type is used as a response element in the <a>ListAttachedGroupPolicies</a>, <a>ListAttachedRolePolicies</a>, <a>ListAttachedUserPolicies</a>, and <a>GetAccountAuthorizationDetails</a> operations. </p> <p>For more information about managed policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>
595#[derive(Clone, Debug, Default, PartialEq)]
596#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
597pub struct AttachedPolicy {
598    pub policy_arn: Option<String>,
599    /// <p>The friendly name of the attached policy.</p>
600    pub policy_name: Option<String>,
601}
602
603#[allow(dead_code)]
604struct AttachedPolicyDeserializer;
605impl AttachedPolicyDeserializer {
606    #[allow(dead_code, unused_variables)]
607    fn deserialize<T: Peek + Next>(
608        tag_name: &str,
609        stack: &mut T,
610    ) -> Result<AttachedPolicy, XmlParseError> {
611        deserialize_elements::<_, AttachedPolicy, _>(tag_name, stack, |name, stack, obj| {
612            match name {
613                "PolicyArn" => {
614                    obj.policy_arn = Some(ArnTypeDeserializer::deserialize("PolicyArn", stack)?);
615                }
616                "PolicyName" => {
617                    obj.policy_name = Some(PolicyNameTypeDeserializer::deserialize(
618                        "PolicyName",
619                        stack,
620                    )?);
621                }
622                _ => skip_tree(stack),
623            }
624            Ok(())
625        })
626    }
627}
628#[allow(dead_code)]
629struct AttachmentCountTypeDeserializer;
630impl AttachmentCountTypeDeserializer {
631    #[allow(dead_code, unused_variables)]
632    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
633        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
634    }
635}
636#[allow(dead_code)]
637struct BooleanObjectTypeDeserializer;
638impl BooleanObjectTypeDeserializer {
639    #[allow(dead_code, unused_variables)]
640    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<bool, XmlParseError> {
641        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(bool::from_str(&s).unwrap()))
642    }
643}
644#[allow(dead_code)]
645struct BooleanTypeDeserializer;
646impl BooleanTypeDeserializer {
647    #[allow(dead_code, unused_variables)]
648    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<bool, XmlParseError> {
649        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(bool::from_str(&s).unwrap()))
650    }
651}
652#[allow(dead_code)]
653struct BootstrapDatumDeserializer;
654impl BootstrapDatumDeserializer {
655    #[allow(dead_code, unused_variables)]
656    fn deserialize<T: Peek + Next>(
657        tag_name: &str,
658        stack: &mut T,
659    ) -> Result<bytes::Bytes, XmlParseError> {
660        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(s.into()))
661    }
662}
663#[allow(dead_code)]
664struct CertificateBodyTypeDeserializer;
665impl CertificateBodyTypeDeserializer {
666    #[allow(dead_code, unused_variables)]
667    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
668        xml_util::deserialize_primitive(tag_name, stack, Ok)
669    }
670}
671#[allow(dead_code)]
672struct CertificateChainTypeDeserializer;
673impl CertificateChainTypeDeserializer {
674    #[allow(dead_code, unused_variables)]
675    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
676        xml_util::deserialize_primitive(tag_name, stack, Ok)
677    }
678}
679#[allow(dead_code)]
680struct CertificateIdTypeDeserializer;
681impl CertificateIdTypeDeserializer {
682    #[allow(dead_code, unused_variables)]
683    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
684        xml_util::deserialize_primitive(tag_name, stack, Ok)
685    }
686}
687#[allow(dead_code)]
688struct CertificateListTypeDeserializer;
689impl CertificateListTypeDeserializer {
690    #[allow(dead_code, unused_variables)]
691    fn deserialize<T: Peek + Next>(
692        tag_name: &str,
693        stack: &mut T,
694    ) -> Result<Vec<SigningCertificate>, XmlParseError> {
695        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
696            if name == "member" {
697                obj.push(SigningCertificateDeserializer::deserialize(
698                    "member", stack,
699                )?);
700            } else {
701                skip_tree(stack);
702            }
703            Ok(())
704        })
705    }
706}
707#[derive(Clone, Debug, Default, PartialEq)]
708#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
709pub struct ChangePasswordRequest {
710    /// <p>The new password. The new password must conform to the AWS account's password policy, if one exists.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> that is used to validate this parameter is a string of characters. That string can include almost any printable ASCII character from the space (<code>\u0020</code>) through the end of the ASCII character range (<code>\u00FF</code>). You can also include the tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>) characters. Any of these characters are valid in a password. However, many tools, such as the AWS Management Console, might restrict the ability to type certain characters because they have special meaning within that tool.</p>
711    pub new_password: String,
712    /// <p>The IAM user's current password.</p>
713    pub old_password: String,
714}
715
716/// Serialize `ChangePasswordRequest` contents to a `SignedRequest`.
717struct ChangePasswordRequestSerializer;
718impl ChangePasswordRequestSerializer {
719    fn serialize(params: &mut Params, name: &str, obj: &ChangePasswordRequest) {
720        let mut prefix = name.to_string();
721        if prefix != "" {
722            prefix.push_str(".");
723        }
724
725        params.put(&format!("{}{}", prefix, "NewPassword"), &obj.new_password);
726        params.put(&format!("{}{}", prefix, "OldPassword"), &obj.old_password);
727    }
728}
729
730#[allow(dead_code)]
731struct ClientIDListTypeDeserializer;
732impl ClientIDListTypeDeserializer {
733    #[allow(dead_code, unused_variables)]
734    fn deserialize<T: Peek + Next>(
735        tag_name: &str,
736        stack: &mut T,
737    ) -> Result<Vec<String>, XmlParseError> {
738        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
739            if name == "member" {
740                obj.push(ClientIDTypeDeserializer::deserialize("member", stack)?);
741            } else {
742                skip_tree(stack);
743            }
744            Ok(())
745        })
746    }
747}
748
749/// Serialize `ClientIDListType` contents to a `SignedRequest`.
750struct ClientIDListTypeSerializer;
751impl ClientIDListTypeSerializer {
752    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
753        for (index, obj) in obj.iter().enumerate() {
754            let key = format!("{}.member.{}", name, index + 1);
755            params.put(&key, &obj);
756        }
757    }
758}
759
760#[allow(dead_code)]
761struct ClientIDTypeDeserializer;
762impl ClientIDTypeDeserializer {
763    #[allow(dead_code, unused_variables)]
764    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
765        xml_util::deserialize_primitive(tag_name, stack, Ok)
766    }
767}
768#[allow(dead_code)]
769struct ColumnNumberDeserializer;
770impl ColumnNumberDeserializer {
771    #[allow(dead_code, unused_variables)]
772    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
773        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
774    }
775}
776/// <p>Contains information about a condition context key. It includes the name of the key and specifies the value (or values, if the context key supports multiple values) to use in the simulation. This information is used when evaluating the <code>Condition</code> elements of the input policies.</p> <p>This data type is used as an input parameter to <a>SimulateCustomPolicy</a> and <a>SimulatePrincipalPolicy</a>.</p>
777#[derive(Clone, Debug, Default, PartialEq)]
778#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
779pub struct ContextEntry {
780    /// <p>The full name of a condition context key, including the service prefix. For example, <code>aws:SourceIp</code> or <code>s3:VersionId</code>.</p>
781    pub context_key_name: Option<String>,
782    /// <p>The data type of the value (or values) specified in the <code>ContextKeyValues</code> parameter.</p>
783    pub context_key_type: Option<String>,
784    /// <p>The value (or values, if the condition context key supports multiple values) to provide to the simulation when the key is referenced by a <code>Condition</code> element in an input policy.</p>
785    pub context_key_values: Option<Vec<String>>,
786}
787
788/// Serialize `ContextEntry` contents to a `SignedRequest`.
789struct ContextEntrySerializer;
790impl ContextEntrySerializer {
791    fn serialize(params: &mut Params, name: &str, obj: &ContextEntry) {
792        let mut prefix = name.to_string();
793        if prefix != "" {
794            prefix.push_str(".");
795        }
796
797        if let Some(ref field_value) = obj.context_key_name {
798            params.put(&format!("{}{}", prefix, "ContextKeyName"), &field_value);
799        }
800        if let Some(ref field_value) = obj.context_key_type {
801            params.put(&format!("{}{}", prefix, "ContextKeyType"), &field_value);
802        }
803        if let Some(ref field_value) = obj.context_key_values {
804            ContextKeyValueListTypeSerializer::serialize(
805                params,
806                &format!("{}{}", prefix, "ContextKeyValues"),
807                field_value,
808            );
809        }
810    }
811}
812
813/// Serialize `ContextEntryListType` contents to a `SignedRequest`.
814struct ContextEntryListTypeSerializer;
815impl ContextEntryListTypeSerializer {
816    fn serialize(params: &mut Params, name: &str, obj: &Vec<ContextEntry>) {
817        for (index, obj) in obj.iter().enumerate() {
818            let key = format!("{}.member.{}", name, index + 1);
819            ContextEntrySerializer::serialize(params, &key, obj);
820        }
821    }
822}
823
824#[allow(dead_code)]
825struct ContextKeyNameTypeDeserializer;
826impl ContextKeyNameTypeDeserializer {
827    #[allow(dead_code, unused_variables)]
828    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
829        xml_util::deserialize_primitive(tag_name, stack, Ok)
830    }
831}
832#[allow(dead_code)]
833struct ContextKeyNamesResultListTypeDeserializer;
834impl ContextKeyNamesResultListTypeDeserializer {
835    #[allow(dead_code, unused_variables)]
836    fn deserialize<T: Peek + Next>(
837        tag_name: &str,
838        stack: &mut T,
839    ) -> Result<Vec<String>, XmlParseError> {
840        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
841            if name == "member" {
842                obj.push(ContextKeyNameTypeDeserializer::deserialize(
843                    "member", stack,
844                )?);
845            } else {
846                skip_tree(stack);
847            }
848            Ok(())
849        })
850    }
851}
852
853/// Serialize `ContextKeyValueListType` contents to a `SignedRequest`.
854struct ContextKeyValueListTypeSerializer;
855impl ContextKeyValueListTypeSerializer {
856    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
857        for (index, obj) in obj.iter().enumerate() {
858            let key = format!("{}.member.{}", name, index + 1);
859            params.put(&key, &obj);
860        }
861    }
862}
863
864#[derive(Clone, Debug, Default, PartialEq)]
865#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
866pub struct CreateAccessKeyRequest {
867    /// <p>The name of the IAM user that the new key will belong to.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
868    pub user_name: Option<String>,
869}
870
871/// Serialize `CreateAccessKeyRequest` contents to a `SignedRequest`.
872struct CreateAccessKeyRequestSerializer;
873impl CreateAccessKeyRequestSerializer {
874    fn serialize(params: &mut Params, name: &str, obj: &CreateAccessKeyRequest) {
875        let mut prefix = name.to_string();
876        if prefix != "" {
877            prefix.push_str(".");
878        }
879
880        if let Some(ref field_value) = obj.user_name {
881            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
882        }
883    }
884}
885
886/// <p>Contains the response to a successful <a>CreateAccessKey</a> request. </p>
887#[derive(Clone, Debug, Default, PartialEq)]
888#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
889pub struct CreateAccessKeyResponse {
890    /// <p>A structure with details about the access key.</p>
891    pub access_key: AccessKey,
892}
893
894#[allow(dead_code)]
895struct CreateAccessKeyResponseDeserializer;
896impl CreateAccessKeyResponseDeserializer {
897    #[allow(dead_code, unused_variables)]
898    fn deserialize<T: Peek + Next>(
899        tag_name: &str,
900        stack: &mut T,
901    ) -> Result<CreateAccessKeyResponse, XmlParseError> {
902        deserialize_elements::<_, CreateAccessKeyResponse, _>(
903            tag_name,
904            stack,
905            |name, stack, obj| {
906                match name {
907                    "AccessKey" => {
908                        obj.access_key = AccessKeyDeserializer::deserialize("AccessKey", stack)?;
909                    }
910                    _ => skip_tree(stack),
911                }
912                Ok(())
913            },
914        )
915    }
916}
917#[derive(Clone, Debug, Default, PartialEq)]
918#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
919pub struct CreateAccountAliasRequest {
920    /// <p>The account alias to create.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of lowercase letters, digits, and dashes. You cannot start or finish with a dash, nor can you have two dashes in a row.</p>
921    pub account_alias: String,
922}
923
924/// Serialize `CreateAccountAliasRequest` contents to a `SignedRequest`.
925struct CreateAccountAliasRequestSerializer;
926impl CreateAccountAliasRequestSerializer {
927    fn serialize(params: &mut Params, name: &str, obj: &CreateAccountAliasRequest) {
928        let mut prefix = name.to_string();
929        if prefix != "" {
930            prefix.push_str(".");
931        }
932
933        params.put(&format!("{}{}", prefix, "AccountAlias"), &obj.account_alias);
934    }
935}
936
937#[derive(Clone, Debug, Default, PartialEq)]
938#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
939pub struct CreateGroupRequest {
940    /// <p>The name of the group to create. Do not include the path in this value.</p> <p>IAM user, group, role, and policy names must be unique within the account. Names are not distinguished by case. For example, you cannot create resources named both "MyResource" and "myresource".</p>
941    pub group_name: String,
942    /// <p> The path to the group. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/).</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
943    pub path: Option<String>,
944}
945
946/// Serialize `CreateGroupRequest` contents to a `SignedRequest`.
947struct CreateGroupRequestSerializer;
948impl CreateGroupRequestSerializer {
949    fn serialize(params: &mut Params, name: &str, obj: &CreateGroupRequest) {
950        let mut prefix = name.to_string();
951        if prefix != "" {
952            prefix.push_str(".");
953        }
954
955        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
956        if let Some(ref field_value) = obj.path {
957            params.put(&format!("{}{}", prefix, "Path"), &field_value);
958        }
959    }
960}
961
962/// <p>Contains the response to a successful <a>CreateGroup</a> request. </p>
963#[derive(Clone, Debug, Default, PartialEq)]
964#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
965pub struct CreateGroupResponse {
966    /// <p>A structure containing details about the new group.</p>
967    pub group: Group,
968}
969
970#[allow(dead_code)]
971struct CreateGroupResponseDeserializer;
972impl CreateGroupResponseDeserializer {
973    #[allow(dead_code, unused_variables)]
974    fn deserialize<T: Peek + Next>(
975        tag_name: &str,
976        stack: &mut T,
977    ) -> Result<CreateGroupResponse, XmlParseError> {
978        deserialize_elements::<_, CreateGroupResponse, _>(tag_name, stack, |name, stack, obj| {
979            match name {
980                "Group" => {
981                    obj.group = GroupDeserializer::deserialize("Group", stack)?;
982                }
983                _ => skip_tree(stack),
984            }
985            Ok(())
986        })
987    }
988}
989#[derive(Clone, Debug, Default, PartialEq)]
990#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
991pub struct CreateInstanceProfileRequest {
992    /// <p>The name of the instance profile to create.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
993    pub instance_profile_name: String,
994    /// <p> The path to the instance profile. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM Identifiers</a> in the <i>IAM User Guide</i>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/).</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
995    pub path: Option<String>,
996    /// <p><p>A list of tags that you want to attach to the newly created IAM instance profile. Each tag consists of a key name and an associated value. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note></p>
997    pub tags: Option<Vec<Tag>>,
998}
999
1000/// Serialize `CreateInstanceProfileRequest` contents to a `SignedRequest`.
1001struct CreateInstanceProfileRequestSerializer;
1002impl CreateInstanceProfileRequestSerializer {
1003    fn serialize(params: &mut Params, name: &str, obj: &CreateInstanceProfileRequest) {
1004        let mut prefix = name.to_string();
1005        if prefix != "" {
1006            prefix.push_str(".");
1007        }
1008
1009        params.put(
1010            &format!("{}{}", prefix, "InstanceProfileName"),
1011            &obj.instance_profile_name,
1012        );
1013        if let Some(ref field_value) = obj.path {
1014            params.put(&format!("{}{}", prefix, "Path"), &field_value);
1015        }
1016        if let Some(ref field_value) = obj.tags {
1017            TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), field_value);
1018        }
1019    }
1020}
1021
1022/// <p>Contains the response to a successful <a>CreateInstanceProfile</a> request. </p>
1023#[derive(Clone, Debug, Default, PartialEq)]
1024#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1025pub struct CreateInstanceProfileResponse {
1026    /// <p>A structure containing details about the new instance profile.</p>
1027    pub instance_profile: InstanceProfile,
1028}
1029
1030#[allow(dead_code)]
1031struct CreateInstanceProfileResponseDeserializer;
1032impl CreateInstanceProfileResponseDeserializer {
1033    #[allow(dead_code, unused_variables)]
1034    fn deserialize<T: Peek + Next>(
1035        tag_name: &str,
1036        stack: &mut T,
1037    ) -> Result<CreateInstanceProfileResponse, XmlParseError> {
1038        deserialize_elements::<_, CreateInstanceProfileResponse, _>(
1039            tag_name,
1040            stack,
1041            |name, stack, obj| {
1042                match name {
1043                    "InstanceProfile" => {
1044                        obj.instance_profile =
1045                            InstanceProfileDeserializer::deserialize("InstanceProfile", stack)?;
1046                    }
1047                    _ => skip_tree(stack),
1048                }
1049                Ok(())
1050            },
1051        )
1052    }
1053}
1054#[derive(Clone, Debug, Default, PartialEq)]
1055#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1056pub struct CreateLoginProfileRequest {
1057    /// <p>The new password for the user.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> that is used to validate this parameter is a string of characters. That string can include almost any printable ASCII character from the space (<code>\u0020</code>) through the end of the ASCII character range (<code>\u00FF</code>). You can also include the tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>) characters. Any of these characters are valid in a password. However, many tools, such as the AWS Management Console, might restrict the ability to type certain characters because they have special meaning within that tool.</p>
1058    pub password: String,
1059    /// <p>Specifies whether the user is required to set a new password on next sign-in.</p>
1060    pub password_reset_required: Option<bool>,
1061    /// <p>The name of the IAM user to create a password for. The user must already exist.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1062    pub user_name: String,
1063}
1064
1065/// Serialize `CreateLoginProfileRequest` contents to a `SignedRequest`.
1066struct CreateLoginProfileRequestSerializer;
1067impl CreateLoginProfileRequestSerializer {
1068    fn serialize(params: &mut Params, name: &str, obj: &CreateLoginProfileRequest) {
1069        let mut prefix = name.to_string();
1070        if prefix != "" {
1071            prefix.push_str(".");
1072        }
1073
1074        params.put(&format!("{}{}", prefix, "Password"), &obj.password);
1075        if let Some(ref field_value) = obj.password_reset_required {
1076            params.put(
1077                &format!("{}{}", prefix, "PasswordResetRequired"),
1078                &field_value,
1079            );
1080        }
1081        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
1082    }
1083}
1084
1085/// <p>Contains the response to a successful <a>CreateLoginProfile</a> request. </p>
1086#[derive(Clone, Debug, Default, PartialEq)]
1087#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1088pub struct CreateLoginProfileResponse {
1089    /// <p>A structure containing the user name and password create date.</p>
1090    pub login_profile: LoginProfile,
1091}
1092
1093#[allow(dead_code)]
1094struct CreateLoginProfileResponseDeserializer;
1095impl CreateLoginProfileResponseDeserializer {
1096    #[allow(dead_code, unused_variables)]
1097    fn deserialize<T: Peek + Next>(
1098        tag_name: &str,
1099        stack: &mut T,
1100    ) -> Result<CreateLoginProfileResponse, XmlParseError> {
1101        deserialize_elements::<_, CreateLoginProfileResponse, _>(
1102            tag_name,
1103            stack,
1104            |name, stack, obj| {
1105                match name {
1106                    "LoginProfile" => {
1107                        obj.login_profile =
1108                            LoginProfileDeserializer::deserialize("LoginProfile", stack)?;
1109                    }
1110                    _ => skip_tree(stack),
1111                }
1112                Ok(())
1113            },
1114        )
1115    }
1116}
1117#[derive(Clone, Debug, Default, PartialEq)]
1118#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1119pub struct CreateOpenIDConnectProviderRequest {
1120    /// <p>A list of client IDs (also known as audiences). When a mobile or web app registers with an OpenID Connect provider, they establish a value that identifies the application. (This is the value that's sent as the <code>client_id</code> parameter on OAuth requests.)</p> <p>You can register multiple client IDs with the same provider. For example, you might have multiple applications that use the same OIDC provider. You cannot register more than 100 client IDs with a single IAM OIDC provider.</p> <p>There is no defined format for a client ID. The <code>CreateOpenIDConnectProviderRequest</code> operation accepts client IDs up to 255 characters long.</p>
1121    pub client_id_list: Option<Vec<String>>,
1122    /// <p><p>A list of tags that you want to attach to the new IAM OpenID Connect (OIDC) provider. Each tag consists of a key name and an associated value. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note></p>
1123    pub tags: Option<Vec<Tag>>,
1124    /// <p>A list of server certificate thumbprints for the OpenID Connect (OIDC) identity provider's server certificates. Typically this list includes only one entry. However, IAM lets you have up to five thumbprints for an OIDC provider. This lets you maintain multiple thumbprints if the identity provider is rotating certificates.</p> <p>The server certificate thumbprint is the hex-encoded SHA-1 hash value of the X.509 certificate used by the domain where the OpenID Connect provider makes its keys available. It is always a 40-character string.</p> <p>You must provide at least one thumbprint when creating an IAM OIDC provider. For example, assume that the OIDC provider is <code>server.example.com</code> and the provider stores its keys at https://keys.server.example.com/openid-connect. In that case, the thumbprint string would be the hex-encoded SHA-1 hash value of the certificate used by https://keys.server.example.com.</p> <p>For more information about obtaining the OIDC provider's thumbprint, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers-oidc-obtain-thumbprint.html">Obtaining the thumbprint for an OpenID Connect provider</a> in the <i>IAM User Guide</i>.</p>
1125    pub thumbprint_list: Vec<String>,
1126    /// <p>The URL of the identity provider. The URL must begin with <code>https://</code> and should correspond to the <code>iss</code> claim in the provider's OpenID Connect ID tokens. Per the OIDC standard, path components are allowed but query parameters are not. Typically the URL consists of only a hostname, like <code>https://server.example.org</code> or <code>https://example.com</code>.</p> <p>You cannot register the same provider multiple times in a single AWS account. If you try to submit a URL that has already been used for an OpenID Connect provider in the AWS account, you will get an error.</p>
1127    pub url: String,
1128}
1129
1130/// Serialize `CreateOpenIDConnectProviderRequest` contents to a `SignedRequest`.
1131struct CreateOpenIDConnectProviderRequestSerializer;
1132impl CreateOpenIDConnectProviderRequestSerializer {
1133    fn serialize(params: &mut Params, name: &str, obj: &CreateOpenIDConnectProviderRequest) {
1134        let mut prefix = name.to_string();
1135        if prefix != "" {
1136            prefix.push_str(".");
1137        }
1138
1139        if let Some(ref field_value) = obj.client_id_list {
1140            ClientIDListTypeSerializer::serialize(
1141                params,
1142                &format!("{}{}", prefix, "ClientIDList"),
1143                field_value,
1144            );
1145        }
1146        if let Some(ref field_value) = obj.tags {
1147            TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), field_value);
1148        }
1149        ThumbprintListTypeSerializer::serialize(
1150            params,
1151            &format!("{}{}", prefix, "ThumbprintList"),
1152            &obj.thumbprint_list,
1153        );
1154        params.put(&format!("{}{}", prefix, "Url"), &obj.url);
1155    }
1156}
1157
1158/// <p>Contains the response to a successful <a>CreateOpenIDConnectProvider</a> request. </p>
1159#[derive(Clone, Debug, Default, PartialEq)]
1160#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1161pub struct CreateOpenIDConnectProviderResponse {
1162    /// <p>The Amazon Resource Name (ARN) of the new IAM OpenID Connect provider that is created. For more information, see <a>OpenIDConnectProviderListEntry</a>. </p>
1163    pub open_id_connect_provider_arn: Option<String>,
1164    /// <p>A list of tags that are attached to the new IAM OIDC provider. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
1165    pub tags: Option<Vec<Tag>>,
1166}
1167
1168#[allow(dead_code)]
1169struct CreateOpenIDConnectProviderResponseDeserializer;
1170impl CreateOpenIDConnectProviderResponseDeserializer {
1171    #[allow(dead_code, unused_variables)]
1172    fn deserialize<T: Peek + Next>(
1173        tag_name: &str,
1174        stack: &mut T,
1175    ) -> Result<CreateOpenIDConnectProviderResponse, XmlParseError> {
1176        deserialize_elements::<_, CreateOpenIDConnectProviderResponse, _>(
1177            tag_name,
1178            stack,
1179            |name, stack, obj| {
1180                match name {
1181                    "OpenIDConnectProviderArn" => {
1182                        obj.open_id_connect_provider_arn = Some(ArnTypeDeserializer::deserialize(
1183                            "OpenIDConnectProviderArn",
1184                            stack,
1185                        )?);
1186                    }
1187                    "Tags" => {
1188                        obj.tags
1189                            .get_or_insert(vec![])
1190                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
1191                    }
1192                    _ => skip_tree(stack),
1193                }
1194                Ok(())
1195            },
1196        )
1197    }
1198}
1199#[derive(Clone, Debug, Default, PartialEq)]
1200#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1201pub struct CreatePolicyRequest {
1202    /// <p>A friendly description of the policy.</p> <p>Typically used to store information about the permissions defined in the policy. For example, "Grants access to production DynamoDB tables."</p> <p>The policy description is immutable. After a value is assigned, it cannot be changed.</p>
1203    pub description: Option<String>,
1204    /// <p>The path for the policy.</p> <p>For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/).</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
1205    pub path: Option<String>,
1206    /// <p><p>The JSON policy document that you want to use as the content for the new policy.</p> <p>You must provide policies in JSON format in IAM. However, for AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p> <p>To learn more about JSON policy grammar, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html">Grammar of the IAM JSON policy language</a> in the <i>IAM User Guide</i>. </p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
1207    pub policy_document: String,
1208    /// <p>The friendly name of the policy.</p> <p>IAM user, group, role, and policy names must be unique within the account. Names are not distinguished by case. For example, you cannot create resources named both "MyResource" and "myresource".</p>
1209    pub policy_name: String,
1210    /// <p><p>A list of tags that you want to attach to the new IAM customer managed policy. Each tag consists of a key name and an associated value. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note></p>
1211    pub tags: Option<Vec<Tag>>,
1212}
1213
1214/// Serialize `CreatePolicyRequest` contents to a `SignedRequest`.
1215struct CreatePolicyRequestSerializer;
1216impl CreatePolicyRequestSerializer {
1217    fn serialize(params: &mut Params, name: &str, obj: &CreatePolicyRequest) {
1218        let mut prefix = name.to_string();
1219        if prefix != "" {
1220            prefix.push_str(".");
1221        }
1222
1223        if let Some(ref field_value) = obj.description {
1224            params.put(&format!("{}{}", prefix, "Description"), &field_value);
1225        }
1226        if let Some(ref field_value) = obj.path {
1227            params.put(&format!("{}{}", prefix, "Path"), &field_value);
1228        }
1229        params.put(
1230            &format!("{}{}", prefix, "PolicyDocument"),
1231            &obj.policy_document,
1232        );
1233        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
1234        if let Some(ref field_value) = obj.tags {
1235            TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), field_value);
1236        }
1237    }
1238}
1239
1240/// <p>Contains the response to a successful <a>CreatePolicy</a> request. </p>
1241#[derive(Clone, Debug, Default, PartialEq)]
1242#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1243pub struct CreatePolicyResponse {
1244    /// <p>A structure containing details about the new policy.</p>
1245    pub policy: Option<Policy>,
1246}
1247
1248#[allow(dead_code)]
1249struct CreatePolicyResponseDeserializer;
1250impl CreatePolicyResponseDeserializer {
1251    #[allow(dead_code, unused_variables)]
1252    fn deserialize<T: Peek + Next>(
1253        tag_name: &str,
1254        stack: &mut T,
1255    ) -> Result<CreatePolicyResponse, XmlParseError> {
1256        deserialize_elements::<_, CreatePolicyResponse, _>(tag_name, stack, |name, stack, obj| {
1257            match name {
1258                "Policy" => {
1259                    obj.policy = Some(PolicyDeserializer::deserialize("Policy", stack)?);
1260                }
1261                _ => skip_tree(stack),
1262            }
1263            Ok(())
1264        })
1265    }
1266}
1267#[derive(Clone, Debug, Default, PartialEq)]
1268#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1269pub struct CreatePolicyVersionRequest {
1270    /// <p>The Amazon Resource Name (ARN) of the IAM policy to which you want to add a new version.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
1271    pub policy_arn: String,
1272    /// <p><p>The JSON policy document that you want to use as the content for this new version of the policy.</p> <p>You must provide policies in JSON format in IAM. However, for AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
1273    pub policy_document: String,
1274    /// <p>Specifies whether to set this version as the policy's default version.</p> <p>When this parameter is <code>true</code>, the new policy version becomes the operative version. That is, it becomes the version that is in effect for the IAM users, groups, and roles that the policy is attached to.</p> <p>For more information about managed policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
1275    pub set_as_default: Option<bool>,
1276}
1277
1278/// Serialize `CreatePolicyVersionRequest` contents to a `SignedRequest`.
1279struct CreatePolicyVersionRequestSerializer;
1280impl CreatePolicyVersionRequestSerializer {
1281    fn serialize(params: &mut Params, name: &str, obj: &CreatePolicyVersionRequest) {
1282        let mut prefix = name.to_string();
1283        if prefix != "" {
1284            prefix.push_str(".");
1285        }
1286
1287        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
1288        params.put(
1289            &format!("{}{}", prefix, "PolicyDocument"),
1290            &obj.policy_document,
1291        );
1292        if let Some(ref field_value) = obj.set_as_default {
1293            params.put(&format!("{}{}", prefix, "SetAsDefault"), &field_value);
1294        }
1295    }
1296}
1297
1298/// <p>Contains the response to a successful <a>CreatePolicyVersion</a> request. </p>
1299#[derive(Clone, Debug, Default, PartialEq)]
1300#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1301pub struct CreatePolicyVersionResponse {
1302    /// <p>A structure containing details about the new policy version.</p>
1303    pub policy_version: Option<PolicyVersion>,
1304}
1305
1306#[allow(dead_code)]
1307struct CreatePolicyVersionResponseDeserializer;
1308impl CreatePolicyVersionResponseDeserializer {
1309    #[allow(dead_code, unused_variables)]
1310    fn deserialize<T: Peek + Next>(
1311        tag_name: &str,
1312        stack: &mut T,
1313    ) -> Result<CreatePolicyVersionResponse, XmlParseError> {
1314        deserialize_elements::<_, CreatePolicyVersionResponse, _>(
1315            tag_name,
1316            stack,
1317            |name, stack, obj| {
1318                match name {
1319                    "PolicyVersion" => {
1320                        obj.policy_version = Some(PolicyVersionDeserializer::deserialize(
1321                            "PolicyVersion",
1322                            stack,
1323                        )?);
1324                    }
1325                    _ => skip_tree(stack),
1326                }
1327                Ok(())
1328            },
1329        )
1330    }
1331}
1332#[derive(Clone, Debug, Default, PartialEq)]
1333#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1334pub struct CreateRoleRequest {
1335    /// <p>The trust relationship policy document that grants an entity permission to assume the role.</p> <p>In IAM, you must provide a JSON policy that has been converted to a string. However, for AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul> <p> Upon success, the response includes the same trust policy in JSON format.</p>
1336    pub assume_role_policy_document: String,
1337    /// <p>A description of the role.</p>
1338    pub description: Option<String>,
1339    /// <p>The maximum session duration (in seconds) that you want to set for the specified role. If you do not specify a value for this setting, the default maximum of one hour is applied. This setting can have a value from 1 hour to 12 hours.</p> <p>Anyone who assumes the role from the AWS CLI or API can use the <code>DurationSeconds</code> API parameter or the <code>duration-seconds</code> CLI parameter to request a longer session. The <code>MaxSessionDuration</code> setting determines the maximum duration that can be requested using the <code>DurationSeconds</code> parameter. If users don't specify a value for the <code>DurationSeconds</code> parameter, their security credentials are valid for one hour by default. This applies when you use the <code>AssumeRole*</code> API operations or the <code>assume-role*</code> CLI operations but does not apply when you use those operations to create a console URL. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html">Using IAM roles</a> in the <i>IAM User Guide</i>.</p>
1340    pub max_session_duration: Option<i64>,
1341    /// <p> The path to the role. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM Identifiers</a> in the <i>IAM User Guide</i>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/).</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
1342    pub path: Option<String>,
1343    /// <p>The ARN of the policy that is used to set the permissions boundary for the role.</p>
1344    pub permissions_boundary: Option<String>,
1345    /// <p>The name of the role to create.</p> <p>IAM user, group, role, and policy names must be unique within the account. Names are not distinguished by case. For example, you cannot create resources named both "MyResource" and "myresource".</p>
1346    pub role_name: String,
1347    /// <p><p>A list of tags that you want to attach to the new role. Each tag consists of a key name and an associated value. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note></p>
1348    pub tags: Option<Vec<Tag>>,
1349}
1350
1351/// Serialize `CreateRoleRequest` contents to a `SignedRequest`.
1352struct CreateRoleRequestSerializer;
1353impl CreateRoleRequestSerializer {
1354    fn serialize(params: &mut Params, name: &str, obj: &CreateRoleRequest) {
1355        let mut prefix = name.to_string();
1356        if prefix != "" {
1357            prefix.push_str(".");
1358        }
1359
1360        params.put(
1361            &format!("{}{}", prefix, "AssumeRolePolicyDocument"),
1362            &obj.assume_role_policy_document,
1363        );
1364        if let Some(ref field_value) = obj.description {
1365            params.put(&format!("{}{}", prefix, "Description"), &field_value);
1366        }
1367        if let Some(ref field_value) = obj.max_session_duration {
1368            params.put(&format!("{}{}", prefix, "MaxSessionDuration"), &field_value);
1369        }
1370        if let Some(ref field_value) = obj.path {
1371            params.put(&format!("{}{}", prefix, "Path"), &field_value);
1372        }
1373        if let Some(ref field_value) = obj.permissions_boundary {
1374            params.put(
1375                &format!("{}{}", prefix, "PermissionsBoundary"),
1376                &field_value,
1377            );
1378        }
1379        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
1380        if let Some(ref field_value) = obj.tags {
1381            TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), field_value);
1382        }
1383    }
1384}
1385
1386/// <p>Contains the response to a successful <a>CreateRole</a> request. </p>
1387#[derive(Clone, Debug, Default, PartialEq)]
1388#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1389pub struct CreateRoleResponse {
1390    /// <p>A structure containing details about the new role.</p>
1391    pub role: Role,
1392}
1393
1394#[allow(dead_code)]
1395struct CreateRoleResponseDeserializer;
1396impl CreateRoleResponseDeserializer {
1397    #[allow(dead_code, unused_variables)]
1398    fn deserialize<T: Peek + Next>(
1399        tag_name: &str,
1400        stack: &mut T,
1401    ) -> Result<CreateRoleResponse, XmlParseError> {
1402        deserialize_elements::<_, CreateRoleResponse, _>(tag_name, stack, |name, stack, obj| {
1403            match name {
1404                "Role" => {
1405                    obj.role = RoleDeserializer::deserialize("Role", stack)?;
1406                }
1407                _ => skip_tree(stack),
1408            }
1409            Ok(())
1410        })
1411    }
1412}
1413#[derive(Clone, Debug, Default, PartialEq)]
1414#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1415pub struct CreateSAMLProviderRequest {
1416    /// <p>The name of the provider to create.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1417    pub name: String,
1418    /// <p>An XML document generated by an identity provider (IdP) that supports SAML 2.0. The document includes the issuer's name, expiration information, and keys that can be used to validate the SAML authentication response (assertions) that are received from the IdP. You must generate the metadata document using the identity management software that is used as your organization's IdP.</p> <p>For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html">About SAML 2.0-based federation</a> in the <i>IAM User Guide</i> </p>
1419    pub saml_metadata_document: String,
1420    /// <p><p>A list of tags that you want to attach to the new IAM SAML provider. Each tag consists of a key name and an associated value. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note></p>
1421    pub tags: Option<Vec<Tag>>,
1422}
1423
1424/// Serialize `CreateSAMLProviderRequest` contents to a `SignedRequest`.
1425struct CreateSAMLProviderRequestSerializer;
1426impl CreateSAMLProviderRequestSerializer {
1427    fn serialize(params: &mut Params, name: &str, obj: &CreateSAMLProviderRequest) {
1428        let mut prefix = name.to_string();
1429        if prefix != "" {
1430            prefix.push_str(".");
1431        }
1432
1433        params.put(&format!("{}{}", prefix, "Name"), &obj.name);
1434        params.put(
1435            &format!("{}{}", prefix, "SAMLMetadataDocument"),
1436            &obj.saml_metadata_document,
1437        );
1438        if let Some(ref field_value) = obj.tags {
1439            TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), field_value);
1440        }
1441    }
1442}
1443
1444/// <p>Contains the response to a successful <a>CreateSAMLProvider</a> request. </p>
1445#[derive(Clone, Debug, Default, PartialEq)]
1446#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1447pub struct CreateSAMLProviderResponse {
1448    /// <p>The Amazon Resource Name (ARN) of the new SAML provider resource in IAM.</p>
1449    pub saml_provider_arn: Option<String>,
1450    /// <p>A list of tags that are attached to the new IAM SAML provider. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
1451    pub tags: Option<Vec<Tag>>,
1452}
1453
1454#[allow(dead_code)]
1455struct CreateSAMLProviderResponseDeserializer;
1456impl CreateSAMLProviderResponseDeserializer {
1457    #[allow(dead_code, unused_variables)]
1458    fn deserialize<T: Peek + Next>(
1459        tag_name: &str,
1460        stack: &mut T,
1461    ) -> Result<CreateSAMLProviderResponse, XmlParseError> {
1462        deserialize_elements::<_, CreateSAMLProviderResponse, _>(
1463            tag_name,
1464            stack,
1465            |name, stack, obj| {
1466                match name {
1467                    "SAMLProviderArn" => {
1468                        obj.saml_provider_arn =
1469                            Some(ArnTypeDeserializer::deserialize("SAMLProviderArn", stack)?);
1470                    }
1471                    "Tags" => {
1472                        obj.tags
1473                            .get_or_insert(vec![])
1474                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
1475                    }
1476                    _ => skip_tree(stack),
1477                }
1478                Ok(())
1479            },
1480        )
1481    }
1482}
1483#[derive(Clone, Debug, Default, PartialEq)]
1484#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1485pub struct CreateServiceLinkedRoleRequest {
1486    /// <p>The service principal for the AWS service to which this role is attached. You use a string similar to a URL but without the http:// in front. For example: <code>elasticbeanstalk.amazonaws.com</code>. </p> <p>Service principals are unique and case-sensitive. To find the exact service principal for your service-linked role, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html">AWS services that work with IAM</a> in the <i>IAM User Guide</i>. Look for the services that have <b>Yes </b>in the <b>Service-Linked Role</b> column. Choose the <b>Yes</b> link to view the service-linked role documentation for that service.</p>
1487    pub aws_service_name: String,
1488    /// <p><p/> <p>A string that you provide, which is combined with the service-provided prefix to form the complete role name. If you make multiple requests for the same service, then you must supply a different <code>CustomSuffix</code> for each request. Otherwise the request fails with a duplicate role name error. For example, you could add <code>-1</code> or <code>-debug</code> to the suffix.</p> <p>Some services do not support the <code>CustomSuffix</code> parameter. If you provide an optional suffix and the operation fails, try the operation again without the suffix.</p></p>
1489    pub custom_suffix: Option<String>,
1490    /// <p>The description of the role.</p>
1491    pub description: Option<String>,
1492}
1493
1494/// Serialize `CreateServiceLinkedRoleRequest` contents to a `SignedRequest`.
1495struct CreateServiceLinkedRoleRequestSerializer;
1496impl CreateServiceLinkedRoleRequestSerializer {
1497    fn serialize(params: &mut Params, name: &str, obj: &CreateServiceLinkedRoleRequest) {
1498        let mut prefix = name.to_string();
1499        if prefix != "" {
1500            prefix.push_str(".");
1501        }
1502
1503        params.put(
1504            &format!("{}{}", prefix, "AWSServiceName"),
1505            &obj.aws_service_name,
1506        );
1507        if let Some(ref field_value) = obj.custom_suffix {
1508            params.put(&format!("{}{}", prefix, "CustomSuffix"), &field_value);
1509        }
1510        if let Some(ref field_value) = obj.description {
1511            params.put(&format!("{}{}", prefix, "Description"), &field_value);
1512        }
1513    }
1514}
1515
1516#[derive(Clone, Debug, Default, PartialEq)]
1517#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1518pub struct CreateServiceLinkedRoleResponse {
1519    /// <p>A <a>Role</a> object that contains details about the newly created role.</p>
1520    pub role: Option<Role>,
1521}
1522
1523#[allow(dead_code)]
1524struct CreateServiceLinkedRoleResponseDeserializer;
1525impl CreateServiceLinkedRoleResponseDeserializer {
1526    #[allow(dead_code, unused_variables)]
1527    fn deserialize<T: Peek + Next>(
1528        tag_name: &str,
1529        stack: &mut T,
1530    ) -> Result<CreateServiceLinkedRoleResponse, XmlParseError> {
1531        deserialize_elements::<_, CreateServiceLinkedRoleResponse, _>(
1532            tag_name,
1533            stack,
1534            |name, stack, obj| {
1535                match name {
1536                    "Role" => {
1537                        obj.role = Some(RoleDeserializer::deserialize("Role", stack)?);
1538                    }
1539                    _ => skip_tree(stack),
1540                }
1541                Ok(())
1542            },
1543        )
1544    }
1545}
1546#[derive(Clone, Debug, Default, PartialEq)]
1547#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1548pub struct CreateServiceSpecificCredentialRequest {
1549    /// <p>The name of the AWS service that is to be associated with the credentials. The service you specify here is the only service that can be accessed using these credentials.</p>
1550    pub service_name: String,
1551    /// <p>The name of the IAM user that is to be associated with the credentials. The new service-specific credentials have the same permissions as the associated user except that they can be used only to access the specified service.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1552    pub user_name: String,
1553}
1554
1555/// Serialize `CreateServiceSpecificCredentialRequest` contents to a `SignedRequest`.
1556struct CreateServiceSpecificCredentialRequestSerializer;
1557impl CreateServiceSpecificCredentialRequestSerializer {
1558    fn serialize(params: &mut Params, name: &str, obj: &CreateServiceSpecificCredentialRequest) {
1559        let mut prefix = name.to_string();
1560        if prefix != "" {
1561            prefix.push_str(".");
1562        }
1563
1564        params.put(&format!("{}{}", prefix, "ServiceName"), &obj.service_name);
1565        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
1566    }
1567}
1568
1569#[derive(Clone, Debug, Default, PartialEq)]
1570#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1571pub struct CreateServiceSpecificCredentialResponse {
1572    /// <p><p>A structure that contains information about the newly created service-specific credential.</p> <important> <p>This is the only time that the password for this credential set is available. It cannot be recovered later. Instead, you must reset the password with <a>ResetServiceSpecificCredential</a>.</p> </important></p>
1573    pub service_specific_credential: Option<ServiceSpecificCredential>,
1574}
1575
1576#[allow(dead_code)]
1577struct CreateServiceSpecificCredentialResponseDeserializer;
1578impl CreateServiceSpecificCredentialResponseDeserializer {
1579    #[allow(dead_code, unused_variables)]
1580    fn deserialize<T: Peek + Next>(
1581        tag_name: &str,
1582        stack: &mut T,
1583    ) -> Result<CreateServiceSpecificCredentialResponse, XmlParseError> {
1584        deserialize_elements::<_, CreateServiceSpecificCredentialResponse, _>(
1585            tag_name,
1586            stack,
1587            |name, stack, obj| {
1588                match name {
1589                    "ServiceSpecificCredential" => {
1590                        obj.service_specific_credential =
1591                            Some(ServiceSpecificCredentialDeserializer::deserialize(
1592                                "ServiceSpecificCredential",
1593                                stack,
1594                            )?);
1595                    }
1596                    _ => skip_tree(stack),
1597                }
1598                Ok(())
1599            },
1600        )
1601    }
1602}
1603#[derive(Clone, Debug, Default, PartialEq)]
1604#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1605pub struct CreateUserRequest {
1606    /// <p> The path for the user name. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/).</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
1607    pub path: Option<String>,
1608    /// <p>The ARN of the policy that is used to set the permissions boundary for the user.</p>
1609    pub permissions_boundary: Option<String>,
1610    /// <p><p>A list of tags that you want to attach to the new user. Each tag consists of a key name and an associated value. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note></p>
1611    pub tags: Option<Vec<Tag>>,
1612    /// <p>The name of the user to create.</p> <p>IAM user, group, role, and policy names must be unique within the account. Names are not distinguished by case. For example, you cannot create resources named both "MyResource" and "myresource".</p>
1613    pub user_name: String,
1614}
1615
1616/// Serialize `CreateUserRequest` contents to a `SignedRequest`.
1617struct CreateUserRequestSerializer;
1618impl CreateUserRequestSerializer {
1619    fn serialize(params: &mut Params, name: &str, obj: &CreateUserRequest) {
1620        let mut prefix = name.to_string();
1621        if prefix != "" {
1622            prefix.push_str(".");
1623        }
1624
1625        if let Some(ref field_value) = obj.path {
1626            params.put(&format!("{}{}", prefix, "Path"), &field_value);
1627        }
1628        if let Some(ref field_value) = obj.permissions_boundary {
1629            params.put(
1630                &format!("{}{}", prefix, "PermissionsBoundary"),
1631                &field_value,
1632            );
1633        }
1634        if let Some(ref field_value) = obj.tags {
1635            TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), field_value);
1636        }
1637        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
1638    }
1639}
1640
1641/// <p>Contains the response to a successful <a>CreateUser</a> request. </p>
1642#[derive(Clone, Debug, Default, PartialEq)]
1643#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1644pub struct CreateUserResponse {
1645    /// <p>A structure with details about the new IAM user.</p>
1646    pub user: Option<User>,
1647}
1648
1649#[allow(dead_code)]
1650struct CreateUserResponseDeserializer;
1651impl CreateUserResponseDeserializer {
1652    #[allow(dead_code, unused_variables)]
1653    fn deserialize<T: Peek + Next>(
1654        tag_name: &str,
1655        stack: &mut T,
1656    ) -> Result<CreateUserResponse, XmlParseError> {
1657        deserialize_elements::<_, CreateUserResponse, _>(tag_name, stack, |name, stack, obj| {
1658            match name {
1659                "User" => {
1660                    obj.user = Some(UserDeserializer::deserialize("User", stack)?);
1661                }
1662                _ => skip_tree(stack),
1663            }
1664            Ok(())
1665        })
1666    }
1667}
1668#[derive(Clone, Debug, Default, PartialEq)]
1669#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1670pub struct CreateVirtualMFADeviceRequest {
1671    /// <p> The path for the virtual MFA device. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/).</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
1672    pub path: Option<String>,
1673    /// <p><p>A list of tags that you want to attach to the new IAM virtual MFA device. Each tag consists of a key name and an associated value. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note></p>
1674    pub tags: Option<Vec<Tag>>,
1675    /// <p>The name of the virtual MFA device. Use with path to uniquely identify a virtual MFA device.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1676    pub virtual_mfa_device_name: String,
1677}
1678
1679/// Serialize `CreateVirtualMFADeviceRequest` contents to a `SignedRequest`.
1680struct CreateVirtualMFADeviceRequestSerializer;
1681impl CreateVirtualMFADeviceRequestSerializer {
1682    fn serialize(params: &mut Params, name: &str, obj: &CreateVirtualMFADeviceRequest) {
1683        let mut prefix = name.to_string();
1684        if prefix != "" {
1685            prefix.push_str(".");
1686        }
1687
1688        if let Some(ref field_value) = obj.path {
1689            params.put(&format!("{}{}", prefix, "Path"), &field_value);
1690        }
1691        if let Some(ref field_value) = obj.tags {
1692            TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), field_value);
1693        }
1694        params.put(
1695            &format!("{}{}", prefix, "VirtualMFADeviceName"),
1696            &obj.virtual_mfa_device_name,
1697        );
1698    }
1699}
1700
1701/// <p>Contains the response to a successful <a>CreateVirtualMFADevice</a> request. </p>
1702#[derive(Clone, Debug, Default, PartialEq)]
1703#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
1704pub struct CreateVirtualMFADeviceResponse {
1705    /// <p>A structure containing details about the new virtual MFA device.</p>
1706    pub virtual_mfa_device: VirtualMFADevice,
1707}
1708
1709#[allow(dead_code)]
1710struct CreateVirtualMFADeviceResponseDeserializer;
1711impl CreateVirtualMFADeviceResponseDeserializer {
1712    #[allow(dead_code, unused_variables)]
1713    fn deserialize<T: Peek + Next>(
1714        tag_name: &str,
1715        stack: &mut T,
1716    ) -> Result<CreateVirtualMFADeviceResponse, XmlParseError> {
1717        deserialize_elements::<_, CreateVirtualMFADeviceResponse, _>(
1718            tag_name,
1719            stack,
1720            |name, stack, obj| {
1721                match name {
1722                    "VirtualMFADevice" => {
1723                        obj.virtual_mfa_device =
1724                            VirtualMFADeviceDeserializer::deserialize("VirtualMFADevice", stack)?;
1725                    }
1726                    _ => skip_tree(stack),
1727                }
1728                Ok(())
1729            },
1730        )
1731    }
1732}
1733#[allow(dead_code)]
1734struct DateTypeDeserializer;
1735impl DateTypeDeserializer {
1736    #[allow(dead_code, unused_variables)]
1737    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
1738        xml_util::deserialize_primitive(tag_name, stack, Ok)
1739    }
1740}
1741#[derive(Clone, Debug, Default, PartialEq)]
1742#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1743pub struct DeactivateMFADeviceRequest {
1744    /// <p>The serial number that uniquely identifies the MFA device. For virtual MFA devices, the serial number is the device ARN.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@:/-</p>
1745    pub serial_number: String,
1746    /// <p>The name of the user whose MFA device you want to deactivate.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1747    pub user_name: String,
1748}
1749
1750/// Serialize `DeactivateMFADeviceRequest` contents to a `SignedRequest`.
1751struct DeactivateMFADeviceRequestSerializer;
1752impl DeactivateMFADeviceRequestSerializer {
1753    fn serialize(params: &mut Params, name: &str, obj: &DeactivateMFADeviceRequest) {
1754        let mut prefix = name.to_string();
1755        if prefix != "" {
1756            prefix.push_str(".");
1757        }
1758
1759        params.put(&format!("{}{}", prefix, "SerialNumber"), &obj.serial_number);
1760        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
1761    }
1762}
1763
1764#[derive(Clone, Debug, Default, PartialEq)]
1765#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1766pub struct DeleteAccessKeyRequest {
1767    /// <p>The access key ID for the access key ID and secret access key you want to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
1768    pub access_key_id: String,
1769    /// <p>The name of the user whose access key pair you want to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1770    pub user_name: Option<String>,
1771}
1772
1773/// Serialize `DeleteAccessKeyRequest` contents to a `SignedRequest`.
1774struct DeleteAccessKeyRequestSerializer;
1775impl DeleteAccessKeyRequestSerializer {
1776    fn serialize(params: &mut Params, name: &str, obj: &DeleteAccessKeyRequest) {
1777        let mut prefix = name.to_string();
1778        if prefix != "" {
1779            prefix.push_str(".");
1780        }
1781
1782        params.put(&format!("{}{}", prefix, "AccessKeyId"), &obj.access_key_id);
1783        if let Some(ref field_value) = obj.user_name {
1784            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
1785        }
1786    }
1787}
1788
1789#[derive(Clone, Debug, Default, PartialEq)]
1790#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1791pub struct DeleteAccountAliasRequest {
1792    /// <p>The name of the account alias to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of lowercase letters, digits, and dashes. You cannot start or finish with a dash, nor can you have two dashes in a row.</p>
1793    pub account_alias: String,
1794}
1795
1796/// Serialize `DeleteAccountAliasRequest` contents to a `SignedRequest`.
1797struct DeleteAccountAliasRequestSerializer;
1798impl DeleteAccountAliasRequestSerializer {
1799    fn serialize(params: &mut Params, name: &str, obj: &DeleteAccountAliasRequest) {
1800        let mut prefix = name.to_string();
1801        if prefix != "" {
1802            prefix.push_str(".");
1803        }
1804
1805        params.put(&format!("{}{}", prefix, "AccountAlias"), &obj.account_alias);
1806    }
1807}
1808
1809#[derive(Clone, Debug, Default, PartialEq)]
1810#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1811pub struct DeleteGroupPolicyRequest {
1812    /// <p>The name (friendly name, not ARN) identifying the group that the policy is embedded in.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1813    pub group_name: String,
1814    /// <p>The name identifying the policy document to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1815    pub policy_name: String,
1816}
1817
1818/// Serialize `DeleteGroupPolicyRequest` contents to a `SignedRequest`.
1819struct DeleteGroupPolicyRequestSerializer;
1820impl DeleteGroupPolicyRequestSerializer {
1821    fn serialize(params: &mut Params, name: &str, obj: &DeleteGroupPolicyRequest) {
1822        let mut prefix = name.to_string();
1823        if prefix != "" {
1824            prefix.push_str(".");
1825        }
1826
1827        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
1828        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
1829    }
1830}
1831
1832#[derive(Clone, Debug, Default, PartialEq)]
1833#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1834pub struct DeleteGroupRequest {
1835    /// <p>The name of the IAM group to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1836    pub group_name: String,
1837}
1838
1839/// Serialize `DeleteGroupRequest` contents to a `SignedRequest`.
1840struct DeleteGroupRequestSerializer;
1841impl DeleteGroupRequestSerializer {
1842    fn serialize(params: &mut Params, name: &str, obj: &DeleteGroupRequest) {
1843        let mut prefix = name.to_string();
1844        if prefix != "" {
1845            prefix.push_str(".");
1846        }
1847
1848        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
1849    }
1850}
1851
1852#[derive(Clone, Debug, Default, PartialEq)]
1853#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1854pub struct DeleteInstanceProfileRequest {
1855    /// <p>The name of the instance profile to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1856    pub instance_profile_name: String,
1857}
1858
1859/// Serialize `DeleteInstanceProfileRequest` contents to a `SignedRequest`.
1860struct DeleteInstanceProfileRequestSerializer;
1861impl DeleteInstanceProfileRequestSerializer {
1862    fn serialize(params: &mut Params, name: &str, obj: &DeleteInstanceProfileRequest) {
1863        let mut prefix = name.to_string();
1864        if prefix != "" {
1865            prefix.push_str(".");
1866        }
1867
1868        params.put(
1869            &format!("{}{}", prefix, "InstanceProfileName"),
1870            &obj.instance_profile_name,
1871        );
1872    }
1873}
1874
1875#[derive(Clone, Debug, Default, PartialEq)]
1876#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1877pub struct DeleteLoginProfileRequest {
1878    /// <p>The name of the user whose password you want to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1879    pub user_name: String,
1880}
1881
1882/// Serialize `DeleteLoginProfileRequest` contents to a `SignedRequest`.
1883struct DeleteLoginProfileRequestSerializer;
1884impl DeleteLoginProfileRequestSerializer {
1885    fn serialize(params: &mut Params, name: &str, obj: &DeleteLoginProfileRequest) {
1886        let mut prefix = name.to_string();
1887        if prefix != "" {
1888            prefix.push_str(".");
1889        }
1890
1891        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
1892    }
1893}
1894
1895#[derive(Clone, Debug, Default, PartialEq)]
1896#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1897pub struct DeleteOpenIDConnectProviderRequest {
1898    /// <p>The Amazon Resource Name (ARN) of the IAM OpenID Connect provider resource object to delete. You can get a list of OpenID Connect provider resource ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p>
1899    pub open_id_connect_provider_arn: String,
1900}
1901
1902/// Serialize `DeleteOpenIDConnectProviderRequest` contents to a `SignedRequest`.
1903struct DeleteOpenIDConnectProviderRequestSerializer;
1904impl DeleteOpenIDConnectProviderRequestSerializer {
1905    fn serialize(params: &mut Params, name: &str, obj: &DeleteOpenIDConnectProviderRequest) {
1906        let mut prefix = name.to_string();
1907        if prefix != "" {
1908            prefix.push_str(".");
1909        }
1910
1911        params.put(
1912            &format!("{}{}", prefix, "OpenIDConnectProviderArn"),
1913            &obj.open_id_connect_provider_arn,
1914        );
1915    }
1916}
1917
1918#[derive(Clone, Debug, Default, PartialEq)]
1919#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1920pub struct DeletePolicyRequest {
1921    /// <p>The Amazon Resource Name (ARN) of the IAM policy you want to delete.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
1922    pub policy_arn: String,
1923}
1924
1925/// Serialize `DeletePolicyRequest` contents to a `SignedRequest`.
1926struct DeletePolicyRequestSerializer;
1927impl DeletePolicyRequestSerializer {
1928    fn serialize(params: &mut Params, name: &str, obj: &DeletePolicyRequest) {
1929        let mut prefix = name.to_string();
1930        if prefix != "" {
1931            prefix.push_str(".");
1932        }
1933
1934        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
1935    }
1936}
1937
1938#[derive(Clone, Debug, Default, PartialEq)]
1939#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1940pub struct DeletePolicyVersionRequest {
1941    /// <p>The Amazon Resource Name (ARN) of the IAM policy from which you want to delete a version.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
1942    pub policy_arn: String,
1943    /// <p>The policy version to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consists of the lowercase letter 'v' followed by one or two digits, and optionally followed by a period '.' and a string of letters and digits.</p> <p>For more information about managed policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
1944    pub version_id: String,
1945}
1946
1947/// Serialize `DeletePolicyVersionRequest` contents to a `SignedRequest`.
1948struct DeletePolicyVersionRequestSerializer;
1949impl DeletePolicyVersionRequestSerializer {
1950    fn serialize(params: &mut Params, name: &str, obj: &DeletePolicyVersionRequest) {
1951        let mut prefix = name.to_string();
1952        if prefix != "" {
1953            prefix.push_str(".");
1954        }
1955
1956        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
1957        params.put(&format!("{}{}", prefix, "VersionId"), &obj.version_id);
1958    }
1959}
1960
1961#[derive(Clone, Debug, Default, PartialEq)]
1962#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1963pub struct DeleteRolePermissionsBoundaryRequest {
1964    /// <p>The name (friendly name, not ARN) of the IAM role from which you want to remove the permissions boundary.</p>
1965    pub role_name: String,
1966}
1967
1968/// Serialize `DeleteRolePermissionsBoundaryRequest` contents to a `SignedRequest`.
1969struct DeleteRolePermissionsBoundaryRequestSerializer;
1970impl DeleteRolePermissionsBoundaryRequestSerializer {
1971    fn serialize(params: &mut Params, name: &str, obj: &DeleteRolePermissionsBoundaryRequest) {
1972        let mut prefix = name.to_string();
1973        if prefix != "" {
1974            prefix.push_str(".");
1975        }
1976
1977        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
1978    }
1979}
1980
1981#[derive(Clone, Debug, Default, PartialEq)]
1982#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1983pub struct DeleteRolePolicyRequest {
1984    /// <p>The name of the inline policy to delete from the specified IAM role.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1985    pub policy_name: String,
1986    /// <p>The name (friendly name, not ARN) identifying the role that the policy is embedded in.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
1987    pub role_name: String,
1988}
1989
1990/// Serialize `DeleteRolePolicyRequest` contents to a `SignedRequest`.
1991struct DeleteRolePolicyRequestSerializer;
1992impl DeleteRolePolicyRequestSerializer {
1993    fn serialize(params: &mut Params, name: &str, obj: &DeleteRolePolicyRequest) {
1994        let mut prefix = name.to_string();
1995        if prefix != "" {
1996            prefix.push_str(".");
1997        }
1998
1999        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
2000        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
2001    }
2002}
2003
2004#[derive(Clone, Debug, Default, PartialEq)]
2005#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2006pub struct DeleteRoleRequest {
2007    /// <p>The name of the role to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2008    pub role_name: String,
2009}
2010
2011/// Serialize `DeleteRoleRequest` contents to a `SignedRequest`.
2012struct DeleteRoleRequestSerializer;
2013impl DeleteRoleRequestSerializer {
2014    fn serialize(params: &mut Params, name: &str, obj: &DeleteRoleRequest) {
2015        let mut prefix = name.to_string();
2016        if prefix != "" {
2017            prefix.push_str(".");
2018        }
2019
2020        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
2021    }
2022}
2023
2024#[derive(Clone, Debug, Default, PartialEq)]
2025#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2026pub struct DeleteSAMLProviderRequest {
2027    /// <p>The Amazon Resource Name (ARN) of the SAML provider to delete.</p>
2028    pub saml_provider_arn: String,
2029}
2030
2031/// Serialize `DeleteSAMLProviderRequest` contents to a `SignedRequest`.
2032struct DeleteSAMLProviderRequestSerializer;
2033impl DeleteSAMLProviderRequestSerializer {
2034    fn serialize(params: &mut Params, name: &str, obj: &DeleteSAMLProviderRequest) {
2035        let mut prefix = name.to_string();
2036        if prefix != "" {
2037            prefix.push_str(".");
2038        }
2039
2040        params.put(
2041            &format!("{}{}", prefix, "SAMLProviderArn"),
2042            &obj.saml_provider_arn,
2043        );
2044    }
2045}
2046
2047#[derive(Clone, Debug, Default, PartialEq)]
2048#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2049pub struct DeleteSSHPublicKeyRequest {
2050    /// <p>The unique identifier for the SSH public key.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
2051    pub ssh_public_key_id: String,
2052    /// <p>The name of the IAM user associated with the SSH public key.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2053    pub user_name: String,
2054}
2055
2056/// Serialize `DeleteSSHPublicKeyRequest` contents to a `SignedRequest`.
2057struct DeleteSSHPublicKeyRequestSerializer;
2058impl DeleteSSHPublicKeyRequestSerializer {
2059    fn serialize(params: &mut Params, name: &str, obj: &DeleteSSHPublicKeyRequest) {
2060        let mut prefix = name.to_string();
2061        if prefix != "" {
2062            prefix.push_str(".");
2063        }
2064
2065        params.put(
2066            &format!("{}{}", prefix, "SSHPublicKeyId"),
2067            &obj.ssh_public_key_id,
2068        );
2069        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
2070    }
2071}
2072
2073#[derive(Clone, Debug, Default, PartialEq)]
2074#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2075pub struct DeleteServerCertificateRequest {
2076    /// <p>The name of the server certificate you want to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2077    pub server_certificate_name: String,
2078}
2079
2080/// Serialize `DeleteServerCertificateRequest` contents to a `SignedRequest`.
2081struct DeleteServerCertificateRequestSerializer;
2082impl DeleteServerCertificateRequestSerializer {
2083    fn serialize(params: &mut Params, name: &str, obj: &DeleteServerCertificateRequest) {
2084        let mut prefix = name.to_string();
2085        if prefix != "" {
2086            prefix.push_str(".");
2087        }
2088
2089        params.put(
2090            &format!("{}{}", prefix, "ServerCertificateName"),
2091            &obj.server_certificate_name,
2092        );
2093    }
2094}
2095
2096#[derive(Clone, Debug, Default, PartialEq)]
2097#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2098pub struct DeleteServiceLinkedRoleRequest {
2099    /// <p>The name of the service-linked role to be deleted.</p>
2100    pub role_name: String,
2101}
2102
2103/// Serialize `DeleteServiceLinkedRoleRequest` contents to a `SignedRequest`.
2104struct DeleteServiceLinkedRoleRequestSerializer;
2105impl DeleteServiceLinkedRoleRequestSerializer {
2106    fn serialize(params: &mut Params, name: &str, obj: &DeleteServiceLinkedRoleRequest) {
2107        let mut prefix = name.to_string();
2108        if prefix != "" {
2109            prefix.push_str(".");
2110        }
2111
2112        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
2113    }
2114}
2115
2116#[derive(Clone, Debug, Default, PartialEq)]
2117#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2118pub struct DeleteServiceLinkedRoleResponse {
2119    /// <p>The deletion task identifier that you can use to check the status of the deletion. This identifier is returned in the format <code>task/aws-service-role/&lt;service-principal-name&gt;/&lt;role-name&gt;/&lt;task-uuid&gt;</code>.</p>
2120    pub deletion_task_id: String,
2121}
2122
2123#[allow(dead_code)]
2124struct DeleteServiceLinkedRoleResponseDeserializer;
2125impl DeleteServiceLinkedRoleResponseDeserializer {
2126    #[allow(dead_code, unused_variables)]
2127    fn deserialize<T: Peek + Next>(
2128        tag_name: &str,
2129        stack: &mut T,
2130    ) -> Result<DeleteServiceLinkedRoleResponse, XmlParseError> {
2131        deserialize_elements::<_, DeleteServiceLinkedRoleResponse, _>(
2132            tag_name,
2133            stack,
2134            |name, stack, obj| {
2135                match name {
2136                    "DeletionTaskId" => {
2137                        obj.deletion_task_id =
2138                            DeletionTaskIdTypeDeserializer::deserialize("DeletionTaskId", stack)?;
2139                    }
2140                    _ => skip_tree(stack),
2141                }
2142                Ok(())
2143            },
2144        )
2145    }
2146}
2147#[derive(Clone, Debug, Default, PartialEq)]
2148#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2149pub struct DeleteServiceSpecificCredentialRequest {
2150    /// <p>The unique identifier of the service-specific credential. You can get this value by calling <a>ListServiceSpecificCredentials</a>.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
2151    pub service_specific_credential_id: String,
2152    /// <p>The name of the IAM user associated with the service-specific credential. If this value is not specified, then the operation assumes the user whose credentials are used to call the operation.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2153    pub user_name: Option<String>,
2154}
2155
2156/// Serialize `DeleteServiceSpecificCredentialRequest` contents to a `SignedRequest`.
2157struct DeleteServiceSpecificCredentialRequestSerializer;
2158impl DeleteServiceSpecificCredentialRequestSerializer {
2159    fn serialize(params: &mut Params, name: &str, obj: &DeleteServiceSpecificCredentialRequest) {
2160        let mut prefix = name.to_string();
2161        if prefix != "" {
2162            prefix.push_str(".");
2163        }
2164
2165        params.put(
2166            &format!("{}{}", prefix, "ServiceSpecificCredentialId"),
2167            &obj.service_specific_credential_id,
2168        );
2169        if let Some(ref field_value) = obj.user_name {
2170            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
2171        }
2172    }
2173}
2174
2175#[derive(Clone, Debug, Default, PartialEq)]
2176#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2177pub struct DeleteSigningCertificateRequest {
2178    /// <p>The ID of the signing certificate to delete.</p> <p>The format of this parameter, as described by its <a href="http://wikipedia.org/wiki/regex">regex</a> pattern, is a string of characters that can be upper- or lower-cased letters or digits.</p>
2179    pub certificate_id: String,
2180    /// <p>The name of the user the signing certificate belongs to.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2181    pub user_name: Option<String>,
2182}
2183
2184/// Serialize `DeleteSigningCertificateRequest` contents to a `SignedRequest`.
2185struct DeleteSigningCertificateRequestSerializer;
2186impl DeleteSigningCertificateRequestSerializer {
2187    fn serialize(params: &mut Params, name: &str, obj: &DeleteSigningCertificateRequest) {
2188        let mut prefix = name.to_string();
2189        if prefix != "" {
2190            prefix.push_str(".");
2191        }
2192
2193        params.put(
2194            &format!("{}{}", prefix, "CertificateId"),
2195            &obj.certificate_id,
2196        );
2197        if let Some(ref field_value) = obj.user_name {
2198            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
2199        }
2200    }
2201}
2202
2203#[derive(Clone, Debug, Default, PartialEq)]
2204#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2205pub struct DeleteUserPermissionsBoundaryRequest {
2206    /// <p>The name (friendly name, not ARN) of the IAM user from which you want to remove the permissions boundary.</p>
2207    pub user_name: String,
2208}
2209
2210/// Serialize `DeleteUserPermissionsBoundaryRequest` contents to a `SignedRequest`.
2211struct DeleteUserPermissionsBoundaryRequestSerializer;
2212impl DeleteUserPermissionsBoundaryRequestSerializer {
2213    fn serialize(params: &mut Params, name: &str, obj: &DeleteUserPermissionsBoundaryRequest) {
2214        let mut prefix = name.to_string();
2215        if prefix != "" {
2216            prefix.push_str(".");
2217        }
2218
2219        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
2220    }
2221}
2222
2223#[derive(Clone, Debug, Default, PartialEq)]
2224#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2225pub struct DeleteUserPolicyRequest {
2226    /// <p>The name identifying the policy document to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2227    pub policy_name: String,
2228    /// <p>The name (friendly name, not ARN) identifying the user that the policy is embedded in.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2229    pub user_name: String,
2230}
2231
2232/// Serialize `DeleteUserPolicyRequest` contents to a `SignedRequest`.
2233struct DeleteUserPolicyRequestSerializer;
2234impl DeleteUserPolicyRequestSerializer {
2235    fn serialize(params: &mut Params, name: &str, obj: &DeleteUserPolicyRequest) {
2236        let mut prefix = name.to_string();
2237        if prefix != "" {
2238            prefix.push_str(".");
2239        }
2240
2241        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
2242        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
2243    }
2244}
2245
2246#[derive(Clone, Debug, Default, PartialEq)]
2247#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2248pub struct DeleteUserRequest {
2249    /// <p>The name of the user to delete.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2250    pub user_name: String,
2251}
2252
2253/// Serialize `DeleteUserRequest` contents to a `SignedRequest`.
2254struct DeleteUserRequestSerializer;
2255impl DeleteUserRequestSerializer {
2256    fn serialize(params: &mut Params, name: &str, obj: &DeleteUserRequest) {
2257        let mut prefix = name.to_string();
2258        if prefix != "" {
2259            prefix.push_str(".");
2260        }
2261
2262        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
2263    }
2264}
2265
2266#[derive(Clone, Debug, Default, PartialEq)]
2267#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2268pub struct DeleteVirtualMFADeviceRequest {
2269    /// <p>The serial number that uniquely identifies the MFA device. For virtual MFA devices, the serial number is the same as the ARN.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@:/-</p>
2270    pub serial_number: String,
2271}
2272
2273/// Serialize `DeleteVirtualMFADeviceRequest` contents to a `SignedRequest`.
2274struct DeleteVirtualMFADeviceRequestSerializer;
2275impl DeleteVirtualMFADeviceRequestSerializer {
2276    fn serialize(params: &mut Params, name: &str, obj: &DeleteVirtualMFADeviceRequest) {
2277        let mut prefix = name.to_string();
2278        if prefix != "" {
2279            prefix.push_str(".");
2280        }
2281
2282        params.put(&format!("{}{}", prefix, "SerialNumber"), &obj.serial_number);
2283    }
2284}
2285
2286/// <p>The reason that the service-linked role deletion failed.</p> <p>This data type is used as a response element in the <a>GetServiceLinkedRoleDeletionStatus</a> operation.</p>
2287#[derive(Clone, Debug, Default, PartialEq)]
2288#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2289pub struct DeletionTaskFailureReasonType {
2290    /// <p>A short description of the reason that the service-linked role deletion failed.</p>
2291    pub reason: Option<String>,
2292    /// <p>A list of objects that contains details about the service-linked role deletion failure, if that information is returned by the service. If the service-linked role has active sessions or if any resources that were used by the role have not been deleted from the linked service, the role can't be deleted. This parameter includes a list of the resources that are associated with the role and the Region in which the resources are being used.</p>
2293    pub role_usage_list: Option<Vec<RoleUsageType>>,
2294}
2295
2296#[allow(dead_code)]
2297struct DeletionTaskFailureReasonTypeDeserializer;
2298impl DeletionTaskFailureReasonTypeDeserializer {
2299    #[allow(dead_code, unused_variables)]
2300    fn deserialize<T: Peek + Next>(
2301        tag_name: &str,
2302        stack: &mut T,
2303    ) -> Result<DeletionTaskFailureReasonType, XmlParseError> {
2304        deserialize_elements::<_, DeletionTaskFailureReasonType, _>(
2305            tag_name,
2306            stack,
2307            |name, stack, obj| {
2308                match name {
2309                    "Reason" => {
2310                        obj.reason = Some(ReasonTypeDeserializer::deserialize("Reason", stack)?);
2311                    }
2312                    "RoleUsageList" => {
2313                        obj.role_usage_list.get_or_insert(vec![]).extend(
2314                            RoleUsageListTypeDeserializer::deserialize("RoleUsageList", stack)?,
2315                        );
2316                    }
2317                    _ => skip_tree(stack),
2318                }
2319                Ok(())
2320            },
2321        )
2322    }
2323}
2324#[allow(dead_code)]
2325struct DeletionTaskIdTypeDeserializer;
2326impl DeletionTaskIdTypeDeserializer {
2327    #[allow(dead_code, unused_variables)]
2328    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
2329        xml_util::deserialize_primitive(tag_name, stack, Ok)
2330    }
2331}
2332#[allow(dead_code)]
2333struct DeletionTaskStatusTypeDeserializer;
2334impl DeletionTaskStatusTypeDeserializer {
2335    #[allow(dead_code, unused_variables)]
2336    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
2337        xml_util::deserialize_primitive(tag_name, stack, Ok)
2338    }
2339}
2340#[derive(Clone, Debug, Default, PartialEq)]
2341#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2342pub struct DetachGroupPolicyRequest {
2343    /// <p>The name (friendly name, not ARN) of the IAM group to detach the policy from.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2344    pub group_name: String,
2345    /// <p>The Amazon Resource Name (ARN) of the IAM policy you want to detach.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
2346    pub policy_arn: String,
2347}
2348
2349/// Serialize `DetachGroupPolicyRequest` contents to a `SignedRequest`.
2350struct DetachGroupPolicyRequestSerializer;
2351impl DetachGroupPolicyRequestSerializer {
2352    fn serialize(params: &mut Params, name: &str, obj: &DetachGroupPolicyRequest) {
2353        let mut prefix = name.to_string();
2354        if prefix != "" {
2355            prefix.push_str(".");
2356        }
2357
2358        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
2359        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
2360    }
2361}
2362
2363#[derive(Clone, Debug, Default, PartialEq)]
2364#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2365pub struct DetachRolePolicyRequest {
2366    /// <p>The Amazon Resource Name (ARN) of the IAM policy you want to detach.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
2367    pub policy_arn: String,
2368    /// <p>The name (friendly name, not ARN) of the IAM role to detach the policy from.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2369    pub role_name: String,
2370}
2371
2372/// Serialize `DetachRolePolicyRequest` contents to a `SignedRequest`.
2373struct DetachRolePolicyRequestSerializer;
2374impl DetachRolePolicyRequestSerializer {
2375    fn serialize(params: &mut Params, name: &str, obj: &DetachRolePolicyRequest) {
2376        let mut prefix = name.to_string();
2377        if prefix != "" {
2378            prefix.push_str(".");
2379        }
2380
2381        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
2382        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
2383    }
2384}
2385
2386#[derive(Clone, Debug, Default, PartialEq)]
2387#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2388pub struct DetachUserPolicyRequest {
2389    /// <p>The Amazon Resource Name (ARN) of the IAM policy you want to detach.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
2390    pub policy_arn: String,
2391    /// <p>The name (friendly name, not ARN) of the IAM user to detach the policy from.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2392    pub user_name: String,
2393}
2394
2395/// Serialize `DetachUserPolicyRequest` contents to a `SignedRequest`.
2396struct DetachUserPolicyRequestSerializer;
2397impl DetachUserPolicyRequestSerializer {
2398    fn serialize(params: &mut Params, name: &str, obj: &DetachUserPolicyRequest) {
2399        let mut prefix = name.to_string();
2400        if prefix != "" {
2401            prefix.push_str(".");
2402        }
2403
2404        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
2405        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
2406    }
2407}
2408
2409#[derive(Clone, Debug, Default, PartialEq)]
2410#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2411pub struct EnableMFADeviceRequest {
2412    /// <p><p>An authentication code emitted by the device. </p> <p>The format for this parameter is a string of six digits.</p> <important> <p>Submit your request immediately after generating the authentication codes. If you generate the codes and then wait too long to submit the request, the MFA device successfully associates with the user but the MFA device becomes out of sync. This happens because time-based one-time passwords (TOTP) expire after a short period of time. If this happens, you can <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_sync.html">resync the device</a>.</p> </important></p>
2413    pub authentication_code_1: String,
2414    /// <p><p>A subsequent authentication code emitted by the device.</p> <p>The format for this parameter is a string of six digits.</p> <important> <p>Submit your request immediately after generating the authentication codes. If you generate the codes and then wait too long to submit the request, the MFA device successfully associates with the user but the MFA device becomes out of sync. This happens because time-based one-time passwords (TOTP) expire after a short period of time. If this happens, you can <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_sync.html">resync the device</a>.</p> </important></p>
2415    pub authentication_code_2: String,
2416    /// <p>The serial number that uniquely identifies the MFA device. For virtual MFA devices, the serial number is the device ARN.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@:/-</p>
2417    pub serial_number: String,
2418    /// <p>The name of the IAM user for whom you want to enable the MFA device.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
2419    pub user_name: String,
2420}
2421
2422/// Serialize `EnableMFADeviceRequest` contents to a `SignedRequest`.
2423struct EnableMFADeviceRequestSerializer;
2424impl EnableMFADeviceRequestSerializer {
2425    fn serialize(params: &mut Params, name: &str, obj: &EnableMFADeviceRequest) {
2426        let mut prefix = name.to_string();
2427        if prefix != "" {
2428            prefix.push_str(".");
2429        }
2430
2431        params.put(
2432            &format!("{}{}", prefix, "AuthenticationCode1"),
2433            &obj.authentication_code_1,
2434        );
2435        params.put(
2436            &format!("{}{}", prefix, "AuthenticationCode2"),
2437            &obj.authentication_code_2,
2438        );
2439        params.put(&format!("{}{}", prefix, "SerialNumber"), &obj.serial_number);
2440        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
2441    }
2442}
2443
2444/// <p>An object that contains details about when the IAM entities (users or roles) were last used in an attempt to access the specified AWS service.</p> <p>This data type is a response element in the <a>GetServiceLastAccessedDetailsWithEntities</a> operation.</p>
2445#[derive(Clone, Debug, Default, PartialEq)]
2446#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2447pub struct EntityDetails {
2448    /// <p>The <code>EntityInfo</code> object that contains details about the entity (user or role).</p>
2449    pub entity_info: EntityInfo,
2450    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the authenticated entity last attempted to access AWS. AWS does not report unauthenticated requests.</p> <p>This field is null if no IAM entities attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
2451    pub last_authenticated: Option<String>,
2452}
2453
2454#[allow(dead_code)]
2455struct EntityDetailsDeserializer;
2456impl EntityDetailsDeserializer {
2457    #[allow(dead_code, unused_variables)]
2458    fn deserialize<T: Peek + Next>(
2459        tag_name: &str,
2460        stack: &mut T,
2461    ) -> Result<EntityDetails, XmlParseError> {
2462        deserialize_elements::<_, EntityDetails, _>(tag_name, stack, |name, stack, obj| {
2463            match name {
2464                "EntityInfo" => {
2465                    obj.entity_info = EntityInfoDeserializer::deserialize("EntityInfo", stack)?;
2466                }
2467                "LastAuthenticated" => {
2468                    obj.last_authenticated = Some(DateTypeDeserializer::deserialize(
2469                        "LastAuthenticated",
2470                        stack,
2471                    )?);
2472                }
2473                _ => skip_tree(stack),
2474            }
2475            Ok(())
2476        })
2477    }
2478}
2479#[allow(dead_code)]
2480struct EntityDetailsListTypeDeserializer;
2481impl EntityDetailsListTypeDeserializer {
2482    #[allow(dead_code, unused_variables)]
2483    fn deserialize<T: Peek + Next>(
2484        tag_name: &str,
2485        stack: &mut T,
2486    ) -> Result<Vec<EntityDetails>, XmlParseError> {
2487        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
2488            if name == "member" {
2489                obj.push(EntityDetailsDeserializer::deserialize("member", stack)?);
2490            } else {
2491                skip_tree(stack);
2492            }
2493            Ok(())
2494        })
2495    }
2496}
2497/// <p>Contains details about the specified entity (user or role).</p> <p>This data type is an element of the <a>EntityDetails</a> object.</p>
2498#[derive(Clone, Debug, Default, PartialEq)]
2499#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2500pub struct EntityInfo {
2501    pub arn: String,
2502    /// <p>The identifier of the entity (user or role).</p>
2503    pub id: String,
2504    /// <p>The name of the entity (user or role).</p>
2505    pub name: String,
2506    /// <p>The path to the entity (user or role). For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
2507    pub path: Option<String>,
2508    /// <p>The type of entity (user or role).</p>
2509    pub type_: String,
2510}
2511
2512#[allow(dead_code)]
2513struct EntityInfoDeserializer;
2514impl EntityInfoDeserializer {
2515    #[allow(dead_code, unused_variables)]
2516    fn deserialize<T: Peek + Next>(
2517        tag_name: &str,
2518        stack: &mut T,
2519    ) -> Result<EntityInfo, XmlParseError> {
2520        deserialize_elements::<_, EntityInfo, _>(tag_name, stack, |name, stack, obj| {
2521            match name {
2522                "Arn" => {
2523                    obj.arn = ArnTypeDeserializer::deserialize("Arn", stack)?;
2524                }
2525                "Id" => {
2526                    obj.id = IdTypeDeserializer::deserialize("Id", stack)?;
2527                }
2528                "Name" => {
2529                    obj.name = UserNameTypeDeserializer::deserialize("Name", stack)?;
2530                }
2531                "Path" => {
2532                    obj.path = Some(PathTypeDeserializer::deserialize("Path", stack)?);
2533                }
2534                "Type" => {
2535                    obj.type_ = PolicyOwnerEntityTypeDeserializer::deserialize("Type", stack)?;
2536                }
2537                _ => skip_tree(stack),
2538            }
2539            Ok(())
2540        })
2541    }
2542}
2543
2544/// Serialize `EntityListType` contents to a `SignedRequest`.
2545struct EntityListTypeSerializer;
2546impl EntityListTypeSerializer {
2547    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
2548        for (index, obj) in obj.iter().enumerate() {
2549            let key = format!("{}.member.{}", name, index + 1);
2550            params.put(&key, &obj);
2551        }
2552    }
2553}
2554
2555#[allow(dead_code)]
2556struct EntityNameTypeDeserializer;
2557impl EntityNameTypeDeserializer {
2558    #[allow(dead_code, unused_variables)]
2559    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
2560        xml_util::deserialize_primitive(tag_name, stack, Ok)
2561    }
2562}
2563/// <p>Contains information about the reason that the operation failed.</p> <p>This data type is used as a response element in the <a>GetOrganizationsAccessReport</a>, <a>GetServiceLastAccessedDetails</a>, and <a>GetServiceLastAccessedDetailsWithEntities</a> operations.</p>
2564#[derive(Clone, Debug, Default, PartialEq)]
2565#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2566pub struct ErrorDetails {
2567    /// <p>The error code associated with the operation failure.</p>
2568    pub code: String,
2569    /// <p>Detailed information about the reason that the operation failed.</p>
2570    pub message: String,
2571}
2572
2573#[allow(dead_code)]
2574struct ErrorDetailsDeserializer;
2575impl ErrorDetailsDeserializer {
2576    #[allow(dead_code, unused_variables)]
2577    fn deserialize<T: Peek + Next>(
2578        tag_name: &str,
2579        stack: &mut T,
2580    ) -> Result<ErrorDetails, XmlParseError> {
2581        deserialize_elements::<_, ErrorDetails, _>(tag_name, stack, |name, stack, obj| {
2582            match name {
2583                "Code" => {
2584                    obj.code = StringTypeDeserializer::deserialize("Code", stack)?;
2585                }
2586                "Message" => {
2587                    obj.message = StringTypeDeserializer::deserialize("Message", stack)?;
2588                }
2589                _ => skip_tree(stack),
2590            }
2591            Ok(())
2592        })
2593    }
2594}
2595#[allow(dead_code)]
2596struct EvalDecisionDetailsTypeDeserializer;
2597impl EvalDecisionDetailsTypeDeserializer {
2598    #[allow(dead_code, unused_variables)]
2599    fn deserialize<T: Peek + Next>(
2600        tag_name: &str,
2601        stack: &mut T,
2602    ) -> Result<::std::collections::HashMap<String, String>, XmlParseError> {
2603        xml_util::start_element(tag_name, stack)?;
2604
2605        let mut obj = ::std::collections::HashMap::new();
2606
2607        while xml_util::peek_at_name(stack)? == "entry" {
2608            xml_util::start_element("entry", stack)?;
2609            let key = EvalDecisionSourceTypeDeserializer::deserialize("key", stack)?;
2610            let value = PolicyEvaluationDecisionTypeDeserializer::deserialize("value", stack)?;
2611            obj.insert(key, value);
2612            xml_util::end_element("entry", stack)?;
2613        }
2614
2615        xml_util::end_element(tag_name, stack)?;
2616        Ok(obj)
2617    }
2618}
2619#[allow(dead_code)]
2620struct EvalDecisionSourceTypeDeserializer;
2621impl EvalDecisionSourceTypeDeserializer {
2622    #[allow(dead_code, unused_variables)]
2623    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
2624        xml_util::deserialize_primitive(tag_name, stack, Ok)
2625    }
2626}
2627/// <p>Contains the results of a simulation.</p> <p>This data type is used by the return parameter of <code> <a>SimulateCustomPolicy</a> </code> and <code> <a>SimulatePrincipalPolicy</a> </code>.</p>
2628#[derive(Clone, Debug, Default, PartialEq)]
2629#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2630pub struct EvaluationResult {
2631    /// <p>The name of the API operation tested on the indicated resource.</p>
2632    pub eval_action_name: String,
2633    /// <p>The result of the simulation.</p>
2634    pub eval_decision: String,
2635    /// <p>Additional details about the results of the cross-account evaluation decision. This parameter is populated for only cross-account simulations. It contains a brief summary of how each policy type contributes to the final evaluation decision.</p> <p>If the simulation evaluates policies within the same account and includes a resource ARN, then the parameter is present but the response is empty. If the simulation evaluates policies within the same account and specifies all resources (<code>*</code>), then the parameter is not returned.</p> <p>When you make a cross-account request, AWS evaluates the request in the trusting account and the trusted account. The request is allowed only if both evaluations return <code>true</code>. For more information about how policies are evaluated, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies within a single account</a>.</p> <p>If an AWS Organizations SCP included in the evaluation denies access, the simulation ends. In this case, policy evaluation does not proceed any further and this parameter is not returned.</p>
2636    pub eval_decision_details: Option<::std::collections::HashMap<String, String>>,
2637    /// <p>The ARN of the resource that the indicated API operation was tested on.</p>
2638    pub eval_resource_name: Option<String>,
2639    /// <p>A list of the statements in the input policies that determine the result for this scenario. Remember that even if multiple statements allow the operation on the resource, if only one statement denies that operation, then the explicit deny overrides any allow. In addition, the deny statement is the only entry included in the result.</p>
2640    pub matched_statements: Option<Vec<Statement>>,
2641    /// <p>A list of context keys that are required by the included input policies but that were not provided by one of the input parameters. This list is used when the resource in a simulation is "*", either explicitly, or when the <code>ResourceArns</code> parameter blank. If you include a list of resources, then any missing context values are instead included under the <code>ResourceSpecificResults</code> section. To discover the context keys used by a set of policies, you can call <a>GetContextKeysForCustomPolicy</a> or <a>GetContextKeysForPrincipalPolicy</a>.</p>
2642    pub missing_context_values: Option<Vec<String>>,
2643    /// <p>A structure that details how Organizations and its service control policies affect the results of the simulation. Only applies if the simulated user's account is part of an organization.</p>
2644    pub organizations_decision_detail: Option<OrganizationsDecisionDetail>,
2645    /// <p>Contains information about the effect that a permissions boundary has on a policy simulation when the boundary is applied to an IAM entity.</p>
2646    pub permissions_boundary_decision_detail: Option<PermissionsBoundaryDecisionDetail>,
2647    /// <p>The individual results of the simulation of the API operation specified in EvalActionName on each resource.</p>
2648    pub resource_specific_results: Option<Vec<ResourceSpecificResult>>,
2649}
2650
2651#[allow(dead_code)]
2652struct EvaluationResultDeserializer;
2653impl EvaluationResultDeserializer {
2654    #[allow(dead_code, unused_variables)]
2655    fn deserialize<T: Peek + Next>(
2656        tag_name: &str,
2657        stack: &mut T,
2658    ) -> Result<EvaluationResult, XmlParseError> {
2659        deserialize_elements::<_, EvaluationResult, _>(tag_name, stack, |name, stack, obj| {
2660            match name {
2661                "EvalActionName" => {
2662                    obj.eval_action_name =
2663                        ActionNameTypeDeserializer::deserialize("EvalActionName", stack)?;
2664                }
2665                "EvalDecision" => {
2666                    obj.eval_decision = PolicyEvaluationDecisionTypeDeserializer::deserialize(
2667                        "EvalDecision",
2668                        stack,
2669                    )?;
2670                }
2671                "EvalDecisionDetails" => {
2672                    obj.eval_decision_details =
2673                        Some(EvalDecisionDetailsTypeDeserializer::deserialize(
2674                            "EvalDecisionDetails",
2675                            stack,
2676                        )?);
2677                }
2678                "EvalResourceName" => {
2679                    obj.eval_resource_name = Some(ResourceNameTypeDeserializer::deserialize(
2680                        "EvalResourceName",
2681                        stack,
2682                    )?);
2683                }
2684                "MatchedStatements" => {
2685                    obj.matched_statements.get_or_insert(vec![]).extend(
2686                        StatementListTypeDeserializer::deserialize("MatchedStatements", stack)?,
2687                    );
2688                }
2689                "MissingContextValues" => {
2690                    obj.missing_context_values.get_or_insert(vec![]).extend(
2691                        ContextKeyNamesResultListTypeDeserializer::deserialize(
2692                            "MissingContextValues",
2693                            stack,
2694                        )?,
2695                    );
2696                }
2697                "OrganizationsDecisionDetail" => {
2698                    obj.organizations_decision_detail =
2699                        Some(OrganizationsDecisionDetailDeserializer::deserialize(
2700                            "OrganizationsDecisionDetail",
2701                            stack,
2702                        )?);
2703                }
2704                "PermissionsBoundaryDecisionDetail" => {
2705                    obj.permissions_boundary_decision_detail =
2706                        Some(PermissionsBoundaryDecisionDetailDeserializer::deserialize(
2707                            "PermissionsBoundaryDecisionDetail",
2708                            stack,
2709                        )?);
2710                }
2711                "ResourceSpecificResults" => {
2712                    obj.resource_specific_results.get_or_insert(vec![]).extend(
2713                        ResourceSpecificResultListTypeDeserializer::deserialize(
2714                            "ResourceSpecificResults",
2715                            stack,
2716                        )?,
2717                    );
2718                }
2719                _ => skip_tree(stack),
2720            }
2721            Ok(())
2722        })
2723    }
2724}
2725#[allow(dead_code)]
2726struct EvaluationResultsListTypeDeserializer;
2727impl EvaluationResultsListTypeDeserializer {
2728    #[allow(dead_code, unused_variables)]
2729    fn deserialize<T: Peek + Next>(
2730        tag_name: &str,
2731        stack: &mut T,
2732    ) -> Result<Vec<EvaluationResult>, XmlParseError> {
2733        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
2734            if name == "member" {
2735                obj.push(EvaluationResultDeserializer::deserialize("member", stack)?);
2736            } else {
2737                skip_tree(stack);
2738            }
2739            Ok(())
2740        })
2741    }
2742}
2743#[allow(dead_code)]
2744struct ExistingUserNameTypeDeserializer;
2745impl ExistingUserNameTypeDeserializer {
2746    #[allow(dead_code, unused_variables)]
2747    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
2748        xml_util::deserialize_primitive(tag_name, stack, Ok)
2749    }
2750}
2751/// <p>Contains the response to a successful <a>GenerateCredentialReport</a> request. </p>
2752#[derive(Clone, Debug, Default, PartialEq)]
2753#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2754pub struct GenerateCredentialReportResponse {
2755    /// <p>Information about the credential report.</p>
2756    pub description: Option<String>,
2757    /// <p>Information about the state of the credential report.</p>
2758    pub state: Option<String>,
2759}
2760
2761#[allow(dead_code)]
2762struct GenerateCredentialReportResponseDeserializer;
2763impl GenerateCredentialReportResponseDeserializer {
2764    #[allow(dead_code, unused_variables)]
2765    fn deserialize<T: Peek + Next>(
2766        tag_name: &str,
2767        stack: &mut T,
2768    ) -> Result<GenerateCredentialReportResponse, XmlParseError> {
2769        deserialize_elements::<_, GenerateCredentialReportResponse, _>(
2770            tag_name,
2771            stack,
2772            |name, stack, obj| {
2773                match name {
2774                    "Description" => {
2775                        obj.description =
2776                            Some(ReportStateDescriptionTypeDeserializer::deserialize(
2777                                "Description",
2778                                stack,
2779                            )?);
2780                    }
2781                    "State" => {
2782                        obj.state = Some(ReportStateTypeDeserializer::deserialize("State", stack)?);
2783                    }
2784                    _ => skip_tree(stack),
2785                }
2786                Ok(())
2787            },
2788        )
2789    }
2790}
2791#[derive(Clone, Debug, Default, PartialEq)]
2792#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2793pub struct GenerateOrganizationsAccessReportRequest {
2794    /// <p>The path of the AWS Organizations entity (root, OU, or account). You can build an entity path using the known structure of your organization. For example, assume that your account ID is <code>123456789012</code> and its parent OU ID is <code>ou-rge0-awsabcde</code>. The organization root ID is <code>r-f6g7h8i9j0example</code> and your organization ID is <code>o-a1b2c3d4e5</code>. Your entity path is <code>o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-rge0-awsabcde/123456789012</code>.</p>
2795    pub entity_path: String,
2796    /// <p>The identifier of the AWS Organizations service control policy (SCP). This parameter is optional.</p> <p>This ID is used to generate information about when an account principal that is limited by the SCP attempted to access an AWS service.</p>
2797    pub organizations_policy_id: Option<String>,
2798}
2799
2800/// Serialize `GenerateOrganizationsAccessReportRequest` contents to a `SignedRequest`.
2801struct GenerateOrganizationsAccessReportRequestSerializer;
2802impl GenerateOrganizationsAccessReportRequestSerializer {
2803    fn serialize(params: &mut Params, name: &str, obj: &GenerateOrganizationsAccessReportRequest) {
2804        let mut prefix = name.to_string();
2805        if prefix != "" {
2806            prefix.push_str(".");
2807        }
2808
2809        params.put(&format!("{}{}", prefix, "EntityPath"), &obj.entity_path);
2810        if let Some(ref field_value) = obj.organizations_policy_id {
2811            params.put(
2812                &format!("{}{}", prefix, "OrganizationsPolicyId"),
2813                &field_value,
2814            );
2815        }
2816    }
2817}
2818
2819#[derive(Clone, Debug, Default, PartialEq)]
2820#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2821pub struct GenerateOrganizationsAccessReportResponse {
2822    /// <p>The job identifier that you can use in the <a>GetOrganizationsAccessReport</a> operation.</p>
2823    pub job_id: Option<String>,
2824}
2825
2826#[allow(dead_code)]
2827struct GenerateOrganizationsAccessReportResponseDeserializer;
2828impl GenerateOrganizationsAccessReportResponseDeserializer {
2829    #[allow(dead_code, unused_variables)]
2830    fn deserialize<T: Peek + Next>(
2831        tag_name: &str,
2832        stack: &mut T,
2833    ) -> Result<GenerateOrganizationsAccessReportResponse, XmlParseError> {
2834        deserialize_elements::<_, GenerateOrganizationsAccessReportResponse, _>(
2835            tag_name,
2836            stack,
2837            |name, stack, obj| {
2838                match name {
2839                    "JobId" => {
2840                        obj.job_id = Some(JobIDTypeDeserializer::deserialize("JobId", stack)?);
2841                    }
2842                    _ => skip_tree(stack),
2843                }
2844                Ok(())
2845            },
2846        )
2847    }
2848}
2849#[derive(Clone, Debug, Default, PartialEq)]
2850#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2851pub struct GenerateServiceLastAccessedDetailsRequest {
2852    /// <p>The ARN of the IAM resource (user, group, role, or managed policy) used to generate information about when the resource was last used in an attempt to access an AWS service.</p>
2853    pub arn: String,
2854    /// <p>The level of detail that you want to generate. You can specify whether you want to generate information about the last attempt to access services or actions. If you specify service-level granularity, this operation generates only service data. If you specify action-level granularity, it generates service and action data. If you don't include this optional parameter, the operation generates service data.</p>
2855    pub granularity: Option<String>,
2856}
2857
2858/// Serialize `GenerateServiceLastAccessedDetailsRequest` contents to a `SignedRequest`.
2859struct GenerateServiceLastAccessedDetailsRequestSerializer;
2860impl GenerateServiceLastAccessedDetailsRequestSerializer {
2861    fn serialize(params: &mut Params, name: &str, obj: &GenerateServiceLastAccessedDetailsRequest) {
2862        let mut prefix = name.to_string();
2863        if prefix != "" {
2864            prefix.push_str(".");
2865        }
2866
2867        params.put(&format!("{}{}", prefix, "Arn"), &obj.arn);
2868        if let Some(ref field_value) = obj.granularity {
2869            params.put(&format!("{}{}", prefix, "Granularity"), &field_value);
2870        }
2871    }
2872}
2873
2874#[derive(Clone, Debug, Default, PartialEq)]
2875#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2876pub struct GenerateServiceLastAccessedDetailsResponse {
2877    /// <p>The <code>JobId</code> that you can use in the <a>GetServiceLastAccessedDetails</a> or <a>GetServiceLastAccessedDetailsWithEntities</a> operations. The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p>
2878    pub job_id: Option<String>,
2879}
2880
2881#[allow(dead_code)]
2882struct GenerateServiceLastAccessedDetailsResponseDeserializer;
2883impl GenerateServiceLastAccessedDetailsResponseDeserializer {
2884    #[allow(dead_code, unused_variables)]
2885    fn deserialize<T: Peek + Next>(
2886        tag_name: &str,
2887        stack: &mut T,
2888    ) -> Result<GenerateServiceLastAccessedDetailsResponse, XmlParseError> {
2889        deserialize_elements::<_, GenerateServiceLastAccessedDetailsResponse, _>(
2890            tag_name,
2891            stack,
2892            |name, stack, obj| {
2893                match name {
2894                    "JobId" => {
2895                        obj.job_id = Some(JobIDTypeDeserializer::deserialize("JobId", stack)?);
2896                    }
2897                    _ => skip_tree(stack),
2898                }
2899                Ok(())
2900            },
2901        )
2902    }
2903}
2904#[derive(Clone, Debug, Default, PartialEq)]
2905#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2906pub struct GetAccessKeyLastUsedRequest {
2907    /// <p>The identifier of an access key.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
2908    pub access_key_id: String,
2909}
2910
2911/// Serialize `GetAccessKeyLastUsedRequest` contents to a `SignedRequest`.
2912struct GetAccessKeyLastUsedRequestSerializer;
2913impl GetAccessKeyLastUsedRequestSerializer {
2914    fn serialize(params: &mut Params, name: &str, obj: &GetAccessKeyLastUsedRequest) {
2915        let mut prefix = name.to_string();
2916        if prefix != "" {
2917            prefix.push_str(".");
2918        }
2919
2920        params.put(&format!("{}{}", prefix, "AccessKeyId"), &obj.access_key_id);
2921    }
2922}
2923
2924/// <p>Contains the response to a successful <a>GetAccessKeyLastUsed</a> request. It is also returned as a member of the <a>AccessKeyMetaData</a> structure returned by the <a>ListAccessKeys</a> action.</p>
2925#[derive(Clone, Debug, Default, PartialEq)]
2926#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
2927pub struct GetAccessKeyLastUsedResponse {
2928    /// <p>Contains information about the last time the access key was used.</p>
2929    pub access_key_last_used: Option<AccessKeyLastUsed>,
2930    /// <p><p>The name of the AWS IAM user that owns this access key.</p> <p/></p>
2931    pub user_name: Option<String>,
2932}
2933
2934#[allow(dead_code)]
2935struct GetAccessKeyLastUsedResponseDeserializer;
2936impl GetAccessKeyLastUsedResponseDeserializer {
2937    #[allow(dead_code, unused_variables)]
2938    fn deserialize<T: Peek + Next>(
2939        tag_name: &str,
2940        stack: &mut T,
2941    ) -> Result<GetAccessKeyLastUsedResponse, XmlParseError> {
2942        deserialize_elements::<_, GetAccessKeyLastUsedResponse, _>(
2943            tag_name,
2944            stack,
2945            |name, stack, obj| {
2946                match name {
2947                    "AccessKeyLastUsed" => {
2948                        obj.access_key_last_used = Some(
2949                            AccessKeyLastUsedDeserializer::deserialize("AccessKeyLastUsed", stack)?,
2950                        );
2951                    }
2952                    "UserName" => {
2953                        obj.user_name = Some(ExistingUserNameTypeDeserializer::deserialize(
2954                            "UserName", stack,
2955                        )?);
2956                    }
2957                    _ => skip_tree(stack),
2958                }
2959                Ok(())
2960            },
2961        )
2962    }
2963}
2964#[derive(Clone, Debug, Default, PartialEq)]
2965#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2966pub struct GetAccountAuthorizationDetailsRequest {
2967    /// <p>A list of entity types used to filter the results. Only the entities that match the types you specify are included in the output. Use the value <code>LocalManagedPolicy</code> to include customer managed policies.</p> <p>The format for this parameter is a comma-separated (if more than one) list of strings. Each string value in the list must be one of the valid values listed below.</p>
2968    pub filter: Option<Vec<String>>,
2969    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
2970    pub marker: Option<String>,
2971    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
2972    pub max_items: Option<i64>,
2973}
2974
2975/// Serialize `GetAccountAuthorizationDetailsRequest` contents to a `SignedRequest`.
2976struct GetAccountAuthorizationDetailsRequestSerializer;
2977impl GetAccountAuthorizationDetailsRequestSerializer {
2978    fn serialize(params: &mut Params, name: &str, obj: &GetAccountAuthorizationDetailsRequest) {
2979        let mut prefix = name.to_string();
2980        if prefix != "" {
2981            prefix.push_str(".");
2982        }
2983
2984        if let Some(ref field_value) = obj.filter {
2985            EntityListTypeSerializer::serialize(
2986                params,
2987                &format!("{}{}", prefix, "Filter"),
2988                field_value,
2989            );
2990        }
2991        if let Some(ref field_value) = obj.marker {
2992            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
2993        }
2994        if let Some(ref field_value) = obj.max_items {
2995            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
2996        }
2997    }
2998}
2999
3000/// <p>Contains the response to a successful <a>GetAccountAuthorizationDetails</a> request. </p>
3001#[derive(Clone, Debug, Default, PartialEq)]
3002#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3003pub struct GetAccountAuthorizationDetailsResponse {
3004    /// <p>A list containing information about IAM groups.</p>
3005    pub group_detail_list: Option<Vec<GroupDetail>>,
3006    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
3007    pub is_truncated: Option<bool>,
3008    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
3009    pub marker: Option<String>,
3010    /// <p>A list containing information about managed policies.</p>
3011    pub policies: Option<Vec<ManagedPolicyDetail>>,
3012    /// <p>A list containing information about IAM roles.</p>
3013    pub role_detail_list: Option<Vec<RoleDetail>>,
3014    /// <p>A list containing information about IAM users.</p>
3015    pub user_detail_list: Option<Vec<UserDetail>>,
3016}
3017
3018#[allow(dead_code)]
3019struct GetAccountAuthorizationDetailsResponseDeserializer;
3020impl GetAccountAuthorizationDetailsResponseDeserializer {
3021    #[allow(dead_code, unused_variables)]
3022    fn deserialize<T: Peek + Next>(
3023        tag_name: &str,
3024        stack: &mut T,
3025    ) -> Result<GetAccountAuthorizationDetailsResponse, XmlParseError> {
3026        deserialize_elements::<_, GetAccountAuthorizationDetailsResponse, _>(
3027            tag_name,
3028            stack,
3029            |name, stack, obj| {
3030                match name {
3031                    "GroupDetailList" => {
3032                        obj.group_detail_list.get_or_insert(vec![]).extend(
3033                            GroupDetailListTypeDeserializer::deserialize("GroupDetailList", stack)?,
3034                        );
3035                    }
3036                    "IsTruncated" => {
3037                        obj.is_truncated =
3038                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
3039                    }
3040                    "Marker" => {
3041                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
3042                            "Marker", stack,
3043                        )?);
3044                    }
3045                    "Policies" => {
3046                        obj.policies.get_or_insert(vec![]).extend(
3047                            ManagedPolicyDetailListTypeDeserializer::deserialize(
3048                                "Policies", stack,
3049                            )?,
3050                        );
3051                    }
3052                    "RoleDetailList" => {
3053                        obj.role_detail_list.get_or_insert(vec![]).extend(
3054                            RoleDetailListTypeDeserializer::deserialize("RoleDetailList", stack)?,
3055                        );
3056                    }
3057                    "UserDetailList" => {
3058                        obj.user_detail_list.get_or_insert(vec![]).extend(
3059                            UserDetailListTypeDeserializer::deserialize("UserDetailList", stack)?,
3060                        );
3061                    }
3062                    _ => skip_tree(stack),
3063                }
3064                Ok(())
3065            },
3066        )
3067    }
3068}
3069/// <p>Contains the response to a successful <a>GetAccountPasswordPolicy</a> request. </p>
3070#[derive(Clone, Debug, Default, PartialEq)]
3071#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3072pub struct GetAccountPasswordPolicyResponse {
3073    /// <p>A structure that contains details about the account's password policy.</p>
3074    pub password_policy: PasswordPolicy,
3075}
3076
3077#[allow(dead_code)]
3078struct GetAccountPasswordPolicyResponseDeserializer;
3079impl GetAccountPasswordPolicyResponseDeserializer {
3080    #[allow(dead_code, unused_variables)]
3081    fn deserialize<T: Peek + Next>(
3082        tag_name: &str,
3083        stack: &mut T,
3084    ) -> Result<GetAccountPasswordPolicyResponse, XmlParseError> {
3085        deserialize_elements::<_, GetAccountPasswordPolicyResponse, _>(
3086            tag_name,
3087            stack,
3088            |name, stack, obj| {
3089                match name {
3090                    "PasswordPolicy" => {
3091                        obj.password_policy =
3092                            PasswordPolicyDeserializer::deserialize("PasswordPolicy", stack)?;
3093                    }
3094                    _ => skip_tree(stack),
3095                }
3096                Ok(())
3097            },
3098        )
3099    }
3100}
3101/// <p>Contains the response to a successful <a>GetAccountSummary</a> request. </p>
3102#[derive(Clone, Debug, Default, PartialEq)]
3103#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3104pub struct GetAccountSummaryResponse {
3105    /// <p>A set of key–value pairs containing information about IAM entity usage and IAM quotas.</p>
3106    pub summary_map: Option<::std::collections::HashMap<String, i64>>,
3107}
3108
3109#[allow(dead_code)]
3110struct GetAccountSummaryResponseDeserializer;
3111impl GetAccountSummaryResponseDeserializer {
3112    #[allow(dead_code, unused_variables)]
3113    fn deserialize<T: Peek + Next>(
3114        tag_name: &str,
3115        stack: &mut T,
3116    ) -> Result<GetAccountSummaryResponse, XmlParseError> {
3117        deserialize_elements::<_, GetAccountSummaryResponse, _>(
3118            tag_name,
3119            stack,
3120            |name, stack, obj| {
3121                match name {
3122                    "SummaryMap" => {
3123                        obj.summary_map = Some(SummaryMapTypeDeserializer::deserialize(
3124                            "SummaryMap",
3125                            stack,
3126                        )?);
3127                    }
3128                    _ => skip_tree(stack),
3129                }
3130                Ok(())
3131            },
3132        )
3133    }
3134}
3135#[derive(Clone, Debug, Default, PartialEq)]
3136#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3137pub struct GetContextKeysForCustomPolicyRequest {
3138    /// <p><p>A list of policies for which you want the list of context keys referenced in those policies. Each document is specified as a string containing the complete, valid JSON text of an IAM policy.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
3139    pub policy_input_list: Vec<String>,
3140}
3141
3142/// Serialize `GetContextKeysForCustomPolicyRequest` contents to a `SignedRequest`.
3143struct GetContextKeysForCustomPolicyRequestSerializer;
3144impl GetContextKeysForCustomPolicyRequestSerializer {
3145    fn serialize(params: &mut Params, name: &str, obj: &GetContextKeysForCustomPolicyRequest) {
3146        let mut prefix = name.to_string();
3147        if prefix != "" {
3148            prefix.push_str(".");
3149        }
3150
3151        SimulationPolicyListTypeSerializer::serialize(
3152            params,
3153            &format!("{}{}", prefix, "PolicyInputList"),
3154            &obj.policy_input_list,
3155        );
3156    }
3157}
3158
3159/// <p>Contains the response to a successful <a>GetContextKeysForPrincipalPolicy</a> or <a>GetContextKeysForCustomPolicy</a> request. </p>
3160#[derive(Clone, Debug, Default, PartialEq)]
3161#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3162pub struct GetContextKeysForPolicyResponse {
3163    /// <p>The list of context keys that are referenced in the input policies.</p>
3164    pub context_key_names: Option<Vec<String>>,
3165}
3166
3167#[allow(dead_code)]
3168struct GetContextKeysForPolicyResponseDeserializer;
3169impl GetContextKeysForPolicyResponseDeserializer {
3170    #[allow(dead_code, unused_variables)]
3171    fn deserialize<T: Peek + Next>(
3172        tag_name: &str,
3173        stack: &mut T,
3174    ) -> Result<GetContextKeysForPolicyResponse, XmlParseError> {
3175        deserialize_elements::<_, GetContextKeysForPolicyResponse, _>(
3176            tag_name,
3177            stack,
3178            |name, stack, obj| {
3179                match name {
3180                    "ContextKeyNames" => {
3181                        obj.context_key_names.get_or_insert(vec![]).extend(
3182                            ContextKeyNamesResultListTypeDeserializer::deserialize(
3183                                "ContextKeyNames",
3184                                stack,
3185                            )?,
3186                        );
3187                    }
3188                    _ => skip_tree(stack),
3189                }
3190                Ok(())
3191            },
3192        )
3193    }
3194}
3195#[derive(Clone, Debug, Default, PartialEq)]
3196#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3197pub struct GetContextKeysForPrincipalPolicyRequest {
3198    /// <p><p>An optional list of additional policies for which you want the list of context keys that are referenced.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
3199    pub policy_input_list: Option<Vec<String>>,
3200    /// <p>The ARN of a user, group, or role whose policies contain the context keys that you want listed. If you specify a user, the list includes context keys that are found in all policies that are attached to the user. The list also includes all groups that the user is a member of. If you pick a group or a role, then it includes only those context keys that are found in policies attached to that entity. Note that all parameters are shown in unencoded form here for clarity, but must be URL encoded to be included as a part of a real HTML request.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
3201    pub policy_source_arn: String,
3202}
3203
3204/// Serialize `GetContextKeysForPrincipalPolicyRequest` contents to a `SignedRequest`.
3205struct GetContextKeysForPrincipalPolicyRequestSerializer;
3206impl GetContextKeysForPrincipalPolicyRequestSerializer {
3207    fn serialize(params: &mut Params, name: &str, obj: &GetContextKeysForPrincipalPolicyRequest) {
3208        let mut prefix = name.to_string();
3209        if prefix != "" {
3210            prefix.push_str(".");
3211        }
3212
3213        if let Some(ref field_value) = obj.policy_input_list {
3214            SimulationPolicyListTypeSerializer::serialize(
3215                params,
3216                &format!("{}{}", prefix, "PolicyInputList"),
3217                field_value,
3218            );
3219        }
3220        params.put(
3221            &format!("{}{}", prefix, "PolicySourceArn"),
3222            &obj.policy_source_arn,
3223        );
3224    }
3225}
3226
3227/// <p>Contains the response to a successful <a>GetCredentialReport</a> request. </p>
3228#[derive(Clone, Debug, Default, PartialEq)]
3229#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3230pub struct GetCredentialReportResponse {
3231    /// <p>Contains the credential report. The report is Base64-encoded.</p>
3232    pub content: Option<bytes::Bytes>,
3233    /// <p> The date and time when the credential report was created, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>.</p>
3234    pub generated_time: Option<String>,
3235    /// <p>The format (MIME type) of the credential report.</p>
3236    pub report_format: Option<String>,
3237}
3238
3239#[allow(dead_code)]
3240struct GetCredentialReportResponseDeserializer;
3241impl GetCredentialReportResponseDeserializer {
3242    #[allow(dead_code, unused_variables)]
3243    fn deserialize<T: Peek + Next>(
3244        tag_name: &str,
3245        stack: &mut T,
3246    ) -> Result<GetCredentialReportResponse, XmlParseError> {
3247        deserialize_elements::<_, GetCredentialReportResponse, _>(
3248            tag_name,
3249            stack,
3250            |name, stack, obj| {
3251                match name {
3252                    "Content" => {
3253                        obj.content = Some(ReportContentTypeDeserializer::deserialize(
3254                            "Content", stack,
3255                        )?);
3256                    }
3257                    "GeneratedTime" => {
3258                        obj.generated_time =
3259                            Some(DateTypeDeserializer::deserialize("GeneratedTime", stack)?);
3260                    }
3261                    "ReportFormat" => {
3262                        obj.report_format = Some(ReportFormatTypeDeserializer::deserialize(
3263                            "ReportFormat",
3264                            stack,
3265                        )?);
3266                    }
3267                    _ => skip_tree(stack),
3268                }
3269                Ok(())
3270            },
3271        )
3272    }
3273}
3274#[derive(Clone, Debug, Default, PartialEq)]
3275#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3276pub struct GetGroupPolicyRequest {
3277    /// <p>The name of the group the policy is associated with.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
3278    pub group_name: String,
3279    /// <p>The name of the policy document to get.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
3280    pub policy_name: String,
3281}
3282
3283/// Serialize `GetGroupPolicyRequest` contents to a `SignedRequest`.
3284struct GetGroupPolicyRequestSerializer;
3285impl GetGroupPolicyRequestSerializer {
3286    fn serialize(params: &mut Params, name: &str, obj: &GetGroupPolicyRequest) {
3287        let mut prefix = name.to_string();
3288        if prefix != "" {
3289            prefix.push_str(".");
3290        }
3291
3292        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
3293        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
3294    }
3295}
3296
3297/// <p>Contains the response to a successful <a>GetGroupPolicy</a> request. </p>
3298#[derive(Clone, Debug, Default, PartialEq)]
3299#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3300pub struct GetGroupPolicyResponse {
3301    /// <p>The group the policy is associated with.</p>
3302    pub group_name: String,
3303    /// <p>The policy document.</p> <p>IAM stores policies in JSON format. However, resources that were created using AWS CloudFormation templates can be formatted in YAML. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p>
3304    pub policy_document: String,
3305    /// <p>The name of the policy.</p>
3306    pub policy_name: String,
3307}
3308
3309#[allow(dead_code)]
3310struct GetGroupPolicyResponseDeserializer;
3311impl GetGroupPolicyResponseDeserializer {
3312    #[allow(dead_code, unused_variables)]
3313    fn deserialize<T: Peek + Next>(
3314        tag_name: &str,
3315        stack: &mut T,
3316    ) -> Result<GetGroupPolicyResponse, XmlParseError> {
3317        deserialize_elements::<_, GetGroupPolicyResponse, _>(tag_name, stack, |name, stack, obj| {
3318            match name {
3319                "GroupName" => {
3320                    obj.group_name = GroupNameTypeDeserializer::deserialize("GroupName", stack)?;
3321                }
3322                "PolicyDocument" => {
3323                    obj.policy_document =
3324                        PolicyDocumentTypeDeserializer::deserialize("PolicyDocument", stack)?;
3325                }
3326                "PolicyName" => {
3327                    obj.policy_name = PolicyNameTypeDeserializer::deserialize("PolicyName", stack)?;
3328                }
3329                _ => skip_tree(stack),
3330            }
3331            Ok(())
3332        })
3333    }
3334}
3335#[derive(Clone, Debug, Default, PartialEq)]
3336#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3337pub struct GetGroupRequest {
3338    /// <p>The name of the group.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
3339    pub group_name: String,
3340    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
3341    pub marker: Option<String>,
3342    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
3343    pub max_items: Option<i64>,
3344}
3345
3346/// Serialize `GetGroupRequest` contents to a `SignedRequest`.
3347struct GetGroupRequestSerializer;
3348impl GetGroupRequestSerializer {
3349    fn serialize(params: &mut Params, name: &str, obj: &GetGroupRequest) {
3350        let mut prefix = name.to_string();
3351        if prefix != "" {
3352            prefix.push_str(".");
3353        }
3354
3355        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
3356        if let Some(ref field_value) = obj.marker {
3357            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
3358        }
3359        if let Some(ref field_value) = obj.max_items {
3360            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
3361        }
3362    }
3363}
3364
3365/// <p>Contains the response to a successful <a>GetGroup</a> request. </p>
3366#[derive(Clone, Debug, Default, PartialEq)]
3367#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3368pub struct GetGroupResponse {
3369    /// <p>A structure that contains details about the group.</p>
3370    pub group: Group,
3371    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
3372    pub is_truncated: Option<bool>,
3373    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
3374    pub marker: Option<String>,
3375    /// <p>A list of users in the group.</p>
3376    pub users: Vec<User>,
3377}
3378
3379#[allow(dead_code)]
3380struct GetGroupResponseDeserializer;
3381impl GetGroupResponseDeserializer {
3382    #[allow(dead_code, unused_variables)]
3383    fn deserialize<T: Peek + Next>(
3384        tag_name: &str,
3385        stack: &mut T,
3386    ) -> Result<GetGroupResponse, XmlParseError> {
3387        deserialize_elements::<_, GetGroupResponse, _>(tag_name, stack, |name, stack, obj| {
3388            match name {
3389                "Group" => {
3390                    obj.group = GroupDeserializer::deserialize("Group", stack)?;
3391                }
3392                "IsTruncated" => {
3393                    obj.is_truncated =
3394                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
3395                }
3396                "Marker" => {
3397                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
3398                        "Marker", stack,
3399                    )?);
3400                }
3401                "Users" => {
3402                    obj.users
3403                        .extend(UserListTypeDeserializer::deserialize("Users", stack)?);
3404                }
3405                _ => skip_tree(stack),
3406            }
3407            Ok(())
3408        })
3409    }
3410}
3411#[derive(Clone, Debug, Default, PartialEq)]
3412#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3413pub struct GetInstanceProfileRequest {
3414    /// <p>The name of the instance profile to get information about.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
3415    pub instance_profile_name: String,
3416}
3417
3418/// Serialize `GetInstanceProfileRequest` contents to a `SignedRequest`.
3419struct GetInstanceProfileRequestSerializer;
3420impl GetInstanceProfileRequestSerializer {
3421    fn serialize(params: &mut Params, name: &str, obj: &GetInstanceProfileRequest) {
3422        let mut prefix = name.to_string();
3423        if prefix != "" {
3424            prefix.push_str(".");
3425        }
3426
3427        params.put(
3428            &format!("{}{}", prefix, "InstanceProfileName"),
3429            &obj.instance_profile_name,
3430        );
3431    }
3432}
3433
3434/// <p>Contains the response to a successful <a>GetInstanceProfile</a> request. </p>
3435#[derive(Clone, Debug, Default, PartialEq)]
3436#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3437pub struct GetInstanceProfileResponse {
3438    /// <p>A structure containing details about the instance profile.</p>
3439    pub instance_profile: InstanceProfile,
3440}
3441
3442#[allow(dead_code)]
3443struct GetInstanceProfileResponseDeserializer;
3444impl GetInstanceProfileResponseDeserializer {
3445    #[allow(dead_code, unused_variables)]
3446    fn deserialize<T: Peek + Next>(
3447        tag_name: &str,
3448        stack: &mut T,
3449    ) -> Result<GetInstanceProfileResponse, XmlParseError> {
3450        deserialize_elements::<_, GetInstanceProfileResponse, _>(
3451            tag_name,
3452            stack,
3453            |name, stack, obj| {
3454                match name {
3455                    "InstanceProfile" => {
3456                        obj.instance_profile =
3457                            InstanceProfileDeserializer::deserialize("InstanceProfile", stack)?;
3458                    }
3459                    _ => skip_tree(stack),
3460                }
3461                Ok(())
3462            },
3463        )
3464    }
3465}
3466#[derive(Clone, Debug, Default, PartialEq)]
3467#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3468pub struct GetLoginProfileRequest {
3469    /// <p>The name of the user whose login profile you want to retrieve.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
3470    pub user_name: String,
3471}
3472
3473/// Serialize `GetLoginProfileRequest` contents to a `SignedRequest`.
3474struct GetLoginProfileRequestSerializer;
3475impl GetLoginProfileRequestSerializer {
3476    fn serialize(params: &mut Params, name: &str, obj: &GetLoginProfileRequest) {
3477        let mut prefix = name.to_string();
3478        if prefix != "" {
3479            prefix.push_str(".");
3480        }
3481
3482        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
3483    }
3484}
3485
3486/// <p>Contains the response to a successful <a>GetLoginProfile</a> request. </p>
3487#[derive(Clone, Debug, Default, PartialEq)]
3488#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3489pub struct GetLoginProfileResponse {
3490    /// <p>A structure containing the user name and password create date for the user.</p>
3491    pub login_profile: LoginProfile,
3492}
3493
3494#[allow(dead_code)]
3495struct GetLoginProfileResponseDeserializer;
3496impl GetLoginProfileResponseDeserializer {
3497    #[allow(dead_code, unused_variables)]
3498    fn deserialize<T: Peek + Next>(
3499        tag_name: &str,
3500        stack: &mut T,
3501    ) -> Result<GetLoginProfileResponse, XmlParseError> {
3502        deserialize_elements::<_, GetLoginProfileResponse, _>(
3503            tag_name,
3504            stack,
3505            |name, stack, obj| {
3506                match name {
3507                    "LoginProfile" => {
3508                        obj.login_profile =
3509                            LoginProfileDeserializer::deserialize("LoginProfile", stack)?;
3510                    }
3511                    _ => skip_tree(stack),
3512                }
3513                Ok(())
3514            },
3515        )
3516    }
3517}
3518#[derive(Clone, Debug, Default, PartialEq)]
3519#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3520pub struct GetOpenIDConnectProviderRequest {
3521    /// <p>The Amazon Resource Name (ARN) of the OIDC provider resource object in IAM to get information for. You can get a list of OIDC provider resource ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
3522    pub open_id_connect_provider_arn: String,
3523}
3524
3525/// Serialize `GetOpenIDConnectProviderRequest` contents to a `SignedRequest`.
3526struct GetOpenIDConnectProviderRequestSerializer;
3527impl GetOpenIDConnectProviderRequestSerializer {
3528    fn serialize(params: &mut Params, name: &str, obj: &GetOpenIDConnectProviderRequest) {
3529        let mut prefix = name.to_string();
3530        if prefix != "" {
3531            prefix.push_str(".");
3532        }
3533
3534        params.put(
3535            &format!("{}{}", prefix, "OpenIDConnectProviderArn"),
3536            &obj.open_id_connect_provider_arn,
3537        );
3538    }
3539}
3540
3541/// <p>Contains the response to a successful <a>GetOpenIDConnectProvider</a> request. </p>
3542#[derive(Clone, Debug, Default, PartialEq)]
3543#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3544pub struct GetOpenIDConnectProviderResponse {
3545    /// <p>A list of client IDs (also known as audiences) that are associated with the specified IAM OIDC provider resource object. For more information, see <a>CreateOpenIDConnectProvider</a>.</p>
3546    pub client_id_list: Option<Vec<String>>,
3547    /// <p>The date and time when the IAM OIDC provider resource object was created in the AWS account.</p>
3548    pub create_date: Option<String>,
3549    /// <p>A list of tags that are attached to the specified IAM OIDC provider. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
3550    pub tags: Option<Vec<Tag>>,
3551    /// <p>A list of certificate thumbprints that are associated with the specified IAM OIDC provider resource object. For more information, see <a>CreateOpenIDConnectProvider</a>. </p>
3552    pub thumbprint_list: Option<Vec<String>>,
3553    /// <p>The URL that the IAM OIDC provider resource object is associated with. For more information, see <a>CreateOpenIDConnectProvider</a>.</p>
3554    pub url: Option<String>,
3555}
3556
3557#[allow(dead_code)]
3558struct GetOpenIDConnectProviderResponseDeserializer;
3559impl GetOpenIDConnectProviderResponseDeserializer {
3560    #[allow(dead_code, unused_variables)]
3561    fn deserialize<T: Peek + Next>(
3562        tag_name: &str,
3563        stack: &mut T,
3564    ) -> Result<GetOpenIDConnectProviderResponse, XmlParseError> {
3565        deserialize_elements::<_, GetOpenIDConnectProviderResponse, _>(
3566            tag_name,
3567            stack,
3568            |name, stack, obj| {
3569                match name {
3570                    "ClientIDList" => {
3571                        obj.client_id_list.get_or_insert(vec![]).extend(
3572                            ClientIDListTypeDeserializer::deserialize("ClientIDList", stack)?,
3573                        );
3574                    }
3575                    "CreateDate" => {
3576                        obj.create_date =
3577                            Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
3578                    }
3579                    "Tags" => {
3580                        obj.tags
3581                            .get_or_insert(vec![])
3582                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
3583                    }
3584                    "ThumbprintList" => {
3585                        obj.thumbprint_list.get_or_insert(vec![]).extend(
3586                            ThumbprintListTypeDeserializer::deserialize("ThumbprintList", stack)?,
3587                        );
3588                    }
3589                    "Url" => {
3590                        obj.url = Some(OpenIDConnectProviderUrlTypeDeserializer::deserialize(
3591                            "Url", stack,
3592                        )?);
3593                    }
3594                    _ => skip_tree(stack),
3595                }
3596                Ok(())
3597            },
3598        )
3599    }
3600}
3601#[derive(Clone, Debug, Default, PartialEq)]
3602#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3603pub struct GetOrganizationsAccessReportRequest {
3604    /// <p>The identifier of the request generated by the <a>GenerateOrganizationsAccessReport</a> operation.</p>
3605    pub job_id: String,
3606    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
3607    pub marker: Option<String>,
3608    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
3609    pub max_items: Option<i64>,
3610    /// <p>The key that is used to sort the results. If you choose the namespace key, the results are returned in alphabetical order. If you choose the time key, the results are sorted numerically by the date and time.</p>
3611    pub sort_key: Option<String>,
3612}
3613
3614/// Serialize `GetOrganizationsAccessReportRequest` contents to a `SignedRequest`.
3615struct GetOrganizationsAccessReportRequestSerializer;
3616impl GetOrganizationsAccessReportRequestSerializer {
3617    fn serialize(params: &mut Params, name: &str, obj: &GetOrganizationsAccessReportRequest) {
3618        let mut prefix = name.to_string();
3619        if prefix != "" {
3620            prefix.push_str(".");
3621        }
3622
3623        params.put(&format!("{}{}", prefix, "JobId"), &obj.job_id);
3624        if let Some(ref field_value) = obj.marker {
3625            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
3626        }
3627        if let Some(ref field_value) = obj.max_items {
3628            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
3629        }
3630        if let Some(ref field_value) = obj.sort_key {
3631            params.put(&format!("{}{}", prefix, "SortKey"), &field_value);
3632        }
3633    }
3634}
3635
3636#[derive(Clone, Debug, Default, PartialEq)]
3637#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3638pub struct GetOrganizationsAccessReportResponse {
3639    /// <p>An object that contains details about the most recent attempt to access the service.</p>
3640    pub access_details: Option<Vec<AccessDetail>>,
3641    pub error_details: Option<ErrorDetails>,
3642    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
3643    pub is_truncated: Option<bool>,
3644    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the generated report job was completed or failed.</p> <p>This field is null if the job is still in progress, as indicated by a job status value of <code>IN_PROGRESS</code>.</p>
3645    pub job_completion_date: Option<String>,
3646    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the report job was created.</p>
3647    pub job_creation_date: String,
3648    /// <p>The status of the job.</p>
3649    pub job_status: String,
3650    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
3651    pub marker: Option<String>,
3652    /// <p>The number of services that the applicable SCPs allow account principals to access.</p>
3653    pub number_of_services_accessible: Option<i64>,
3654    /// <p>The number of services that account principals are allowed but did not attempt to access.</p>
3655    pub number_of_services_not_accessed: Option<i64>,
3656}
3657
3658#[allow(dead_code)]
3659struct GetOrganizationsAccessReportResponseDeserializer;
3660impl GetOrganizationsAccessReportResponseDeserializer {
3661    #[allow(dead_code, unused_variables)]
3662    fn deserialize<T: Peek + Next>(
3663        tag_name: &str,
3664        stack: &mut T,
3665    ) -> Result<GetOrganizationsAccessReportResponse, XmlParseError> {
3666        deserialize_elements::<_, GetOrganizationsAccessReportResponse, _>(
3667            tag_name,
3668            stack,
3669            |name, stack, obj| {
3670                match name {
3671                    "AccessDetails" => {
3672                        obj.access_details.get_or_insert(vec![]).extend(
3673                            AccessDetailsDeserializer::deserialize("AccessDetails", stack)?,
3674                        );
3675                    }
3676                    "ErrorDetails" => {
3677                        obj.error_details = Some(ErrorDetailsDeserializer::deserialize(
3678                            "ErrorDetails",
3679                            stack,
3680                        )?);
3681                    }
3682                    "IsTruncated" => {
3683                        obj.is_truncated =
3684                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
3685                    }
3686                    "JobCompletionDate" => {
3687                        obj.job_completion_date = Some(DateTypeDeserializer::deserialize(
3688                            "JobCompletionDate",
3689                            stack,
3690                        )?);
3691                    }
3692                    "JobCreationDate" => {
3693                        obj.job_creation_date =
3694                            DateTypeDeserializer::deserialize("JobCreationDate", stack)?;
3695                    }
3696                    "JobStatus" => {
3697                        obj.job_status =
3698                            JobStatusTypeDeserializer::deserialize("JobStatus", stack)?;
3699                    }
3700                    "Marker" => {
3701                        obj.marker = Some(MarkerTypeDeserializer::deserialize("Marker", stack)?);
3702                    }
3703                    "NumberOfServicesAccessible" => {
3704                        obj.number_of_services_accessible =
3705                            Some(IntegerTypeDeserializer::deserialize(
3706                                "NumberOfServicesAccessible",
3707                                stack,
3708                            )?);
3709                    }
3710                    "NumberOfServicesNotAccessed" => {
3711                        obj.number_of_services_not_accessed =
3712                            Some(IntegerTypeDeserializer::deserialize(
3713                                "NumberOfServicesNotAccessed",
3714                                stack,
3715                            )?);
3716                    }
3717                    _ => skip_tree(stack),
3718                }
3719                Ok(())
3720            },
3721        )
3722    }
3723}
3724#[derive(Clone, Debug, Default, PartialEq)]
3725#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3726pub struct GetPolicyRequest {
3727    /// <p>The Amazon Resource Name (ARN) of the managed policy that you want information about.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
3728    pub policy_arn: String,
3729}
3730
3731/// Serialize `GetPolicyRequest` contents to a `SignedRequest`.
3732struct GetPolicyRequestSerializer;
3733impl GetPolicyRequestSerializer {
3734    fn serialize(params: &mut Params, name: &str, obj: &GetPolicyRequest) {
3735        let mut prefix = name.to_string();
3736        if prefix != "" {
3737            prefix.push_str(".");
3738        }
3739
3740        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
3741    }
3742}
3743
3744/// <p>Contains the response to a successful <a>GetPolicy</a> request. </p>
3745#[derive(Clone, Debug, Default, PartialEq)]
3746#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3747pub struct GetPolicyResponse {
3748    /// <p>A structure containing details about the policy.</p>
3749    pub policy: Option<Policy>,
3750}
3751
3752#[allow(dead_code)]
3753struct GetPolicyResponseDeserializer;
3754impl GetPolicyResponseDeserializer {
3755    #[allow(dead_code, unused_variables)]
3756    fn deserialize<T: Peek + Next>(
3757        tag_name: &str,
3758        stack: &mut T,
3759    ) -> Result<GetPolicyResponse, XmlParseError> {
3760        deserialize_elements::<_, GetPolicyResponse, _>(tag_name, stack, |name, stack, obj| {
3761            match name {
3762                "Policy" => {
3763                    obj.policy = Some(PolicyDeserializer::deserialize("Policy", stack)?);
3764                }
3765                _ => skip_tree(stack),
3766            }
3767            Ok(())
3768        })
3769    }
3770}
3771#[derive(Clone, Debug, Default, PartialEq)]
3772#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3773pub struct GetPolicyVersionRequest {
3774    /// <p>The Amazon Resource Name (ARN) of the managed policy that you want information about.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
3775    pub policy_arn: String,
3776    /// <p>Identifies the policy version to retrieve.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consists of the lowercase letter 'v' followed by one or two digits, and optionally followed by a period '.' and a string of letters and digits.</p>
3777    pub version_id: String,
3778}
3779
3780/// Serialize `GetPolicyVersionRequest` contents to a `SignedRequest`.
3781struct GetPolicyVersionRequestSerializer;
3782impl GetPolicyVersionRequestSerializer {
3783    fn serialize(params: &mut Params, name: &str, obj: &GetPolicyVersionRequest) {
3784        let mut prefix = name.to_string();
3785        if prefix != "" {
3786            prefix.push_str(".");
3787        }
3788
3789        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
3790        params.put(&format!("{}{}", prefix, "VersionId"), &obj.version_id);
3791    }
3792}
3793
3794/// <p>Contains the response to a successful <a>GetPolicyVersion</a> request. </p>
3795#[derive(Clone, Debug, Default, PartialEq)]
3796#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3797pub struct GetPolicyVersionResponse {
3798    /// <p>A structure containing details about the policy version.</p>
3799    pub policy_version: Option<PolicyVersion>,
3800}
3801
3802#[allow(dead_code)]
3803struct GetPolicyVersionResponseDeserializer;
3804impl GetPolicyVersionResponseDeserializer {
3805    #[allow(dead_code, unused_variables)]
3806    fn deserialize<T: Peek + Next>(
3807        tag_name: &str,
3808        stack: &mut T,
3809    ) -> Result<GetPolicyVersionResponse, XmlParseError> {
3810        deserialize_elements::<_, GetPolicyVersionResponse, _>(
3811            tag_name,
3812            stack,
3813            |name, stack, obj| {
3814                match name {
3815                    "PolicyVersion" => {
3816                        obj.policy_version = Some(PolicyVersionDeserializer::deserialize(
3817                            "PolicyVersion",
3818                            stack,
3819                        )?);
3820                    }
3821                    _ => skip_tree(stack),
3822                }
3823                Ok(())
3824            },
3825        )
3826    }
3827}
3828#[derive(Clone, Debug, Default, PartialEq)]
3829#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3830pub struct GetRolePolicyRequest {
3831    /// <p>The name of the policy document to get.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
3832    pub policy_name: String,
3833    /// <p>The name of the role associated with the policy.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
3834    pub role_name: String,
3835}
3836
3837/// Serialize `GetRolePolicyRequest` contents to a `SignedRequest`.
3838struct GetRolePolicyRequestSerializer;
3839impl GetRolePolicyRequestSerializer {
3840    fn serialize(params: &mut Params, name: &str, obj: &GetRolePolicyRequest) {
3841        let mut prefix = name.to_string();
3842        if prefix != "" {
3843            prefix.push_str(".");
3844        }
3845
3846        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
3847        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
3848    }
3849}
3850
3851/// <p>Contains the response to a successful <a>GetRolePolicy</a> request. </p>
3852#[derive(Clone, Debug, Default, PartialEq)]
3853#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3854pub struct GetRolePolicyResponse {
3855    /// <p>The policy document.</p> <p>IAM stores policies in JSON format. However, resources that were created using AWS CloudFormation templates can be formatted in YAML. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p>
3856    pub policy_document: String,
3857    /// <p>The name of the policy.</p>
3858    pub policy_name: String,
3859    /// <p>The role the policy is associated with.</p>
3860    pub role_name: String,
3861}
3862
3863#[allow(dead_code)]
3864struct GetRolePolicyResponseDeserializer;
3865impl GetRolePolicyResponseDeserializer {
3866    #[allow(dead_code, unused_variables)]
3867    fn deserialize<T: Peek + Next>(
3868        tag_name: &str,
3869        stack: &mut T,
3870    ) -> Result<GetRolePolicyResponse, XmlParseError> {
3871        deserialize_elements::<_, GetRolePolicyResponse, _>(tag_name, stack, |name, stack, obj| {
3872            match name {
3873                "PolicyDocument" => {
3874                    obj.policy_document =
3875                        PolicyDocumentTypeDeserializer::deserialize("PolicyDocument", stack)?;
3876                }
3877                "PolicyName" => {
3878                    obj.policy_name = PolicyNameTypeDeserializer::deserialize("PolicyName", stack)?;
3879                }
3880                "RoleName" => {
3881                    obj.role_name = RoleNameTypeDeserializer::deserialize("RoleName", stack)?;
3882                }
3883                _ => skip_tree(stack),
3884            }
3885            Ok(())
3886        })
3887    }
3888}
3889#[derive(Clone, Debug, Default, PartialEq)]
3890#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3891pub struct GetRoleRequest {
3892    /// <p>The name of the IAM role to get information about.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
3893    pub role_name: String,
3894}
3895
3896/// Serialize `GetRoleRequest` contents to a `SignedRequest`.
3897struct GetRoleRequestSerializer;
3898impl GetRoleRequestSerializer {
3899    fn serialize(params: &mut Params, name: &str, obj: &GetRoleRequest) {
3900        let mut prefix = name.to_string();
3901        if prefix != "" {
3902            prefix.push_str(".");
3903        }
3904
3905        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
3906    }
3907}
3908
3909/// <p>Contains the response to a successful <a>GetRole</a> request. </p>
3910#[derive(Clone, Debug, Default, PartialEq)]
3911#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3912pub struct GetRoleResponse {
3913    /// <p>A structure containing details about the IAM role.</p>
3914    pub role: Role,
3915}
3916
3917#[allow(dead_code)]
3918struct GetRoleResponseDeserializer;
3919impl GetRoleResponseDeserializer {
3920    #[allow(dead_code, unused_variables)]
3921    fn deserialize<T: Peek + Next>(
3922        tag_name: &str,
3923        stack: &mut T,
3924    ) -> Result<GetRoleResponse, XmlParseError> {
3925        deserialize_elements::<_, GetRoleResponse, _>(tag_name, stack, |name, stack, obj| {
3926            match name {
3927                "Role" => {
3928                    obj.role = RoleDeserializer::deserialize("Role", stack)?;
3929                }
3930                _ => skip_tree(stack),
3931            }
3932            Ok(())
3933        })
3934    }
3935}
3936#[derive(Clone, Debug, Default, PartialEq)]
3937#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3938pub struct GetSAMLProviderRequest {
3939    /// <p>The Amazon Resource Name (ARN) of the SAML provider resource object in IAM to get information about.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
3940    pub saml_provider_arn: String,
3941}
3942
3943/// Serialize `GetSAMLProviderRequest` contents to a `SignedRequest`.
3944struct GetSAMLProviderRequestSerializer;
3945impl GetSAMLProviderRequestSerializer {
3946    fn serialize(params: &mut Params, name: &str, obj: &GetSAMLProviderRequest) {
3947        let mut prefix = name.to_string();
3948        if prefix != "" {
3949            prefix.push_str(".");
3950        }
3951
3952        params.put(
3953            &format!("{}{}", prefix, "SAMLProviderArn"),
3954            &obj.saml_provider_arn,
3955        );
3956    }
3957}
3958
3959/// <p>Contains the response to a successful <a>GetSAMLProvider</a> request. </p>
3960#[derive(Clone, Debug, Default, PartialEq)]
3961#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
3962pub struct GetSAMLProviderResponse {
3963    /// <p>The date and time when the SAML provider was created.</p>
3964    pub create_date: Option<String>,
3965    /// <p>The XML metadata document that includes information about an identity provider.</p>
3966    pub saml_metadata_document: Option<String>,
3967    /// <p>A list of tags that are attached to the specified IAM SAML provider. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
3968    pub tags: Option<Vec<Tag>>,
3969    /// <p>The expiration date and time for the SAML provider.</p>
3970    pub valid_until: Option<String>,
3971}
3972
3973#[allow(dead_code)]
3974struct GetSAMLProviderResponseDeserializer;
3975impl GetSAMLProviderResponseDeserializer {
3976    #[allow(dead_code, unused_variables)]
3977    fn deserialize<T: Peek + Next>(
3978        tag_name: &str,
3979        stack: &mut T,
3980    ) -> Result<GetSAMLProviderResponse, XmlParseError> {
3981        deserialize_elements::<_, GetSAMLProviderResponse, _>(
3982            tag_name,
3983            stack,
3984            |name, stack, obj| {
3985                match name {
3986                    "CreateDate" => {
3987                        obj.create_date =
3988                            Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
3989                    }
3990                    "SAMLMetadataDocument" => {
3991                        obj.saml_metadata_document =
3992                            Some(SAMLMetadataDocumentTypeDeserializer::deserialize(
3993                                "SAMLMetadataDocument",
3994                                stack,
3995                            )?);
3996                    }
3997                    "Tags" => {
3998                        obj.tags
3999                            .get_or_insert(vec![])
4000                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
4001                    }
4002                    "ValidUntil" => {
4003                        obj.valid_until =
4004                            Some(DateTypeDeserializer::deserialize("ValidUntil", stack)?);
4005                    }
4006                    _ => skip_tree(stack),
4007                }
4008                Ok(())
4009            },
4010        )
4011    }
4012}
4013#[derive(Clone, Debug, Default, PartialEq)]
4014#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4015pub struct GetSSHPublicKeyRequest {
4016    /// <p>Specifies the public key encoding format to use in the response. To retrieve the public key in ssh-rsa format, use <code>SSH</code>. To retrieve the public key in PEM format, use <code>PEM</code>.</p>
4017    pub encoding: String,
4018    /// <p>The unique identifier for the SSH public key.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
4019    pub ssh_public_key_id: String,
4020    /// <p>The name of the IAM user associated with the SSH public key.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
4021    pub user_name: String,
4022}
4023
4024/// Serialize `GetSSHPublicKeyRequest` contents to a `SignedRequest`.
4025struct GetSSHPublicKeyRequestSerializer;
4026impl GetSSHPublicKeyRequestSerializer {
4027    fn serialize(params: &mut Params, name: &str, obj: &GetSSHPublicKeyRequest) {
4028        let mut prefix = name.to_string();
4029        if prefix != "" {
4030            prefix.push_str(".");
4031        }
4032
4033        params.put(&format!("{}{}", prefix, "Encoding"), &obj.encoding);
4034        params.put(
4035            &format!("{}{}", prefix, "SSHPublicKeyId"),
4036            &obj.ssh_public_key_id,
4037        );
4038        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
4039    }
4040}
4041
4042/// <p>Contains the response to a successful <a>GetSSHPublicKey</a> request.</p>
4043#[derive(Clone, Debug, Default, PartialEq)]
4044#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4045pub struct GetSSHPublicKeyResponse {
4046    /// <p>A structure containing details about the SSH public key.</p>
4047    pub ssh_public_key: Option<SSHPublicKey>,
4048}
4049
4050#[allow(dead_code)]
4051struct GetSSHPublicKeyResponseDeserializer;
4052impl GetSSHPublicKeyResponseDeserializer {
4053    #[allow(dead_code, unused_variables)]
4054    fn deserialize<T: Peek + Next>(
4055        tag_name: &str,
4056        stack: &mut T,
4057    ) -> Result<GetSSHPublicKeyResponse, XmlParseError> {
4058        deserialize_elements::<_, GetSSHPublicKeyResponse, _>(
4059            tag_name,
4060            stack,
4061            |name, stack, obj| {
4062                match name {
4063                    "SSHPublicKey" => {
4064                        obj.ssh_public_key = Some(SSHPublicKeyDeserializer::deserialize(
4065                            "SSHPublicKey",
4066                            stack,
4067                        )?);
4068                    }
4069                    _ => skip_tree(stack),
4070                }
4071                Ok(())
4072            },
4073        )
4074    }
4075}
4076#[derive(Clone, Debug, Default, PartialEq)]
4077#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4078pub struct GetServerCertificateRequest {
4079    /// <p>The name of the server certificate you want to retrieve information about.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
4080    pub server_certificate_name: String,
4081}
4082
4083/// Serialize `GetServerCertificateRequest` contents to a `SignedRequest`.
4084struct GetServerCertificateRequestSerializer;
4085impl GetServerCertificateRequestSerializer {
4086    fn serialize(params: &mut Params, name: &str, obj: &GetServerCertificateRequest) {
4087        let mut prefix = name.to_string();
4088        if prefix != "" {
4089            prefix.push_str(".");
4090        }
4091
4092        params.put(
4093            &format!("{}{}", prefix, "ServerCertificateName"),
4094            &obj.server_certificate_name,
4095        );
4096    }
4097}
4098
4099/// <p>Contains the response to a successful <a>GetServerCertificate</a> request. </p>
4100#[derive(Clone, Debug, Default, PartialEq)]
4101#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4102pub struct GetServerCertificateResponse {
4103    /// <p>A structure containing details about the server certificate.</p>
4104    pub server_certificate: ServerCertificate,
4105}
4106
4107#[allow(dead_code)]
4108struct GetServerCertificateResponseDeserializer;
4109impl GetServerCertificateResponseDeserializer {
4110    #[allow(dead_code, unused_variables)]
4111    fn deserialize<T: Peek + Next>(
4112        tag_name: &str,
4113        stack: &mut T,
4114    ) -> Result<GetServerCertificateResponse, XmlParseError> {
4115        deserialize_elements::<_, GetServerCertificateResponse, _>(
4116            tag_name,
4117            stack,
4118            |name, stack, obj| {
4119                match name {
4120                    "ServerCertificate" => {
4121                        obj.server_certificate =
4122                            ServerCertificateDeserializer::deserialize("ServerCertificate", stack)?;
4123                    }
4124                    _ => skip_tree(stack),
4125                }
4126                Ok(())
4127            },
4128        )
4129    }
4130}
4131#[derive(Clone, Debug, Default, PartialEq)]
4132#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4133pub struct GetServiceLastAccessedDetailsRequest {
4134    /// <p>The ID of the request generated by the <a>GenerateServiceLastAccessedDetails</a> operation. The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p>
4135    pub job_id: String,
4136    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
4137    pub marker: Option<String>,
4138    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
4139    pub max_items: Option<i64>,
4140}
4141
4142/// Serialize `GetServiceLastAccessedDetailsRequest` contents to a `SignedRequest`.
4143struct GetServiceLastAccessedDetailsRequestSerializer;
4144impl GetServiceLastAccessedDetailsRequestSerializer {
4145    fn serialize(params: &mut Params, name: &str, obj: &GetServiceLastAccessedDetailsRequest) {
4146        let mut prefix = name.to_string();
4147        if prefix != "" {
4148            prefix.push_str(".");
4149        }
4150
4151        params.put(&format!("{}{}", prefix, "JobId"), &obj.job_id);
4152        if let Some(ref field_value) = obj.marker {
4153            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
4154        }
4155        if let Some(ref field_value) = obj.max_items {
4156            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
4157        }
4158    }
4159}
4160
4161#[derive(Clone, Debug, Default, PartialEq)]
4162#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4163pub struct GetServiceLastAccessedDetailsResponse {
4164    /// <p>An object that contains details about the reason the operation failed.</p>
4165    pub error: Option<ErrorDetails>,
4166    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
4167    pub is_truncated: Option<bool>,
4168    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the generated report job was completed or failed.</p> <p>This field is null if the job is still in progress, as indicated by a job status value of <code>IN_PROGRESS</code>.</p>
4169    pub job_completion_date: String,
4170    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the report job was created.</p>
4171    pub job_creation_date: String,
4172    /// <p>The status of the job.</p>
4173    pub job_status: String,
4174    /// <p>The type of job. Service jobs return information about when each service was last accessed. Action jobs also include information about when tracked actions within the service were last accessed.</p>
4175    pub job_type: Option<String>,
4176    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
4177    pub marker: Option<String>,
4178    /// <p> A <code>ServiceLastAccessed</code> object that contains details about the most recent attempt to access the service.</p>
4179    pub services_last_accessed: Vec<ServiceLastAccessed>,
4180}
4181
4182#[allow(dead_code)]
4183struct GetServiceLastAccessedDetailsResponseDeserializer;
4184impl GetServiceLastAccessedDetailsResponseDeserializer {
4185    #[allow(dead_code, unused_variables)]
4186    fn deserialize<T: Peek + Next>(
4187        tag_name: &str,
4188        stack: &mut T,
4189    ) -> Result<GetServiceLastAccessedDetailsResponse, XmlParseError> {
4190        deserialize_elements::<_, GetServiceLastAccessedDetailsResponse, _>(
4191            tag_name,
4192            stack,
4193            |name, stack, obj| {
4194                match name {
4195                    "Error" => {
4196                        obj.error = Some(ErrorDetailsDeserializer::deserialize("Error", stack)?);
4197                    }
4198                    "IsTruncated" => {
4199                        obj.is_truncated =
4200                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
4201                    }
4202                    "JobCompletionDate" => {
4203                        obj.job_completion_date =
4204                            DateTypeDeserializer::deserialize("JobCompletionDate", stack)?;
4205                    }
4206                    "JobCreationDate" => {
4207                        obj.job_creation_date =
4208                            DateTypeDeserializer::deserialize("JobCreationDate", stack)?;
4209                    }
4210                    "JobStatus" => {
4211                        obj.job_status =
4212                            JobStatusTypeDeserializer::deserialize("JobStatus", stack)?;
4213                    }
4214                    "JobType" => {
4215                        obj.job_type =
4216                            Some(AccessAdvisorUsageGranularityTypeDeserializer::deserialize(
4217                                "JobType", stack,
4218                            )?);
4219                    }
4220                    "Marker" => {
4221                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
4222                            "Marker", stack,
4223                        )?);
4224                    }
4225                    "ServicesLastAccessed" => {
4226                        obj.services_last_accessed.extend(
4227                            ServicesLastAccessedDeserializer::deserialize(
4228                                "ServicesLastAccessed",
4229                                stack,
4230                            )?,
4231                        );
4232                    }
4233                    _ => skip_tree(stack),
4234                }
4235                Ok(())
4236            },
4237        )
4238    }
4239}
4240#[derive(Clone, Debug, Default, PartialEq)]
4241#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4242pub struct GetServiceLastAccessedDetailsWithEntitiesRequest {
4243    /// <p>The ID of the request generated by the <code>GenerateServiceLastAccessedDetails</code> operation.</p>
4244    pub job_id: String,
4245    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
4246    pub marker: Option<String>,
4247    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
4248    pub max_items: Option<i64>,
4249    /// <p>The service namespace for an AWS service. Provide the service namespace to learn when the IAM entity last attempted to access the specified service.</p> <p>To learn the service namespace for a service, see <a href="https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html">Actions, resources, and condition keys for AWS services</a> in the <i>IAM User Guide</i>. Choose the name of the service to view details for that service. In the first paragraph, find the service prefix. For example, <code>(service prefix: a4b)</code>. For more information about service namespaces, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces">AWS service namespaces</a> in the <i>AWS General Reference</i>.</p>
4250    pub service_namespace: String,
4251}
4252
4253/// Serialize `GetServiceLastAccessedDetailsWithEntitiesRequest` contents to a `SignedRequest`.
4254struct GetServiceLastAccessedDetailsWithEntitiesRequestSerializer;
4255impl GetServiceLastAccessedDetailsWithEntitiesRequestSerializer {
4256    fn serialize(
4257        params: &mut Params,
4258        name: &str,
4259        obj: &GetServiceLastAccessedDetailsWithEntitiesRequest,
4260    ) {
4261        let mut prefix = name.to_string();
4262        if prefix != "" {
4263            prefix.push_str(".");
4264        }
4265
4266        params.put(&format!("{}{}", prefix, "JobId"), &obj.job_id);
4267        if let Some(ref field_value) = obj.marker {
4268            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
4269        }
4270        if let Some(ref field_value) = obj.max_items {
4271            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
4272        }
4273        params.put(
4274            &format!("{}{}", prefix, "ServiceNamespace"),
4275            &obj.service_namespace,
4276        );
4277    }
4278}
4279
4280#[derive(Clone, Debug, Default, PartialEq)]
4281#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4282pub struct GetServiceLastAccessedDetailsWithEntitiesResponse {
4283    /// <p>An <code>EntityDetailsList</code> object that contains details about when an IAM entity (user or role) used group or policy permissions in an attempt to access the specified AWS service.</p>
4284    pub entity_details_list: Vec<EntityDetails>,
4285    /// <p>An object that contains details about the reason the operation failed.</p>
4286    pub error: Option<ErrorDetails>,
4287    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
4288    pub is_truncated: Option<bool>,
4289    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the generated report job was completed or failed.</p> <p>This field is null if the job is still in progress, as indicated by a job status value of <code>IN_PROGRESS</code>.</p>
4290    pub job_completion_date: String,
4291    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the report job was created.</p>
4292    pub job_creation_date: String,
4293    /// <p>The status of the job.</p>
4294    pub job_status: String,
4295    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
4296    pub marker: Option<String>,
4297}
4298
4299#[allow(dead_code)]
4300struct GetServiceLastAccessedDetailsWithEntitiesResponseDeserializer;
4301impl GetServiceLastAccessedDetailsWithEntitiesResponseDeserializer {
4302    #[allow(dead_code, unused_variables)]
4303    fn deserialize<T: Peek + Next>(
4304        tag_name: &str,
4305        stack: &mut T,
4306    ) -> Result<GetServiceLastAccessedDetailsWithEntitiesResponse, XmlParseError> {
4307        deserialize_elements::<_, GetServiceLastAccessedDetailsWithEntitiesResponse, _>(
4308            tag_name,
4309            stack,
4310            |name, stack, obj| {
4311                match name {
4312                    "EntityDetailsList" => {
4313                        obj.entity_details_list.extend(
4314                            EntityDetailsListTypeDeserializer::deserialize(
4315                                "EntityDetailsList",
4316                                stack,
4317                            )?,
4318                        );
4319                    }
4320                    "Error" => {
4321                        obj.error = Some(ErrorDetailsDeserializer::deserialize("Error", stack)?);
4322                    }
4323                    "IsTruncated" => {
4324                        obj.is_truncated =
4325                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
4326                    }
4327                    "JobCompletionDate" => {
4328                        obj.job_completion_date =
4329                            DateTypeDeserializer::deserialize("JobCompletionDate", stack)?;
4330                    }
4331                    "JobCreationDate" => {
4332                        obj.job_creation_date =
4333                            DateTypeDeserializer::deserialize("JobCreationDate", stack)?;
4334                    }
4335                    "JobStatus" => {
4336                        obj.job_status =
4337                            JobStatusTypeDeserializer::deserialize("JobStatus", stack)?;
4338                    }
4339                    "Marker" => {
4340                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
4341                            "Marker", stack,
4342                        )?);
4343                    }
4344                    _ => skip_tree(stack),
4345                }
4346                Ok(())
4347            },
4348        )
4349    }
4350}
4351#[derive(Clone, Debug, Default, PartialEq)]
4352#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4353pub struct GetServiceLinkedRoleDeletionStatusRequest {
4354    /// <p>The deletion task identifier. This identifier is returned by the <a>DeleteServiceLinkedRole</a> operation in the format <code>task/aws-service-role/&lt;service-principal-name&gt;/&lt;role-name&gt;/&lt;task-uuid&gt;</code>.</p>
4355    pub deletion_task_id: String,
4356}
4357
4358/// Serialize `GetServiceLinkedRoleDeletionStatusRequest` contents to a `SignedRequest`.
4359struct GetServiceLinkedRoleDeletionStatusRequestSerializer;
4360impl GetServiceLinkedRoleDeletionStatusRequestSerializer {
4361    fn serialize(params: &mut Params, name: &str, obj: &GetServiceLinkedRoleDeletionStatusRequest) {
4362        let mut prefix = name.to_string();
4363        if prefix != "" {
4364            prefix.push_str(".");
4365        }
4366
4367        params.put(
4368            &format!("{}{}", prefix, "DeletionTaskId"),
4369            &obj.deletion_task_id,
4370        );
4371    }
4372}
4373
4374#[derive(Clone, Debug, Default, PartialEq)]
4375#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4376pub struct GetServiceLinkedRoleDeletionStatusResponse {
4377    /// <p>An object that contains details about the reason the deletion failed.</p>
4378    pub reason: Option<DeletionTaskFailureReasonType>,
4379    /// <p>The status of the deletion.</p>
4380    pub status: String,
4381}
4382
4383#[allow(dead_code)]
4384struct GetServiceLinkedRoleDeletionStatusResponseDeserializer;
4385impl GetServiceLinkedRoleDeletionStatusResponseDeserializer {
4386    #[allow(dead_code, unused_variables)]
4387    fn deserialize<T: Peek + Next>(
4388        tag_name: &str,
4389        stack: &mut T,
4390    ) -> Result<GetServiceLinkedRoleDeletionStatusResponse, XmlParseError> {
4391        deserialize_elements::<_, GetServiceLinkedRoleDeletionStatusResponse, _>(
4392            tag_name,
4393            stack,
4394            |name, stack, obj| {
4395                match name {
4396                    "Reason" => {
4397                        obj.reason = Some(DeletionTaskFailureReasonTypeDeserializer::deserialize(
4398                            "Reason", stack,
4399                        )?);
4400                    }
4401                    "Status" => {
4402                        obj.status =
4403                            DeletionTaskStatusTypeDeserializer::deserialize("Status", stack)?;
4404                    }
4405                    _ => skip_tree(stack),
4406                }
4407                Ok(())
4408            },
4409        )
4410    }
4411}
4412#[derive(Clone, Debug, Default, PartialEq)]
4413#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4414pub struct GetUserPolicyRequest {
4415    /// <p>The name of the policy document to get.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
4416    pub policy_name: String,
4417    /// <p>The name of the user who the policy is associated with.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
4418    pub user_name: String,
4419}
4420
4421/// Serialize `GetUserPolicyRequest` contents to a `SignedRequest`.
4422struct GetUserPolicyRequestSerializer;
4423impl GetUserPolicyRequestSerializer {
4424    fn serialize(params: &mut Params, name: &str, obj: &GetUserPolicyRequest) {
4425        let mut prefix = name.to_string();
4426        if prefix != "" {
4427            prefix.push_str(".");
4428        }
4429
4430        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
4431        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
4432    }
4433}
4434
4435/// <p>Contains the response to a successful <a>GetUserPolicy</a> request. </p>
4436#[derive(Clone, Debug, Default, PartialEq)]
4437#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4438pub struct GetUserPolicyResponse {
4439    /// <p>The policy document.</p> <p>IAM stores policies in JSON format. However, resources that were created using AWS CloudFormation templates can be formatted in YAML. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p>
4440    pub policy_document: String,
4441    /// <p>The name of the policy.</p>
4442    pub policy_name: String,
4443    /// <p>The user the policy is associated with.</p>
4444    pub user_name: String,
4445}
4446
4447#[allow(dead_code)]
4448struct GetUserPolicyResponseDeserializer;
4449impl GetUserPolicyResponseDeserializer {
4450    #[allow(dead_code, unused_variables)]
4451    fn deserialize<T: Peek + Next>(
4452        tag_name: &str,
4453        stack: &mut T,
4454    ) -> Result<GetUserPolicyResponse, XmlParseError> {
4455        deserialize_elements::<_, GetUserPolicyResponse, _>(tag_name, stack, |name, stack, obj| {
4456            match name {
4457                "PolicyDocument" => {
4458                    obj.policy_document =
4459                        PolicyDocumentTypeDeserializer::deserialize("PolicyDocument", stack)?;
4460                }
4461                "PolicyName" => {
4462                    obj.policy_name = PolicyNameTypeDeserializer::deserialize("PolicyName", stack)?;
4463                }
4464                "UserName" => {
4465                    obj.user_name =
4466                        ExistingUserNameTypeDeserializer::deserialize("UserName", stack)?;
4467                }
4468                _ => skip_tree(stack),
4469            }
4470            Ok(())
4471        })
4472    }
4473}
4474#[derive(Clone, Debug, Default, PartialEq)]
4475#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4476pub struct GetUserRequest {
4477    /// <p>The name of the user to get information about.</p> <p>This parameter is optional. If it is not included, it defaults to the user making the request. This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
4478    pub user_name: Option<String>,
4479}
4480
4481/// Serialize `GetUserRequest` contents to a `SignedRequest`.
4482struct GetUserRequestSerializer;
4483impl GetUserRequestSerializer {
4484    fn serialize(params: &mut Params, name: &str, obj: &GetUserRequest) {
4485        let mut prefix = name.to_string();
4486        if prefix != "" {
4487            prefix.push_str(".");
4488        }
4489
4490        if let Some(ref field_value) = obj.user_name {
4491            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
4492        }
4493    }
4494}
4495
4496/// <p>Contains the response to a successful <a>GetUser</a> request. </p>
4497#[derive(Clone, Debug, Default, PartialEq)]
4498#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4499pub struct GetUserResponse {
4500    /// <p><p>A structure containing details about the IAM user.</p> <important> <p>Due to a service issue, password last used data does not include password use from May 3, 2018 22:50 PDT to May 23, 2018 14:08 PDT. This affects <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_finding-unused.html">last sign-in</a> dates shown in the IAM console and password last used dates in the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_getting-report.html">IAM credential report</a>, and returned by this operation. If users signed in during the affected time, the password last used date that is returned is the date the user last signed in before May 3, 2018. For users that signed in after May 23, 2018 14:08 PDT, the returned password last used date is accurate.</p> <p>You can use password last used information to identify unused credentials for deletion. For example, you might delete users who did not sign in to AWS in the last 90 days. In cases like this, we recommend that you adjust your evaluation window to include dates after May 23, 2018. Alternatively, if your users use access keys to access AWS programmatically you can refer to access key last used information because it is accurate for all dates. </p> </important></p>
4501    pub user: User,
4502}
4503
4504#[allow(dead_code)]
4505struct GetUserResponseDeserializer;
4506impl GetUserResponseDeserializer {
4507    #[allow(dead_code, unused_variables)]
4508    fn deserialize<T: Peek + Next>(
4509        tag_name: &str,
4510        stack: &mut T,
4511    ) -> Result<GetUserResponse, XmlParseError> {
4512        deserialize_elements::<_, GetUserResponse, _>(tag_name, stack, |name, stack, obj| {
4513            match name {
4514                "User" => {
4515                    obj.user = UserDeserializer::deserialize("User", stack)?;
4516                }
4517                _ => skip_tree(stack),
4518            }
4519            Ok(())
4520        })
4521    }
4522}
4523/// <p><p>Contains information about an IAM group entity.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a>CreateGroup</a> </p> </li> <li> <p> <a>GetGroup</a> </p> </li> <li> <p> <a>ListGroups</a> </p> </li> </ul></p>
4524#[derive(Clone, Debug, Default, PartialEq)]
4525#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4526pub struct Group {
4527    /// <p> The Amazon Resource Name (ARN) specifying the group. For more information about ARNs and how to use them in policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
4528    pub arn: String,
4529    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the group was created.</p>
4530    pub create_date: String,
4531    /// <p> The stable and unique string identifying the group. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
4532    pub group_id: String,
4533    /// <p>The friendly name that identifies the group.</p>
4534    pub group_name: String,
4535    /// <p>The path to the group. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
4536    pub path: String,
4537}
4538
4539#[allow(dead_code)]
4540struct GroupDeserializer;
4541impl GroupDeserializer {
4542    #[allow(dead_code, unused_variables)]
4543    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Group, XmlParseError> {
4544        deserialize_elements::<_, Group, _>(tag_name, stack, |name, stack, obj| {
4545            match name {
4546                "Arn" => {
4547                    obj.arn = ArnTypeDeserializer::deserialize("Arn", stack)?;
4548                }
4549                "CreateDate" => {
4550                    obj.create_date = DateTypeDeserializer::deserialize("CreateDate", stack)?;
4551                }
4552                "GroupId" => {
4553                    obj.group_id = IdTypeDeserializer::deserialize("GroupId", stack)?;
4554                }
4555                "GroupName" => {
4556                    obj.group_name = GroupNameTypeDeserializer::deserialize("GroupName", stack)?;
4557                }
4558                "Path" => {
4559                    obj.path = PathTypeDeserializer::deserialize("Path", stack)?;
4560                }
4561                _ => skip_tree(stack),
4562            }
4563            Ok(())
4564        })
4565    }
4566}
4567/// <p>Contains information about an IAM group, including all of the group's policies.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p>
4568#[derive(Clone, Debug, Default, PartialEq)]
4569#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4570pub struct GroupDetail {
4571    pub arn: Option<String>,
4572    /// <p>A list of the managed policies attached to the group.</p>
4573    pub attached_managed_policies: Option<Vec<AttachedPolicy>>,
4574    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the group was created.</p>
4575    pub create_date: Option<String>,
4576    /// <p>The stable and unique string identifying the group. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
4577    pub group_id: Option<String>,
4578    /// <p>The friendly name that identifies the group.</p>
4579    pub group_name: Option<String>,
4580    /// <p>A list of the inline policies embedded in the group.</p>
4581    pub group_policy_list: Option<Vec<PolicyDetail>>,
4582    /// <p>The path to the group. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
4583    pub path: Option<String>,
4584}
4585
4586#[allow(dead_code)]
4587struct GroupDetailDeserializer;
4588impl GroupDetailDeserializer {
4589    #[allow(dead_code, unused_variables)]
4590    fn deserialize<T: Peek + Next>(
4591        tag_name: &str,
4592        stack: &mut T,
4593    ) -> Result<GroupDetail, XmlParseError> {
4594        deserialize_elements::<_, GroupDetail, _>(tag_name, stack, |name, stack, obj| {
4595            match name {
4596                "Arn" => {
4597                    obj.arn = Some(ArnTypeDeserializer::deserialize("Arn", stack)?);
4598                }
4599                "AttachedManagedPolicies" => {
4600                    obj.attached_managed_policies.get_or_insert(vec![]).extend(
4601                        AttachedPoliciesListTypeDeserializer::deserialize(
4602                            "AttachedManagedPolicies",
4603                            stack,
4604                        )?,
4605                    );
4606                }
4607                "CreateDate" => {
4608                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
4609                }
4610                "GroupId" => {
4611                    obj.group_id = Some(IdTypeDeserializer::deserialize("GroupId", stack)?);
4612                }
4613                "GroupName" => {
4614                    obj.group_name =
4615                        Some(GroupNameTypeDeserializer::deserialize("GroupName", stack)?);
4616                }
4617                "GroupPolicyList" => {
4618                    obj.group_policy_list.get_or_insert(vec![]).extend(
4619                        PolicyDetailListTypeDeserializer::deserialize("GroupPolicyList", stack)?,
4620                    );
4621                }
4622                "Path" => {
4623                    obj.path = Some(PathTypeDeserializer::deserialize("Path", stack)?);
4624                }
4625                _ => skip_tree(stack),
4626            }
4627            Ok(())
4628        })
4629    }
4630}
4631#[allow(dead_code)]
4632struct GroupDetailListTypeDeserializer;
4633impl GroupDetailListTypeDeserializer {
4634    #[allow(dead_code, unused_variables)]
4635    fn deserialize<T: Peek + Next>(
4636        tag_name: &str,
4637        stack: &mut T,
4638    ) -> Result<Vec<GroupDetail>, XmlParseError> {
4639        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
4640            if name == "member" {
4641                obj.push(GroupDetailDeserializer::deserialize("member", stack)?);
4642            } else {
4643                skip_tree(stack);
4644            }
4645            Ok(())
4646        })
4647    }
4648}
4649#[allow(dead_code)]
4650struct GroupListTypeDeserializer;
4651impl GroupListTypeDeserializer {
4652    #[allow(dead_code, unused_variables)]
4653    fn deserialize<T: Peek + Next>(
4654        tag_name: &str,
4655        stack: &mut T,
4656    ) -> Result<Vec<Group>, XmlParseError> {
4657        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
4658            if name == "member" {
4659                obj.push(GroupDeserializer::deserialize("member", stack)?);
4660            } else {
4661                skip_tree(stack);
4662            }
4663            Ok(())
4664        })
4665    }
4666}
4667#[allow(dead_code)]
4668struct GroupNameListTypeDeserializer;
4669impl GroupNameListTypeDeserializer {
4670    #[allow(dead_code, unused_variables)]
4671    fn deserialize<T: Peek + Next>(
4672        tag_name: &str,
4673        stack: &mut T,
4674    ) -> Result<Vec<String>, XmlParseError> {
4675        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
4676            if name == "member" {
4677                obj.push(GroupNameTypeDeserializer::deserialize("member", stack)?);
4678            } else {
4679                skip_tree(stack);
4680            }
4681            Ok(())
4682        })
4683    }
4684}
4685#[allow(dead_code)]
4686struct GroupNameTypeDeserializer;
4687impl GroupNameTypeDeserializer {
4688    #[allow(dead_code, unused_variables)]
4689    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
4690        xml_util::deserialize_primitive(tag_name, stack, Ok)
4691    }
4692}
4693#[allow(dead_code)]
4694struct IdTypeDeserializer;
4695impl IdTypeDeserializer {
4696    #[allow(dead_code, unused_variables)]
4697    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
4698        xml_util::deserialize_primitive(tag_name, stack, Ok)
4699    }
4700}
4701/// <p><p>Contains information about an instance profile.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a>CreateInstanceProfile</a> </p> </li> <li> <p> <a>GetInstanceProfile</a> </p> </li> <li> <p> <a>ListInstanceProfiles</a> </p> </li> <li> <p> <a>ListInstanceProfilesForRole</a> </p> </li> </ul></p>
4702#[derive(Clone, Debug, Default, PartialEq)]
4703#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4704pub struct InstanceProfile {
4705    /// <p> The Amazon Resource Name (ARN) specifying the instance profile. For more information about ARNs and how to use them in policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
4706    pub arn: String,
4707    /// <p>The date when the instance profile was created.</p>
4708    pub create_date: String,
4709    /// <p> The stable and unique string identifying the instance profile. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
4710    pub instance_profile_id: String,
4711    /// <p>The name identifying the instance profile.</p>
4712    pub instance_profile_name: String,
4713    /// <p> The path to the instance profile. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
4714    pub path: String,
4715    /// <p>The role associated with the instance profile.</p>
4716    pub roles: Vec<Role>,
4717    /// <p>A list of tags that are attached to the instance profile. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
4718    pub tags: Option<Vec<Tag>>,
4719}
4720
4721#[allow(dead_code)]
4722struct InstanceProfileDeserializer;
4723impl InstanceProfileDeserializer {
4724    #[allow(dead_code, unused_variables)]
4725    fn deserialize<T: Peek + Next>(
4726        tag_name: &str,
4727        stack: &mut T,
4728    ) -> Result<InstanceProfile, XmlParseError> {
4729        deserialize_elements::<_, InstanceProfile, _>(tag_name, stack, |name, stack, obj| {
4730            match name {
4731                "Arn" => {
4732                    obj.arn = ArnTypeDeserializer::deserialize("Arn", stack)?;
4733                }
4734                "CreateDate" => {
4735                    obj.create_date = DateTypeDeserializer::deserialize("CreateDate", stack)?;
4736                }
4737                "InstanceProfileId" => {
4738                    obj.instance_profile_id =
4739                        IdTypeDeserializer::deserialize("InstanceProfileId", stack)?;
4740                }
4741                "InstanceProfileName" => {
4742                    obj.instance_profile_name = InstanceProfileNameTypeDeserializer::deserialize(
4743                        "InstanceProfileName",
4744                        stack,
4745                    )?;
4746                }
4747                "Path" => {
4748                    obj.path = PathTypeDeserializer::deserialize("Path", stack)?;
4749                }
4750                "Roles" => {
4751                    obj.roles
4752                        .extend(RoleListTypeDeserializer::deserialize("Roles", stack)?);
4753                }
4754                "Tags" => {
4755                    obj.tags
4756                        .get_or_insert(vec![])
4757                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
4758                }
4759                _ => skip_tree(stack),
4760            }
4761            Ok(())
4762        })
4763    }
4764}
4765#[allow(dead_code)]
4766struct InstanceProfileListTypeDeserializer;
4767impl InstanceProfileListTypeDeserializer {
4768    #[allow(dead_code, unused_variables)]
4769    fn deserialize<T: Peek + Next>(
4770        tag_name: &str,
4771        stack: &mut T,
4772    ) -> Result<Vec<InstanceProfile>, XmlParseError> {
4773        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
4774            if name == "member" {
4775                obj.push(InstanceProfileDeserializer::deserialize("member", stack)?);
4776            } else {
4777                skip_tree(stack);
4778            }
4779            Ok(())
4780        })
4781    }
4782}
4783#[allow(dead_code)]
4784struct InstanceProfileNameTypeDeserializer;
4785impl InstanceProfileNameTypeDeserializer {
4786    #[allow(dead_code, unused_variables)]
4787    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
4788        xml_util::deserialize_primitive(tag_name, stack, Ok)
4789    }
4790}
4791#[allow(dead_code)]
4792struct IntegerTypeDeserializer;
4793impl IntegerTypeDeserializer {
4794    #[allow(dead_code, unused_variables)]
4795    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
4796        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
4797    }
4798}
4799#[allow(dead_code)]
4800struct JobIDTypeDeserializer;
4801impl JobIDTypeDeserializer {
4802    #[allow(dead_code, unused_variables)]
4803    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
4804        xml_util::deserialize_primitive(tag_name, stack, Ok)
4805    }
4806}
4807#[allow(dead_code)]
4808struct JobStatusTypeDeserializer;
4809impl JobStatusTypeDeserializer {
4810    #[allow(dead_code, unused_variables)]
4811    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
4812        xml_util::deserialize_primitive(tag_name, stack, Ok)
4813    }
4814}
4815#[allow(dead_code)]
4816struct LineNumberDeserializer;
4817impl LineNumberDeserializer {
4818    #[allow(dead_code, unused_variables)]
4819    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
4820        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
4821    }
4822}
4823#[derive(Clone, Debug, Default, PartialEq)]
4824#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4825pub struct ListAccessKeysRequest {
4826    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
4827    pub marker: Option<String>,
4828    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
4829    pub max_items: Option<i64>,
4830    /// <p>The name of the user.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
4831    pub user_name: Option<String>,
4832}
4833
4834/// Serialize `ListAccessKeysRequest` contents to a `SignedRequest`.
4835struct ListAccessKeysRequestSerializer;
4836impl ListAccessKeysRequestSerializer {
4837    fn serialize(params: &mut Params, name: &str, obj: &ListAccessKeysRequest) {
4838        let mut prefix = name.to_string();
4839        if prefix != "" {
4840            prefix.push_str(".");
4841        }
4842
4843        if let Some(ref field_value) = obj.marker {
4844            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
4845        }
4846        if let Some(ref field_value) = obj.max_items {
4847            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
4848        }
4849        if let Some(ref field_value) = obj.user_name {
4850            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
4851        }
4852    }
4853}
4854
4855/// <p>Contains the response to a successful <a>ListAccessKeys</a> request. </p>
4856#[derive(Clone, Debug, Default, PartialEq)]
4857#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4858pub struct ListAccessKeysResponse {
4859    /// <p>A list of objects containing metadata about the access keys.</p>
4860    pub access_key_metadata: Vec<AccessKeyMetadata>,
4861    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
4862    pub is_truncated: Option<bool>,
4863    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
4864    pub marker: Option<String>,
4865}
4866
4867#[allow(dead_code)]
4868struct ListAccessKeysResponseDeserializer;
4869impl ListAccessKeysResponseDeserializer {
4870    #[allow(dead_code, unused_variables)]
4871    fn deserialize<T: Peek + Next>(
4872        tag_name: &str,
4873        stack: &mut T,
4874    ) -> Result<ListAccessKeysResponse, XmlParseError> {
4875        deserialize_elements::<_, ListAccessKeysResponse, _>(tag_name, stack, |name, stack, obj| {
4876            match name {
4877                "AccessKeyMetadata" => {
4878                    obj.access_key_metadata.extend(
4879                        AccessKeyMetadataListTypeDeserializer::deserialize(
4880                            "AccessKeyMetadata",
4881                            stack,
4882                        )?,
4883                    );
4884                }
4885                "IsTruncated" => {
4886                    obj.is_truncated =
4887                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
4888                }
4889                "Marker" => {
4890                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
4891                        "Marker", stack,
4892                    )?);
4893                }
4894                _ => skip_tree(stack),
4895            }
4896            Ok(())
4897        })
4898    }
4899}
4900#[derive(Clone, Debug, Default, PartialEq)]
4901#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4902pub struct ListAccountAliasesRequest {
4903    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
4904    pub marker: Option<String>,
4905    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
4906    pub max_items: Option<i64>,
4907}
4908
4909/// Serialize `ListAccountAliasesRequest` contents to a `SignedRequest`.
4910struct ListAccountAliasesRequestSerializer;
4911impl ListAccountAliasesRequestSerializer {
4912    fn serialize(params: &mut Params, name: &str, obj: &ListAccountAliasesRequest) {
4913        let mut prefix = name.to_string();
4914        if prefix != "" {
4915            prefix.push_str(".");
4916        }
4917
4918        if let Some(ref field_value) = obj.marker {
4919            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
4920        }
4921        if let Some(ref field_value) = obj.max_items {
4922            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
4923        }
4924    }
4925}
4926
4927/// <p>Contains the response to a successful <a>ListAccountAliases</a> request. </p>
4928#[derive(Clone, Debug, Default, PartialEq)]
4929#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
4930pub struct ListAccountAliasesResponse {
4931    /// <p>A list of aliases associated with the account. AWS supports only one alias per account.</p>
4932    pub account_aliases: Vec<String>,
4933    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
4934    pub is_truncated: Option<bool>,
4935    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
4936    pub marker: Option<String>,
4937}
4938
4939#[allow(dead_code)]
4940struct ListAccountAliasesResponseDeserializer;
4941impl ListAccountAliasesResponseDeserializer {
4942    #[allow(dead_code, unused_variables)]
4943    fn deserialize<T: Peek + Next>(
4944        tag_name: &str,
4945        stack: &mut T,
4946    ) -> Result<ListAccountAliasesResponse, XmlParseError> {
4947        deserialize_elements::<_, ListAccountAliasesResponse, _>(
4948            tag_name,
4949            stack,
4950            |name, stack, obj| {
4951                match name {
4952                    "AccountAliases" => {
4953                        obj.account_aliases
4954                            .extend(AccountAliasListTypeDeserializer::deserialize(
4955                                "AccountAliases",
4956                                stack,
4957                            )?);
4958                    }
4959                    "IsTruncated" => {
4960                        obj.is_truncated =
4961                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
4962                    }
4963                    "Marker" => {
4964                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
4965                            "Marker", stack,
4966                        )?);
4967                    }
4968                    _ => skip_tree(stack),
4969                }
4970                Ok(())
4971            },
4972        )
4973    }
4974}
4975#[derive(Clone, Debug, Default, PartialEq)]
4976#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
4977pub struct ListAttachedGroupPoliciesRequest {
4978    /// <p>The name (friendly name, not ARN) of the group to list attached policies for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
4979    pub group_name: String,
4980    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
4981    pub marker: Option<String>,
4982    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
4983    pub max_items: Option<i64>,
4984    /// <p>The path prefix for filtering the results. This parameter is optional. If it is not included, it defaults to a slash (/), listing all policies.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
4985    pub path_prefix: Option<String>,
4986}
4987
4988/// Serialize `ListAttachedGroupPoliciesRequest` contents to a `SignedRequest`.
4989struct ListAttachedGroupPoliciesRequestSerializer;
4990impl ListAttachedGroupPoliciesRequestSerializer {
4991    fn serialize(params: &mut Params, name: &str, obj: &ListAttachedGroupPoliciesRequest) {
4992        let mut prefix = name.to_string();
4993        if prefix != "" {
4994            prefix.push_str(".");
4995        }
4996
4997        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
4998        if let Some(ref field_value) = obj.marker {
4999            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5000        }
5001        if let Some(ref field_value) = obj.max_items {
5002            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5003        }
5004        if let Some(ref field_value) = obj.path_prefix {
5005            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
5006        }
5007    }
5008}
5009
5010/// <p>Contains the response to a successful <a>ListAttachedGroupPolicies</a> request. </p>
5011#[derive(Clone, Debug, Default, PartialEq)]
5012#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5013pub struct ListAttachedGroupPoliciesResponse {
5014    /// <p>A list of the attached policies.</p>
5015    pub attached_policies: Option<Vec<AttachedPolicy>>,
5016    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5017    pub is_truncated: Option<bool>,
5018    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5019    pub marker: Option<String>,
5020}
5021
5022#[allow(dead_code)]
5023struct ListAttachedGroupPoliciesResponseDeserializer;
5024impl ListAttachedGroupPoliciesResponseDeserializer {
5025    #[allow(dead_code, unused_variables)]
5026    fn deserialize<T: Peek + Next>(
5027        tag_name: &str,
5028        stack: &mut T,
5029    ) -> Result<ListAttachedGroupPoliciesResponse, XmlParseError> {
5030        deserialize_elements::<_, ListAttachedGroupPoliciesResponse, _>(
5031            tag_name,
5032            stack,
5033            |name, stack, obj| {
5034                match name {
5035                    "AttachedPolicies" => {
5036                        obj.attached_policies.get_or_insert(vec![]).extend(
5037                            AttachedPoliciesListTypeDeserializer::deserialize(
5038                                "AttachedPolicies",
5039                                stack,
5040                            )?,
5041                        );
5042                    }
5043                    "IsTruncated" => {
5044                        obj.is_truncated =
5045                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5046                    }
5047                    "Marker" => {
5048                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5049                            "Marker", stack,
5050                        )?);
5051                    }
5052                    _ => skip_tree(stack),
5053                }
5054                Ok(())
5055            },
5056        )
5057    }
5058}
5059#[derive(Clone, Debug, Default, PartialEq)]
5060#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5061pub struct ListAttachedRolePoliciesRequest {
5062    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5063    pub marker: Option<String>,
5064    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5065    pub max_items: Option<i64>,
5066    /// <p>The path prefix for filtering the results. This parameter is optional. If it is not included, it defaults to a slash (/), listing all policies.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
5067    pub path_prefix: Option<String>,
5068    /// <p>The name (friendly name, not ARN) of the role to list attached policies for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
5069    pub role_name: String,
5070}
5071
5072/// Serialize `ListAttachedRolePoliciesRequest` contents to a `SignedRequest`.
5073struct ListAttachedRolePoliciesRequestSerializer;
5074impl ListAttachedRolePoliciesRequestSerializer {
5075    fn serialize(params: &mut Params, name: &str, obj: &ListAttachedRolePoliciesRequest) {
5076        let mut prefix = name.to_string();
5077        if prefix != "" {
5078            prefix.push_str(".");
5079        }
5080
5081        if let Some(ref field_value) = obj.marker {
5082            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5083        }
5084        if let Some(ref field_value) = obj.max_items {
5085            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5086        }
5087        if let Some(ref field_value) = obj.path_prefix {
5088            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
5089        }
5090        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
5091    }
5092}
5093
5094/// <p>Contains the response to a successful <a>ListAttachedRolePolicies</a> request. </p>
5095#[derive(Clone, Debug, Default, PartialEq)]
5096#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5097pub struct ListAttachedRolePoliciesResponse {
5098    /// <p>A list of the attached policies.</p>
5099    pub attached_policies: Option<Vec<AttachedPolicy>>,
5100    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5101    pub is_truncated: Option<bool>,
5102    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5103    pub marker: Option<String>,
5104}
5105
5106#[allow(dead_code)]
5107struct ListAttachedRolePoliciesResponseDeserializer;
5108impl ListAttachedRolePoliciesResponseDeserializer {
5109    #[allow(dead_code, unused_variables)]
5110    fn deserialize<T: Peek + Next>(
5111        tag_name: &str,
5112        stack: &mut T,
5113    ) -> Result<ListAttachedRolePoliciesResponse, XmlParseError> {
5114        deserialize_elements::<_, ListAttachedRolePoliciesResponse, _>(
5115            tag_name,
5116            stack,
5117            |name, stack, obj| {
5118                match name {
5119                    "AttachedPolicies" => {
5120                        obj.attached_policies.get_or_insert(vec![]).extend(
5121                            AttachedPoliciesListTypeDeserializer::deserialize(
5122                                "AttachedPolicies",
5123                                stack,
5124                            )?,
5125                        );
5126                    }
5127                    "IsTruncated" => {
5128                        obj.is_truncated =
5129                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5130                    }
5131                    "Marker" => {
5132                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5133                            "Marker", stack,
5134                        )?);
5135                    }
5136                    _ => skip_tree(stack),
5137                }
5138                Ok(())
5139            },
5140        )
5141    }
5142}
5143#[derive(Clone, Debug, Default, PartialEq)]
5144#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5145pub struct ListAttachedUserPoliciesRequest {
5146    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5147    pub marker: Option<String>,
5148    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5149    pub max_items: Option<i64>,
5150    /// <p>The path prefix for filtering the results. This parameter is optional. If it is not included, it defaults to a slash (/), listing all policies.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
5151    pub path_prefix: Option<String>,
5152    /// <p>The name (friendly name, not ARN) of the user to list attached policies for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
5153    pub user_name: String,
5154}
5155
5156/// Serialize `ListAttachedUserPoliciesRequest` contents to a `SignedRequest`.
5157struct ListAttachedUserPoliciesRequestSerializer;
5158impl ListAttachedUserPoliciesRequestSerializer {
5159    fn serialize(params: &mut Params, name: &str, obj: &ListAttachedUserPoliciesRequest) {
5160        let mut prefix = name.to_string();
5161        if prefix != "" {
5162            prefix.push_str(".");
5163        }
5164
5165        if let Some(ref field_value) = obj.marker {
5166            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5167        }
5168        if let Some(ref field_value) = obj.max_items {
5169            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5170        }
5171        if let Some(ref field_value) = obj.path_prefix {
5172            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
5173        }
5174        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
5175    }
5176}
5177
5178/// <p>Contains the response to a successful <a>ListAttachedUserPolicies</a> request. </p>
5179#[derive(Clone, Debug, Default, PartialEq)]
5180#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5181pub struct ListAttachedUserPoliciesResponse {
5182    /// <p>A list of the attached policies.</p>
5183    pub attached_policies: Option<Vec<AttachedPolicy>>,
5184    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5185    pub is_truncated: Option<bool>,
5186    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5187    pub marker: Option<String>,
5188}
5189
5190#[allow(dead_code)]
5191struct ListAttachedUserPoliciesResponseDeserializer;
5192impl ListAttachedUserPoliciesResponseDeserializer {
5193    #[allow(dead_code, unused_variables)]
5194    fn deserialize<T: Peek + Next>(
5195        tag_name: &str,
5196        stack: &mut T,
5197    ) -> Result<ListAttachedUserPoliciesResponse, XmlParseError> {
5198        deserialize_elements::<_, ListAttachedUserPoliciesResponse, _>(
5199            tag_name,
5200            stack,
5201            |name, stack, obj| {
5202                match name {
5203                    "AttachedPolicies" => {
5204                        obj.attached_policies.get_or_insert(vec![]).extend(
5205                            AttachedPoliciesListTypeDeserializer::deserialize(
5206                                "AttachedPolicies",
5207                                stack,
5208                            )?,
5209                        );
5210                    }
5211                    "IsTruncated" => {
5212                        obj.is_truncated =
5213                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5214                    }
5215                    "Marker" => {
5216                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5217                            "Marker", stack,
5218                        )?);
5219                    }
5220                    _ => skip_tree(stack),
5221                }
5222                Ok(())
5223            },
5224        )
5225    }
5226}
5227#[derive(Clone, Debug, Default, PartialEq)]
5228#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5229pub struct ListEntitiesForPolicyRequest {
5230    /// <p>The entity type to use for filtering the results.</p> <p>For example, when <code>EntityFilter</code> is <code>Role</code>, only the roles that are attached to the specified policy are returned. This parameter is optional. If it is not included, all attached entities (users, groups, and roles) are returned. The argument for this parameter must be one of the valid values listed below.</p>
5231    pub entity_filter: Option<String>,
5232    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5233    pub marker: Option<String>,
5234    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5235    pub max_items: Option<i64>,
5236    /// <p>The path prefix for filtering the results. This parameter is optional. If it is not included, it defaults to a slash (/), listing all entities.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
5237    pub path_prefix: Option<String>,
5238    /// <p>The Amazon Resource Name (ARN) of the IAM policy for which you want the versions.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
5239    pub policy_arn: String,
5240    /// <p>The policy usage method to use for filtering the results.</p> <p>To list only permissions policies, set <code>PolicyUsageFilter</code> to <code>PermissionsPolicy</code>. To list only the policies used to set permissions boundaries, set the value to <code>PermissionsBoundary</code>.</p> <p>This parameter is optional. If it is not included, all policies are returned. </p>
5241    pub policy_usage_filter: Option<String>,
5242}
5243
5244/// Serialize `ListEntitiesForPolicyRequest` contents to a `SignedRequest`.
5245struct ListEntitiesForPolicyRequestSerializer;
5246impl ListEntitiesForPolicyRequestSerializer {
5247    fn serialize(params: &mut Params, name: &str, obj: &ListEntitiesForPolicyRequest) {
5248        let mut prefix = name.to_string();
5249        if prefix != "" {
5250            prefix.push_str(".");
5251        }
5252
5253        if let Some(ref field_value) = obj.entity_filter {
5254            params.put(&format!("{}{}", prefix, "EntityFilter"), &field_value);
5255        }
5256        if let Some(ref field_value) = obj.marker {
5257            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5258        }
5259        if let Some(ref field_value) = obj.max_items {
5260            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5261        }
5262        if let Some(ref field_value) = obj.path_prefix {
5263            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
5264        }
5265        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
5266        if let Some(ref field_value) = obj.policy_usage_filter {
5267            params.put(&format!("{}{}", prefix, "PolicyUsageFilter"), &field_value);
5268        }
5269    }
5270}
5271
5272/// <p>Contains the response to a successful <a>ListEntitiesForPolicy</a> request. </p>
5273#[derive(Clone, Debug, Default, PartialEq)]
5274#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5275pub struct ListEntitiesForPolicyResponse {
5276    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5277    pub is_truncated: Option<bool>,
5278    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5279    pub marker: Option<String>,
5280    /// <p>A list of IAM groups that the policy is attached to.</p>
5281    pub policy_groups: Option<Vec<PolicyGroup>>,
5282    /// <p>A list of IAM roles that the policy is attached to.</p>
5283    pub policy_roles: Option<Vec<PolicyRole>>,
5284    /// <p>A list of IAM users that the policy is attached to.</p>
5285    pub policy_users: Option<Vec<PolicyUser>>,
5286}
5287
5288#[allow(dead_code)]
5289struct ListEntitiesForPolicyResponseDeserializer;
5290impl ListEntitiesForPolicyResponseDeserializer {
5291    #[allow(dead_code, unused_variables)]
5292    fn deserialize<T: Peek + Next>(
5293        tag_name: &str,
5294        stack: &mut T,
5295    ) -> Result<ListEntitiesForPolicyResponse, XmlParseError> {
5296        deserialize_elements::<_, ListEntitiesForPolicyResponse, _>(
5297            tag_name,
5298            stack,
5299            |name, stack, obj| {
5300                match name {
5301                    "IsTruncated" => {
5302                        obj.is_truncated =
5303                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5304                    }
5305                    "Marker" => {
5306                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5307                            "Marker", stack,
5308                        )?);
5309                    }
5310                    "PolicyGroups" => {
5311                        obj.policy_groups.get_or_insert(vec![]).extend(
5312                            PolicyGroupListTypeDeserializer::deserialize("PolicyGroups", stack)?,
5313                        );
5314                    }
5315                    "PolicyRoles" => {
5316                        obj.policy_roles.get_or_insert(vec![]).extend(
5317                            PolicyRoleListTypeDeserializer::deserialize("PolicyRoles", stack)?,
5318                        );
5319                    }
5320                    "PolicyUsers" => {
5321                        obj.policy_users.get_or_insert(vec![]).extend(
5322                            PolicyUserListTypeDeserializer::deserialize("PolicyUsers", stack)?,
5323                        );
5324                    }
5325                    _ => skip_tree(stack),
5326                }
5327                Ok(())
5328            },
5329        )
5330    }
5331}
5332#[derive(Clone, Debug, Default, PartialEq)]
5333#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5334pub struct ListGroupPoliciesRequest {
5335    /// <p>The name of the group to list policies for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
5336    pub group_name: String,
5337    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5338    pub marker: Option<String>,
5339    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5340    pub max_items: Option<i64>,
5341}
5342
5343/// Serialize `ListGroupPoliciesRequest` contents to a `SignedRequest`.
5344struct ListGroupPoliciesRequestSerializer;
5345impl ListGroupPoliciesRequestSerializer {
5346    fn serialize(params: &mut Params, name: &str, obj: &ListGroupPoliciesRequest) {
5347        let mut prefix = name.to_string();
5348        if prefix != "" {
5349            prefix.push_str(".");
5350        }
5351
5352        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
5353        if let Some(ref field_value) = obj.marker {
5354            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5355        }
5356        if let Some(ref field_value) = obj.max_items {
5357            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5358        }
5359    }
5360}
5361
5362/// <p>Contains the response to a successful <a>ListGroupPolicies</a> request. </p>
5363#[derive(Clone, Debug, Default, PartialEq)]
5364#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5365pub struct ListGroupPoliciesResponse {
5366    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5367    pub is_truncated: Option<bool>,
5368    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5369    pub marker: Option<String>,
5370    /// <p>A list of policy names.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
5371    pub policy_names: Vec<String>,
5372}
5373
5374#[allow(dead_code)]
5375struct ListGroupPoliciesResponseDeserializer;
5376impl ListGroupPoliciesResponseDeserializer {
5377    #[allow(dead_code, unused_variables)]
5378    fn deserialize<T: Peek + Next>(
5379        tag_name: &str,
5380        stack: &mut T,
5381    ) -> Result<ListGroupPoliciesResponse, XmlParseError> {
5382        deserialize_elements::<_, ListGroupPoliciesResponse, _>(
5383            tag_name,
5384            stack,
5385            |name, stack, obj| {
5386                match name {
5387                    "IsTruncated" => {
5388                        obj.is_truncated =
5389                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5390                    }
5391                    "Marker" => {
5392                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5393                            "Marker", stack,
5394                        )?);
5395                    }
5396                    "PolicyNames" => {
5397                        obj.policy_names
5398                            .extend(PolicyNameListTypeDeserializer::deserialize(
5399                                "PolicyNames",
5400                                stack,
5401                            )?);
5402                    }
5403                    _ => skip_tree(stack),
5404                }
5405                Ok(())
5406            },
5407        )
5408    }
5409}
5410#[derive(Clone, Debug, Default, PartialEq)]
5411#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5412pub struct ListGroupsForUserRequest {
5413    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5414    pub marker: Option<String>,
5415    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5416    pub max_items: Option<i64>,
5417    /// <p>The name of the user to list groups for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
5418    pub user_name: String,
5419}
5420
5421/// Serialize `ListGroupsForUserRequest` contents to a `SignedRequest`.
5422struct ListGroupsForUserRequestSerializer;
5423impl ListGroupsForUserRequestSerializer {
5424    fn serialize(params: &mut Params, name: &str, obj: &ListGroupsForUserRequest) {
5425        let mut prefix = name.to_string();
5426        if prefix != "" {
5427            prefix.push_str(".");
5428        }
5429
5430        if let Some(ref field_value) = obj.marker {
5431            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5432        }
5433        if let Some(ref field_value) = obj.max_items {
5434            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5435        }
5436        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
5437    }
5438}
5439
5440/// <p>Contains the response to a successful <a>ListGroupsForUser</a> request. </p>
5441#[derive(Clone, Debug, Default, PartialEq)]
5442#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5443pub struct ListGroupsForUserResponse {
5444    /// <p>A list of groups.</p>
5445    pub groups: Vec<Group>,
5446    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5447    pub is_truncated: Option<bool>,
5448    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5449    pub marker: Option<String>,
5450}
5451
5452#[allow(dead_code)]
5453struct ListGroupsForUserResponseDeserializer;
5454impl ListGroupsForUserResponseDeserializer {
5455    #[allow(dead_code, unused_variables)]
5456    fn deserialize<T: Peek + Next>(
5457        tag_name: &str,
5458        stack: &mut T,
5459    ) -> Result<ListGroupsForUserResponse, XmlParseError> {
5460        deserialize_elements::<_, ListGroupsForUserResponse, _>(
5461            tag_name,
5462            stack,
5463            |name, stack, obj| {
5464                match name {
5465                    "Groups" => {
5466                        obj.groups
5467                            .extend(GroupListTypeDeserializer::deserialize("Groups", stack)?);
5468                    }
5469                    "IsTruncated" => {
5470                        obj.is_truncated =
5471                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5472                    }
5473                    "Marker" => {
5474                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5475                            "Marker", stack,
5476                        )?);
5477                    }
5478                    _ => skip_tree(stack),
5479                }
5480                Ok(())
5481            },
5482        )
5483    }
5484}
5485#[derive(Clone, Debug, Default, PartialEq)]
5486#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5487pub struct ListGroupsRequest {
5488    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5489    pub marker: Option<String>,
5490    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5491    pub max_items: Option<i64>,
5492    /// <p> The path prefix for filtering the results. For example, the prefix <code>/division_abc/subdivision_xyz/</code> gets all groups whose path starts with <code>/division_abc/subdivision_xyz/</code>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/), listing all groups. This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
5493    pub path_prefix: Option<String>,
5494}
5495
5496/// Serialize `ListGroupsRequest` contents to a `SignedRequest`.
5497struct ListGroupsRequestSerializer;
5498impl ListGroupsRequestSerializer {
5499    fn serialize(params: &mut Params, name: &str, obj: &ListGroupsRequest) {
5500        let mut prefix = name.to_string();
5501        if prefix != "" {
5502            prefix.push_str(".");
5503        }
5504
5505        if let Some(ref field_value) = obj.marker {
5506            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5507        }
5508        if let Some(ref field_value) = obj.max_items {
5509            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5510        }
5511        if let Some(ref field_value) = obj.path_prefix {
5512            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
5513        }
5514    }
5515}
5516
5517/// <p>Contains the response to a successful <a>ListGroups</a> request. </p>
5518#[derive(Clone, Debug, Default, PartialEq)]
5519#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5520pub struct ListGroupsResponse {
5521    /// <p>A list of groups.</p>
5522    pub groups: Vec<Group>,
5523    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5524    pub is_truncated: Option<bool>,
5525    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5526    pub marker: Option<String>,
5527}
5528
5529#[allow(dead_code)]
5530struct ListGroupsResponseDeserializer;
5531impl ListGroupsResponseDeserializer {
5532    #[allow(dead_code, unused_variables)]
5533    fn deserialize<T: Peek + Next>(
5534        tag_name: &str,
5535        stack: &mut T,
5536    ) -> Result<ListGroupsResponse, XmlParseError> {
5537        deserialize_elements::<_, ListGroupsResponse, _>(tag_name, stack, |name, stack, obj| {
5538            match name {
5539                "Groups" => {
5540                    obj.groups
5541                        .extend(GroupListTypeDeserializer::deserialize("Groups", stack)?);
5542                }
5543                "IsTruncated" => {
5544                    obj.is_truncated =
5545                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5546                }
5547                "Marker" => {
5548                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5549                        "Marker", stack,
5550                    )?);
5551                }
5552                _ => skip_tree(stack),
5553            }
5554            Ok(())
5555        })
5556    }
5557}
5558#[derive(Clone, Debug, Default, PartialEq)]
5559#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5560pub struct ListInstanceProfileTagsRequest {
5561    /// <p>The name of the IAM instance profile whose tags you want to see.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
5562    pub instance_profile_name: String,
5563    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5564    pub marker: Option<String>,
5565    /// <p>(Optional) Use this only when paginating results to indicate the maximum number of items that you want in the response. If additional items exist beyond the maximum that you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, it defaults to 100. Note that IAM might return fewer results, even when more results are available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5566    pub max_items: Option<i64>,
5567}
5568
5569/// Serialize `ListInstanceProfileTagsRequest` contents to a `SignedRequest`.
5570struct ListInstanceProfileTagsRequestSerializer;
5571impl ListInstanceProfileTagsRequestSerializer {
5572    fn serialize(params: &mut Params, name: &str, obj: &ListInstanceProfileTagsRequest) {
5573        let mut prefix = name.to_string();
5574        if prefix != "" {
5575            prefix.push_str(".");
5576        }
5577
5578        params.put(
5579            &format!("{}{}", prefix, "InstanceProfileName"),
5580            &obj.instance_profile_name,
5581        );
5582        if let Some(ref field_value) = obj.marker {
5583            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5584        }
5585        if let Some(ref field_value) = obj.max_items {
5586            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5587        }
5588    }
5589}
5590
5591#[derive(Clone, Debug, Default, PartialEq)]
5592#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5593pub struct ListInstanceProfileTagsResponse {
5594    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can use the <code>Marker</code> request parameter to make a subsequent pagination request that retrieves more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when more results are available. Check <code>IsTruncated</code> after every call to ensure that you receive all of your results.</p>
5595    pub is_truncated: Option<bool>,
5596    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5597    pub marker: Option<String>,
5598    /// <p>The list of tags that are currently attached to the IAM instance profile. Each tag consists of a key name and an associated value. If no tags are attached to the specified resource, the response contains an empty list.</p>
5599    pub tags: Vec<Tag>,
5600}
5601
5602#[allow(dead_code)]
5603struct ListInstanceProfileTagsResponseDeserializer;
5604impl ListInstanceProfileTagsResponseDeserializer {
5605    #[allow(dead_code, unused_variables)]
5606    fn deserialize<T: Peek + Next>(
5607        tag_name: &str,
5608        stack: &mut T,
5609    ) -> Result<ListInstanceProfileTagsResponse, XmlParseError> {
5610        deserialize_elements::<_, ListInstanceProfileTagsResponse, _>(
5611            tag_name,
5612            stack,
5613            |name, stack, obj| {
5614                match name {
5615                    "IsTruncated" => {
5616                        obj.is_truncated =
5617                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5618                    }
5619                    "Marker" => {
5620                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5621                            "Marker", stack,
5622                        )?);
5623                    }
5624                    "Tags" => {
5625                        obj.tags
5626                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
5627                    }
5628                    _ => skip_tree(stack),
5629                }
5630                Ok(())
5631            },
5632        )
5633    }
5634}
5635#[derive(Clone, Debug, Default, PartialEq)]
5636#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5637pub struct ListInstanceProfilesForRoleRequest {
5638    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5639    pub marker: Option<String>,
5640    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5641    pub max_items: Option<i64>,
5642    /// <p>The name of the role to list instance profiles for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
5643    pub role_name: String,
5644}
5645
5646/// Serialize `ListInstanceProfilesForRoleRequest` contents to a `SignedRequest`.
5647struct ListInstanceProfilesForRoleRequestSerializer;
5648impl ListInstanceProfilesForRoleRequestSerializer {
5649    fn serialize(params: &mut Params, name: &str, obj: &ListInstanceProfilesForRoleRequest) {
5650        let mut prefix = name.to_string();
5651        if prefix != "" {
5652            prefix.push_str(".");
5653        }
5654
5655        if let Some(ref field_value) = obj.marker {
5656            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5657        }
5658        if let Some(ref field_value) = obj.max_items {
5659            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5660        }
5661        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
5662    }
5663}
5664
5665/// <p>Contains the response to a successful <a>ListInstanceProfilesForRole</a> request. </p>
5666#[derive(Clone, Debug, Default, PartialEq)]
5667#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5668pub struct ListInstanceProfilesForRoleResponse {
5669    /// <p>A list of instance profiles.</p>
5670    pub instance_profiles: Vec<InstanceProfile>,
5671    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5672    pub is_truncated: Option<bool>,
5673    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5674    pub marker: Option<String>,
5675}
5676
5677#[allow(dead_code)]
5678struct ListInstanceProfilesForRoleResponseDeserializer;
5679impl ListInstanceProfilesForRoleResponseDeserializer {
5680    #[allow(dead_code, unused_variables)]
5681    fn deserialize<T: Peek + Next>(
5682        tag_name: &str,
5683        stack: &mut T,
5684    ) -> Result<ListInstanceProfilesForRoleResponse, XmlParseError> {
5685        deserialize_elements::<_, ListInstanceProfilesForRoleResponse, _>(
5686            tag_name,
5687            stack,
5688            |name, stack, obj| {
5689                match name {
5690                    "InstanceProfiles" => {
5691                        obj.instance_profiles.extend(
5692                            InstanceProfileListTypeDeserializer::deserialize(
5693                                "InstanceProfiles",
5694                                stack,
5695                            )?,
5696                        );
5697                    }
5698                    "IsTruncated" => {
5699                        obj.is_truncated =
5700                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5701                    }
5702                    "Marker" => {
5703                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5704                            "Marker", stack,
5705                        )?);
5706                    }
5707                    _ => skip_tree(stack),
5708                }
5709                Ok(())
5710            },
5711        )
5712    }
5713}
5714#[derive(Clone, Debug, Default, PartialEq)]
5715#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5716pub struct ListInstanceProfilesRequest {
5717    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5718    pub marker: Option<String>,
5719    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5720    pub max_items: Option<i64>,
5721    /// <p> The path prefix for filtering the results. For example, the prefix <code>/application_abc/component_xyz/</code> gets all instance profiles whose path starts with <code>/application_abc/component_xyz/</code>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/), listing all instance profiles. This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
5722    pub path_prefix: Option<String>,
5723}
5724
5725/// Serialize `ListInstanceProfilesRequest` contents to a `SignedRequest`.
5726struct ListInstanceProfilesRequestSerializer;
5727impl ListInstanceProfilesRequestSerializer {
5728    fn serialize(params: &mut Params, name: &str, obj: &ListInstanceProfilesRequest) {
5729        let mut prefix = name.to_string();
5730        if prefix != "" {
5731            prefix.push_str(".");
5732        }
5733
5734        if let Some(ref field_value) = obj.marker {
5735            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5736        }
5737        if let Some(ref field_value) = obj.max_items {
5738            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5739        }
5740        if let Some(ref field_value) = obj.path_prefix {
5741            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
5742        }
5743    }
5744}
5745
5746/// <p>Contains the response to a successful <a>ListInstanceProfiles</a> request. </p>
5747#[derive(Clone, Debug, Default, PartialEq)]
5748#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5749pub struct ListInstanceProfilesResponse {
5750    /// <p>A list of instance profiles.</p>
5751    pub instance_profiles: Vec<InstanceProfile>,
5752    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5753    pub is_truncated: Option<bool>,
5754    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5755    pub marker: Option<String>,
5756}
5757
5758#[allow(dead_code)]
5759struct ListInstanceProfilesResponseDeserializer;
5760impl ListInstanceProfilesResponseDeserializer {
5761    #[allow(dead_code, unused_variables)]
5762    fn deserialize<T: Peek + Next>(
5763        tag_name: &str,
5764        stack: &mut T,
5765    ) -> Result<ListInstanceProfilesResponse, XmlParseError> {
5766        deserialize_elements::<_, ListInstanceProfilesResponse, _>(
5767            tag_name,
5768            stack,
5769            |name, stack, obj| {
5770                match name {
5771                    "InstanceProfiles" => {
5772                        obj.instance_profiles.extend(
5773                            InstanceProfileListTypeDeserializer::deserialize(
5774                                "InstanceProfiles",
5775                                stack,
5776                            )?,
5777                        );
5778                    }
5779                    "IsTruncated" => {
5780                        obj.is_truncated =
5781                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5782                    }
5783                    "Marker" => {
5784                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5785                            "Marker", stack,
5786                        )?);
5787                    }
5788                    _ => skip_tree(stack),
5789                }
5790                Ok(())
5791            },
5792        )
5793    }
5794}
5795#[derive(Clone, Debug, Default, PartialEq)]
5796#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5797pub struct ListMFADeviceTagsRequest {
5798    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5799    pub marker: Option<String>,
5800    /// <p>(Optional) Use this only when paginating results to indicate the maximum number of items that you want in the response. If additional items exist beyond the maximum that you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, it defaults to 100. Note that IAM might return fewer results, even when more results are available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5801    pub max_items: Option<i64>,
5802    /// <p>The unique identifier for the IAM virtual MFA device whose tags you want to see. For virtual MFA devices, the serial number is the same as the ARN.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
5803    pub serial_number: String,
5804}
5805
5806/// Serialize `ListMFADeviceTagsRequest` contents to a `SignedRequest`.
5807struct ListMFADeviceTagsRequestSerializer;
5808impl ListMFADeviceTagsRequestSerializer {
5809    fn serialize(params: &mut Params, name: &str, obj: &ListMFADeviceTagsRequest) {
5810        let mut prefix = name.to_string();
5811        if prefix != "" {
5812            prefix.push_str(".");
5813        }
5814
5815        if let Some(ref field_value) = obj.marker {
5816            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5817        }
5818        if let Some(ref field_value) = obj.max_items {
5819            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5820        }
5821        params.put(&format!("{}{}", prefix, "SerialNumber"), &obj.serial_number);
5822    }
5823}
5824
5825#[derive(Clone, Debug, Default, PartialEq)]
5826#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5827pub struct ListMFADeviceTagsResponse {
5828    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can use the <code>Marker</code> request parameter to make a subsequent pagination request that retrieves more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when more results are available. Check <code>IsTruncated</code> after every call to ensure that you receive all of your results.</p>
5829    pub is_truncated: Option<bool>,
5830    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5831    pub marker: Option<String>,
5832    /// <p>The list of tags that are currently attached to the virtual MFA device. Each tag consists of a key name and an associated value. If no tags are attached to the specified resource, the response contains an empty list.</p>
5833    pub tags: Vec<Tag>,
5834}
5835
5836#[allow(dead_code)]
5837struct ListMFADeviceTagsResponseDeserializer;
5838impl ListMFADeviceTagsResponseDeserializer {
5839    #[allow(dead_code, unused_variables)]
5840    fn deserialize<T: Peek + Next>(
5841        tag_name: &str,
5842        stack: &mut T,
5843    ) -> Result<ListMFADeviceTagsResponse, XmlParseError> {
5844        deserialize_elements::<_, ListMFADeviceTagsResponse, _>(
5845            tag_name,
5846            stack,
5847            |name, stack, obj| {
5848                match name {
5849                    "IsTruncated" => {
5850                        obj.is_truncated =
5851                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5852                    }
5853                    "Marker" => {
5854                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5855                            "Marker", stack,
5856                        )?);
5857                    }
5858                    "Tags" => {
5859                        obj.tags
5860                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
5861                    }
5862                    _ => skip_tree(stack),
5863                }
5864                Ok(())
5865            },
5866        )
5867    }
5868}
5869#[derive(Clone, Debug, Default, PartialEq)]
5870#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5871pub struct ListMFADevicesRequest {
5872    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5873    pub marker: Option<String>,
5874    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5875    pub max_items: Option<i64>,
5876    /// <p>The name of the user whose MFA devices you want to list.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
5877    pub user_name: Option<String>,
5878}
5879
5880/// Serialize `ListMFADevicesRequest` contents to a `SignedRequest`.
5881struct ListMFADevicesRequestSerializer;
5882impl ListMFADevicesRequestSerializer {
5883    fn serialize(params: &mut Params, name: &str, obj: &ListMFADevicesRequest) {
5884        let mut prefix = name.to_string();
5885        if prefix != "" {
5886            prefix.push_str(".");
5887        }
5888
5889        if let Some(ref field_value) = obj.marker {
5890            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5891        }
5892        if let Some(ref field_value) = obj.max_items {
5893            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5894        }
5895        if let Some(ref field_value) = obj.user_name {
5896            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
5897        }
5898    }
5899}
5900
5901/// <p>Contains the response to a successful <a>ListMFADevices</a> request. </p>
5902#[derive(Clone, Debug, Default, PartialEq)]
5903#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5904pub struct ListMFADevicesResponse {
5905    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
5906    pub is_truncated: Option<bool>,
5907    /// <p>A list of MFA devices.</p>
5908    pub mfa_devices: Vec<MFADevice>,
5909    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5910    pub marker: Option<String>,
5911}
5912
5913#[allow(dead_code)]
5914struct ListMFADevicesResponseDeserializer;
5915impl ListMFADevicesResponseDeserializer {
5916    #[allow(dead_code, unused_variables)]
5917    fn deserialize<T: Peek + Next>(
5918        tag_name: &str,
5919        stack: &mut T,
5920    ) -> Result<ListMFADevicesResponse, XmlParseError> {
5921        deserialize_elements::<_, ListMFADevicesResponse, _>(tag_name, stack, |name, stack, obj| {
5922            match name {
5923                "IsTruncated" => {
5924                    obj.is_truncated =
5925                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
5926                }
5927                "MFADevices" => {
5928                    obj.mfa_devices
5929                        .extend(MfaDeviceListTypeDeserializer::deserialize(
5930                            "MFADevices",
5931                            stack,
5932                        )?);
5933                }
5934                "Marker" => {
5935                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
5936                        "Marker", stack,
5937                    )?);
5938                }
5939                _ => skip_tree(stack),
5940            }
5941            Ok(())
5942        })
5943    }
5944}
5945#[derive(Clone, Debug, Default, PartialEq)]
5946#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
5947pub struct ListOpenIDConnectProviderTagsRequest {
5948    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
5949    pub marker: Option<String>,
5950    /// <p>(Optional) Use this only when paginating results to indicate the maximum number of items that you want in the response. If additional items exist beyond the maximum that you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, it defaults to 100. Note that IAM might return fewer results, even when more results are available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
5951    pub max_items: Option<i64>,
5952    /// <p>The ARN of the OpenID Connect (OIDC) identity provider whose tags you want to see.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
5953    pub open_id_connect_provider_arn: String,
5954}
5955
5956/// Serialize `ListOpenIDConnectProviderTagsRequest` contents to a `SignedRequest`.
5957struct ListOpenIDConnectProviderTagsRequestSerializer;
5958impl ListOpenIDConnectProviderTagsRequestSerializer {
5959    fn serialize(params: &mut Params, name: &str, obj: &ListOpenIDConnectProviderTagsRequest) {
5960        let mut prefix = name.to_string();
5961        if prefix != "" {
5962            prefix.push_str(".");
5963        }
5964
5965        if let Some(ref field_value) = obj.marker {
5966            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
5967        }
5968        if let Some(ref field_value) = obj.max_items {
5969            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
5970        }
5971        params.put(
5972            &format!("{}{}", prefix, "OpenIDConnectProviderArn"),
5973            &obj.open_id_connect_provider_arn,
5974        );
5975    }
5976}
5977
5978#[derive(Clone, Debug, Default, PartialEq)]
5979#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
5980pub struct ListOpenIDConnectProviderTagsResponse {
5981    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can use the <code>Marker</code> request parameter to make a subsequent pagination request that retrieves more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when more results are available. Check <code>IsTruncated</code> after every call to ensure that you receive all of your results.</p>
5982    pub is_truncated: Option<bool>,
5983    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
5984    pub marker: Option<String>,
5985    /// <p>The list of tags that are currently attached to the OpenID Connect (OIDC) identity provider. Each tag consists of a key name and an associated value. If no tags are attached to the specified resource, the response contains an empty list.</p>
5986    pub tags: Vec<Tag>,
5987}
5988
5989#[allow(dead_code)]
5990struct ListOpenIDConnectProviderTagsResponseDeserializer;
5991impl ListOpenIDConnectProviderTagsResponseDeserializer {
5992    #[allow(dead_code, unused_variables)]
5993    fn deserialize<T: Peek + Next>(
5994        tag_name: &str,
5995        stack: &mut T,
5996    ) -> Result<ListOpenIDConnectProviderTagsResponse, XmlParseError> {
5997        deserialize_elements::<_, ListOpenIDConnectProviderTagsResponse, _>(
5998            tag_name,
5999            stack,
6000            |name, stack, obj| {
6001                match name {
6002                    "IsTruncated" => {
6003                        obj.is_truncated =
6004                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6005                    }
6006                    "Marker" => {
6007                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6008                            "Marker", stack,
6009                        )?);
6010                    }
6011                    "Tags" => {
6012                        obj.tags
6013                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
6014                    }
6015                    _ => skip_tree(stack),
6016                }
6017                Ok(())
6018            },
6019        )
6020    }
6021}
6022#[derive(Clone, Debug, Default, PartialEq)]
6023#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6024pub struct ListOpenIDConnectProvidersRequest {}
6025
6026/// Serialize `ListOpenIDConnectProvidersRequest` contents to a `SignedRequest`.
6027struct ListOpenIDConnectProvidersRequestSerializer;
6028impl ListOpenIDConnectProvidersRequestSerializer {
6029    fn serialize(_params: &mut Params, name: &str, _obj: &ListOpenIDConnectProvidersRequest) {
6030        let mut prefix = name.to_string();
6031        if prefix != "" {
6032            prefix.push_str(".");
6033        }
6034    }
6035}
6036
6037/// <p>Contains the response to a successful <a>ListOpenIDConnectProviders</a> request. </p>
6038#[derive(Clone, Debug, Default, PartialEq)]
6039#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6040pub struct ListOpenIDConnectProvidersResponse {
6041    /// <p>The list of IAM OIDC provider resource objects defined in the AWS account.</p>
6042    pub open_id_connect_provider_list: Option<Vec<OpenIDConnectProviderListEntry>>,
6043}
6044
6045#[allow(dead_code)]
6046struct ListOpenIDConnectProvidersResponseDeserializer;
6047impl ListOpenIDConnectProvidersResponseDeserializer {
6048    #[allow(dead_code, unused_variables)]
6049    fn deserialize<T: Peek + Next>(
6050        tag_name: &str,
6051        stack: &mut T,
6052    ) -> Result<ListOpenIDConnectProvidersResponse, XmlParseError> {
6053        deserialize_elements::<_, ListOpenIDConnectProvidersResponse, _>(
6054            tag_name,
6055            stack,
6056            |name, stack, obj| {
6057                match name {
6058                    "OpenIDConnectProviderList" => {
6059                        obj.open_id_connect_provider_list
6060                            .get_or_insert(vec![])
6061                            .extend(OpenIDConnectProviderListTypeDeserializer::deserialize(
6062                                "OpenIDConnectProviderList",
6063                                stack,
6064                            )?);
6065                    }
6066                    _ => skip_tree(stack),
6067                }
6068                Ok(())
6069            },
6070        )
6071    }
6072}
6073/// <p>Contains details about the permissions policies that are attached to the specified identity (user, group, or role).</p> <p>This data type is used as a response element in the <a>ListPoliciesGrantingServiceAccess</a> operation.</p>
6074#[derive(Clone, Debug, Default, PartialEq)]
6075#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6076pub struct ListPoliciesGrantingServiceAccessEntry {
6077    /// <p>The <code>PoliciesGrantingServiceAccess</code> object that contains details about the policy.</p>
6078    pub policies: Option<Vec<PolicyGrantingServiceAccess>>,
6079    /// <p>The namespace of the service that was accessed.</p> <p>To learn the service namespace of a service, see <a href="https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html">Actions, resources, and condition keys for AWS services</a> in the <i>Service Authorization Reference</i>. Choose the name of the service to view details for that service. In the first paragraph, find the service prefix. For example, <code>(service prefix: a4b)</code>. For more information about service namespaces, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces">AWS service namespaces</a> in the <i>AWS General Reference</i>.</p>
6080    pub service_namespace: Option<String>,
6081}
6082
6083#[allow(dead_code)]
6084struct ListPoliciesGrantingServiceAccessEntryDeserializer;
6085impl ListPoliciesGrantingServiceAccessEntryDeserializer {
6086    #[allow(dead_code, unused_variables)]
6087    fn deserialize<T: Peek + Next>(
6088        tag_name: &str,
6089        stack: &mut T,
6090    ) -> Result<ListPoliciesGrantingServiceAccessEntry, XmlParseError> {
6091        deserialize_elements::<_, ListPoliciesGrantingServiceAccessEntry, _>(
6092            tag_name,
6093            stack,
6094            |name, stack, obj| {
6095                match name {
6096                    "Policies" => {
6097                        obj.policies.get_or_insert(vec![]).extend(
6098                            PolicyGrantingServiceAccessListTypeDeserializer::deserialize(
6099                                "Policies", stack,
6100                            )?,
6101                        );
6102                    }
6103                    "ServiceNamespace" => {
6104                        obj.service_namespace =
6105                            Some(ServiceNamespaceTypeDeserializer::deserialize(
6106                                "ServiceNamespace",
6107                                stack,
6108                            )?);
6109                    }
6110                    _ => skip_tree(stack),
6111                }
6112                Ok(())
6113            },
6114        )
6115    }
6116}
6117#[derive(Clone, Debug, Default, PartialEq)]
6118#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6119pub struct ListPoliciesGrantingServiceAccessRequest {
6120    /// <p>The ARN of the IAM identity (user, group, or role) whose policies you want to list.</p>
6121    pub arn: String,
6122    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6123    pub marker: Option<String>,
6124    /// <p>The service namespace for the AWS services whose policies you want to list.</p> <p>To learn the service namespace for a service, see <a href="https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html">Actions, resources, and condition keys for AWS services</a> in the <i>IAM User Guide</i>. Choose the name of the service to view details for that service. In the first paragraph, find the service prefix. For example, <code>(service prefix: a4b)</code>. For more information about service namespaces, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces">AWS service namespaces</a> in the <i>AWS General Reference</i>.</p>
6125    pub service_namespaces: Vec<String>,
6126}
6127
6128/// Serialize `ListPoliciesGrantingServiceAccessRequest` contents to a `SignedRequest`.
6129struct ListPoliciesGrantingServiceAccessRequestSerializer;
6130impl ListPoliciesGrantingServiceAccessRequestSerializer {
6131    fn serialize(params: &mut Params, name: &str, obj: &ListPoliciesGrantingServiceAccessRequest) {
6132        let mut prefix = name.to_string();
6133        if prefix != "" {
6134            prefix.push_str(".");
6135        }
6136
6137        params.put(&format!("{}{}", prefix, "Arn"), &obj.arn);
6138        if let Some(ref field_value) = obj.marker {
6139            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6140        }
6141        ServiceNamespaceListTypeSerializer::serialize(
6142            params,
6143            &format!("{}{}", prefix, "ServiceNamespaces"),
6144            &obj.service_namespaces,
6145        );
6146    }
6147}
6148
6149#[derive(Clone, Debug, Default, PartialEq)]
6150#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6151pub struct ListPoliciesGrantingServiceAccessResponse {
6152    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
6153    pub is_truncated: Option<bool>,
6154    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6155    pub marker: Option<String>,
6156    /// <p>A <code>ListPoliciesGrantingServiceAccess</code> object that contains details about the permissions policies attached to the specified identity (user, group, or role).</p>
6157    pub policies_granting_service_access: Vec<ListPoliciesGrantingServiceAccessEntry>,
6158}
6159
6160#[allow(dead_code)]
6161struct ListPoliciesGrantingServiceAccessResponseDeserializer;
6162impl ListPoliciesGrantingServiceAccessResponseDeserializer {
6163    #[allow(dead_code, unused_variables)]
6164    fn deserialize<T: Peek + Next>(
6165        tag_name: &str,
6166        stack: &mut T,
6167    ) -> Result<ListPoliciesGrantingServiceAccessResponse, XmlParseError> {
6168        deserialize_elements::<_, ListPoliciesGrantingServiceAccessResponse, _>(
6169            tag_name,
6170            stack,
6171            |name, stack, obj| {
6172                match name {
6173                    "IsTruncated" => {
6174                        obj.is_truncated =
6175                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6176                    }
6177                    "Marker" => {
6178                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6179                            "Marker", stack,
6180                        )?);
6181                    }
6182                    "PoliciesGrantingServiceAccess" => {
6183                        obj.policies_granting_service_access.extend(ListPolicyGrantingServiceAccessResponseListTypeDeserializer::deserialize("PoliciesGrantingServiceAccess", stack)?);
6184                    }
6185                    _ => skip_tree(stack),
6186                }
6187                Ok(())
6188            },
6189        )
6190    }
6191}
6192#[derive(Clone, Debug, Default, PartialEq)]
6193#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6194pub struct ListPoliciesRequest {
6195    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6196    pub marker: Option<String>,
6197    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6198    pub max_items: Option<i64>,
6199    /// <p>A flag to filter the results to only the attached policies.</p> <p>When <code>OnlyAttached</code> is <code>true</code>, the returned list contains only the policies that are attached to an IAM user, group, or role. When <code>OnlyAttached</code> is <code>false</code>, or when the parameter is not included, all policies are returned.</p>
6200    pub only_attached: Option<bool>,
6201    /// <p>The path prefix for filtering the results. This parameter is optional. If it is not included, it defaults to a slash (/), listing all policies. This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
6202    pub path_prefix: Option<String>,
6203    /// <p>The policy usage method to use for filtering the results.</p> <p>To list only permissions policies, set <code>PolicyUsageFilter</code> to <code>PermissionsPolicy</code>. To list only the policies used to set permissions boundaries, set the value to <code>PermissionsBoundary</code>.</p> <p>This parameter is optional. If it is not included, all policies are returned. </p>
6204    pub policy_usage_filter: Option<String>,
6205    /// <p>The scope to use for filtering the results.</p> <p>To list only AWS managed policies, set <code>Scope</code> to <code>AWS</code>. To list only the customer managed policies in your AWS account, set <code>Scope</code> to <code>Local</code>.</p> <p>This parameter is optional. If it is not included, or if it is set to <code>All</code>, all policies are returned.</p>
6206    pub scope: Option<String>,
6207}
6208
6209/// Serialize `ListPoliciesRequest` contents to a `SignedRequest`.
6210struct ListPoliciesRequestSerializer;
6211impl ListPoliciesRequestSerializer {
6212    fn serialize(params: &mut Params, name: &str, obj: &ListPoliciesRequest) {
6213        let mut prefix = name.to_string();
6214        if prefix != "" {
6215            prefix.push_str(".");
6216        }
6217
6218        if let Some(ref field_value) = obj.marker {
6219            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6220        }
6221        if let Some(ref field_value) = obj.max_items {
6222            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6223        }
6224        if let Some(ref field_value) = obj.only_attached {
6225            params.put(&format!("{}{}", prefix, "OnlyAttached"), &field_value);
6226        }
6227        if let Some(ref field_value) = obj.path_prefix {
6228            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
6229        }
6230        if let Some(ref field_value) = obj.policy_usage_filter {
6231            params.put(&format!("{}{}", prefix, "PolicyUsageFilter"), &field_value);
6232        }
6233        if let Some(ref field_value) = obj.scope {
6234            params.put(&format!("{}{}", prefix, "Scope"), &field_value);
6235        }
6236    }
6237}
6238
6239/// <p>Contains the response to a successful <a>ListPolicies</a> request. </p>
6240#[derive(Clone, Debug, Default, PartialEq)]
6241#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6242pub struct ListPoliciesResponse {
6243    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
6244    pub is_truncated: Option<bool>,
6245    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6246    pub marker: Option<String>,
6247    /// <p>A list of policies.</p>
6248    pub policies: Option<Vec<Policy>>,
6249}
6250
6251#[allow(dead_code)]
6252struct ListPoliciesResponseDeserializer;
6253impl ListPoliciesResponseDeserializer {
6254    #[allow(dead_code, unused_variables)]
6255    fn deserialize<T: Peek + Next>(
6256        tag_name: &str,
6257        stack: &mut T,
6258    ) -> Result<ListPoliciesResponse, XmlParseError> {
6259        deserialize_elements::<_, ListPoliciesResponse, _>(tag_name, stack, |name, stack, obj| {
6260            match name {
6261                "IsTruncated" => {
6262                    obj.is_truncated =
6263                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6264                }
6265                "Marker" => {
6266                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6267                        "Marker", stack,
6268                    )?);
6269                }
6270                "Policies" => {
6271                    obj.policies
6272                        .get_or_insert(vec![])
6273                        .extend(PolicyListTypeDeserializer::deserialize("Policies", stack)?);
6274                }
6275                _ => skip_tree(stack),
6276            }
6277            Ok(())
6278        })
6279    }
6280}
6281#[allow(dead_code)]
6282struct ListPolicyGrantingServiceAccessResponseListTypeDeserializer;
6283impl ListPolicyGrantingServiceAccessResponseListTypeDeserializer {
6284    #[allow(dead_code, unused_variables)]
6285    fn deserialize<T: Peek + Next>(
6286        tag_name: &str,
6287        stack: &mut T,
6288    ) -> Result<Vec<ListPoliciesGrantingServiceAccessEntry>, XmlParseError> {
6289        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
6290            if name == "member" {
6291                obj.push(
6292                    ListPoliciesGrantingServiceAccessEntryDeserializer::deserialize(
6293                        "member", stack,
6294                    )?,
6295                );
6296            } else {
6297                skip_tree(stack);
6298            }
6299            Ok(())
6300        })
6301    }
6302}
6303#[derive(Clone, Debug, Default, PartialEq)]
6304#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6305pub struct ListPolicyTagsRequest {
6306    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6307    pub marker: Option<String>,
6308    /// <p>(Optional) Use this only when paginating results to indicate the maximum number of items that you want in the response. If additional items exist beyond the maximum that you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, it defaults to 100. Note that IAM might return fewer results, even when more results are available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6309    pub max_items: Option<i64>,
6310    /// <p>The ARN of the IAM customer managed policy whose tags you want to see.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
6311    pub policy_arn: String,
6312}
6313
6314/// Serialize `ListPolicyTagsRequest` contents to a `SignedRequest`.
6315struct ListPolicyTagsRequestSerializer;
6316impl ListPolicyTagsRequestSerializer {
6317    fn serialize(params: &mut Params, name: &str, obj: &ListPolicyTagsRequest) {
6318        let mut prefix = name.to_string();
6319        if prefix != "" {
6320            prefix.push_str(".");
6321        }
6322
6323        if let Some(ref field_value) = obj.marker {
6324            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6325        }
6326        if let Some(ref field_value) = obj.max_items {
6327            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6328        }
6329        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
6330    }
6331}
6332
6333#[derive(Clone, Debug, Default, PartialEq)]
6334#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6335pub struct ListPolicyTagsResponse {
6336    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can use the <code>Marker</code> request parameter to make a subsequent pagination request that retrieves more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when more results are available. Check <code>IsTruncated</code> after every call to ensure that you receive all of your results.</p>
6337    pub is_truncated: Option<bool>,
6338    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6339    pub marker: Option<String>,
6340    /// <p>The list of tags that are currently attached to the IAM customer managed policy. Each tag consists of a key name and an associated value. If no tags are attached to the specified resource, the response contains an empty list.</p>
6341    pub tags: Vec<Tag>,
6342}
6343
6344#[allow(dead_code)]
6345struct ListPolicyTagsResponseDeserializer;
6346impl ListPolicyTagsResponseDeserializer {
6347    #[allow(dead_code, unused_variables)]
6348    fn deserialize<T: Peek + Next>(
6349        tag_name: &str,
6350        stack: &mut T,
6351    ) -> Result<ListPolicyTagsResponse, XmlParseError> {
6352        deserialize_elements::<_, ListPolicyTagsResponse, _>(tag_name, stack, |name, stack, obj| {
6353            match name {
6354                "IsTruncated" => {
6355                    obj.is_truncated =
6356                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6357                }
6358                "Marker" => {
6359                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6360                        "Marker", stack,
6361                    )?);
6362                }
6363                "Tags" => {
6364                    obj.tags
6365                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
6366                }
6367                _ => skip_tree(stack),
6368            }
6369            Ok(())
6370        })
6371    }
6372}
6373#[derive(Clone, Debug, Default, PartialEq)]
6374#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6375pub struct ListPolicyVersionsRequest {
6376    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6377    pub marker: Option<String>,
6378    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6379    pub max_items: Option<i64>,
6380    /// <p>The Amazon Resource Name (ARN) of the IAM policy for which you want the versions.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
6381    pub policy_arn: String,
6382}
6383
6384/// Serialize `ListPolicyVersionsRequest` contents to a `SignedRequest`.
6385struct ListPolicyVersionsRequestSerializer;
6386impl ListPolicyVersionsRequestSerializer {
6387    fn serialize(params: &mut Params, name: &str, obj: &ListPolicyVersionsRequest) {
6388        let mut prefix = name.to_string();
6389        if prefix != "" {
6390            prefix.push_str(".");
6391        }
6392
6393        if let Some(ref field_value) = obj.marker {
6394            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6395        }
6396        if let Some(ref field_value) = obj.max_items {
6397            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6398        }
6399        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
6400    }
6401}
6402
6403/// <p>Contains the response to a successful <a>ListPolicyVersions</a> request. </p>
6404#[derive(Clone, Debug, Default, PartialEq)]
6405#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6406pub struct ListPolicyVersionsResponse {
6407    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
6408    pub is_truncated: Option<bool>,
6409    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6410    pub marker: Option<String>,
6411    /// <p>A list of policy versions.</p> <p>For more information about managed policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
6412    pub versions: Option<Vec<PolicyVersion>>,
6413}
6414
6415#[allow(dead_code)]
6416struct ListPolicyVersionsResponseDeserializer;
6417impl ListPolicyVersionsResponseDeserializer {
6418    #[allow(dead_code, unused_variables)]
6419    fn deserialize<T: Peek + Next>(
6420        tag_name: &str,
6421        stack: &mut T,
6422    ) -> Result<ListPolicyVersionsResponse, XmlParseError> {
6423        deserialize_elements::<_, ListPolicyVersionsResponse, _>(
6424            tag_name,
6425            stack,
6426            |name, stack, obj| {
6427                match name {
6428                    "IsTruncated" => {
6429                        obj.is_truncated =
6430                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6431                    }
6432                    "Marker" => {
6433                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6434                            "Marker", stack,
6435                        )?);
6436                    }
6437                    "Versions" => {
6438                        obj.versions.get_or_insert(vec![]).extend(
6439                            PolicyDocumentVersionListTypeDeserializer::deserialize(
6440                                "Versions", stack,
6441                            )?,
6442                        );
6443                    }
6444                    _ => skip_tree(stack),
6445                }
6446                Ok(())
6447            },
6448        )
6449    }
6450}
6451#[derive(Clone, Debug, Default, PartialEq)]
6452#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6453pub struct ListRolePoliciesRequest {
6454    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6455    pub marker: Option<String>,
6456    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6457    pub max_items: Option<i64>,
6458    /// <p>The name of the role to list policies for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
6459    pub role_name: String,
6460}
6461
6462/// Serialize `ListRolePoliciesRequest` contents to a `SignedRequest`.
6463struct ListRolePoliciesRequestSerializer;
6464impl ListRolePoliciesRequestSerializer {
6465    fn serialize(params: &mut Params, name: &str, obj: &ListRolePoliciesRequest) {
6466        let mut prefix = name.to_string();
6467        if prefix != "" {
6468            prefix.push_str(".");
6469        }
6470
6471        if let Some(ref field_value) = obj.marker {
6472            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6473        }
6474        if let Some(ref field_value) = obj.max_items {
6475            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6476        }
6477        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
6478    }
6479}
6480
6481/// <p>Contains the response to a successful <a>ListRolePolicies</a> request. </p>
6482#[derive(Clone, Debug, Default, PartialEq)]
6483#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6484pub struct ListRolePoliciesResponse {
6485    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
6486    pub is_truncated: Option<bool>,
6487    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6488    pub marker: Option<String>,
6489    /// <p>A list of policy names.</p>
6490    pub policy_names: Vec<String>,
6491}
6492
6493#[allow(dead_code)]
6494struct ListRolePoliciesResponseDeserializer;
6495impl ListRolePoliciesResponseDeserializer {
6496    #[allow(dead_code, unused_variables)]
6497    fn deserialize<T: Peek + Next>(
6498        tag_name: &str,
6499        stack: &mut T,
6500    ) -> Result<ListRolePoliciesResponse, XmlParseError> {
6501        deserialize_elements::<_, ListRolePoliciesResponse, _>(
6502            tag_name,
6503            stack,
6504            |name, stack, obj| {
6505                match name {
6506                    "IsTruncated" => {
6507                        obj.is_truncated =
6508                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6509                    }
6510                    "Marker" => {
6511                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6512                            "Marker", stack,
6513                        )?);
6514                    }
6515                    "PolicyNames" => {
6516                        obj.policy_names
6517                            .extend(PolicyNameListTypeDeserializer::deserialize(
6518                                "PolicyNames",
6519                                stack,
6520                            )?);
6521                    }
6522                    _ => skip_tree(stack),
6523                }
6524                Ok(())
6525            },
6526        )
6527    }
6528}
6529#[derive(Clone, Debug, Default, PartialEq)]
6530#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6531pub struct ListRoleTagsRequest {
6532    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6533    pub marker: Option<String>,
6534    /// <p>(Optional) Use this only when paginating results to indicate the maximum number of items that you want in the response. If additional items exist beyond the maximum that you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, it defaults to 100. Note that IAM might return fewer results, even when more results are available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6535    pub max_items: Option<i64>,
6536    /// <p>The name of the IAM role for which you want to see the list of tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
6537    pub role_name: String,
6538}
6539
6540/// Serialize `ListRoleTagsRequest` contents to a `SignedRequest`.
6541struct ListRoleTagsRequestSerializer;
6542impl ListRoleTagsRequestSerializer {
6543    fn serialize(params: &mut Params, name: &str, obj: &ListRoleTagsRequest) {
6544        let mut prefix = name.to_string();
6545        if prefix != "" {
6546            prefix.push_str(".");
6547        }
6548
6549        if let Some(ref field_value) = obj.marker {
6550            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6551        }
6552        if let Some(ref field_value) = obj.max_items {
6553            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6554        }
6555        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
6556    }
6557}
6558
6559#[derive(Clone, Debug, Default, PartialEq)]
6560#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6561pub struct ListRoleTagsResponse {
6562    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can use the <code>Marker</code> request parameter to make a subsequent pagination request that retrieves more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when more results are available. Check <code>IsTruncated</code> after every call to ensure that you receive all of your results.</p>
6563    pub is_truncated: Option<bool>,
6564    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6565    pub marker: Option<String>,
6566    /// <p>The list of tags that are currently attached to the role. Each tag consists of a key name and an associated value. If no tags are attached to the specified resource, the response contains an empty list.</p>
6567    pub tags: Vec<Tag>,
6568}
6569
6570#[allow(dead_code)]
6571struct ListRoleTagsResponseDeserializer;
6572impl ListRoleTagsResponseDeserializer {
6573    #[allow(dead_code, unused_variables)]
6574    fn deserialize<T: Peek + Next>(
6575        tag_name: &str,
6576        stack: &mut T,
6577    ) -> Result<ListRoleTagsResponse, XmlParseError> {
6578        deserialize_elements::<_, ListRoleTagsResponse, _>(tag_name, stack, |name, stack, obj| {
6579            match name {
6580                "IsTruncated" => {
6581                    obj.is_truncated =
6582                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6583                }
6584                "Marker" => {
6585                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6586                        "Marker", stack,
6587                    )?);
6588                }
6589                "Tags" => {
6590                    obj.tags
6591                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
6592                }
6593                _ => skip_tree(stack),
6594            }
6595            Ok(())
6596        })
6597    }
6598}
6599#[derive(Clone, Debug, Default, PartialEq)]
6600#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6601pub struct ListRolesRequest {
6602    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6603    pub marker: Option<String>,
6604    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6605    pub max_items: Option<i64>,
6606    /// <p> The path prefix for filtering the results. For example, the prefix <code>/application_abc/component_xyz/</code> gets all roles whose path starts with <code>/application_abc/component_xyz/</code>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/), listing all roles. This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
6607    pub path_prefix: Option<String>,
6608}
6609
6610/// Serialize `ListRolesRequest` contents to a `SignedRequest`.
6611struct ListRolesRequestSerializer;
6612impl ListRolesRequestSerializer {
6613    fn serialize(params: &mut Params, name: &str, obj: &ListRolesRequest) {
6614        let mut prefix = name.to_string();
6615        if prefix != "" {
6616            prefix.push_str(".");
6617        }
6618
6619        if let Some(ref field_value) = obj.marker {
6620            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6621        }
6622        if let Some(ref field_value) = obj.max_items {
6623            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6624        }
6625        if let Some(ref field_value) = obj.path_prefix {
6626            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
6627        }
6628    }
6629}
6630
6631/// <p>Contains the response to a successful <a>ListRoles</a> request. </p>
6632#[derive(Clone, Debug, Default, PartialEq)]
6633#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6634pub struct ListRolesResponse {
6635    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
6636    pub is_truncated: Option<bool>,
6637    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6638    pub marker: Option<String>,
6639    /// <p>A list of roles.</p>
6640    pub roles: Vec<Role>,
6641}
6642
6643#[allow(dead_code)]
6644struct ListRolesResponseDeserializer;
6645impl ListRolesResponseDeserializer {
6646    #[allow(dead_code, unused_variables)]
6647    fn deserialize<T: Peek + Next>(
6648        tag_name: &str,
6649        stack: &mut T,
6650    ) -> Result<ListRolesResponse, XmlParseError> {
6651        deserialize_elements::<_, ListRolesResponse, _>(tag_name, stack, |name, stack, obj| {
6652            match name {
6653                "IsTruncated" => {
6654                    obj.is_truncated =
6655                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6656                }
6657                "Marker" => {
6658                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6659                        "Marker", stack,
6660                    )?);
6661                }
6662                "Roles" => {
6663                    obj.roles
6664                        .extend(RoleListTypeDeserializer::deserialize("Roles", stack)?);
6665                }
6666                _ => skip_tree(stack),
6667            }
6668            Ok(())
6669        })
6670    }
6671}
6672#[derive(Clone, Debug, Default, PartialEq)]
6673#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6674pub struct ListSAMLProviderTagsRequest {
6675    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6676    pub marker: Option<String>,
6677    /// <p>(Optional) Use this only when paginating results to indicate the maximum number of items that you want in the response. If additional items exist beyond the maximum that you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, it defaults to 100. Note that IAM might return fewer results, even when more results are available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6678    pub max_items: Option<i64>,
6679    /// <p>The ARN of the Security Assertion Markup Language (SAML) identity provider whose tags you want to see.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
6680    pub saml_provider_arn: String,
6681}
6682
6683/// Serialize `ListSAMLProviderTagsRequest` contents to a `SignedRequest`.
6684struct ListSAMLProviderTagsRequestSerializer;
6685impl ListSAMLProviderTagsRequestSerializer {
6686    fn serialize(params: &mut Params, name: &str, obj: &ListSAMLProviderTagsRequest) {
6687        let mut prefix = name.to_string();
6688        if prefix != "" {
6689            prefix.push_str(".");
6690        }
6691
6692        if let Some(ref field_value) = obj.marker {
6693            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6694        }
6695        if let Some(ref field_value) = obj.max_items {
6696            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6697        }
6698        params.put(
6699            &format!("{}{}", prefix, "SAMLProviderArn"),
6700            &obj.saml_provider_arn,
6701        );
6702    }
6703}
6704
6705#[derive(Clone, Debug, Default, PartialEq)]
6706#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6707pub struct ListSAMLProviderTagsResponse {
6708    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can use the <code>Marker</code> request parameter to make a subsequent pagination request that retrieves more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when more results are available. Check <code>IsTruncated</code> after every call to ensure that you receive all of your results.</p>
6709    pub is_truncated: Option<bool>,
6710    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6711    pub marker: Option<String>,
6712    /// <p>The list of tags that are currently attached to the Security Assertion Markup Language (SAML) identity provider. Each tag consists of a key name and an associated value. If no tags are attached to the specified resource, the response contains an empty list.</p>
6713    pub tags: Vec<Tag>,
6714}
6715
6716#[allow(dead_code)]
6717struct ListSAMLProviderTagsResponseDeserializer;
6718impl ListSAMLProviderTagsResponseDeserializer {
6719    #[allow(dead_code, unused_variables)]
6720    fn deserialize<T: Peek + Next>(
6721        tag_name: &str,
6722        stack: &mut T,
6723    ) -> Result<ListSAMLProviderTagsResponse, XmlParseError> {
6724        deserialize_elements::<_, ListSAMLProviderTagsResponse, _>(
6725            tag_name,
6726            stack,
6727            |name, stack, obj| {
6728                match name {
6729                    "IsTruncated" => {
6730                        obj.is_truncated =
6731                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6732                    }
6733                    "Marker" => {
6734                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6735                            "Marker", stack,
6736                        )?);
6737                    }
6738                    "Tags" => {
6739                        obj.tags
6740                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
6741                    }
6742                    _ => skip_tree(stack),
6743                }
6744                Ok(())
6745            },
6746        )
6747    }
6748}
6749#[derive(Clone, Debug, Default, PartialEq)]
6750#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6751pub struct ListSAMLProvidersRequest {}
6752
6753/// Serialize `ListSAMLProvidersRequest` contents to a `SignedRequest`.
6754struct ListSAMLProvidersRequestSerializer;
6755impl ListSAMLProvidersRequestSerializer {
6756    fn serialize(_params: &mut Params, name: &str, _obj: &ListSAMLProvidersRequest) {
6757        let mut prefix = name.to_string();
6758        if prefix != "" {
6759            prefix.push_str(".");
6760        }
6761    }
6762}
6763
6764/// <p>Contains the response to a successful <a>ListSAMLProviders</a> request. </p>
6765#[derive(Clone, Debug, Default, PartialEq)]
6766#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6767pub struct ListSAMLProvidersResponse {
6768    /// <p>The list of SAML provider resource objects defined in IAM for this AWS account.</p>
6769    pub saml_provider_list: Option<Vec<SAMLProviderListEntry>>,
6770}
6771
6772#[allow(dead_code)]
6773struct ListSAMLProvidersResponseDeserializer;
6774impl ListSAMLProvidersResponseDeserializer {
6775    #[allow(dead_code, unused_variables)]
6776    fn deserialize<T: Peek + Next>(
6777        tag_name: &str,
6778        stack: &mut T,
6779    ) -> Result<ListSAMLProvidersResponse, XmlParseError> {
6780        deserialize_elements::<_, ListSAMLProvidersResponse, _>(
6781            tag_name,
6782            stack,
6783            |name, stack, obj| {
6784                match name {
6785                    "SAMLProviderList" => {
6786                        obj.saml_provider_list.get_or_insert(vec![]).extend(
6787                            SAMLProviderListTypeDeserializer::deserialize(
6788                                "SAMLProviderList",
6789                                stack,
6790                            )?,
6791                        );
6792                    }
6793                    _ => skip_tree(stack),
6794                }
6795                Ok(())
6796            },
6797        )
6798    }
6799}
6800#[derive(Clone, Debug, Default, PartialEq)]
6801#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6802pub struct ListSSHPublicKeysRequest {
6803    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6804    pub marker: Option<String>,
6805    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6806    pub max_items: Option<i64>,
6807    /// <p>The name of the IAM user to list SSH public keys for. If none is specified, the <code>UserName</code> field is determined implicitly based on the AWS access key used to sign the request.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
6808    pub user_name: Option<String>,
6809}
6810
6811/// Serialize `ListSSHPublicKeysRequest` contents to a `SignedRequest`.
6812struct ListSSHPublicKeysRequestSerializer;
6813impl ListSSHPublicKeysRequestSerializer {
6814    fn serialize(params: &mut Params, name: &str, obj: &ListSSHPublicKeysRequest) {
6815        let mut prefix = name.to_string();
6816        if prefix != "" {
6817            prefix.push_str(".");
6818        }
6819
6820        if let Some(ref field_value) = obj.marker {
6821            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6822        }
6823        if let Some(ref field_value) = obj.max_items {
6824            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6825        }
6826        if let Some(ref field_value) = obj.user_name {
6827            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
6828        }
6829    }
6830}
6831
6832/// <p>Contains the response to a successful <a>ListSSHPublicKeys</a> request.</p>
6833#[derive(Clone, Debug, Default, PartialEq)]
6834#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6835pub struct ListSSHPublicKeysResponse {
6836    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
6837    pub is_truncated: Option<bool>,
6838    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6839    pub marker: Option<String>,
6840    /// <p>A list of the SSH public keys assigned to IAM user.</p>
6841    pub ssh_public_keys: Option<Vec<SSHPublicKeyMetadata>>,
6842}
6843
6844#[allow(dead_code)]
6845struct ListSSHPublicKeysResponseDeserializer;
6846impl ListSSHPublicKeysResponseDeserializer {
6847    #[allow(dead_code, unused_variables)]
6848    fn deserialize<T: Peek + Next>(
6849        tag_name: &str,
6850        stack: &mut T,
6851    ) -> Result<ListSSHPublicKeysResponse, XmlParseError> {
6852        deserialize_elements::<_, ListSSHPublicKeysResponse, _>(
6853            tag_name,
6854            stack,
6855            |name, stack, obj| {
6856                match name {
6857                    "IsTruncated" => {
6858                        obj.is_truncated =
6859                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6860                    }
6861                    "Marker" => {
6862                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6863                            "Marker", stack,
6864                        )?);
6865                    }
6866                    "SSHPublicKeys" => {
6867                        obj.ssh_public_keys.get_or_insert(vec![]).extend(
6868                            SSHPublicKeyListTypeDeserializer::deserialize("SSHPublicKeys", stack)?,
6869                        );
6870                    }
6871                    _ => skip_tree(stack),
6872                }
6873                Ok(())
6874            },
6875        )
6876    }
6877}
6878#[derive(Clone, Debug, Default, PartialEq)]
6879#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6880pub struct ListServerCertificateTagsRequest {
6881    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6882    pub marker: Option<String>,
6883    /// <p>(Optional) Use this only when paginating results to indicate the maximum number of items that you want in the response. If additional items exist beyond the maximum that you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, it defaults to 100. Note that IAM might return fewer results, even when more results are available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6884    pub max_items: Option<i64>,
6885    /// <p>The name of the IAM server certificate whose tags you want to see.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
6886    pub server_certificate_name: String,
6887}
6888
6889/// Serialize `ListServerCertificateTagsRequest` contents to a `SignedRequest`.
6890struct ListServerCertificateTagsRequestSerializer;
6891impl ListServerCertificateTagsRequestSerializer {
6892    fn serialize(params: &mut Params, name: &str, obj: &ListServerCertificateTagsRequest) {
6893        let mut prefix = name.to_string();
6894        if prefix != "" {
6895            prefix.push_str(".");
6896        }
6897
6898        if let Some(ref field_value) = obj.marker {
6899            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6900        }
6901        if let Some(ref field_value) = obj.max_items {
6902            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6903        }
6904        params.put(
6905            &format!("{}{}", prefix, "ServerCertificateName"),
6906            &obj.server_certificate_name,
6907        );
6908    }
6909}
6910
6911#[derive(Clone, Debug, Default, PartialEq)]
6912#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6913pub struct ListServerCertificateTagsResponse {
6914    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can use the <code>Marker</code> request parameter to make a subsequent pagination request that retrieves more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when more results are available. Check <code>IsTruncated</code> after every call to ensure that you receive all of your results.</p>
6915    pub is_truncated: Option<bool>,
6916    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6917    pub marker: Option<String>,
6918    /// <p>The list of tags that are currently attached to the IAM server certificate. Each tag consists of a key name and an associated value. If no tags are attached to the specified resource, the response contains an empty list.</p>
6919    pub tags: Vec<Tag>,
6920}
6921
6922#[allow(dead_code)]
6923struct ListServerCertificateTagsResponseDeserializer;
6924impl ListServerCertificateTagsResponseDeserializer {
6925    #[allow(dead_code, unused_variables)]
6926    fn deserialize<T: Peek + Next>(
6927        tag_name: &str,
6928        stack: &mut T,
6929    ) -> Result<ListServerCertificateTagsResponse, XmlParseError> {
6930        deserialize_elements::<_, ListServerCertificateTagsResponse, _>(
6931            tag_name,
6932            stack,
6933            |name, stack, obj| {
6934                match name {
6935                    "IsTruncated" => {
6936                        obj.is_truncated =
6937                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
6938                    }
6939                    "Marker" => {
6940                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
6941                            "Marker", stack,
6942                        )?);
6943                    }
6944                    "Tags" => {
6945                        obj.tags
6946                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
6947                    }
6948                    _ => skip_tree(stack),
6949                }
6950                Ok(())
6951            },
6952        )
6953    }
6954}
6955#[derive(Clone, Debug, Default, PartialEq)]
6956#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
6957pub struct ListServerCertificatesRequest {
6958    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
6959    pub marker: Option<String>,
6960    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
6961    pub max_items: Option<i64>,
6962    /// <p> The path prefix for filtering the results. For example: <code>/company/servercerts</code> would get all server certificates for which the path starts with <code>/company/servercerts</code>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/), listing all server certificates. This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
6963    pub path_prefix: Option<String>,
6964}
6965
6966/// Serialize `ListServerCertificatesRequest` contents to a `SignedRequest`.
6967struct ListServerCertificatesRequestSerializer;
6968impl ListServerCertificatesRequestSerializer {
6969    fn serialize(params: &mut Params, name: &str, obj: &ListServerCertificatesRequest) {
6970        let mut prefix = name.to_string();
6971        if prefix != "" {
6972            prefix.push_str(".");
6973        }
6974
6975        if let Some(ref field_value) = obj.marker {
6976            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
6977        }
6978        if let Some(ref field_value) = obj.max_items {
6979            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
6980        }
6981        if let Some(ref field_value) = obj.path_prefix {
6982            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
6983        }
6984    }
6985}
6986
6987/// <p>Contains the response to a successful <a>ListServerCertificates</a> request. </p>
6988#[derive(Clone, Debug, Default, PartialEq)]
6989#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
6990pub struct ListServerCertificatesResponse {
6991    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
6992    pub is_truncated: Option<bool>,
6993    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
6994    pub marker: Option<String>,
6995    /// <p>A list of server certificates.</p>
6996    pub server_certificate_metadata_list: Vec<ServerCertificateMetadata>,
6997}
6998
6999#[allow(dead_code)]
7000struct ListServerCertificatesResponseDeserializer;
7001impl ListServerCertificatesResponseDeserializer {
7002    #[allow(dead_code, unused_variables)]
7003    fn deserialize<T: Peek + Next>(
7004        tag_name: &str,
7005        stack: &mut T,
7006    ) -> Result<ListServerCertificatesResponse, XmlParseError> {
7007        deserialize_elements::<_, ListServerCertificatesResponse, _>(
7008            tag_name,
7009            stack,
7010            |name, stack, obj| {
7011                match name {
7012                    "IsTruncated" => {
7013                        obj.is_truncated =
7014                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
7015                    }
7016                    "Marker" => {
7017                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
7018                            "Marker", stack,
7019                        )?);
7020                    }
7021                    "ServerCertificateMetadataList" => {
7022                        obj.server_certificate_metadata_list.extend(
7023                            ServerCertificateMetadataListTypeDeserializer::deserialize(
7024                                "ServerCertificateMetadataList",
7025                                stack,
7026                            )?,
7027                        );
7028                    }
7029                    _ => skip_tree(stack),
7030                }
7031                Ok(())
7032            },
7033        )
7034    }
7035}
7036#[derive(Clone, Debug, Default, PartialEq)]
7037#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
7038pub struct ListServiceSpecificCredentialsRequest {
7039    /// <p>Filters the returned results to only those for the specified AWS service. If not specified, then AWS returns service-specific credentials for all services.</p>
7040    pub service_name: Option<String>,
7041    /// <p>The name of the user whose service-specific credentials you want information about. If this value is not specified, then the operation assumes the user whose credentials are used to call the operation.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
7042    pub user_name: Option<String>,
7043}
7044
7045/// Serialize `ListServiceSpecificCredentialsRequest` contents to a `SignedRequest`.
7046struct ListServiceSpecificCredentialsRequestSerializer;
7047impl ListServiceSpecificCredentialsRequestSerializer {
7048    fn serialize(params: &mut Params, name: &str, obj: &ListServiceSpecificCredentialsRequest) {
7049        let mut prefix = name.to_string();
7050        if prefix != "" {
7051            prefix.push_str(".");
7052        }
7053
7054        if let Some(ref field_value) = obj.service_name {
7055            params.put(&format!("{}{}", prefix, "ServiceName"), &field_value);
7056        }
7057        if let Some(ref field_value) = obj.user_name {
7058            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
7059        }
7060    }
7061}
7062
7063#[derive(Clone, Debug, Default, PartialEq)]
7064#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7065pub struct ListServiceSpecificCredentialsResponse {
7066    /// <p>A list of structures that each contain details about a service-specific credential.</p>
7067    pub service_specific_credentials: Option<Vec<ServiceSpecificCredentialMetadata>>,
7068}
7069
7070#[allow(dead_code)]
7071struct ListServiceSpecificCredentialsResponseDeserializer;
7072impl ListServiceSpecificCredentialsResponseDeserializer {
7073    #[allow(dead_code, unused_variables)]
7074    fn deserialize<T: Peek + Next>(
7075        tag_name: &str,
7076        stack: &mut T,
7077    ) -> Result<ListServiceSpecificCredentialsResponse, XmlParseError> {
7078        deserialize_elements::<_, ListServiceSpecificCredentialsResponse, _>(
7079            tag_name,
7080            stack,
7081            |name, stack, obj| {
7082                match name {
7083                    "ServiceSpecificCredentials" => {
7084                        obj.service_specific_credentials
7085                            .get_or_insert(vec![])
7086                            .extend(ServiceSpecificCredentialsListTypeDeserializer::deserialize(
7087                                "ServiceSpecificCredentials",
7088                                stack,
7089                            )?);
7090                    }
7091                    _ => skip_tree(stack),
7092                }
7093                Ok(())
7094            },
7095        )
7096    }
7097}
7098#[derive(Clone, Debug, Default, PartialEq)]
7099#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
7100pub struct ListSigningCertificatesRequest {
7101    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
7102    pub marker: Option<String>,
7103    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
7104    pub max_items: Option<i64>,
7105    /// <p>The name of the IAM user whose signing certificates you want to examine.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
7106    pub user_name: Option<String>,
7107}
7108
7109/// Serialize `ListSigningCertificatesRequest` contents to a `SignedRequest`.
7110struct ListSigningCertificatesRequestSerializer;
7111impl ListSigningCertificatesRequestSerializer {
7112    fn serialize(params: &mut Params, name: &str, obj: &ListSigningCertificatesRequest) {
7113        let mut prefix = name.to_string();
7114        if prefix != "" {
7115            prefix.push_str(".");
7116        }
7117
7118        if let Some(ref field_value) = obj.marker {
7119            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
7120        }
7121        if let Some(ref field_value) = obj.max_items {
7122            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
7123        }
7124        if let Some(ref field_value) = obj.user_name {
7125            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
7126        }
7127    }
7128}
7129
7130/// <p>Contains the response to a successful <a>ListSigningCertificates</a> request. </p>
7131#[derive(Clone, Debug, Default, PartialEq)]
7132#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7133pub struct ListSigningCertificatesResponse {
7134    /// <p>A list of the user's signing certificate information.</p>
7135    pub certificates: Vec<SigningCertificate>,
7136    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
7137    pub is_truncated: Option<bool>,
7138    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
7139    pub marker: Option<String>,
7140}
7141
7142#[allow(dead_code)]
7143struct ListSigningCertificatesResponseDeserializer;
7144impl ListSigningCertificatesResponseDeserializer {
7145    #[allow(dead_code, unused_variables)]
7146    fn deserialize<T: Peek + Next>(
7147        tag_name: &str,
7148        stack: &mut T,
7149    ) -> Result<ListSigningCertificatesResponse, XmlParseError> {
7150        deserialize_elements::<_, ListSigningCertificatesResponse, _>(
7151            tag_name,
7152            stack,
7153            |name, stack, obj| {
7154                match name {
7155                    "Certificates" => {
7156                        obj.certificates
7157                            .extend(CertificateListTypeDeserializer::deserialize(
7158                                "Certificates",
7159                                stack,
7160                            )?);
7161                    }
7162                    "IsTruncated" => {
7163                        obj.is_truncated =
7164                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
7165                    }
7166                    "Marker" => {
7167                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
7168                            "Marker", stack,
7169                        )?);
7170                    }
7171                    _ => skip_tree(stack),
7172                }
7173                Ok(())
7174            },
7175        )
7176    }
7177}
7178#[derive(Clone, Debug, Default, PartialEq)]
7179#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
7180pub struct ListUserPoliciesRequest {
7181    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
7182    pub marker: Option<String>,
7183    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
7184    pub max_items: Option<i64>,
7185    /// <p>The name of the user to list policies for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
7186    pub user_name: String,
7187}
7188
7189/// Serialize `ListUserPoliciesRequest` contents to a `SignedRequest`.
7190struct ListUserPoliciesRequestSerializer;
7191impl ListUserPoliciesRequestSerializer {
7192    fn serialize(params: &mut Params, name: &str, obj: &ListUserPoliciesRequest) {
7193        let mut prefix = name.to_string();
7194        if prefix != "" {
7195            prefix.push_str(".");
7196        }
7197
7198        if let Some(ref field_value) = obj.marker {
7199            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
7200        }
7201        if let Some(ref field_value) = obj.max_items {
7202            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
7203        }
7204        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
7205    }
7206}
7207
7208/// <p>Contains the response to a successful <a>ListUserPolicies</a> request. </p>
7209#[derive(Clone, Debug, Default, PartialEq)]
7210#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7211pub struct ListUserPoliciesResponse {
7212    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
7213    pub is_truncated: Option<bool>,
7214    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
7215    pub marker: Option<String>,
7216    /// <p>A list of policy names.</p>
7217    pub policy_names: Vec<String>,
7218}
7219
7220#[allow(dead_code)]
7221struct ListUserPoliciesResponseDeserializer;
7222impl ListUserPoliciesResponseDeserializer {
7223    #[allow(dead_code, unused_variables)]
7224    fn deserialize<T: Peek + Next>(
7225        tag_name: &str,
7226        stack: &mut T,
7227    ) -> Result<ListUserPoliciesResponse, XmlParseError> {
7228        deserialize_elements::<_, ListUserPoliciesResponse, _>(
7229            tag_name,
7230            stack,
7231            |name, stack, obj| {
7232                match name {
7233                    "IsTruncated" => {
7234                        obj.is_truncated =
7235                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
7236                    }
7237                    "Marker" => {
7238                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
7239                            "Marker", stack,
7240                        )?);
7241                    }
7242                    "PolicyNames" => {
7243                        obj.policy_names
7244                            .extend(PolicyNameListTypeDeserializer::deserialize(
7245                                "PolicyNames",
7246                                stack,
7247                            )?);
7248                    }
7249                    _ => skip_tree(stack),
7250                }
7251                Ok(())
7252            },
7253        )
7254    }
7255}
7256#[derive(Clone, Debug, Default, PartialEq)]
7257#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
7258pub struct ListUserTagsRequest {
7259    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
7260    pub marker: Option<String>,
7261    /// <p>(Optional) Use this only when paginating results to indicate the maximum number of items that you want in the response. If additional items exist beyond the maximum that you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, it defaults to 100. Note that IAM might return fewer results, even when more results are available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
7262    pub max_items: Option<i64>,
7263    /// <p>The name of the IAM user whose tags you want to see.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
7264    pub user_name: String,
7265}
7266
7267/// Serialize `ListUserTagsRequest` contents to a `SignedRequest`.
7268struct ListUserTagsRequestSerializer;
7269impl ListUserTagsRequestSerializer {
7270    fn serialize(params: &mut Params, name: &str, obj: &ListUserTagsRequest) {
7271        let mut prefix = name.to_string();
7272        if prefix != "" {
7273            prefix.push_str(".");
7274        }
7275
7276        if let Some(ref field_value) = obj.marker {
7277            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
7278        }
7279        if let Some(ref field_value) = obj.max_items {
7280            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
7281        }
7282        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
7283    }
7284}
7285
7286#[derive(Clone, Debug, Default, PartialEq)]
7287#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7288pub struct ListUserTagsResponse {
7289    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can use the <code>Marker</code> request parameter to make a subsequent pagination request that retrieves more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when more results are available. Check <code>IsTruncated</code> after every call to ensure that you receive all of your results.</p>
7290    pub is_truncated: Option<bool>,
7291    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
7292    pub marker: Option<String>,
7293    /// <p>The list of tags that are currently attached to the user. Each tag consists of a key name and an associated value. If no tags are attached to the specified resource, the response contains an empty list.</p>
7294    pub tags: Vec<Tag>,
7295}
7296
7297#[allow(dead_code)]
7298struct ListUserTagsResponseDeserializer;
7299impl ListUserTagsResponseDeserializer {
7300    #[allow(dead_code, unused_variables)]
7301    fn deserialize<T: Peek + Next>(
7302        tag_name: &str,
7303        stack: &mut T,
7304    ) -> Result<ListUserTagsResponse, XmlParseError> {
7305        deserialize_elements::<_, ListUserTagsResponse, _>(tag_name, stack, |name, stack, obj| {
7306            match name {
7307                "IsTruncated" => {
7308                    obj.is_truncated =
7309                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
7310                }
7311                "Marker" => {
7312                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
7313                        "Marker", stack,
7314                    )?);
7315                }
7316                "Tags" => {
7317                    obj.tags
7318                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
7319                }
7320                _ => skip_tree(stack),
7321            }
7322            Ok(())
7323        })
7324    }
7325}
7326#[derive(Clone, Debug, Default, PartialEq)]
7327#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
7328pub struct ListUsersRequest {
7329    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
7330    pub marker: Option<String>,
7331    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
7332    pub max_items: Option<i64>,
7333    /// <p> The path prefix for filtering the results. For example: <code>/division_abc/subdivision_xyz/</code>, which would get all user names whose path starts with <code>/division_abc/subdivision_xyz/</code>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/), listing all user names. This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
7334    pub path_prefix: Option<String>,
7335}
7336
7337/// Serialize `ListUsersRequest` contents to a `SignedRequest`.
7338struct ListUsersRequestSerializer;
7339impl ListUsersRequestSerializer {
7340    fn serialize(params: &mut Params, name: &str, obj: &ListUsersRequest) {
7341        let mut prefix = name.to_string();
7342        if prefix != "" {
7343            prefix.push_str(".");
7344        }
7345
7346        if let Some(ref field_value) = obj.marker {
7347            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
7348        }
7349        if let Some(ref field_value) = obj.max_items {
7350            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
7351        }
7352        if let Some(ref field_value) = obj.path_prefix {
7353            params.put(&format!("{}{}", prefix, "PathPrefix"), &field_value);
7354        }
7355    }
7356}
7357
7358/// <p>Contains the response to a successful <a>ListUsers</a> request. </p>
7359#[derive(Clone, Debug, Default, PartialEq)]
7360#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7361pub struct ListUsersResponse {
7362    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
7363    pub is_truncated: Option<bool>,
7364    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
7365    pub marker: Option<String>,
7366    /// <p>A list of users.</p>
7367    pub users: Vec<User>,
7368}
7369
7370#[allow(dead_code)]
7371struct ListUsersResponseDeserializer;
7372impl ListUsersResponseDeserializer {
7373    #[allow(dead_code, unused_variables)]
7374    fn deserialize<T: Peek + Next>(
7375        tag_name: &str,
7376        stack: &mut T,
7377    ) -> Result<ListUsersResponse, XmlParseError> {
7378        deserialize_elements::<_, ListUsersResponse, _>(tag_name, stack, |name, stack, obj| {
7379            match name {
7380                "IsTruncated" => {
7381                    obj.is_truncated =
7382                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
7383                }
7384                "Marker" => {
7385                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
7386                        "Marker", stack,
7387                    )?);
7388                }
7389                "Users" => {
7390                    obj.users
7391                        .extend(UserListTypeDeserializer::deserialize("Users", stack)?);
7392                }
7393                _ => skip_tree(stack),
7394            }
7395            Ok(())
7396        })
7397    }
7398}
7399#[derive(Clone, Debug, Default, PartialEq)]
7400#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
7401pub struct ListVirtualMFADevicesRequest {
7402    /// <p> The status (<code>Unassigned</code> or <code>Assigned</code>) of the devices to list. If you do not specify an <code>AssignmentStatus</code>, the operation defaults to <code>Any</code>, which lists both assigned and unassigned virtual MFA devices.,</p>
7403    pub assignment_status: Option<String>,
7404    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
7405    pub marker: Option<String>,
7406    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
7407    pub max_items: Option<i64>,
7408}
7409
7410/// Serialize `ListVirtualMFADevicesRequest` contents to a `SignedRequest`.
7411struct ListVirtualMFADevicesRequestSerializer;
7412impl ListVirtualMFADevicesRequestSerializer {
7413    fn serialize(params: &mut Params, name: &str, obj: &ListVirtualMFADevicesRequest) {
7414        let mut prefix = name.to_string();
7415        if prefix != "" {
7416            prefix.push_str(".");
7417        }
7418
7419        if let Some(ref field_value) = obj.assignment_status {
7420            params.put(&format!("{}{}", prefix, "AssignmentStatus"), &field_value);
7421        }
7422        if let Some(ref field_value) = obj.marker {
7423            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
7424        }
7425        if let Some(ref field_value) = obj.max_items {
7426            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
7427        }
7428    }
7429}
7430
7431/// <p>Contains the response to a successful <a>ListVirtualMFADevices</a> request. </p>
7432#[derive(Clone, Debug, Default, PartialEq)]
7433#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7434pub struct ListVirtualMFADevicesResponse {
7435    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
7436    pub is_truncated: Option<bool>,
7437    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
7438    pub marker: Option<String>,
7439    /// <p> The list of virtual MFA devices in the current account that match the <code>AssignmentStatus</code> value that was passed in the request.</p>
7440    pub virtual_mfa_devices: Vec<VirtualMFADevice>,
7441}
7442
7443#[allow(dead_code)]
7444struct ListVirtualMFADevicesResponseDeserializer;
7445impl ListVirtualMFADevicesResponseDeserializer {
7446    #[allow(dead_code, unused_variables)]
7447    fn deserialize<T: Peek + Next>(
7448        tag_name: &str,
7449        stack: &mut T,
7450    ) -> Result<ListVirtualMFADevicesResponse, XmlParseError> {
7451        deserialize_elements::<_, ListVirtualMFADevicesResponse, _>(
7452            tag_name,
7453            stack,
7454            |name, stack, obj| {
7455                match name {
7456                    "IsTruncated" => {
7457                        obj.is_truncated =
7458                            Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
7459                    }
7460                    "Marker" => {
7461                        obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
7462                            "Marker", stack,
7463                        )?);
7464                    }
7465                    "VirtualMFADevices" => {
7466                        obj.virtual_mfa_devices.extend(
7467                            VirtualMFADeviceListTypeDeserializer::deserialize(
7468                                "VirtualMFADevices",
7469                                stack,
7470                            )?,
7471                        );
7472                    }
7473                    _ => skip_tree(stack),
7474                }
7475                Ok(())
7476            },
7477        )
7478    }
7479}
7480/// <p>Contains the user name and password create date for a user.</p> <p> This data type is used as a response element in the <a>CreateLoginProfile</a> and <a>GetLoginProfile</a> operations. </p>
7481#[derive(Clone, Debug, Default, PartialEq)]
7482#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7483pub struct LoginProfile {
7484    /// <p>The date when the password for the user was created.</p>
7485    pub create_date: String,
7486    /// <p>Specifies whether the user is required to set a new password on next sign-in.</p>
7487    pub password_reset_required: Option<bool>,
7488    /// <p>The name of the user, which can be used for signing in to the AWS Management Console.</p>
7489    pub user_name: String,
7490}
7491
7492#[allow(dead_code)]
7493struct LoginProfileDeserializer;
7494impl LoginProfileDeserializer {
7495    #[allow(dead_code, unused_variables)]
7496    fn deserialize<T: Peek + Next>(
7497        tag_name: &str,
7498        stack: &mut T,
7499    ) -> Result<LoginProfile, XmlParseError> {
7500        deserialize_elements::<_, LoginProfile, _>(tag_name, stack, |name, stack, obj| {
7501            match name {
7502                "CreateDate" => {
7503                    obj.create_date = DateTypeDeserializer::deserialize("CreateDate", stack)?;
7504                }
7505                "PasswordResetRequired" => {
7506                    obj.password_reset_required = Some(BooleanTypeDeserializer::deserialize(
7507                        "PasswordResetRequired",
7508                        stack,
7509                    )?);
7510                }
7511                "UserName" => {
7512                    obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
7513                }
7514                _ => skip_tree(stack),
7515            }
7516            Ok(())
7517        })
7518    }
7519}
7520/// <p>Contains information about an MFA device.</p> <p>This data type is used as a response element in the <a>ListMFADevices</a> operation.</p>
7521#[derive(Clone, Debug, Default, PartialEq)]
7522#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7523pub struct MFADevice {
7524    /// <p>The date when the MFA device was enabled for the user.</p>
7525    pub enable_date: String,
7526    /// <p>The serial number that uniquely identifies the MFA device. For virtual MFA devices, the serial number is the device ARN.</p>
7527    pub serial_number: String,
7528    /// <p>The user with whom the MFA device is associated.</p>
7529    pub user_name: String,
7530}
7531
7532#[allow(dead_code)]
7533struct MFADeviceDeserializer;
7534impl MFADeviceDeserializer {
7535    #[allow(dead_code, unused_variables)]
7536    fn deserialize<T: Peek + Next>(
7537        tag_name: &str,
7538        stack: &mut T,
7539    ) -> Result<MFADevice, XmlParseError> {
7540        deserialize_elements::<_, MFADevice, _>(tag_name, stack, |name, stack, obj| {
7541            match name {
7542                "EnableDate" => {
7543                    obj.enable_date = DateTypeDeserializer::deserialize("EnableDate", stack)?;
7544                }
7545                "SerialNumber" => {
7546                    obj.serial_number =
7547                        SerialNumberTypeDeserializer::deserialize("SerialNumber", stack)?;
7548                }
7549                "UserName" => {
7550                    obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
7551                }
7552                _ => skip_tree(stack),
7553            }
7554            Ok(())
7555        })
7556    }
7557}
7558/// <p>Contains information about a managed policy, including the policy's ARN, versions, and the number of principal entities (users, groups, and roles) that the policy is attached to.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p> <p>For more information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>
7559#[derive(Clone, Debug, Default, PartialEq)]
7560#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7561pub struct ManagedPolicyDetail {
7562    pub arn: Option<String>,
7563    /// <p>The number of principal entities (users, groups, and roles) that the policy is attached to.</p>
7564    pub attachment_count: Option<i64>,
7565    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the policy was created.</p>
7566    pub create_date: Option<String>,
7567    /// <p>The identifier for the version of the policy that is set as the default (operative) version.</p> <p>For more information about policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>. </p>
7568    pub default_version_id: Option<String>,
7569    /// <p>A friendly description of the policy.</p>
7570    pub description: Option<String>,
7571    /// <p>Specifies whether the policy can be attached to an IAM user, group, or role.</p>
7572    pub is_attachable: Option<bool>,
7573    /// <p>The path to the policy.</p> <p>For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
7574    pub path: Option<String>,
7575    /// <p>The number of entities (users and roles) for which the policy is used as the permissions boundary. </p> <p>For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM identities </a> in the <i>IAM User Guide</i>.</p>
7576    pub permissions_boundary_usage_count: Option<i64>,
7577    /// <p>The stable and unique string identifying the policy.</p> <p>For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
7578    pub policy_id: Option<String>,
7579    /// <p>The friendly name (not ARN) identifying the policy.</p>
7580    pub policy_name: Option<String>,
7581    /// <p>A list containing information about the versions of the policy.</p>
7582    pub policy_version_list: Option<Vec<PolicyVersion>>,
7583    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the policy was last updated.</p> <p>When a policy has only one version, this field contains the date and time when the policy was created. When a policy has more than one version, this field contains the date and time when the most recent policy version was created.</p>
7584    pub update_date: Option<String>,
7585}
7586
7587#[allow(dead_code)]
7588struct ManagedPolicyDetailDeserializer;
7589impl ManagedPolicyDetailDeserializer {
7590    #[allow(dead_code, unused_variables)]
7591    fn deserialize<T: Peek + Next>(
7592        tag_name: &str,
7593        stack: &mut T,
7594    ) -> Result<ManagedPolicyDetail, XmlParseError> {
7595        deserialize_elements::<_, ManagedPolicyDetail, _>(tag_name, stack, |name, stack, obj| {
7596            match name {
7597                "Arn" => {
7598                    obj.arn = Some(ArnTypeDeserializer::deserialize("Arn", stack)?);
7599                }
7600                "AttachmentCount" => {
7601                    obj.attachment_count = Some(AttachmentCountTypeDeserializer::deserialize(
7602                        "AttachmentCount",
7603                        stack,
7604                    )?);
7605                }
7606                "CreateDate" => {
7607                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
7608                }
7609                "DefaultVersionId" => {
7610                    obj.default_version_id = Some(PolicyVersionIdTypeDeserializer::deserialize(
7611                        "DefaultVersionId",
7612                        stack,
7613                    )?);
7614                }
7615                "Description" => {
7616                    obj.description = Some(PolicyDescriptionTypeDeserializer::deserialize(
7617                        "Description",
7618                        stack,
7619                    )?);
7620                }
7621                "IsAttachable" => {
7622                    obj.is_attachable =
7623                        Some(BooleanTypeDeserializer::deserialize("IsAttachable", stack)?);
7624                }
7625                "Path" => {
7626                    obj.path = Some(PolicyPathTypeDeserializer::deserialize("Path", stack)?);
7627                }
7628                "PermissionsBoundaryUsageCount" => {
7629                    obj.permissions_boundary_usage_count =
7630                        Some(AttachmentCountTypeDeserializer::deserialize(
7631                            "PermissionsBoundaryUsageCount",
7632                            stack,
7633                        )?);
7634                }
7635                "PolicyId" => {
7636                    obj.policy_id = Some(IdTypeDeserializer::deserialize("PolicyId", stack)?);
7637                }
7638                "PolicyName" => {
7639                    obj.policy_name = Some(PolicyNameTypeDeserializer::deserialize(
7640                        "PolicyName",
7641                        stack,
7642                    )?);
7643                }
7644                "PolicyVersionList" => {
7645                    obj.policy_version_list.get_or_insert(vec![]).extend(
7646                        PolicyDocumentVersionListTypeDeserializer::deserialize(
7647                            "PolicyVersionList",
7648                            stack,
7649                        )?,
7650                    );
7651                }
7652                "UpdateDate" => {
7653                    obj.update_date = Some(DateTypeDeserializer::deserialize("UpdateDate", stack)?);
7654                }
7655                _ => skip_tree(stack),
7656            }
7657            Ok(())
7658        })
7659    }
7660}
7661#[allow(dead_code)]
7662struct ManagedPolicyDetailListTypeDeserializer;
7663impl ManagedPolicyDetailListTypeDeserializer {
7664    #[allow(dead_code, unused_variables)]
7665    fn deserialize<T: Peek + Next>(
7666        tag_name: &str,
7667        stack: &mut T,
7668    ) -> Result<Vec<ManagedPolicyDetail>, XmlParseError> {
7669        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
7670            if name == "member" {
7671                obj.push(ManagedPolicyDetailDeserializer::deserialize(
7672                    "member", stack,
7673                )?);
7674            } else {
7675                skip_tree(stack);
7676            }
7677            Ok(())
7678        })
7679    }
7680}
7681#[allow(dead_code)]
7682struct MarkerTypeDeserializer;
7683impl MarkerTypeDeserializer {
7684    #[allow(dead_code, unused_variables)]
7685    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
7686        xml_util::deserialize_primitive(tag_name, stack, Ok)
7687    }
7688}
7689#[allow(dead_code)]
7690struct MaxPasswordAgeTypeDeserializer;
7691impl MaxPasswordAgeTypeDeserializer {
7692    #[allow(dead_code, unused_variables)]
7693    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
7694        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
7695    }
7696}
7697#[allow(dead_code)]
7698struct MfaDeviceListTypeDeserializer;
7699impl MfaDeviceListTypeDeserializer {
7700    #[allow(dead_code, unused_variables)]
7701    fn deserialize<T: Peek + Next>(
7702        tag_name: &str,
7703        stack: &mut T,
7704    ) -> Result<Vec<MFADevice>, XmlParseError> {
7705        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
7706            if name == "member" {
7707                obj.push(MFADeviceDeserializer::deserialize("member", stack)?);
7708            } else {
7709                skip_tree(stack);
7710            }
7711            Ok(())
7712        })
7713    }
7714}
7715#[allow(dead_code)]
7716struct MinimumPasswordLengthTypeDeserializer;
7717impl MinimumPasswordLengthTypeDeserializer {
7718    #[allow(dead_code, unused_variables)]
7719    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
7720        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
7721    }
7722}
7723/// <p>Contains the Amazon Resource Name (ARN) for an IAM OpenID Connect provider.</p>
7724#[derive(Clone, Debug, Default, PartialEq)]
7725#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7726pub struct OpenIDConnectProviderListEntry {
7727    pub arn: Option<String>,
7728}
7729
7730#[allow(dead_code)]
7731struct OpenIDConnectProviderListEntryDeserializer;
7732impl OpenIDConnectProviderListEntryDeserializer {
7733    #[allow(dead_code, unused_variables)]
7734    fn deserialize<T: Peek + Next>(
7735        tag_name: &str,
7736        stack: &mut T,
7737    ) -> Result<OpenIDConnectProviderListEntry, XmlParseError> {
7738        deserialize_elements::<_, OpenIDConnectProviderListEntry, _>(
7739            tag_name,
7740            stack,
7741            |name, stack, obj| {
7742                match name {
7743                    "Arn" => {
7744                        obj.arn = Some(ArnTypeDeserializer::deserialize("Arn", stack)?);
7745                    }
7746                    _ => skip_tree(stack),
7747                }
7748                Ok(())
7749            },
7750        )
7751    }
7752}
7753#[allow(dead_code)]
7754struct OpenIDConnectProviderListTypeDeserializer;
7755impl OpenIDConnectProviderListTypeDeserializer {
7756    #[allow(dead_code, unused_variables)]
7757    fn deserialize<T: Peek + Next>(
7758        tag_name: &str,
7759        stack: &mut T,
7760    ) -> Result<Vec<OpenIDConnectProviderListEntry>, XmlParseError> {
7761        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
7762            if name == "member" {
7763                obj.push(OpenIDConnectProviderListEntryDeserializer::deserialize(
7764                    "member", stack,
7765                )?);
7766            } else {
7767                skip_tree(stack);
7768            }
7769            Ok(())
7770        })
7771    }
7772}
7773#[allow(dead_code)]
7774struct OpenIDConnectProviderUrlTypeDeserializer;
7775impl OpenIDConnectProviderUrlTypeDeserializer {
7776    #[allow(dead_code, unused_variables)]
7777    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
7778        xml_util::deserialize_primitive(tag_name, stack, Ok)
7779    }
7780}
7781/// <p>Contains information about the effect that Organizations has on a policy simulation.</p>
7782#[derive(Clone, Debug, Default, PartialEq)]
7783#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7784pub struct OrganizationsDecisionDetail {
7785    /// <p>Specifies whether the simulated operation is allowed by the Organizations service control policies that impact the simulated user's account.</p>
7786    pub allowed_by_organizations: Option<bool>,
7787}
7788
7789#[allow(dead_code)]
7790struct OrganizationsDecisionDetailDeserializer;
7791impl OrganizationsDecisionDetailDeserializer {
7792    #[allow(dead_code, unused_variables)]
7793    fn deserialize<T: Peek + Next>(
7794        tag_name: &str,
7795        stack: &mut T,
7796    ) -> Result<OrganizationsDecisionDetail, XmlParseError> {
7797        deserialize_elements::<_, OrganizationsDecisionDetail, _>(
7798            tag_name,
7799            stack,
7800            |name, stack, obj| {
7801                match name {
7802                    "AllowedByOrganizations" => {
7803                        obj.allowed_by_organizations = Some(BooleanTypeDeserializer::deserialize(
7804                            "AllowedByOrganizations",
7805                            stack,
7806                        )?);
7807                    }
7808                    _ => skip_tree(stack),
7809                }
7810                Ok(())
7811            },
7812        )
7813    }
7814}
7815#[allow(dead_code)]
7816struct OrganizationsEntityPathTypeDeserializer;
7817impl OrganizationsEntityPathTypeDeserializer {
7818    #[allow(dead_code, unused_variables)]
7819    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
7820        xml_util::deserialize_primitive(tag_name, stack, Ok)
7821    }
7822}
7823/// <p>Contains information about the account password policy.</p> <p> This data type is used as a response element in the <a>GetAccountPasswordPolicy</a> operation. </p>
7824#[derive(Clone, Debug, Default, PartialEq)]
7825#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7826pub struct PasswordPolicy {
7827    /// <p>Specifies whether IAM users are allowed to change their own password.</p>
7828    pub allow_users_to_change_password: Option<bool>,
7829    /// <p>Indicates whether passwords in the account expire. Returns true if <code>MaxPasswordAge</code> contains a value greater than 0. Returns false if MaxPasswordAge is 0 or not present.</p>
7830    pub expire_passwords: Option<bool>,
7831    /// <p>Specifies whether IAM users are prevented from setting a new password after their password has expired.</p>
7832    pub hard_expiry: Option<bool>,
7833    /// <p>The number of days that an IAM user password is valid.</p>
7834    pub max_password_age: Option<i64>,
7835    /// <p>Minimum length to require for IAM user passwords.</p>
7836    pub minimum_password_length: Option<i64>,
7837    /// <p>Specifies the number of previous passwords that IAM users are prevented from reusing.</p>
7838    pub password_reuse_prevention: Option<i64>,
7839    /// <p>Specifies whether IAM user passwords must contain at least one lowercase character (a to z).</p>
7840    pub require_lowercase_characters: Option<bool>,
7841    /// <p>Specifies whether IAM user passwords must contain at least one numeric character (0 to 9).</p>
7842    pub require_numbers: Option<bool>,
7843    /// <p>Specifies whether IAM user passwords must contain at least one of the following symbols:</p> <p>! @ # $ % ^ &amp; * ( ) _ + - = [ ] { } | '</p>
7844    pub require_symbols: Option<bool>,
7845    /// <p>Specifies whether IAM user passwords must contain at least one uppercase character (A to Z).</p>
7846    pub require_uppercase_characters: Option<bool>,
7847}
7848
7849#[allow(dead_code)]
7850struct PasswordPolicyDeserializer;
7851impl PasswordPolicyDeserializer {
7852    #[allow(dead_code, unused_variables)]
7853    fn deserialize<T: Peek + Next>(
7854        tag_name: &str,
7855        stack: &mut T,
7856    ) -> Result<PasswordPolicy, XmlParseError> {
7857        deserialize_elements::<_, PasswordPolicy, _>(tag_name, stack, |name, stack, obj| {
7858            match name {
7859                "AllowUsersToChangePassword" => {
7860                    obj.allow_users_to_change_password = Some(
7861                        BooleanTypeDeserializer::deserialize("AllowUsersToChangePassword", stack)?,
7862                    );
7863                }
7864                "ExpirePasswords" => {
7865                    obj.expire_passwords = Some(BooleanTypeDeserializer::deserialize(
7866                        "ExpirePasswords",
7867                        stack,
7868                    )?);
7869                }
7870                "HardExpiry" => {
7871                    obj.hard_expiry = Some(BooleanObjectTypeDeserializer::deserialize(
7872                        "HardExpiry",
7873                        stack,
7874                    )?);
7875                }
7876                "MaxPasswordAge" => {
7877                    obj.max_password_age = Some(MaxPasswordAgeTypeDeserializer::deserialize(
7878                        "MaxPasswordAge",
7879                        stack,
7880                    )?);
7881                }
7882                "MinimumPasswordLength" => {
7883                    obj.minimum_password_length =
7884                        Some(MinimumPasswordLengthTypeDeserializer::deserialize(
7885                            "MinimumPasswordLength",
7886                            stack,
7887                        )?);
7888                }
7889                "PasswordReusePrevention" => {
7890                    obj.password_reuse_prevention =
7891                        Some(PasswordReusePreventionTypeDeserializer::deserialize(
7892                            "PasswordReusePrevention",
7893                            stack,
7894                        )?);
7895                }
7896                "RequireLowercaseCharacters" => {
7897                    obj.require_lowercase_characters = Some(BooleanTypeDeserializer::deserialize(
7898                        "RequireLowercaseCharacters",
7899                        stack,
7900                    )?);
7901                }
7902                "RequireNumbers" => {
7903                    obj.require_numbers = Some(BooleanTypeDeserializer::deserialize(
7904                        "RequireNumbers",
7905                        stack,
7906                    )?);
7907                }
7908                "RequireSymbols" => {
7909                    obj.require_symbols = Some(BooleanTypeDeserializer::deserialize(
7910                        "RequireSymbols",
7911                        stack,
7912                    )?);
7913                }
7914                "RequireUppercaseCharacters" => {
7915                    obj.require_uppercase_characters = Some(BooleanTypeDeserializer::deserialize(
7916                        "RequireUppercaseCharacters",
7917                        stack,
7918                    )?);
7919                }
7920                _ => skip_tree(stack),
7921            }
7922            Ok(())
7923        })
7924    }
7925}
7926#[allow(dead_code)]
7927struct PasswordReusePreventionTypeDeserializer;
7928impl PasswordReusePreventionTypeDeserializer {
7929    #[allow(dead_code, unused_variables)]
7930    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
7931        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
7932    }
7933}
7934#[allow(dead_code)]
7935struct PathTypeDeserializer;
7936impl PathTypeDeserializer {
7937    #[allow(dead_code, unused_variables)]
7938    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
7939        xml_util::deserialize_primitive(tag_name, stack, Ok)
7940    }
7941}
7942#[allow(dead_code)]
7943struct PermissionsBoundaryAttachmentTypeDeserializer;
7944impl PermissionsBoundaryAttachmentTypeDeserializer {
7945    #[allow(dead_code, unused_variables)]
7946    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
7947        xml_util::deserialize_primitive(tag_name, stack, Ok)
7948    }
7949}
7950/// <p>Contains information about the effect that a permissions boundary has on a policy simulation when the boundary is applied to an IAM entity.</p>
7951#[derive(Clone, Debug, Default, PartialEq)]
7952#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7953pub struct PermissionsBoundaryDecisionDetail {
7954    /// <p>Specifies whether an action is allowed by a permissions boundary that is applied to an IAM entity (user or role). A value of <code>true</code> means that the permissions boundary does not deny the action. This means that the policy includes an <code>Allow</code> statement that matches the request. In this case, if an identity-based policy also allows the action, the request is allowed. A value of <code>false</code> means that either the requested action is not allowed (implicitly denied) or that the action is explicitly denied by the permissions boundary. In both of these cases, the action is not allowed, regardless of the identity-based policy.</p>
7955    pub allowed_by_permissions_boundary: Option<bool>,
7956}
7957
7958#[allow(dead_code)]
7959struct PermissionsBoundaryDecisionDetailDeserializer;
7960impl PermissionsBoundaryDecisionDetailDeserializer {
7961    #[allow(dead_code, unused_variables)]
7962    fn deserialize<T: Peek + Next>(
7963        tag_name: &str,
7964        stack: &mut T,
7965    ) -> Result<PermissionsBoundaryDecisionDetail, XmlParseError> {
7966        deserialize_elements::<_, PermissionsBoundaryDecisionDetail, _>(
7967            tag_name,
7968            stack,
7969            |name, stack, obj| {
7970                match name {
7971                    "AllowedByPermissionsBoundary" => {
7972                        obj.allowed_by_permissions_boundary =
7973                            Some(BooleanTypeDeserializer::deserialize(
7974                                "AllowedByPermissionsBoundary",
7975                                stack,
7976                            )?);
7977                    }
7978                    _ => skip_tree(stack),
7979                }
7980                Ok(())
7981            },
7982        )
7983    }
7984}
7985/// <p>Contains information about a managed policy.</p> <p>This data type is used as a response element in the <a>CreatePolicy</a>, <a>GetPolicy</a>, and <a>ListPolicies</a> operations. </p> <p>For more information about managed policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>
7986#[derive(Clone, Debug, Default, PartialEq)]
7987#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
7988pub struct Policy {
7989    pub arn: Option<String>,
7990    /// <p>The number of entities (users, groups, and roles) that the policy is attached to.</p>
7991    pub attachment_count: Option<i64>,
7992    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the policy was created.</p>
7993    pub create_date: Option<String>,
7994    /// <p>The identifier for the version of the policy that is set as the default version.</p>
7995    pub default_version_id: Option<String>,
7996    /// <p>A friendly description of the policy.</p> <p>This element is included in the response to the <a>GetPolicy</a> operation. It is not included in the response to the <a>ListPolicies</a> operation. </p>
7997    pub description: Option<String>,
7998    /// <p>Specifies whether the policy can be attached to an IAM user, group, or role.</p>
7999    pub is_attachable: Option<bool>,
8000    /// <p>The path to the policy.</p> <p>For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
8001    pub path: Option<String>,
8002    /// <p>The number of entities (users and roles) for which the policy is used to set the permissions boundary. </p> <p>For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM identities </a> in the <i>IAM User Guide</i>.</p>
8003    pub permissions_boundary_usage_count: Option<i64>,
8004    /// <p>The stable and unique string identifying the policy.</p> <p>For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
8005    pub policy_id: Option<String>,
8006    /// <p>The friendly name (not ARN) identifying the policy.</p>
8007    pub policy_name: Option<String>,
8008    /// <p>A list of tags that are attached to the instance profile. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
8009    pub tags: Option<Vec<Tag>>,
8010    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the policy was last updated.</p> <p>When a policy has only one version, this field contains the date and time when the policy was created. When a policy has more than one version, this field contains the date and time when the most recent policy version was created.</p>
8011    pub update_date: Option<String>,
8012}
8013
8014#[allow(dead_code)]
8015struct PolicyDeserializer;
8016impl PolicyDeserializer {
8017    #[allow(dead_code, unused_variables)]
8018    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Policy, XmlParseError> {
8019        deserialize_elements::<_, Policy, _>(tag_name, stack, |name, stack, obj| {
8020            match name {
8021                "Arn" => {
8022                    obj.arn = Some(ArnTypeDeserializer::deserialize("Arn", stack)?);
8023                }
8024                "AttachmentCount" => {
8025                    obj.attachment_count = Some(AttachmentCountTypeDeserializer::deserialize(
8026                        "AttachmentCount",
8027                        stack,
8028                    )?);
8029                }
8030                "CreateDate" => {
8031                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
8032                }
8033                "DefaultVersionId" => {
8034                    obj.default_version_id = Some(PolicyVersionIdTypeDeserializer::deserialize(
8035                        "DefaultVersionId",
8036                        stack,
8037                    )?);
8038                }
8039                "Description" => {
8040                    obj.description = Some(PolicyDescriptionTypeDeserializer::deserialize(
8041                        "Description",
8042                        stack,
8043                    )?);
8044                }
8045                "IsAttachable" => {
8046                    obj.is_attachable =
8047                        Some(BooleanTypeDeserializer::deserialize("IsAttachable", stack)?);
8048                }
8049                "Path" => {
8050                    obj.path = Some(PolicyPathTypeDeserializer::deserialize("Path", stack)?);
8051                }
8052                "PermissionsBoundaryUsageCount" => {
8053                    obj.permissions_boundary_usage_count =
8054                        Some(AttachmentCountTypeDeserializer::deserialize(
8055                            "PermissionsBoundaryUsageCount",
8056                            stack,
8057                        )?);
8058                }
8059                "PolicyId" => {
8060                    obj.policy_id = Some(IdTypeDeserializer::deserialize("PolicyId", stack)?);
8061                }
8062                "PolicyName" => {
8063                    obj.policy_name = Some(PolicyNameTypeDeserializer::deserialize(
8064                        "PolicyName",
8065                        stack,
8066                    )?);
8067                }
8068                "Tags" => {
8069                    obj.tags
8070                        .get_or_insert(vec![])
8071                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
8072                }
8073                "UpdateDate" => {
8074                    obj.update_date = Some(DateTypeDeserializer::deserialize("UpdateDate", stack)?);
8075                }
8076                _ => skip_tree(stack),
8077            }
8078            Ok(())
8079        })
8080    }
8081}
8082#[allow(dead_code)]
8083struct PolicyDescriptionTypeDeserializer;
8084impl PolicyDescriptionTypeDeserializer {
8085    #[allow(dead_code, unused_variables)]
8086    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8087        xml_util::deserialize_primitive(tag_name, stack, Ok)
8088    }
8089}
8090/// <p>Contains information about an IAM policy, including the policy document.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p>
8091#[derive(Clone, Debug, Default, PartialEq)]
8092#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8093pub struct PolicyDetail {
8094    /// <p>The policy document.</p>
8095    pub policy_document: Option<String>,
8096    /// <p>The name of the policy.</p>
8097    pub policy_name: Option<String>,
8098}
8099
8100#[allow(dead_code)]
8101struct PolicyDetailDeserializer;
8102impl PolicyDetailDeserializer {
8103    #[allow(dead_code, unused_variables)]
8104    fn deserialize<T: Peek + Next>(
8105        tag_name: &str,
8106        stack: &mut T,
8107    ) -> Result<PolicyDetail, XmlParseError> {
8108        deserialize_elements::<_, PolicyDetail, _>(tag_name, stack, |name, stack, obj| {
8109            match name {
8110                "PolicyDocument" => {
8111                    obj.policy_document = Some(PolicyDocumentTypeDeserializer::deserialize(
8112                        "PolicyDocument",
8113                        stack,
8114                    )?);
8115                }
8116                "PolicyName" => {
8117                    obj.policy_name = Some(PolicyNameTypeDeserializer::deserialize(
8118                        "PolicyName",
8119                        stack,
8120                    )?);
8121                }
8122                _ => skip_tree(stack),
8123            }
8124            Ok(())
8125        })
8126    }
8127}
8128#[allow(dead_code)]
8129struct PolicyDetailListTypeDeserializer;
8130impl PolicyDetailListTypeDeserializer {
8131    #[allow(dead_code, unused_variables)]
8132    fn deserialize<T: Peek + Next>(
8133        tag_name: &str,
8134        stack: &mut T,
8135    ) -> Result<Vec<PolicyDetail>, XmlParseError> {
8136        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
8137            if name == "member" {
8138                obj.push(PolicyDetailDeserializer::deserialize("member", stack)?);
8139            } else {
8140                skip_tree(stack);
8141            }
8142            Ok(())
8143        })
8144    }
8145}
8146#[allow(dead_code)]
8147struct PolicyDocumentTypeDeserializer;
8148impl PolicyDocumentTypeDeserializer {
8149    #[allow(dead_code, unused_variables)]
8150    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8151        xml_util::deserialize_primitive(tag_name, stack, |s| {
8152            Ok(rusoto_core::signature::decode_uri(&s))
8153        })
8154    }
8155}
8156#[allow(dead_code)]
8157struct PolicyDocumentVersionListTypeDeserializer;
8158impl PolicyDocumentVersionListTypeDeserializer {
8159    #[allow(dead_code, unused_variables)]
8160    fn deserialize<T: Peek + Next>(
8161        tag_name: &str,
8162        stack: &mut T,
8163    ) -> Result<Vec<PolicyVersion>, XmlParseError> {
8164        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
8165            if name == "member" {
8166                obj.push(PolicyVersionDeserializer::deserialize("member", stack)?);
8167            } else {
8168                skip_tree(stack);
8169            }
8170            Ok(())
8171        })
8172    }
8173}
8174#[allow(dead_code)]
8175struct PolicyEvaluationDecisionTypeDeserializer;
8176impl PolicyEvaluationDecisionTypeDeserializer {
8177    #[allow(dead_code, unused_variables)]
8178    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8179        xml_util::deserialize_primitive(tag_name, stack, Ok)
8180    }
8181}
8182/// <p>Contains details about the permissions policies that are attached to the specified identity (user, group, or role).</p> <p>This data type is an element of the <a>ListPoliciesGrantingServiceAccessEntry</a> object.</p>
8183#[derive(Clone, Debug, Default, PartialEq)]
8184#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8185pub struct PolicyGrantingServiceAccess {
8186    /// <p>The name of the entity (user or role) to which the inline policy is attached.</p> <p>This field is null for managed policies. For more information about these policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
8187    pub entity_name: Option<String>,
8188    /// <p>The type of entity (user or role) that used the policy to access the service to which the inline policy is attached.</p> <p>This field is null for managed policies. For more information about these policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
8189    pub entity_type: Option<String>,
8190    pub policy_arn: Option<String>,
8191    /// <p>The policy name.</p>
8192    pub policy_name: String,
8193    /// <p>The policy type. For more information about these policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
8194    pub policy_type: String,
8195}
8196
8197#[allow(dead_code)]
8198struct PolicyGrantingServiceAccessDeserializer;
8199impl PolicyGrantingServiceAccessDeserializer {
8200    #[allow(dead_code, unused_variables)]
8201    fn deserialize<T: Peek + Next>(
8202        tag_name: &str,
8203        stack: &mut T,
8204    ) -> Result<PolicyGrantingServiceAccess, XmlParseError> {
8205        deserialize_elements::<_, PolicyGrantingServiceAccess, _>(
8206            tag_name,
8207            stack,
8208            |name, stack, obj| {
8209                match name {
8210                    "EntityName" => {
8211                        obj.entity_name = Some(EntityNameTypeDeserializer::deserialize(
8212                            "EntityName",
8213                            stack,
8214                        )?);
8215                    }
8216                    "EntityType" => {
8217                        obj.entity_type = Some(PolicyOwnerEntityTypeDeserializer::deserialize(
8218                            "EntityType",
8219                            stack,
8220                        )?);
8221                    }
8222                    "PolicyArn" => {
8223                        obj.policy_arn =
8224                            Some(ArnTypeDeserializer::deserialize("PolicyArn", stack)?);
8225                    }
8226                    "PolicyName" => {
8227                        obj.policy_name =
8228                            PolicyNameTypeDeserializer::deserialize("PolicyName", stack)?;
8229                    }
8230                    "PolicyType" => {
8231                        obj.policy_type = PolicyTypeDeserializer::deserialize("PolicyType", stack)?;
8232                    }
8233                    _ => skip_tree(stack),
8234                }
8235                Ok(())
8236            },
8237        )
8238    }
8239}
8240#[allow(dead_code)]
8241struct PolicyGrantingServiceAccessListTypeDeserializer;
8242impl PolicyGrantingServiceAccessListTypeDeserializer {
8243    #[allow(dead_code, unused_variables)]
8244    fn deserialize<T: Peek + Next>(
8245        tag_name: &str,
8246        stack: &mut T,
8247    ) -> Result<Vec<PolicyGrantingServiceAccess>, XmlParseError> {
8248        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
8249            if name == "member" {
8250                obj.push(PolicyGrantingServiceAccessDeserializer::deserialize(
8251                    "member", stack,
8252                )?);
8253            } else {
8254                skip_tree(stack);
8255            }
8256            Ok(())
8257        })
8258    }
8259}
8260/// <p>Contains information about a group that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a>ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>
8261#[derive(Clone, Debug, Default, PartialEq)]
8262#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8263pub struct PolicyGroup {
8264    /// <p>The stable and unique string identifying the group. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
8265    pub group_id: Option<String>,
8266    /// <p>The name (friendly name, not ARN) identifying the group.</p>
8267    pub group_name: Option<String>,
8268}
8269
8270#[allow(dead_code)]
8271struct PolicyGroupDeserializer;
8272impl PolicyGroupDeserializer {
8273    #[allow(dead_code, unused_variables)]
8274    fn deserialize<T: Peek + Next>(
8275        tag_name: &str,
8276        stack: &mut T,
8277    ) -> Result<PolicyGroup, XmlParseError> {
8278        deserialize_elements::<_, PolicyGroup, _>(tag_name, stack, |name, stack, obj| {
8279            match name {
8280                "GroupId" => {
8281                    obj.group_id = Some(IdTypeDeserializer::deserialize("GroupId", stack)?);
8282                }
8283                "GroupName" => {
8284                    obj.group_name =
8285                        Some(GroupNameTypeDeserializer::deserialize("GroupName", stack)?);
8286                }
8287                _ => skip_tree(stack),
8288            }
8289            Ok(())
8290        })
8291    }
8292}
8293#[allow(dead_code)]
8294struct PolicyGroupListTypeDeserializer;
8295impl PolicyGroupListTypeDeserializer {
8296    #[allow(dead_code, unused_variables)]
8297    fn deserialize<T: Peek + Next>(
8298        tag_name: &str,
8299        stack: &mut T,
8300    ) -> Result<Vec<PolicyGroup>, XmlParseError> {
8301        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
8302            if name == "member" {
8303                obj.push(PolicyGroupDeserializer::deserialize("member", stack)?);
8304            } else {
8305                skip_tree(stack);
8306            }
8307            Ok(())
8308        })
8309    }
8310}
8311#[allow(dead_code)]
8312struct PolicyIdentifierTypeDeserializer;
8313impl PolicyIdentifierTypeDeserializer {
8314    #[allow(dead_code, unused_variables)]
8315    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8316        xml_util::deserialize_primitive(tag_name, stack, Ok)
8317    }
8318}
8319#[allow(dead_code)]
8320struct PolicyListTypeDeserializer;
8321impl PolicyListTypeDeserializer {
8322    #[allow(dead_code, unused_variables)]
8323    fn deserialize<T: Peek + Next>(
8324        tag_name: &str,
8325        stack: &mut T,
8326    ) -> Result<Vec<Policy>, XmlParseError> {
8327        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
8328            if name == "member" {
8329                obj.push(PolicyDeserializer::deserialize("member", stack)?);
8330            } else {
8331                skip_tree(stack);
8332            }
8333            Ok(())
8334        })
8335    }
8336}
8337#[allow(dead_code)]
8338struct PolicyNameListTypeDeserializer;
8339impl PolicyNameListTypeDeserializer {
8340    #[allow(dead_code, unused_variables)]
8341    fn deserialize<T: Peek + Next>(
8342        tag_name: &str,
8343        stack: &mut T,
8344    ) -> Result<Vec<String>, XmlParseError> {
8345        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
8346            if name == "member" {
8347                obj.push(PolicyNameTypeDeserializer::deserialize("member", stack)?);
8348            } else {
8349                skip_tree(stack);
8350            }
8351            Ok(())
8352        })
8353    }
8354}
8355#[allow(dead_code)]
8356struct PolicyNameTypeDeserializer;
8357impl PolicyNameTypeDeserializer {
8358    #[allow(dead_code, unused_variables)]
8359    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8360        xml_util::deserialize_primitive(tag_name, stack, Ok)
8361    }
8362}
8363#[allow(dead_code)]
8364struct PolicyOwnerEntityTypeDeserializer;
8365impl PolicyOwnerEntityTypeDeserializer {
8366    #[allow(dead_code, unused_variables)]
8367    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8368        xml_util::deserialize_primitive(tag_name, stack, Ok)
8369    }
8370}
8371#[allow(dead_code)]
8372struct PolicyPathTypeDeserializer;
8373impl PolicyPathTypeDeserializer {
8374    #[allow(dead_code, unused_variables)]
8375    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8376        xml_util::deserialize_primitive(tag_name, stack, Ok)
8377    }
8378}
8379/// <p>Contains information about a role that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a>ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>
8380#[derive(Clone, Debug, Default, PartialEq)]
8381#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8382pub struct PolicyRole {
8383    /// <p>The stable and unique string identifying the role. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
8384    pub role_id: Option<String>,
8385    /// <p>The name (friendly name, not ARN) identifying the role.</p>
8386    pub role_name: Option<String>,
8387}
8388
8389#[allow(dead_code)]
8390struct PolicyRoleDeserializer;
8391impl PolicyRoleDeserializer {
8392    #[allow(dead_code, unused_variables)]
8393    fn deserialize<T: Peek + Next>(
8394        tag_name: &str,
8395        stack: &mut T,
8396    ) -> Result<PolicyRole, XmlParseError> {
8397        deserialize_elements::<_, PolicyRole, _>(tag_name, stack, |name, stack, obj| {
8398            match name {
8399                "RoleId" => {
8400                    obj.role_id = Some(IdTypeDeserializer::deserialize("RoleId", stack)?);
8401                }
8402                "RoleName" => {
8403                    obj.role_name = Some(RoleNameTypeDeserializer::deserialize("RoleName", stack)?);
8404                }
8405                _ => skip_tree(stack),
8406            }
8407            Ok(())
8408        })
8409    }
8410}
8411#[allow(dead_code)]
8412struct PolicyRoleListTypeDeserializer;
8413impl PolicyRoleListTypeDeserializer {
8414    #[allow(dead_code, unused_variables)]
8415    fn deserialize<T: Peek + Next>(
8416        tag_name: &str,
8417        stack: &mut T,
8418    ) -> Result<Vec<PolicyRole>, XmlParseError> {
8419        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
8420            if name == "member" {
8421                obj.push(PolicyRoleDeserializer::deserialize("member", stack)?);
8422            } else {
8423                skip_tree(stack);
8424            }
8425            Ok(())
8426        })
8427    }
8428}
8429#[allow(dead_code)]
8430struct PolicySourceTypeDeserializer;
8431impl PolicySourceTypeDeserializer {
8432    #[allow(dead_code, unused_variables)]
8433    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8434        xml_util::deserialize_primitive(tag_name, stack, Ok)
8435    }
8436}
8437#[allow(dead_code)]
8438struct PolicyTypeDeserializer;
8439impl PolicyTypeDeserializer {
8440    #[allow(dead_code, unused_variables)]
8441    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8442        xml_util::deserialize_primitive(tag_name, stack, Ok)
8443    }
8444}
8445/// <p>Contains information about a user that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a>ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>
8446#[derive(Clone, Debug, Default, PartialEq)]
8447#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8448pub struct PolicyUser {
8449    /// <p>The stable and unique string identifying the user. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
8450    pub user_id: Option<String>,
8451    /// <p>The name (friendly name, not ARN) identifying the user.</p>
8452    pub user_name: Option<String>,
8453}
8454
8455#[allow(dead_code)]
8456struct PolicyUserDeserializer;
8457impl PolicyUserDeserializer {
8458    #[allow(dead_code, unused_variables)]
8459    fn deserialize<T: Peek + Next>(
8460        tag_name: &str,
8461        stack: &mut T,
8462    ) -> Result<PolicyUser, XmlParseError> {
8463        deserialize_elements::<_, PolicyUser, _>(tag_name, stack, |name, stack, obj| {
8464            match name {
8465                "UserId" => {
8466                    obj.user_id = Some(IdTypeDeserializer::deserialize("UserId", stack)?);
8467                }
8468                "UserName" => {
8469                    obj.user_name = Some(UserNameTypeDeserializer::deserialize("UserName", stack)?);
8470                }
8471                _ => skip_tree(stack),
8472            }
8473            Ok(())
8474        })
8475    }
8476}
8477#[allow(dead_code)]
8478struct PolicyUserListTypeDeserializer;
8479impl PolicyUserListTypeDeserializer {
8480    #[allow(dead_code, unused_variables)]
8481    fn deserialize<T: Peek + Next>(
8482        tag_name: &str,
8483        stack: &mut T,
8484    ) -> Result<Vec<PolicyUser>, XmlParseError> {
8485        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
8486            if name == "member" {
8487                obj.push(PolicyUserDeserializer::deserialize("member", stack)?);
8488            } else {
8489                skip_tree(stack);
8490            }
8491            Ok(())
8492        })
8493    }
8494}
8495/// <p>Contains information about a version of a managed policy.</p> <p>This data type is used as a response element in the <a>CreatePolicyVersion</a>, <a>GetPolicyVersion</a>, <a>ListPolicyVersions</a>, and <a>GetAccountAuthorizationDetails</a> operations. </p> <p>For more information about managed policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>
8496#[derive(Clone, Debug, Default, PartialEq)]
8497#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8498pub struct PolicyVersion {
8499    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the policy version was created.</p>
8500    pub create_date: Option<String>,
8501    /// <p>The policy document.</p> <p>The policy document is returned in the response to the <a>GetPolicyVersion</a> and <a>GetAccountAuthorizationDetails</a> operations. It is not returned in the response to the <a>CreatePolicyVersion</a> or <a>ListPolicyVersions</a> operations. </p> <p>The policy document returned in this structure is URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p>
8502    pub document: Option<String>,
8503    /// <p>Specifies whether the policy version is set as the policy's default version.</p>
8504    pub is_default_version: Option<bool>,
8505    /// <p>The identifier for the policy version.</p> <p>Policy version identifiers always begin with <code>v</code> (always lowercase). When a policy is created, the first policy version is <code>v1</code>. </p>
8506    pub version_id: Option<String>,
8507}
8508
8509#[allow(dead_code)]
8510struct PolicyVersionDeserializer;
8511impl PolicyVersionDeserializer {
8512    #[allow(dead_code, unused_variables)]
8513    fn deserialize<T: Peek + Next>(
8514        tag_name: &str,
8515        stack: &mut T,
8516    ) -> Result<PolicyVersion, XmlParseError> {
8517        deserialize_elements::<_, PolicyVersion, _>(tag_name, stack, |name, stack, obj| {
8518            match name {
8519                "CreateDate" => {
8520                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
8521                }
8522                "Document" => {
8523                    obj.document = Some(PolicyDocumentTypeDeserializer::deserialize(
8524                        "Document", stack,
8525                    )?);
8526                }
8527                "IsDefaultVersion" => {
8528                    obj.is_default_version = Some(BooleanTypeDeserializer::deserialize(
8529                        "IsDefaultVersion",
8530                        stack,
8531                    )?);
8532                }
8533                "VersionId" => {
8534                    obj.version_id = Some(PolicyVersionIdTypeDeserializer::deserialize(
8535                        "VersionId",
8536                        stack,
8537                    )?);
8538                }
8539                _ => skip_tree(stack),
8540            }
8541            Ok(())
8542        })
8543    }
8544}
8545#[allow(dead_code)]
8546struct PolicyVersionIdTypeDeserializer;
8547impl PolicyVersionIdTypeDeserializer {
8548    #[allow(dead_code, unused_variables)]
8549    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8550        xml_util::deserialize_primitive(tag_name, stack, Ok)
8551    }
8552}
8553/// <p>Contains the row and column of a location of a <code>Statement</code> element in a policy document.</p> <p>This data type is used as a member of the <code> <a>Statement</a> </code> type.</p>
8554#[derive(Clone, Debug, Default, PartialEq)]
8555#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8556pub struct Position {
8557    /// <p>The column in the line containing the specified position in the document.</p>
8558    pub column: Option<i64>,
8559    /// <p>The line containing the specified position in the document.</p>
8560    pub line: Option<i64>,
8561}
8562
8563#[allow(dead_code)]
8564struct PositionDeserializer;
8565impl PositionDeserializer {
8566    #[allow(dead_code, unused_variables)]
8567    fn deserialize<T: Peek + Next>(
8568        tag_name: &str,
8569        stack: &mut T,
8570    ) -> Result<Position, XmlParseError> {
8571        deserialize_elements::<_, Position, _>(tag_name, stack, |name, stack, obj| {
8572            match name {
8573                "Column" => {
8574                    obj.column = Some(ColumnNumberDeserializer::deserialize("Column", stack)?);
8575                }
8576                "Line" => {
8577                    obj.line = Some(LineNumberDeserializer::deserialize("Line", stack)?);
8578                }
8579                _ => skip_tree(stack),
8580            }
8581            Ok(())
8582        })
8583    }
8584}
8585#[allow(dead_code)]
8586struct PublicKeyFingerprintTypeDeserializer;
8587impl PublicKeyFingerprintTypeDeserializer {
8588    #[allow(dead_code, unused_variables)]
8589    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8590        xml_util::deserialize_primitive(tag_name, stack, Ok)
8591    }
8592}
8593#[allow(dead_code)]
8594struct PublicKeyIdTypeDeserializer;
8595impl PublicKeyIdTypeDeserializer {
8596    #[allow(dead_code, unused_variables)]
8597    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8598        xml_util::deserialize_primitive(tag_name, stack, Ok)
8599    }
8600}
8601#[allow(dead_code)]
8602struct PublicKeyMaterialTypeDeserializer;
8603impl PublicKeyMaterialTypeDeserializer {
8604    #[allow(dead_code, unused_variables)]
8605    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8606        xml_util::deserialize_primitive(tag_name, stack, Ok)
8607    }
8608}
8609#[derive(Clone, Debug, Default, PartialEq)]
8610#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8611pub struct PutGroupPolicyRequest {
8612    /// <p>The name of the group to associate the policy with.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-.</p>
8613    pub group_name: String,
8614    /// <p><p>The policy document.</p> <p>You must provide policies in JSON format in IAM. However, for AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
8615    pub policy_document: String,
8616    /// <p>The name of the policy document.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8617    pub policy_name: String,
8618}
8619
8620/// Serialize `PutGroupPolicyRequest` contents to a `SignedRequest`.
8621struct PutGroupPolicyRequestSerializer;
8622impl PutGroupPolicyRequestSerializer {
8623    fn serialize(params: &mut Params, name: &str, obj: &PutGroupPolicyRequest) {
8624        let mut prefix = name.to_string();
8625        if prefix != "" {
8626            prefix.push_str(".");
8627        }
8628
8629        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
8630        params.put(
8631            &format!("{}{}", prefix, "PolicyDocument"),
8632            &obj.policy_document,
8633        );
8634        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
8635    }
8636}
8637
8638#[derive(Clone, Debug, Default, PartialEq)]
8639#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8640pub struct PutRolePermissionsBoundaryRequest {
8641    /// <p>The ARN of the policy that is used to set the permissions boundary for the role.</p>
8642    pub permissions_boundary: String,
8643    /// <p>The name (friendly name, not ARN) of the IAM role for which you want to set the permissions boundary.</p>
8644    pub role_name: String,
8645}
8646
8647/// Serialize `PutRolePermissionsBoundaryRequest` contents to a `SignedRequest`.
8648struct PutRolePermissionsBoundaryRequestSerializer;
8649impl PutRolePermissionsBoundaryRequestSerializer {
8650    fn serialize(params: &mut Params, name: &str, obj: &PutRolePermissionsBoundaryRequest) {
8651        let mut prefix = name.to_string();
8652        if prefix != "" {
8653            prefix.push_str(".");
8654        }
8655
8656        params.put(
8657            &format!("{}{}", prefix, "PermissionsBoundary"),
8658            &obj.permissions_boundary,
8659        );
8660        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
8661    }
8662}
8663
8664#[derive(Clone, Debug, Default, PartialEq)]
8665#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8666pub struct PutRolePolicyRequest {
8667    /// <p><p>The policy document.</p> <p>You must provide policies in JSON format in IAM. However, for AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
8668    pub policy_document: String,
8669    /// <p>The name of the policy document.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8670    pub policy_name: String,
8671    /// <p>The name of the role to associate the policy with.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8672    pub role_name: String,
8673}
8674
8675/// Serialize `PutRolePolicyRequest` contents to a `SignedRequest`.
8676struct PutRolePolicyRequestSerializer;
8677impl PutRolePolicyRequestSerializer {
8678    fn serialize(params: &mut Params, name: &str, obj: &PutRolePolicyRequest) {
8679        let mut prefix = name.to_string();
8680        if prefix != "" {
8681            prefix.push_str(".");
8682        }
8683
8684        params.put(
8685            &format!("{}{}", prefix, "PolicyDocument"),
8686            &obj.policy_document,
8687        );
8688        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
8689        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
8690    }
8691}
8692
8693#[derive(Clone, Debug, Default, PartialEq)]
8694#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8695pub struct PutUserPermissionsBoundaryRequest {
8696    /// <p>The ARN of the policy that is used to set the permissions boundary for the user.</p>
8697    pub permissions_boundary: String,
8698    /// <p>The name (friendly name, not ARN) of the IAM user for which you want to set the permissions boundary.</p>
8699    pub user_name: String,
8700}
8701
8702/// Serialize `PutUserPermissionsBoundaryRequest` contents to a `SignedRequest`.
8703struct PutUserPermissionsBoundaryRequestSerializer;
8704impl PutUserPermissionsBoundaryRequestSerializer {
8705    fn serialize(params: &mut Params, name: &str, obj: &PutUserPermissionsBoundaryRequest) {
8706        let mut prefix = name.to_string();
8707        if prefix != "" {
8708            prefix.push_str(".");
8709        }
8710
8711        params.put(
8712            &format!("{}{}", prefix, "PermissionsBoundary"),
8713            &obj.permissions_boundary,
8714        );
8715        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
8716    }
8717}
8718
8719#[derive(Clone, Debug, Default, PartialEq)]
8720#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8721pub struct PutUserPolicyRequest {
8722    /// <p><p>The policy document.</p> <p>You must provide policies in JSON format in IAM. However, for AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
8723    pub policy_document: String,
8724    /// <p>The name of the policy document.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8725    pub policy_name: String,
8726    /// <p>The name of the user to associate the policy with.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8727    pub user_name: String,
8728}
8729
8730/// Serialize `PutUserPolicyRequest` contents to a `SignedRequest`.
8731struct PutUserPolicyRequestSerializer;
8732impl PutUserPolicyRequestSerializer {
8733    fn serialize(params: &mut Params, name: &str, obj: &PutUserPolicyRequest) {
8734        let mut prefix = name.to_string();
8735        if prefix != "" {
8736            prefix.push_str(".");
8737        }
8738
8739        params.put(
8740            &format!("{}{}", prefix, "PolicyDocument"),
8741            &obj.policy_document,
8742        );
8743        params.put(&format!("{}{}", prefix, "PolicyName"), &obj.policy_name);
8744        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
8745    }
8746}
8747
8748#[allow(dead_code)]
8749struct ReasonTypeDeserializer;
8750impl ReasonTypeDeserializer {
8751    #[allow(dead_code, unused_variables)]
8752    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8753        xml_util::deserialize_primitive(tag_name, stack, Ok)
8754    }
8755}
8756#[allow(dead_code)]
8757struct RegionNameTypeDeserializer;
8758impl RegionNameTypeDeserializer {
8759    #[allow(dead_code, unused_variables)]
8760    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8761        xml_util::deserialize_primitive(tag_name, stack, Ok)
8762    }
8763}
8764#[derive(Clone, Debug, Default, PartialEq)]
8765#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8766pub struct RemoveClientIDFromOpenIDConnectProviderRequest {
8767    /// <p>The client ID (also known as audience) to remove from the IAM OIDC provider resource. For more information about client IDs, see <a>CreateOpenIDConnectProvider</a>.</p>
8768    pub client_id: String,
8769    /// <p>The Amazon Resource Name (ARN) of the IAM OIDC provider resource to remove the client ID from. You can get a list of OIDC provider ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
8770    pub open_id_connect_provider_arn: String,
8771}
8772
8773/// Serialize `RemoveClientIDFromOpenIDConnectProviderRequest` contents to a `SignedRequest`.
8774struct RemoveClientIDFromOpenIDConnectProviderRequestSerializer;
8775impl RemoveClientIDFromOpenIDConnectProviderRequestSerializer {
8776    fn serialize(
8777        params: &mut Params,
8778        name: &str,
8779        obj: &RemoveClientIDFromOpenIDConnectProviderRequest,
8780    ) {
8781        let mut prefix = name.to_string();
8782        if prefix != "" {
8783            prefix.push_str(".");
8784        }
8785
8786        params.put(&format!("{}{}", prefix, "ClientID"), &obj.client_id);
8787        params.put(
8788            &format!("{}{}", prefix, "OpenIDConnectProviderArn"),
8789            &obj.open_id_connect_provider_arn,
8790        );
8791    }
8792}
8793
8794#[derive(Clone, Debug, Default, PartialEq)]
8795#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8796pub struct RemoveRoleFromInstanceProfileRequest {
8797    /// <p>The name of the instance profile to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8798    pub instance_profile_name: String,
8799    /// <p>The name of the role to remove.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8800    pub role_name: String,
8801}
8802
8803/// Serialize `RemoveRoleFromInstanceProfileRequest` contents to a `SignedRequest`.
8804struct RemoveRoleFromInstanceProfileRequestSerializer;
8805impl RemoveRoleFromInstanceProfileRequestSerializer {
8806    fn serialize(params: &mut Params, name: &str, obj: &RemoveRoleFromInstanceProfileRequest) {
8807        let mut prefix = name.to_string();
8808        if prefix != "" {
8809            prefix.push_str(".");
8810        }
8811
8812        params.put(
8813            &format!("{}{}", prefix, "InstanceProfileName"),
8814            &obj.instance_profile_name,
8815        );
8816        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
8817    }
8818}
8819
8820#[derive(Clone, Debug, Default, PartialEq)]
8821#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8822pub struct RemoveUserFromGroupRequest {
8823    /// <p>The name of the group to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8824    pub group_name: String,
8825    /// <p>The name of the user to remove.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8826    pub user_name: String,
8827}
8828
8829/// Serialize `RemoveUserFromGroupRequest` contents to a `SignedRequest`.
8830struct RemoveUserFromGroupRequestSerializer;
8831impl RemoveUserFromGroupRequestSerializer {
8832    fn serialize(params: &mut Params, name: &str, obj: &RemoveUserFromGroupRequest) {
8833        let mut prefix = name.to_string();
8834        if prefix != "" {
8835            prefix.push_str(".");
8836        }
8837
8838        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
8839        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
8840    }
8841}
8842
8843#[allow(dead_code)]
8844struct ReportContentTypeDeserializer;
8845impl ReportContentTypeDeserializer {
8846    #[allow(dead_code, unused_variables)]
8847    fn deserialize<T: Peek + Next>(
8848        tag_name: &str,
8849        stack: &mut T,
8850    ) -> Result<bytes::Bytes, XmlParseError> {
8851        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(s.into()))
8852    }
8853}
8854#[allow(dead_code)]
8855struct ReportFormatTypeDeserializer;
8856impl ReportFormatTypeDeserializer {
8857    #[allow(dead_code, unused_variables)]
8858    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8859        xml_util::deserialize_primitive(tag_name, stack, Ok)
8860    }
8861}
8862#[allow(dead_code)]
8863struct ReportStateDescriptionTypeDeserializer;
8864impl ReportStateDescriptionTypeDeserializer {
8865    #[allow(dead_code, unused_variables)]
8866    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8867        xml_util::deserialize_primitive(tag_name, stack, Ok)
8868    }
8869}
8870#[allow(dead_code)]
8871struct ReportStateTypeDeserializer;
8872impl ReportStateTypeDeserializer {
8873    #[allow(dead_code, unused_variables)]
8874    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8875        xml_util::deserialize_primitive(tag_name, stack, Ok)
8876    }
8877}
8878#[derive(Clone, Debug, Default, PartialEq)]
8879#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
8880pub struct ResetServiceSpecificCredentialRequest {
8881    /// <p>The unique identifier of the service-specific credential.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
8882    pub service_specific_credential_id: String,
8883    /// <p>The name of the IAM user associated with the service-specific credential. If this value is not specified, then the operation assumes the user whose credentials are used to call the operation.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
8884    pub user_name: Option<String>,
8885}
8886
8887/// Serialize `ResetServiceSpecificCredentialRequest` contents to a `SignedRequest`.
8888struct ResetServiceSpecificCredentialRequestSerializer;
8889impl ResetServiceSpecificCredentialRequestSerializer {
8890    fn serialize(params: &mut Params, name: &str, obj: &ResetServiceSpecificCredentialRequest) {
8891        let mut prefix = name.to_string();
8892        if prefix != "" {
8893            prefix.push_str(".");
8894        }
8895
8896        params.put(
8897            &format!("{}{}", prefix, "ServiceSpecificCredentialId"),
8898            &obj.service_specific_credential_id,
8899        );
8900        if let Some(ref field_value) = obj.user_name {
8901            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
8902        }
8903    }
8904}
8905
8906#[derive(Clone, Debug, Default, PartialEq)]
8907#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8908pub struct ResetServiceSpecificCredentialResponse {
8909    /// <p><p>A structure with details about the updated service-specific credential, including the new password.</p> <important> <p>This is the <b>only</b> time that you can access the password. You cannot recover the password later, but you can reset it again.</p> </important></p>
8910    pub service_specific_credential: Option<ServiceSpecificCredential>,
8911}
8912
8913#[allow(dead_code)]
8914struct ResetServiceSpecificCredentialResponseDeserializer;
8915impl ResetServiceSpecificCredentialResponseDeserializer {
8916    #[allow(dead_code, unused_variables)]
8917    fn deserialize<T: Peek + Next>(
8918        tag_name: &str,
8919        stack: &mut T,
8920    ) -> Result<ResetServiceSpecificCredentialResponse, XmlParseError> {
8921        deserialize_elements::<_, ResetServiceSpecificCredentialResponse, _>(
8922            tag_name,
8923            stack,
8924            |name, stack, obj| {
8925                match name {
8926                    "ServiceSpecificCredential" => {
8927                        obj.service_specific_credential =
8928                            Some(ServiceSpecificCredentialDeserializer::deserialize(
8929                                "ServiceSpecificCredential",
8930                                stack,
8931                            )?);
8932                    }
8933                    _ => skip_tree(stack),
8934                }
8935                Ok(())
8936            },
8937        )
8938    }
8939}
8940
8941/// Serialize `ResourceNameListType` contents to a `SignedRequest`.
8942struct ResourceNameListTypeSerializer;
8943impl ResourceNameListTypeSerializer {
8944    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
8945        for (index, obj) in obj.iter().enumerate() {
8946            let key = format!("{}.member.{}", name, index + 1);
8947            params.put(&key, &obj);
8948        }
8949    }
8950}
8951
8952#[allow(dead_code)]
8953struct ResourceNameTypeDeserializer;
8954impl ResourceNameTypeDeserializer {
8955    #[allow(dead_code, unused_variables)]
8956    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
8957        xml_util::deserialize_primitive(tag_name, stack, Ok)
8958    }
8959}
8960/// <p>Contains the result of the simulation of a single API operation call on a single resource.</p> <p>This data type is used by a member of the <a>EvaluationResult</a> data type.</p>
8961#[derive(Clone, Debug, Default, PartialEq)]
8962#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
8963pub struct ResourceSpecificResult {
8964    /// <p>Additional details about the results of the evaluation decision on a single resource. This parameter is returned only for cross-account simulations. This parameter explains how each policy type contributes to the resource-specific evaluation decision.</p>
8965    pub eval_decision_details: Option<::std::collections::HashMap<String, String>>,
8966    /// <p>The result of the simulation of the simulated API operation on the resource specified in <code>EvalResourceName</code>.</p>
8967    pub eval_resource_decision: String,
8968    /// <p>The name of the simulated resource, in Amazon Resource Name (ARN) format.</p>
8969    pub eval_resource_name: String,
8970    /// <p>A list of the statements in the input policies that determine the result for this part of the simulation. Remember that even if multiple statements allow the operation on the resource, if <i>any</i> statement denies that operation, then the explicit deny overrides any allow. In addition, the deny statement is the only entry included in the result.</p>
8971    pub matched_statements: Option<Vec<Statement>>,
8972    /// <p>A list of context keys that are required by the included input policies but that were not provided by one of the input parameters. This list is used when a list of ARNs is included in the <code>ResourceArns</code> parameter instead of "*". If you do not specify individual resources, by setting <code>ResourceArns</code> to "*" or by not including the <code>ResourceArns</code> parameter, then any missing context values are instead included under the <code>EvaluationResults</code> section. To discover the context keys used by a set of policies, you can call <a>GetContextKeysForCustomPolicy</a> or <a>GetContextKeysForPrincipalPolicy</a>.</p>
8973    pub missing_context_values: Option<Vec<String>>,
8974    /// <p>Contains information about the effect that a permissions boundary has on a policy simulation when that boundary is applied to an IAM entity.</p>
8975    pub permissions_boundary_decision_detail: Option<PermissionsBoundaryDecisionDetail>,
8976}
8977
8978#[allow(dead_code)]
8979struct ResourceSpecificResultDeserializer;
8980impl ResourceSpecificResultDeserializer {
8981    #[allow(dead_code, unused_variables)]
8982    fn deserialize<T: Peek + Next>(
8983        tag_name: &str,
8984        stack: &mut T,
8985    ) -> Result<ResourceSpecificResult, XmlParseError> {
8986        deserialize_elements::<_, ResourceSpecificResult, _>(tag_name, stack, |name, stack, obj| {
8987            match name {
8988                "EvalDecisionDetails" => {
8989                    obj.eval_decision_details =
8990                        Some(EvalDecisionDetailsTypeDeserializer::deserialize(
8991                            "EvalDecisionDetails",
8992                            stack,
8993                        )?);
8994                }
8995                "EvalResourceDecision" => {
8996                    obj.eval_resource_decision =
8997                        PolicyEvaluationDecisionTypeDeserializer::deserialize(
8998                            "EvalResourceDecision",
8999                            stack,
9000                        )?;
9001                }
9002                "EvalResourceName" => {
9003                    obj.eval_resource_name =
9004                        ResourceNameTypeDeserializer::deserialize("EvalResourceName", stack)?;
9005                }
9006                "MatchedStatements" => {
9007                    obj.matched_statements.get_or_insert(vec![]).extend(
9008                        StatementListTypeDeserializer::deserialize("MatchedStatements", stack)?,
9009                    );
9010                }
9011                "MissingContextValues" => {
9012                    obj.missing_context_values.get_or_insert(vec![]).extend(
9013                        ContextKeyNamesResultListTypeDeserializer::deserialize(
9014                            "MissingContextValues",
9015                            stack,
9016                        )?,
9017                    );
9018                }
9019                "PermissionsBoundaryDecisionDetail" => {
9020                    obj.permissions_boundary_decision_detail =
9021                        Some(PermissionsBoundaryDecisionDetailDeserializer::deserialize(
9022                            "PermissionsBoundaryDecisionDetail",
9023                            stack,
9024                        )?);
9025                }
9026                _ => skip_tree(stack),
9027            }
9028            Ok(())
9029        })
9030    }
9031}
9032#[allow(dead_code)]
9033struct ResourceSpecificResultListTypeDeserializer;
9034impl ResourceSpecificResultListTypeDeserializer {
9035    #[allow(dead_code, unused_variables)]
9036    fn deserialize<T: Peek + Next>(
9037        tag_name: &str,
9038        stack: &mut T,
9039    ) -> Result<Vec<ResourceSpecificResult>, XmlParseError> {
9040        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
9041            if name == "member" {
9042                obj.push(ResourceSpecificResultDeserializer::deserialize(
9043                    "member", stack,
9044                )?);
9045            } else {
9046                skip_tree(stack);
9047            }
9048            Ok(())
9049        })
9050    }
9051}
9052#[allow(dead_code)]
9053struct ResponseMarkerTypeDeserializer;
9054impl ResponseMarkerTypeDeserializer {
9055    #[allow(dead_code, unused_variables)]
9056    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9057        xml_util::deserialize_primitive(tag_name, stack, Ok)
9058    }
9059}
9060#[derive(Clone, Debug, Default, PartialEq)]
9061#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
9062pub struct ResyncMFADeviceRequest {
9063    /// <p>An authentication code emitted by the device.</p> <p>The format for this parameter is a sequence of six digits.</p>
9064    pub authentication_code_1: String,
9065    /// <p>A subsequent authentication code emitted by the device.</p> <p>The format for this parameter is a sequence of six digits.</p>
9066    pub authentication_code_2: String,
9067    /// <p>Serial number that uniquely identifies the MFA device.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
9068    pub serial_number: String,
9069    /// <p>The name of the user whose MFA device you want to resynchronize.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
9070    pub user_name: String,
9071}
9072
9073/// Serialize `ResyncMFADeviceRequest` contents to a `SignedRequest`.
9074struct ResyncMFADeviceRequestSerializer;
9075impl ResyncMFADeviceRequestSerializer {
9076    fn serialize(params: &mut Params, name: &str, obj: &ResyncMFADeviceRequest) {
9077        let mut prefix = name.to_string();
9078        if prefix != "" {
9079            prefix.push_str(".");
9080        }
9081
9082        params.put(
9083            &format!("{}{}", prefix, "AuthenticationCode1"),
9084            &obj.authentication_code_1,
9085        );
9086        params.put(
9087            &format!("{}{}", prefix, "AuthenticationCode2"),
9088            &obj.authentication_code_2,
9089        );
9090        params.put(&format!("{}{}", prefix, "SerialNumber"), &obj.serial_number);
9091        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
9092    }
9093}
9094
9095/// <p>Contains information about an IAM role. This structure is returned as a response element in several API operations that interact with roles.</p>
9096#[derive(Clone, Debug, Default, PartialEq)]
9097#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9098pub struct Role {
9099    /// <p> The Amazon Resource Name (ARN) specifying the role. For more information about ARNs and how to use them in policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i> guide. </p>
9100    pub arn: String,
9101    /// <p>The policy that grants an entity permission to assume the role.</p>
9102    pub assume_role_policy_document: Option<String>,
9103    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the role was created.</p>
9104    pub create_date: String,
9105    /// <p>A description of the role that you provide.</p>
9106    pub description: Option<String>,
9107    /// <p>The maximum session duration (in seconds) for the specified role. Anyone who uses the AWS CLI, or API to assume the role can specify the duration using the optional <code>DurationSeconds</code> API parameter or <code>duration-seconds</code> CLI parameter.</p>
9108    pub max_session_duration: Option<i64>,
9109    /// <p> The path to the role. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
9110    pub path: String,
9111    /// <p>The ARN of the policy used to set the permissions boundary for the role.</p> <p>For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM identities </a> in the <i>IAM User Guide</i>.</p>
9112    pub permissions_boundary: Option<AttachedPermissionsBoundary>,
9113    /// <p> The stable and unique string identifying the role. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
9114    pub role_id: String,
9115    /// <p>Contains information about the last time that an IAM role was used. This includes the date and time and the Region in which the role was last used. Activity is only reported for the trailing 400 days. This period can be shorter if your Region began supporting these features within the last year. The role might have been used more than 400 days ago. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period">Regions where data is tracked</a> in the <i>IAM User Guide</i>.</p>
9116    pub role_last_used: Option<RoleLastUsed>,
9117    /// <p>The friendly name that identifies the role.</p>
9118    pub role_name: String,
9119    /// <p>A list of tags that are attached to the role. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
9120    pub tags: Option<Vec<Tag>>,
9121}
9122
9123#[allow(dead_code)]
9124struct RoleDeserializer;
9125impl RoleDeserializer {
9126    #[allow(dead_code, unused_variables)]
9127    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Role, XmlParseError> {
9128        deserialize_elements::<_, Role, _>(tag_name, stack, |name, stack, obj| {
9129            match name {
9130                "Arn" => {
9131                    obj.arn = ArnTypeDeserializer::deserialize("Arn", stack)?;
9132                }
9133                "AssumeRolePolicyDocument" => {
9134                    obj.assume_role_policy_document =
9135                        Some(PolicyDocumentTypeDeserializer::deserialize(
9136                            "AssumeRolePolicyDocument",
9137                            stack,
9138                        )?);
9139                }
9140                "CreateDate" => {
9141                    obj.create_date = DateTypeDeserializer::deserialize("CreateDate", stack)?;
9142                }
9143                "Description" => {
9144                    obj.description = Some(RoleDescriptionTypeDeserializer::deserialize(
9145                        "Description",
9146                        stack,
9147                    )?);
9148                }
9149                "MaxSessionDuration" => {
9150                    obj.max_session_duration =
9151                        Some(RoleMaxSessionDurationTypeDeserializer::deserialize(
9152                            "MaxSessionDuration",
9153                            stack,
9154                        )?);
9155                }
9156                "Path" => {
9157                    obj.path = PathTypeDeserializer::deserialize("Path", stack)?;
9158                }
9159                "PermissionsBoundary" => {
9160                    obj.permissions_boundary =
9161                        Some(AttachedPermissionsBoundaryDeserializer::deserialize(
9162                            "PermissionsBoundary",
9163                            stack,
9164                        )?);
9165                }
9166                "RoleId" => {
9167                    obj.role_id = IdTypeDeserializer::deserialize("RoleId", stack)?;
9168                }
9169                "RoleLastUsed" => {
9170                    obj.role_last_used = Some(RoleLastUsedDeserializer::deserialize(
9171                        "RoleLastUsed",
9172                        stack,
9173                    )?);
9174                }
9175                "RoleName" => {
9176                    obj.role_name = RoleNameTypeDeserializer::deserialize("RoleName", stack)?;
9177                }
9178                "Tags" => {
9179                    obj.tags
9180                        .get_or_insert(vec![])
9181                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
9182                }
9183                _ => skip_tree(stack),
9184            }
9185            Ok(())
9186        })
9187    }
9188}
9189#[allow(dead_code)]
9190struct RoleDescriptionTypeDeserializer;
9191impl RoleDescriptionTypeDeserializer {
9192    #[allow(dead_code, unused_variables)]
9193    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9194        xml_util::deserialize_primitive(tag_name, stack, Ok)
9195    }
9196}
9197/// <p>Contains information about an IAM role, including all of the role's policies.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p>
9198#[derive(Clone, Debug, Default, PartialEq)]
9199#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9200pub struct RoleDetail {
9201    pub arn: Option<String>,
9202    /// <p>The trust policy that grants permission to assume the role.</p>
9203    pub assume_role_policy_document: Option<String>,
9204    /// <p>A list of managed policies attached to the role. These policies are the role's access (permissions) policies.</p>
9205    pub attached_managed_policies: Option<Vec<AttachedPolicy>>,
9206    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the role was created.</p>
9207    pub create_date: Option<String>,
9208    /// <p>A list of instance profiles that contain this role.</p>
9209    pub instance_profile_list: Option<Vec<InstanceProfile>>,
9210    /// <p>The path to the role. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
9211    pub path: Option<String>,
9212    /// <p>The ARN of the policy used to set the permissions boundary for the role.</p> <p>For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM identities </a> in the <i>IAM User Guide</i>.</p>
9213    pub permissions_boundary: Option<AttachedPermissionsBoundary>,
9214    /// <p>The stable and unique string identifying the role. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
9215    pub role_id: Option<String>,
9216    /// <p>Contains information about the last time that an IAM role was used. This includes the date and time and the Region in which the role was last used. Activity is only reported for the trailing 400 days. This period can be shorter if your Region began supporting these features within the last year. The role might have been used more than 400 days ago. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period">Regions where data is tracked</a> in the <i>IAM User Guide</i>.</p>
9217    pub role_last_used: Option<RoleLastUsed>,
9218    /// <p>The friendly name that identifies the role.</p>
9219    pub role_name: Option<String>,
9220    /// <p>A list of inline policies embedded in the role. These policies are the role's access (permissions) policies.</p>
9221    pub role_policy_list: Option<Vec<PolicyDetail>>,
9222    /// <p>A list of tags that are attached to the role. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
9223    pub tags: Option<Vec<Tag>>,
9224}
9225
9226#[allow(dead_code)]
9227struct RoleDetailDeserializer;
9228impl RoleDetailDeserializer {
9229    #[allow(dead_code, unused_variables)]
9230    fn deserialize<T: Peek + Next>(
9231        tag_name: &str,
9232        stack: &mut T,
9233    ) -> Result<RoleDetail, XmlParseError> {
9234        deserialize_elements::<_, RoleDetail, _>(tag_name, stack, |name, stack, obj| {
9235            match name {
9236                "Arn" => {
9237                    obj.arn = Some(ArnTypeDeserializer::deserialize("Arn", stack)?);
9238                }
9239                "AssumeRolePolicyDocument" => {
9240                    obj.assume_role_policy_document =
9241                        Some(PolicyDocumentTypeDeserializer::deserialize(
9242                            "AssumeRolePolicyDocument",
9243                            stack,
9244                        )?);
9245                }
9246                "AttachedManagedPolicies" => {
9247                    obj.attached_managed_policies.get_or_insert(vec![]).extend(
9248                        AttachedPoliciesListTypeDeserializer::deserialize(
9249                            "AttachedManagedPolicies",
9250                            stack,
9251                        )?,
9252                    );
9253                }
9254                "CreateDate" => {
9255                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
9256                }
9257                "InstanceProfileList" => {
9258                    obj.instance_profile_list.get_or_insert(vec![]).extend(
9259                        InstanceProfileListTypeDeserializer::deserialize(
9260                            "InstanceProfileList",
9261                            stack,
9262                        )?,
9263                    );
9264                }
9265                "Path" => {
9266                    obj.path = Some(PathTypeDeserializer::deserialize("Path", stack)?);
9267                }
9268                "PermissionsBoundary" => {
9269                    obj.permissions_boundary =
9270                        Some(AttachedPermissionsBoundaryDeserializer::deserialize(
9271                            "PermissionsBoundary",
9272                            stack,
9273                        )?);
9274                }
9275                "RoleId" => {
9276                    obj.role_id = Some(IdTypeDeserializer::deserialize("RoleId", stack)?);
9277                }
9278                "RoleLastUsed" => {
9279                    obj.role_last_used = Some(RoleLastUsedDeserializer::deserialize(
9280                        "RoleLastUsed",
9281                        stack,
9282                    )?);
9283                }
9284                "RoleName" => {
9285                    obj.role_name = Some(RoleNameTypeDeserializer::deserialize("RoleName", stack)?);
9286                }
9287                "RolePolicyList" => {
9288                    obj.role_policy_list.get_or_insert(vec![]).extend(
9289                        PolicyDetailListTypeDeserializer::deserialize("RolePolicyList", stack)?,
9290                    );
9291                }
9292                "Tags" => {
9293                    obj.tags
9294                        .get_or_insert(vec![])
9295                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
9296                }
9297                _ => skip_tree(stack),
9298            }
9299            Ok(())
9300        })
9301    }
9302}
9303#[allow(dead_code)]
9304struct RoleDetailListTypeDeserializer;
9305impl RoleDetailListTypeDeserializer {
9306    #[allow(dead_code, unused_variables)]
9307    fn deserialize<T: Peek + Next>(
9308        tag_name: &str,
9309        stack: &mut T,
9310    ) -> Result<Vec<RoleDetail>, XmlParseError> {
9311        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
9312            if name == "member" {
9313                obj.push(RoleDetailDeserializer::deserialize("member", stack)?);
9314            } else {
9315                skip_tree(stack);
9316            }
9317            Ok(())
9318        })
9319    }
9320}
9321/// <p>Contains information about the last time that an IAM role was used. This includes the date and time and the Region in which the role was last used. Activity is only reported for the trailing 400 days. This period can be shorter if your Region began supporting these features within the last year. The role might have been used more than 400 days ago. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period">Regions where data is tracked</a> in the <i>IAM User Guide</i>.</p> <p>This data type is returned as a response element in the <a>GetRole</a> and <a>GetAccountAuthorizationDetails</a> operations.</p>
9322#[derive(Clone, Debug, Default, PartialEq)]
9323#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9324pub struct RoleLastUsed {
9325    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a> that the role was last used.</p> <p>This field is null if the role has not been used within the IAM tracking period. For more information about the tracking period, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period">Regions where data is tracked</a> in the <i>IAM User Guide</i>. </p>
9326    pub last_used_date: Option<String>,
9327    /// <p>The name of the AWS Region in which the role was last used.</p>
9328    pub region: Option<String>,
9329}
9330
9331#[allow(dead_code)]
9332struct RoleLastUsedDeserializer;
9333impl RoleLastUsedDeserializer {
9334    #[allow(dead_code, unused_variables)]
9335    fn deserialize<T: Peek + Next>(
9336        tag_name: &str,
9337        stack: &mut T,
9338    ) -> Result<RoleLastUsed, XmlParseError> {
9339        deserialize_elements::<_, RoleLastUsed, _>(tag_name, stack, |name, stack, obj| {
9340            match name {
9341                "LastUsedDate" => {
9342                    obj.last_used_date =
9343                        Some(DateTypeDeserializer::deserialize("LastUsedDate", stack)?);
9344                }
9345                "Region" => {
9346                    obj.region = Some(StringTypeDeserializer::deserialize("Region", stack)?);
9347                }
9348                _ => skip_tree(stack),
9349            }
9350            Ok(())
9351        })
9352    }
9353}
9354#[allow(dead_code)]
9355struct RoleListTypeDeserializer;
9356impl RoleListTypeDeserializer {
9357    #[allow(dead_code, unused_variables)]
9358    fn deserialize<T: Peek + Next>(
9359        tag_name: &str,
9360        stack: &mut T,
9361    ) -> Result<Vec<Role>, XmlParseError> {
9362        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
9363            if name == "member" {
9364                obj.push(RoleDeserializer::deserialize("member", stack)?);
9365            } else {
9366                skip_tree(stack);
9367            }
9368            Ok(())
9369        })
9370    }
9371}
9372#[allow(dead_code)]
9373struct RoleMaxSessionDurationTypeDeserializer;
9374impl RoleMaxSessionDurationTypeDeserializer {
9375    #[allow(dead_code, unused_variables)]
9376    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
9377        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
9378    }
9379}
9380#[allow(dead_code)]
9381struct RoleNameTypeDeserializer;
9382impl RoleNameTypeDeserializer {
9383    #[allow(dead_code, unused_variables)]
9384    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9385        xml_util::deserialize_primitive(tag_name, stack, Ok)
9386    }
9387}
9388#[allow(dead_code)]
9389struct RoleUsageListTypeDeserializer;
9390impl RoleUsageListTypeDeserializer {
9391    #[allow(dead_code, unused_variables)]
9392    fn deserialize<T: Peek + Next>(
9393        tag_name: &str,
9394        stack: &mut T,
9395    ) -> Result<Vec<RoleUsageType>, XmlParseError> {
9396        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
9397            if name == "member" {
9398                obj.push(RoleUsageTypeDeserializer::deserialize("member", stack)?);
9399            } else {
9400                skip_tree(stack);
9401            }
9402            Ok(())
9403        })
9404    }
9405}
9406/// <p>An object that contains details about how a service-linked role is used, if that information is returned by the service.</p> <p>This data type is used as a response element in the <a>GetServiceLinkedRoleDeletionStatus</a> operation.</p>
9407#[derive(Clone, Debug, Default, PartialEq)]
9408#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9409pub struct RoleUsageType {
9410    /// <p>The name of the Region where the service-linked role is being used.</p>
9411    pub region: Option<String>,
9412    /// <p>The name of the resource that is using the service-linked role.</p>
9413    pub resources: Option<Vec<String>>,
9414}
9415
9416#[allow(dead_code)]
9417struct RoleUsageTypeDeserializer;
9418impl RoleUsageTypeDeserializer {
9419    #[allow(dead_code, unused_variables)]
9420    fn deserialize<T: Peek + Next>(
9421        tag_name: &str,
9422        stack: &mut T,
9423    ) -> Result<RoleUsageType, XmlParseError> {
9424        deserialize_elements::<_, RoleUsageType, _>(tag_name, stack, |name, stack, obj| {
9425            match name {
9426                "Region" => {
9427                    obj.region = Some(RegionNameTypeDeserializer::deserialize("Region", stack)?);
9428                }
9429                "Resources" => {
9430                    obj.resources
9431                        .get_or_insert(vec![])
9432                        .extend(ArnListTypeDeserializer::deserialize("Resources", stack)?);
9433                }
9434                _ => skip_tree(stack),
9435            }
9436            Ok(())
9437        })
9438    }
9439}
9440#[allow(dead_code)]
9441struct SAMLMetadataDocumentTypeDeserializer;
9442impl SAMLMetadataDocumentTypeDeserializer {
9443    #[allow(dead_code, unused_variables)]
9444    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9445        xml_util::deserialize_primitive(tag_name, stack, Ok)
9446    }
9447}
9448/// <p>Contains the list of SAML providers for this account.</p>
9449#[derive(Clone, Debug, Default, PartialEq)]
9450#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9451pub struct SAMLProviderListEntry {
9452    /// <p>The Amazon Resource Name (ARN) of the SAML provider.</p>
9453    pub arn: Option<String>,
9454    /// <p>The date and time when the SAML provider was created.</p>
9455    pub create_date: Option<String>,
9456    /// <p>The expiration date and time for the SAML provider.</p>
9457    pub valid_until: Option<String>,
9458}
9459
9460#[allow(dead_code)]
9461struct SAMLProviderListEntryDeserializer;
9462impl SAMLProviderListEntryDeserializer {
9463    #[allow(dead_code, unused_variables)]
9464    fn deserialize<T: Peek + Next>(
9465        tag_name: &str,
9466        stack: &mut T,
9467    ) -> Result<SAMLProviderListEntry, XmlParseError> {
9468        deserialize_elements::<_, SAMLProviderListEntry, _>(tag_name, stack, |name, stack, obj| {
9469            match name {
9470                "Arn" => {
9471                    obj.arn = Some(ArnTypeDeserializer::deserialize("Arn", stack)?);
9472                }
9473                "CreateDate" => {
9474                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
9475                }
9476                "ValidUntil" => {
9477                    obj.valid_until = Some(DateTypeDeserializer::deserialize("ValidUntil", stack)?);
9478                }
9479                _ => skip_tree(stack),
9480            }
9481            Ok(())
9482        })
9483    }
9484}
9485#[allow(dead_code)]
9486struct SAMLProviderListTypeDeserializer;
9487impl SAMLProviderListTypeDeserializer {
9488    #[allow(dead_code, unused_variables)]
9489    fn deserialize<T: Peek + Next>(
9490        tag_name: &str,
9491        stack: &mut T,
9492    ) -> Result<Vec<SAMLProviderListEntry>, XmlParseError> {
9493        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
9494            if name == "member" {
9495                obj.push(SAMLProviderListEntryDeserializer::deserialize(
9496                    "member", stack,
9497                )?);
9498            } else {
9499                skip_tree(stack);
9500            }
9501            Ok(())
9502        })
9503    }
9504}
9505/// <p>Contains information about an SSH public key.</p> <p>This data type is used as a response element in the <a>GetSSHPublicKey</a> and <a>UploadSSHPublicKey</a> operations. </p>
9506#[derive(Clone, Debug, Default, PartialEq)]
9507#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9508pub struct SSHPublicKey {
9509    /// <p>The MD5 message digest of the SSH public key.</p>
9510    pub fingerprint: String,
9511    /// <p>The SSH public key.</p>
9512    pub ssh_public_key_body: String,
9513    /// <p>The unique identifier for the SSH public key.</p>
9514    pub ssh_public_key_id: String,
9515    /// <p>The status of the SSH public key. <code>Active</code> means that the key can be used for authentication with an AWS CodeCommit repository. <code>Inactive</code> means that the key cannot be used.</p>
9516    pub status: String,
9517    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the SSH public key was uploaded.</p>
9518    pub upload_date: Option<String>,
9519    /// <p>The name of the IAM user associated with the SSH public key.</p>
9520    pub user_name: String,
9521}
9522
9523#[allow(dead_code)]
9524struct SSHPublicKeyDeserializer;
9525impl SSHPublicKeyDeserializer {
9526    #[allow(dead_code, unused_variables)]
9527    fn deserialize<T: Peek + Next>(
9528        tag_name: &str,
9529        stack: &mut T,
9530    ) -> Result<SSHPublicKey, XmlParseError> {
9531        deserialize_elements::<_, SSHPublicKey, _>(tag_name, stack, |name, stack, obj| {
9532            match name {
9533                "Fingerprint" => {
9534                    obj.fingerprint =
9535                        PublicKeyFingerprintTypeDeserializer::deserialize("Fingerprint", stack)?;
9536                }
9537                "SSHPublicKeyBody" => {
9538                    obj.ssh_public_key_body =
9539                        PublicKeyMaterialTypeDeserializer::deserialize("SSHPublicKeyBody", stack)?;
9540                }
9541                "SSHPublicKeyId" => {
9542                    obj.ssh_public_key_id =
9543                        PublicKeyIdTypeDeserializer::deserialize("SSHPublicKeyId", stack)?;
9544                }
9545                "Status" => {
9546                    obj.status = StatusTypeDeserializer::deserialize("Status", stack)?;
9547                }
9548                "UploadDate" => {
9549                    obj.upload_date = Some(DateTypeDeserializer::deserialize("UploadDate", stack)?);
9550                }
9551                "UserName" => {
9552                    obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
9553                }
9554                _ => skip_tree(stack),
9555            }
9556            Ok(())
9557        })
9558    }
9559}
9560#[allow(dead_code)]
9561struct SSHPublicKeyListTypeDeserializer;
9562impl SSHPublicKeyListTypeDeserializer {
9563    #[allow(dead_code, unused_variables)]
9564    fn deserialize<T: Peek + Next>(
9565        tag_name: &str,
9566        stack: &mut T,
9567    ) -> Result<Vec<SSHPublicKeyMetadata>, XmlParseError> {
9568        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
9569            if name == "member" {
9570                obj.push(SSHPublicKeyMetadataDeserializer::deserialize(
9571                    "member", stack,
9572                )?);
9573            } else {
9574                skip_tree(stack);
9575            }
9576            Ok(())
9577        })
9578    }
9579}
9580/// <p>Contains information about an SSH public key, without the key's body or fingerprint.</p> <p>This data type is used as a response element in the <a>ListSSHPublicKeys</a> operation.</p>
9581#[derive(Clone, Debug, Default, PartialEq)]
9582#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9583pub struct SSHPublicKeyMetadata {
9584    /// <p>The unique identifier for the SSH public key.</p>
9585    pub ssh_public_key_id: String,
9586    /// <p>The status of the SSH public key. <code>Active</code> means that the key can be used for authentication with an AWS CodeCommit repository. <code>Inactive</code> means that the key cannot be used.</p>
9587    pub status: String,
9588    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the SSH public key was uploaded.</p>
9589    pub upload_date: String,
9590    /// <p>The name of the IAM user associated with the SSH public key.</p>
9591    pub user_name: String,
9592}
9593
9594#[allow(dead_code)]
9595struct SSHPublicKeyMetadataDeserializer;
9596impl SSHPublicKeyMetadataDeserializer {
9597    #[allow(dead_code, unused_variables)]
9598    fn deserialize<T: Peek + Next>(
9599        tag_name: &str,
9600        stack: &mut T,
9601    ) -> Result<SSHPublicKeyMetadata, XmlParseError> {
9602        deserialize_elements::<_, SSHPublicKeyMetadata, _>(tag_name, stack, |name, stack, obj| {
9603            match name {
9604                "SSHPublicKeyId" => {
9605                    obj.ssh_public_key_id =
9606                        PublicKeyIdTypeDeserializer::deserialize("SSHPublicKeyId", stack)?;
9607                }
9608                "Status" => {
9609                    obj.status = StatusTypeDeserializer::deserialize("Status", stack)?;
9610                }
9611                "UploadDate" => {
9612                    obj.upload_date = DateTypeDeserializer::deserialize("UploadDate", stack)?;
9613                }
9614                "UserName" => {
9615                    obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
9616                }
9617                _ => skip_tree(stack),
9618            }
9619            Ok(())
9620        })
9621    }
9622}
9623#[allow(dead_code)]
9624struct SerialNumberTypeDeserializer;
9625impl SerialNumberTypeDeserializer {
9626    #[allow(dead_code, unused_variables)]
9627    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9628        xml_util::deserialize_primitive(tag_name, stack, Ok)
9629    }
9630}
9631/// <p>Contains information about a server certificate.</p> <p> This data type is used as a response element in the <a>GetServerCertificate</a> operation. </p>
9632#[derive(Clone, Debug, Default, PartialEq)]
9633#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9634pub struct ServerCertificate {
9635    /// <p>The contents of the public key certificate.</p>
9636    pub certificate_body: String,
9637    /// <p>The contents of the public key certificate chain.</p>
9638    pub certificate_chain: Option<String>,
9639    /// <p>The meta information of the server certificate, such as its name, path, ID, and ARN.</p>
9640    pub server_certificate_metadata: ServerCertificateMetadata,
9641    /// <p>A list of tags that are attached to the server certificate. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
9642    pub tags: Option<Vec<Tag>>,
9643}
9644
9645#[allow(dead_code)]
9646struct ServerCertificateDeserializer;
9647impl ServerCertificateDeserializer {
9648    #[allow(dead_code, unused_variables)]
9649    fn deserialize<T: Peek + Next>(
9650        tag_name: &str,
9651        stack: &mut T,
9652    ) -> Result<ServerCertificate, XmlParseError> {
9653        deserialize_elements::<_, ServerCertificate, _>(tag_name, stack, |name, stack, obj| {
9654            match name {
9655                "CertificateBody" => {
9656                    obj.certificate_body =
9657                        CertificateBodyTypeDeserializer::deserialize("CertificateBody", stack)?;
9658                }
9659                "CertificateChain" => {
9660                    obj.certificate_chain = Some(CertificateChainTypeDeserializer::deserialize(
9661                        "CertificateChain",
9662                        stack,
9663                    )?);
9664                }
9665                "ServerCertificateMetadata" => {
9666                    obj.server_certificate_metadata =
9667                        ServerCertificateMetadataDeserializer::deserialize(
9668                            "ServerCertificateMetadata",
9669                            stack,
9670                        )?;
9671                }
9672                "Tags" => {
9673                    obj.tags
9674                        .get_or_insert(vec![])
9675                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
9676                }
9677                _ => skip_tree(stack),
9678            }
9679            Ok(())
9680        })
9681    }
9682}
9683/// <p>Contains information about a server certificate without its certificate body, certificate chain, and private key.</p> <p> This data type is used as a response element in the <a>UploadServerCertificate</a> and <a>ListServerCertificates</a> operations. </p>
9684#[derive(Clone, Debug, Default, PartialEq)]
9685#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9686pub struct ServerCertificateMetadata {
9687    /// <p> The Amazon Resource Name (ARN) specifying the server certificate. For more information about ARNs and how to use them in policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
9688    pub arn: String,
9689    /// <p>The date on which the certificate is set to expire.</p>
9690    pub expiration: Option<String>,
9691    /// <p> The path to the server certificate. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
9692    pub path: String,
9693    /// <p> The stable and unique string identifying the server certificate. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>
9694    pub server_certificate_id: String,
9695    /// <p>The name that identifies the server certificate.</p>
9696    pub server_certificate_name: String,
9697    /// <p>The date when the server certificate was uploaded.</p>
9698    pub upload_date: Option<String>,
9699}
9700
9701#[allow(dead_code)]
9702struct ServerCertificateMetadataDeserializer;
9703impl ServerCertificateMetadataDeserializer {
9704    #[allow(dead_code, unused_variables)]
9705    fn deserialize<T: Peek + Next>(
9706        tag_name: &str,
9707        stack: &mut T,
9708    ) -> Result<ServerCertificateMetadata, XmlParseError> {
9709        deserialize_elements::<_, ServerCertificateMetadata, _>(
9710            tag_name,
9711            stack,
9712            |name, stack, obj| {
9713                match name {
9714                    "Arn" => {
9715                        obj.arn = ArnTypeDeserializer::deserialize("Arn", stack)?;
9716                    }
9717                    "Expiration" => {
9718                        obj.expiration =
9719                            Some(DateTypeDeserializer::deserialize("Expiration", stack)?);
9720                    }
9721                    "Path" => {
9722                        obj.path = PathTypeDeserializer::deserialize("Path", stack)?;
9723                    }
9724                    "ServerCertificateId" => {
9725                        obj.server_certificate_id =
9726                            IdTypeDeserializer::deserialize("ServerCertificateId", stack)?;
9727                    }
9728                    "ServerCertificateName" => {
9729                        obj.server_certificate_name =
9730                            ServerCertificateNameTypeDeserializer::deserialize(
9731                                "ServerCertificateName",
9732                                stack,
9733                            )?;
9734                    }
9735                    "UploadDate" => {
9736                        obj.upload_date =
9737                            Some(DateTypeDeserializer::deserialize("UploadDate", stack)?);
9738                    }
9739                    _ => skip_tree(stack),
9740                }
9741                Ok(())
9742            },
9743        )
9744    }
9745}
9746#[allow(dead_code)]
9747struct ServerCertificateMetadataListTypeDeserializer;
9748impl ServerCertificateMetadataListTypeDeserializer {
9749    #[allow(dead_code, unused_variables)]
9750    fn deserialize<T: Peek + Next>(
9751        tag_name: &str,
9752        stack: &mut T,
9753    ) -> Result<Vec<ServerCertificateMetadata>, XmlParseError> {
9754        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
9755            if name == "member" {
9756                obj.push(ServerCertificateMetadataDeserializer::deserialize(
9757                    "member", stack,
9758                )?);
9759            } else {
9760                skip_tree(stack);
9761            }
9762            Ok(())
9763        })
9764    }
9765}
9766#[allow(dead_code)]
9767struct ServerCertificateNameTypeDeserializer;
9768impl ServerCertificateNameTypeDeserializer {
9769    #[allow(dead_code, unused_variables)]
9770    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9771        xml_util::deserialize_primitive(tag_name, stack, Ok)
9772    }
9773}
9774/// <p>Contains details about the most recent attempt to access the service.</p> <p>This data type is used as a response element in the <a>GetServiceLastAccessedDetails</a> operation.</p>
9775#[derive(Clone, Debug, Default, PartialEq)]
9776#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9777pub struct ServiceLastAccessed {
9778    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when an authenticated entity most recently attempted to access the service. AWS does not report unauthenticated requests.</p> <p>This field is null if no IAM entities attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
9779    pub last_authenticated: Option<String>,
9780    /// <p>The ARN of the authenticated entity (user or role) that last attempted to access the service. AWS does not report unauthenticated requests.</p> <p>This field is null if no IAM entities attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
9781    pub last_authenticated_entity: Option<String>,
9782    /// <p>The Region from which the authenticated entity (user or role) last attempted to access the service. AWS does not report unauthenticated requests.</p> <p>This field is null if no IAM entities attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
9783    pub last_authenticated_region: Option<String>,
9784    /// <p>The name of the service in which access was attempted.</p>
9785    pub service_name: String,
9786    /// <p>The namespace of the service in which access was attempted.</p> <p>To learn the service namespace of a service, see <a href="https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html">Actions, resources, and condition keys for AWS services</a> in the <i>Service Authorization Reference</i>. Choose the name of the service to view details for that service. In the first paragraph, find the service prefix. For example, <code>(service prefix: a4b)</code>. For more information about service namespaces, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces">AWS Service Namespaces</a> in the <i>AWS General Reference</i>.</p>
9787    pub service_namespace: String,
9788    /// <p>The total number of authenticated principals (root user, IAM users, or IAM roles) that have attempted to access the service.</p> <p>This field is null if no principals attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
9789    pub total_authenticated_entities: Option<i64>,
9790    /// <p>An object that contains details about the most recent attempt to access a tracked action within the service.</p> <p>This field is null if there no tracked actions or if the principal did not use the tracked actions within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>. This field is also null if the report was generated at the service level and not the action level. For more information, see the <code>Granularity</code> field in <a>GenerateServiceLastAccessedDetails</a>.</p>
9791    pub tracked_actions_last_accessed: Option<Vec<TrackedActionLastAccessed>>,
9792}
9793
9794#[allow(dead_code)]
9795struct ServiceLastAccessedDeserializer;
9796impl ServiceLastAccessedDeserializer {
9797    #[allow(dead_code, unused_variables)]
9798    fn deserialize<T: Peek + Next>(
9799        tag_name: &str,
9800        stack: &mut T,
9801    ) -> Result<ServiceLastAccessed, XmlParseError> {
9802        deserialize_elements::<_, ServiceLastAccessed, _>(tag_name, stack, |name, stack, obj| {
9803            match name {
9804                "LastAuthenticated" => {
9805                    obj.last_authenticated = Some(DateTypeDeserializer::deserialize(
9806                        "LastAuthenticated",
9807                        stack,
9808                    )?);
9809                }
9810                "LastAuthenticatedEntity" => {
9811                    obj.last_authenticated_entity = Some(ArnTypeDeserializer::deserialize(
9812                        "LastAuthenticatedEntity",
9813                        stack,
9814                    )?);
9815                }
9816                "LastAuthenticatedRegion" => {
9817                    obj.last_authenticated_region = Some(StringTypeDeserializer::deserialize(
9818                        "LastAuthenticatedRegion",
9819                        stack,
9820                    )?);
9821                }
9822                "ServiceName" => {
9823                    obj.service_name =
9824                        ServiceNameTypeDeserializer::deserialize("ServiceName", stack)?;
9825                }
9826                "ServiceNamespace" => {
9827                    obj.service_namespace =
9828                        ServiceNamespaceTypeDeserializer::deserialize("ServiceNamespace", stack)?;
9829                }
9830                "TotalAuthenticatedEntities" => {
9831                    obj.total_authenticated_entities = Some(IntegerTypeDeserializer::deserialize(
9832                        "TotalAuthenticatedEntities",
9833                        stack,
9834                    )?);
9835                }
9836                "TrackedActionsLastAccessed" => {
9837                    obj.tracked_actions_last_accessed
9838                        .get_or_insert(vec![])
9839                        .extend(TrackedActionsLastAccessedDeserializer::deserialize(
9840                            "TrackedActionsLastAccessed",
9841                            stack,
9842                        )?);
9843                }
9844                _ => skip_tree(stack),
9845            }
9846            Ok(())
9847        })
9848    }
9849}
9850#[allow(dead_code)]
9851struct ServiceNameDeserializer;
9852impl ServiceNameDeserializer {
9853    #[allow(dead_code, unused_variables)]
9854    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9855        xml_util::deserialize_primitive(tag_name, stack, Ok)
9856    }
9857}
9858#[allow(dead_code)]
9859struct ServiceNameTypeDeserializer;
9860impl ServiceNameTypeDeserializer {
9861    #[allow(dead_code, unused_variables)]
9862    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9863        xml_util::deserialize_primitive(tag_name, stack, Ok)
9864    }
9865}
9866
9867/// Serialize `ServiceNamespaceListType` contents to a `SignedRequest`.
9868struct ServiceNamespaceListTypeSerializer;
9869impl ServiceNamespaceListTypeSerializer {
9870    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
9871        for (index, obj) in obj.iter().enumerate() {
9872            let key = format!("{}.member.{}", name, index + 1);
9873            params.put(&key, &obj);
9874        }
9875    }
9876}
9877
9878#[allow(dead_code)]
9879struct ServiceNamespaceTypeDeserializer;
9880impl ServiceNamespaceTypeDeserializer {
9881    #[allow(dead_code, unused_variables)]
9882    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9883        xml_util::deserialize_primitive(tag_name, stack, Ok)
9884    }
9885}
9886#[allow(dead_code)]
9887struct ServicePasswordDeserializer;
9888impl ServicePasswordDeserializer {
9889    #[allow(dead_code, unused_variables)]
9890    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9891        xml_util::deserialize_primitive(tag_name, stack, Ok)
9892    }
9893}
9894/// <p>Contains the details of a service-specific credential.</p>
9895#[derive(Clone, Debug, Default, PartialEq)]
9896#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9897pub struct ServiceSpecificCredential {
9898    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the service-specific credential were created.</p>
9899    pub create_date: String,
9900    /// <p>The name of the service associated with the service-specific credential.</p>
9901    pub service_name: String,
9902    /// <p>The generated password for the service-specific credential.</p>
9903    pub service_password: String,
9904    /// <p>The unique identifier for the service-specific credential.</p>
9905    pub service_specific_credential_id: String,
9906    /// <p>The generated user name for the service-specific credential. This value is generated by combining the IAM user's name combined with the ID number of the AWS account, as in <code>jane-at-123456789012</code>, for example. This value cannot be configured by the user.</p>
9907    pub service_user_name: String,
9908    /// <p>The status of the service-specific credential. <code>Active</code> means that the key is valid for API calls, while <code>Inactive</code> means it is not.</p>
9909    pub status: String,
9910    /// <p>The name of the IAM user associated with the service-specific credential.</p>
9911    pub user_name: String,
9912}
9913
9914#[allow(dead_code)]
9915struct ServiceSpecificCredentialDeserializer;
9916impl ServiceSpecificCredentialDeserializer {
9917    #[allow(dead_code, unused_variables)]
9918    fn deserialize<T: Peek + Next>(
9919        tag_name: &str,
9920        stack: &mut T,
9921    ) -> Result<ServiceSpecificCredential, XmlParseError> {
9922        deserialize_elements::<_, ServiceSpecificCredential, _>(
9923            tag_name,
9924            stack,
9925            |name, stack, obj| {
9926                match name {
9927                    "CreateDate" => {
9928                        obj.create_date = DateTypeDeserializer::deserialize("CreateDate", stack)?;
9929                    }
9930                    "ServiceName" => {
9931                        obj.service_name =
9932                            ServiceNameDeserializer::deserialize("ServiceName", stack)?;
9933                    }
9934                    "ServicePassword" => {
9935                        obj.service_password =
9936                            ServicePasswordDeserializer::deserialize("ServicePassword", stack)?;
9937                    }
9938                    "ServiceSpecificCredentialId" => {
9939                        obj.service_specific_credential_id =
9940                            ServiceSpecificCredentialIdDeserializer::deserialize(
9941                                "ServiceSpecificCredentialId",
9942                                stack,
9943                            )?;
9944                    }
9945                    "ServiceUserName" => {
9946                        obj.service_user_name =
9947                            ServiceUserNameDeserializer::deserialize("ServiceUserName", stack)?;
9948                    }
9949                    "Status" => {
9950                        obj.status = StatusTypeDeserializer::deserialize("Status", stack)?;
9951                    }
9952                    "UserName" => {
9953                        obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
9954                    }
9955                    _ => skip_tree(stack),
9956                }
9957                Ok(())
9958            },
9959        )
9960    }
9961}
9962#[allow(dead_code)]
9963struct ServiceSpecificCredentialIdDeserializer;
9964impl ServiceSpecificCredentialIdDeserializer {
9965    #[allow(dead_code, unused_variables)]
9966    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
9967        xml_util::deserialize_primitive(tag_name, stack, Ok)
9968    }
9969}
9970/// <p>Contains additional details about a service-specific credential.</p>
9971#[derive(Clone, Debug, Default, PartialEq)]
9972#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
9973pub struct ServiceSpecificCredentialMetadata {
9974    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the service-specific credential were created.</p>
9975    pub create_date: String,
9976    /// <p>The name of the service associated with the service-specific credential.</p>
9977    pub service_name: String,
9978    /// <p>The unique identifier for the service-specific credential.</p>
9979    pub service_specific_credential_id: String,
9980    /// <p>The generated user name for the service-specific credential.</p>
9981    pub service_user_name: String,
9982    /// <p>The status of the service-specific credential. <code>Active</code> means that the key is valid for API calls, while <code>Inactive</code> means it is not.</p>
9983    pub status: String,
9984    /// <p>The name of the IAM user associated with the service-specific credential.</p>
9985    pub user_name: String,
9986}
9987
9988#[allow(dead_code)]
9989struct ServiceSpecificCredentialMetadataDeserializer;
9990impl ServiceSpecificCredentialMetadataDeserializer {
9991    #[allow(dead_code, unused_variables)]
9992    fn deserialize<T: Peek + Next>(
9993        tag_name: &str,
9994        stack: &mut T,
9995    ) -> Result<ServiceSpecificCredentialMetadata, XmlParseError> {
9996        deserialize_elements::<_, ServiceSpecificCredentialMetadata, _>(
9997            tag_name,
9998            stack,
9999            |name, stack, obj| {
10000                match name {
10001                    "CreateDate" => {
10002                        obj.create_date = DateTypeDeserializer::deserialize("CreateDate", stack)?;
10003                    }
10004                    "ServiceName" => {
10005                        obj.service_name =
10006                            ServiceNameDeserializer::deserialize("ServiceName", stack)?;
10007                    }
10008                    "ServiceSpecificCredentialId" => {
10009                        obj.service_specific_credential_id =
10010                            ServiceSpecificCredentialIdDeserializer::deserialize(
10011                                "ServiceSpecificCredentialId",
10012                                stack,
10013                            )?;
10014                    }
10015                    "ServiceUserName" => {
10016                        obj.service_user_name =
10017                            ServiceUserNameDeserializer::deserialize("ServiceUserName", stack)?;
10018                    }
10019                    "Status" => {
10020                        obj.status = StatusTypeDeserializer::deserialize("Status", stack)?;
10021                    }
10022                    "UserName" => {
10023                        obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
10024                    }
10025                    _ => skip_tree(stack),
10026                }
10027                Ok(())
10028            },
10029        )
10030    }
10031}
10032#[allow(dead_code)]
10033struct ServiceSpecificCredentialsListTypeDeserializer;
10034impl ServiceSpecificCredentialsListTypeDeserializer {
10035    #[allow(dead_code, unused_variables)]
10036    fn deserialize<T: Peek + Next>(
10037        tag_name: &str,
10038        stack: &mut T,
10039    ) -> Result<Vec<ServiceSpecificCredentialMetadata>, XmlParseError> {
10040        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
10041            if name == "member" {
10042                obj.push(ServiceSpecificCredentialMetadataDeserializer::deserialize(
10043                    "member", stack,
10044                )?);
10045            } else {
10046                skip_tree(stack);
10047            }
10048            Ok(())
10049        })
10050    }
10051}
10052#[allow(dead_code)]
10053struct ServiceUserNameDeserializer;
10054impl ServiceUserNameDeserializer {
10055    #[allow(dead_code, unused_variables)]
10056    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
10057        xml_util::deserialize_primitive(tag_name, stack, Ok)
10058    }
10059}
10060#[allow(dead_code)]
10061struct ServicesLastAccessedDeserializer;
10062impl ServicesLastAccessedDeserializer {
10063    #[allow(dead_code, unused_variables)]
10064    fn deserialize<T: Peek + Next>(
10065        tag_name: &str,
10066        stack: &mut T,
10067    ) -> Result<Vec<ServiceLastAccessed>, XmlParseError> {
10068        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
10069            if name == "member" {
10070                obj.push(ServiceLastAccessedDeserializer::deserialize(
10071                    "member", stack,
10072                )?);
10073            } else {
10074                skip_tree(stack);
10075            }
10076            Ok(())
10077        })
10078    }
10079}
10080#[derive(Clone, Debug, Default, PartialEq)]
10081#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10082pub struct SetDefaultPolicyVersionRequest {
10083    /// <p>The Amazon Resource Name (ARN) of the IAM policy whose default version you want to set.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
10084    pub policy_arn: String,
10085    /// <p>The version of the policy to set as the default (operative) version.</p> <p>For more information about managed policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
10086    pub version_id: String,
10087}
10088
10089/// Serialize `SetDefaultPolicyVersionRequest` contents to a `SignedRequest`.
10090struct SetDefaultPolicyVersionRequestSerializer;
10091impl SetDefaultPolicyVersionRequestSerializer {
10092    fn serialize(params: &mut Params, name: &str, obj: &SetDefaultPolicyVersionRequest) {
10093        let mut prefix = name.to_string();
10094        if prefix != "" {
10095            prefix.push_str(".");
10096        }
10097
10098        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
10099        params.put(&format!("{}{}", prefix, "VersionId"), &obj.version_id);
10100    }
10101}
10102
10103#[derive(Clone, Debug, Default, PartialEq)]
10104#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10105pub struct SetSecurityTokenServicePreferencesRequest {
10106    /// <p>The version of the global endpoint token. Version 1 tokens are valid only in AWS Regions that are available by default. These tokens do not work in manually enabled Regions, such as Asia Pacific (Hong Kong). Version 2 tokens are valid in all Regions. However, version 2 tokens are longer and might affect systems where you temporarily store tokens.</p> <p>For information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html">Activating and deactivating STS in an AWS region</a> in the <i>IAM User Guide</i>.</p>
10107    pub global_endpoint_token_version: String,
10108}
10109
10110/// Serialize `SetSecurityTokenServicePreferencesRequest` contents to a `SignedRequest`.
10111struct SetSecurityTokenServicePreferencesRequestSerializer;
10112impl SetSecurityTokenServicePreferencesRequestSerializer {
10113    fn serialize(params: &mut Params, name: &str, obj: &SetSecurityTokenServicePreferencesRequest) {
10114        let mut prefix = name.to_string();
10115        if prefix != "" {
10116            prefix.push_str(".");
10117        }
10118
10119        params.put(
10120            &format!("{}{}", prefix, "GlobalEndpointTokenVersion"),
10121            &obj.global_endpoint_token_version,
10122        );
10123    }
10124}
10125
10126/// <p>Contains information about an X.509 signing certificate.</p> <p>This data type is used as a response element in the <a>UploadSigningCertificate</a> and <a>ListSigningCertificates</a> operations. </p>
10127#[derive(Clone, Debug, Default, PartialEq)]
10128#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
10129pub struct SigningCertificate {
10130    /// <p>The contents of the signing certificate.</p>
10131    pub certificate_body: String,
10132    /// <p>The ID for the signing certificate.</p>
10133    pub certificate_id: String,
10134    /// <p>The status of the signing certificate. <code>Active</code> means that the key is valid for API calls, while <code>Inactive</code> means it is not.</p>
10135    pub status: String,
10136    /// <p>The date when the signing certificate was uploaded.</p>
10137    pub upload_date: Option<String>,
10138    /// <p>The name of the user the signing certificate is associated with.</p>
10139    pub user_name: String,
10140}
10141
10142#[allow(dead_code)]
10143struct SigningCertificateDeserializer;
10144impl SigningCertificateDeserializer {
10145    #[allow(dead_code, unused_variables)]
10146    fn deserialize<T: Peek + Next>(
10147        tag_name: &str,
10148        stack: &mut T,
10149    ) -> Result<SigningCertificate, XmlParseError> {
10150        deserialize_elements::<_, SigningCertificate, _>(tag_name, stack, |name, stack, obj| {
10151            match name {
10152                "CertificateBody" => {
10153                    obj.certificate_body =
10154                        CertificateBodyTypeDeserializer::deserialize("CertificateBody", stack)?;
10155                }
10156                "CertificateId" => {
10157                    obj.certificate_id =
10158                        CertificateIdTypeDeserializer::deserialize("CertificateId", stack)?;
10159                }
10160                "Status" => {
10161                    obj.status = StatusTypeDeserializer::deserialize("Status", stack)?;
10162                }
10163                "UploadDate" => {
10164                    obj.upload_date = Some(DateTypeDeserializer::deserialize("UploadDate", stack)?);
10165                }
10166                "UserName" => {
10167                    obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
10168                }
10169                _ => skip_tree(stack),
10170            }
10171            Ok(())
10172        })
10173    }
10174}
10175#[derive(Clone, Debug, Default, PartialEq)]
10176#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10177pub struct SimulateCustomPolicyRequest {
10178    /// <p>A list of names of API operations to evaluate in the simulation. Each operation is evaluated against each resource. Each operation must include the service identifier, such as <code>iam:CreateUser</code>. This operation does not support using wildcards (*) in an action name.</p>
10179    pub action_names: Vec<String>,
10180    /// <p>The ARN of the IAM user that you want to use as the simulated caller of the API operations. <code>CallerArn</code> is required if you include a <code>ResourcePolicy</code> so that the policy's <code>Principal</code> element has a value to use in evaluating the policy.</p> <p>You can specify only the ARN of an IAM user. You cannot specify the ARN of an assumed role, federated user, or a service principal.</p>
10181    pub caller_arn: Option<String>,
10182    /// <p>A list of context keys and corresponding values for the simulation to use. Whenever a context key is evaluated in one of the simulated IAM permissions policies, the corresponding value is supplied.</p>
10183    pub context_entries: Option<Vec<ContextEntry>>,
10184    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
10185    pub marker: Option<String>,
10186    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
10187    pub max_items: Option<i64>,
10188    /// <p><p>The IAM permissions boundary policy to simulate. The permissions boundary sets the maximum permissions that an IAM entity can have. You can input only one permissions boundary when you pass a policy to this operation. For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM entities</a> in the <i>IAM User Guide</i>. The policy input is specified as a string that contains the complete, valid JSON text of a permissions boundary policy.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
10189    pub permissions_boundary_policy_input_list: Option<Vec<String>>,
10190    /// <p><p>A list of policy documents to include in the simulation. Each document is specified as a string containing the complete, valid JSON text of an IAM policy. Do not include any resource-based policies in this parameter. Any resource-based policy must be submitted with the <code>ResourcePolicy</code> parameter. The policies cannot be &quot;scope-down&quot; policies, such as you could include in a call to <a href="https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetFederationToken.html">GetFederationToken</a> or one of the <a href="https://docs.aws.amazon.com/IAM/latest/APIReference/API_AssumeRole.html">AssumeRole</a> API operations. In other words, do not use policies designed to restrict what a user can do while using the temporary credentials.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
10191    pub policy_input_list: Vec<String>,
10192    /// <p>A list of ARNs of AWS resources to include in the simulation. If this parameter is not provided, then the value defaults to <code>*</code> (all resources). Each API in the <code>ActionNames</code> parameter is evaluated for each resource in this list. The simulation determines the access result (allowed or denied) of each combination and reports it in the response. You can simulate resources that don't exist in your account.</p> <p>The simulation does not automatically retrieve policies for the specified resources. If you want to include a resource policy in the simulation, then you must include the policy as a string in the <code>ResourcePolicy</code> parameter.</p> <p>If you include a <code>ResourcePolicy</code>, then it must be applicable to all of the resources included in the simulation or you receive an invalid input error.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
10193    pub resource_arns: Option<Vec<String>>,
10194    /// <p><p>Specifies the type of simulation to run. Different API operations that support resource-based policies require different combinations of resources. By specifying the type of simulation to run, you enable the policy simulator to enforce the presence of the required resources to ensure reliable simulation results. If your simulation does not match one of the following scenarios, then you can omit this parameter. The following list shows each of the supported scenario values and the resources that you must define to run the simulation.</p> <p>Each of the EC2 scenarios requires that you specify instance, image, and security-group resources. If your scenario includes an EBS volume, then you must specify that volume as a resource. If the EC2 scenario includes VPC, then you must supply the network-interface resource. If it includes an IP subnet, then you must specify the subnet resource. For more information on the EC2 scenario options, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html">Supported platforms</a> in the <i>Amazon EC2 User Guide</i>.</p> <ul> <li> <p> <b>EC2-Classic-InstanceStore</b> </p> <p>instance, image, security-group</p> </li> <li> <p> <b>EC2-Classic-EBS</b> </p> <p>instance, image, security-group, volume</p> </li> <li> <p> <b>EC2-VPC-InstanceStore</b> </p> <p>instance, image, security-group, network-interface</p> </li> <li> <p> <b>EC2-VPC-InstanceStore-Subnet</b> </p> <p>instance, image, security-group, network-interface, subnet</p> </li> <li> <p> <b>EC2-VPC-EBS</b> </p> <p>instance, image, security-group, network-interface, volume</p> </li> <li> <p> <b>EC2-VPC-EBS-Subnet</b> </p> <p>instance, image, security-group, network-interface, subnet, volume</p> </li> </ul></p>
10195    pub resource_handling_option: Option<String>,
10196    /// <p>An ARN representing the AWS account ID that specifies the owner of any simulated resource that does not identify its owner in the resource ARN. Examples of resource ARNs include an S3 bucket or object. If <code>ResourceOwner</code> is specified, it is also used as the account owner of any <code>ResourcePolicy</code> included in the simulation. If the <code>ResourceOwner</code> parameter is not specified, then the owner of the resources and the resource policy defaults to the account of the identity provided in <code>CallerArn</code>. This parameter is required only if you specify a resource-based policy and account that owns the resource is different from the account that owns the simulated calling user <code>CallerArn</code>.</p> <p>The ARN for an account uses the following syntax: <code>arn:aws:iam::<i>AWS-account-ID</i>:root</code>. For example, to represent the account with the 112233445566 ID, use the following ARN: <code>arn:aws:iam::112233445566-ID:root</code>. </p>
10197    pub resource_owner: Option<String>,
10198    /// <p><p>A resource-based policy to include in the simulation provided as a string. Each resource in the simulation is treated as if it had this policy attached. You can include only one resource-based policy in a simulation.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
10199    pub resource_policy: Option<String>,
10200}
10201
10202/// Serialize `SimulateCustomPolicyRequest` contents to a `SignedRequest`.
10203struct SimulateCustomPolicyRequestSerializer;
10204impl SimulateCustomPolicyRequestSerializer {
10205    fn serialize(params: &mut Params, name: &str, obj: &SimulateCustomPolicyRequest) {
10206        let mut prefix = name.to_string();
10207        if prefix != "" {
10208            prefix.push_str(".");
10209        }
10210
10211        ActionNameListTypeSerializer::serialize(
10212            params,
10213            &format!("{}{}", prefix, "ActionNames"),
10214            &obj.action_names,
10215        );
10216        if let Some(ref field_value) = obj.caller_arn {
10217            params.put(&format!("{}{}", prefix, "CallerArn"), &field_value);
10218        }
10219        if let Some(ref field_value) = obj.context_entries {
10220            ContextEntryListTypeSerializer::serialize(
10221                params,
10222                &format!("{}{}", prefix, "ContextEntries"),
10223                field_value,
10224            );
10225        }
10226        if let Some(ref field_value) = obj.marker {
10227            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
10228        }
10229        if let Some(ref field_value) = obj.max_items {
10230            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
10231        }
10232        if let Some(ref field_value) = obj.permissions_boundary_policy_input_list {
10233            SimulationPolicyListTypeSerializer::serialize(
10234                params,
10235                &format!("{}{}", prefix, "PermissionsBoundaryPolicyInputList"),
10236                field_value,
10237            );
10238        }
10239        SimulationPolicyListTypeSerializer::serialize(
10240            params,
10241            &format!("{}{}", prefix, "PolicyInputList"),
10242            &obj.policy_input_list,
10243        );
10244        if let Some(ref field_value) = obj.resource_arns {
10245            ResourceNameListTypeSerializer::serialize(
10246                params,
10247                &format!("{}{}", prefix, "ResourceArns"),
10248                field_value,
10249            );
10250        }
10251        if let Some(ref field_value) = obj.resource_handling_option {
10252            params.put(
10253                &format!("{}{}", prefix, "ResourceHandlingOption"),
10254                &field_value,
10255            );
10256        }
10257        if let Some(ref field_value) = obj.resource_owner {
10258            params.put(&format!("{}{}", prefix, "ResourceOwner"), &field_value);
10259        }
10260        if let Some(ref field_value) = obj.resource_policy {
10261            params.put(&format!("{}{}", prefix, "ResourcePolicy"), &field_value);
10262        }
10263    }
10264}
10265
10266/// <p>Contains the response to a successful <a>SimulatePrincipalPolicy</a> or <a>SimulateCustomPolicy</a> request.</p>
10267#[derive(Clone, Debug, Default, PartialEq)]
10268#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
10269pub struct SimulatePolicyResponse {
10270    /// <p>The results of the simulation.</p>
10271    pub evaluation_results: Option<Vec<EvaluationResult>>,
10272    /// <p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the <code>Marker</code> request parameter to retrieve more items. Note that IAM might return fewer than the <code>MaxItems</code> number of results even when there are more results available. We recommend that you check <code>IsTruncated</code> after every call to ensure that you receive all your results.</p>
10273    pub is_truncated: Option<bool>,
10274    /// <p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>
10275    pub marker: Option<String>,
10276}
10277
10278#[allow(dead_code)]
10279struct SimulatePolicyResponseDeserializer;
10280impl SimulatePolicyResponseDeserializer {
10281    #[allow(dead_code, unused_variables)]
10282    fn deserialize<T: Peek + Next>(
10283        tag_name: &str,
10284        stack: &mut T,
10285    ) -> Result<SimulatePolicyResponse, XmlParseError> {
10286        deserialize_elements::<_, SimulatePolicyResponse, _>(tag_name, stack, |name, stack, obj| {
10287            match name {
10288                "EvaluationResults" => {
10289                    obj.evaluation_results.get_or_insert(vec![]).extend(
10290                        EvaluationResultsListTypeDeserializer::deserialize(
10291                            "EvaluationResults",
10292                            stack,
10293                        )?,
10294                    );
10295                }
10296                "IsTruncated" => {
10297                    obj.is_truncated =
10298                        Some(BooleanTypeDeserializer::deserialize("IsTruncated", stack)?);
10299                }
10300                "Marker" => {
10301                    obj.marker = Some(ResponseMarkerTypeDeserializer::deserialize(
10302                        "Marker", stack,
10303                    )?);
10304                }
10305                _ => skip_tree(stack),
10306            }
10307            Ok(())
10308        })
10309    }
10310}
10311#[derive(Clone, Debug, Default, PartialEq)]
10312#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10313pub struct SimulatePrincipalPolicyRequest {
10314    /// <p>A list of names of API operations to evaluate in the simulation. Each operation is evaluated for each resource. Each operation must include the service identifier, such as <code>iam:CreateUser</code>.</p>
10315    pub action_names: Vec<String>,
10316    /// <p>The ARN of the IAM user that you want to specify as the simulated caller of the API operations. If you do not specify a <code>CallerArn</code>, it defaults to the ARN of the user that you specify in <code>PolicySourceArn</code>, if you specified a user. If you include both a <code>PolicySourceArn</code> (for example, <code>arn:aws:iam::123456789012:user/David</code>) and a <code>CallerArn</code> (for example, <code>arn:aws:iam::123456789012:user/Bob</code>), the result is that you simulate calling the API operations as Bob, as if Bob had David's policies.</p> <p>You can specify only the ARN of an IAM user. You cannot specify the ARN of an assumed role, federated user, or a service principal.</p> <p> <code>CallerArn</code> is required if you include a <code>ResourcePolicy</code> and the <code>PolicySourceArn</code> is not the ARN for an IAM user. This is required so that the resource-based policy's <code>Principal</code> element has a value to use in evaluating the policy.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
10317    pub caller_arn: Option<String>,
10318    /// <p>A list of context keys and corresponding values for the simulation to use. Whenever a context key is evaluated in one of the simulated IAM permissions policies, the corresponding value is supplied.</p>
10319    pub context_entries: Option<Vec<ContextEntry>>,
10320    /// <p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the <code>Marker</code> element in the response that you received to indicate where the next call should start.</p>
10321    pub marker: Option<String>,
10322    /// <p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the <code>IsTruncated</code> response element is <code>true</code>.</p> <p>If you do not include this parameter, the number of items defaults to 100. Note that IAM might return fewer results, even when there are more results available. In that case, the <code>IsTruncated</code> response element returns <code>true</code>, and <code>Marker</code> contains a value to include in the subsequent call that tells the service where to continue from.</p>
10323    pub max_items: Option<i64>,
10324    /// <p><p>The IAM permissions boundary policy to simulate. The permissions boundary sets the maximum permissions that the entity can have. You can input only one permissions boundary when you pass a policy to this operation. An IAM entity can only have one permissions boundary in effect at a time. For example, if a permissions boundary is attached to an entity and you pass in a different permissions boundary policy using this parameter, then the new permissions boundary policy is used for the simulation. For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM entities</a> in the <i>IAM User Guide</i>. The policy input is specified as a string containing the complete, valid JSON text of a permissions boundary policy.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
10325    pub permissions_boundary_policy_input_list: Option<Vec<String>>,
10326    /// <p><p>An optional list of additional policy documents to include in the simulation. Each document is specified as a string containing the complete, valid JSON text of an IAM policy.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
10327    pub policy_input_list: Option<Vec<String>>,
10328    /// <p>The Amazon Resource Name (ARN) of a user, group, or role whose policies you want to include in the simulation. If you specify a user, group, or role, the simulation includes all policies that are associated with that entity. If you specify a user, the simulation also includes all policies that are attached to any groups the user belongs to.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
10329    pub policy_source_arn: String,
10330    /// <p>A list of ARNs of AWS resources to include in the simulation. If this parameter is not provided, then the value defaults to <code>*</code> (all resources). Each API in the <code>ActionNames</code> parameter is evaluated for each resource in this list. The simulation determines the access result (allowed or denied) of each combination and reports it in the response. You can simulate resources that don't exist in your account.</p> <p>The simulation does not automatically retrieve policies for the specified resources. If you want to include a resource policy in the simulation, then you must include the policy as a string in the <code>ResourcePolicy</code> parameter.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
10331    pub resource_arns: Option<Vec<String>>,
10332    /// <p><p>Specifies the type of simulation to run. Different API operations that support resource-based policies require different combinations of resources. By specifying the type of simulation to run, you enable the policy simulator to enforce the presence of the required resources to ensure reliable simulation results. If your simulation does not match one of the following scenarios, then you can omit this parameter. The following list shows each of the supported scenario values and the resources that you must define to run the simulation.</p> <p>Each of the EC2 scenarios requires that you specify instance, image, and security group resources. If your scenario includes an EBS volume, then you must specify that volume as a resource. If the EC2 scenario includes VPC, then you must supply the network interface resource. If it includes an IP subnet, then you must specify the subnet resource. For more information on the EC2 scenario options, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html">Supported platforms</a> in the <i>Amazon EC2 User Guide</i>.</p> <ul> <li> <p> <b>EC2-Classic-InstanceStore</b> </p> <p>instance, image, security group</p> </li> <li> <p> <b>EC2-Classic-EBS</b> </p> <p>instance, image, security group, volume</p> </li> <li> <p> <b>EC2-VPC-InstanceStore</b> </p> <p>instance, image, security group, network interface</p> </li> <li> <p> <b>EC2-VPC-InstanceStore-Subnet</b> </p> <p>instance, image, security group, network interface, subnet</p> </li> <li> <p> <b>EC2-VPC-EBS</b> </p> <p>instance, image, security group, network interface, volume</p> </li> <li> <p> <b>EC2-VPC-EBS-Subnet</b> </p> <p>instance, image, security group, network interface, subnet, volume</p> </li> </ul></p>
10333    pub resource_handling_option: Option<String>,
10334    /// <p>An AWS account ID that specifies the owner of any simulated resource that does not identify its owner in the resource ARN. Examples of resource ARNs include an S3 bucket or object. If <code>ResourceOwner</code> is specified, it is also used as the account owner of any <code>ResourcePolicy</code> included in the simulation. If the <code>ResourceOwner</code> parameter is not specified, then the owner of the resources and the resource policy defaults to the account of the identity provided in <code>CallerArn</code>. This parameter is required only if you specify a resource-based policy and account that owns the resource is different from the account that owns the simulated calling user <code>CallerArn</code>.</p>
10335    pub resource_owner: Option<String>,
10336    /// <p><p>A resource-based policy to include in the simulation provided as a string. Each resource in the simulation is treated as if it had this policy attached. You can include only one resource-based policy in a simulation.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
10337    pub resource_policy: Option<String>,
10338}
10339
10340/// Serialize `SimulatePrincipalPolicyRequest` contents to a `SignedRequest`.
10341struct SimulatePrincipalPolicyRequestSerializer;
10342impl SimulatePrincipalPolicyRequestSerializer {
10343    fn serialize(params: &mut Params, name: &str, obj: &SimulatePrincipalPolicyRequest) {
10344        let mut prefix = name.to_string();
10345        if prefix != "" {
10346            prefix.push_str(".");
10347        }
10348
10349        ActionNameListTypeSerializer::serialize(
10350            params,
10351            &format!("{}{}", prefix, "ActionNames"),
10352            &obj.action_names,
10353        );
10354        if let Some(ref field_value) = obj.caller_arn {
10355            params.put(&format!("{}{}", prefix, "CallerArn"), &field_value);
10356        }
10357        if let Some(ref field_value) = obj.context_entries {
10358            ContextEntryListTypeSerializer::serialize(
10359                params,
10360                &format!("{}{}", prefix, "ContextEntries"),
10361                field_value,
10362            );
10363        }
10364        if let Some(ref field_value) = obj.marker {
10365            params.put(&format!("{}{}", prefix, "Marker"), &field_value);
10366        }
10367        if let Some(ref field_value) = obj.max_items {
10368            params.put(&format!("{}{}", prefix, "MaxItems"), &field_value);
10369        }
10370        if let Some(ref field_value) = obj.permissions_boundary_policy_input_list {
10371            SimulationPolicyListTypeSerializer::serialize(
10372                params,
10373                &format!("{}{}", prefix, "PermissionsBoundaryPolicyInputList"),
10374                field_value,
10375            );
10376        }
10377        if let Some(ref field_value) = obj.policy_input_list {
10378            SimulationPolicyListTypeSerializer::serialize(
10379                params,
10380                &format!("{}{}", prefix, "PolicyInputList"),
10381                field_value,
10382            );
10383        }
10384        params.put(
10385            &format!("{}{}", prefix, "PolicySourceArn"),
10386            &obj.policy_source_arn,
10387        );
10388        if let Some(ref field_value) = obj.resource_arns {
10389            ResourceNameListTypeSerializer::serialize(
10390                params,
10391                &format!("{}{}", prefix, "ResourceArns"),
10392                field_value,
10393            );
10394        }
10395        if let Some(ref field_value) = obj.resource_handling_option {
10396            params.put(
10397                &format!("{}{}", prefix, "ResourceHandlingOption"),
10398                &field_value,
10399            );
10400        }
10401        if let Some(ref field_value) = obj.resource_owner {
10402            params.put(&format!("{}{}", prefix, "ResourceOwner"), &field_value);
10403        }
10404        if let Some(ref field_value) = obj.resource_policy {
10405            params.put(&format!("{}{}", prefix, "ResourcePolicy"), &field_value);
10406        }
10407    }
10408}
10409
10410/// Serialize `SimulationPolicyListType` contents to a `SignedRequest`.
10411struct SimulationPolicyListTypeSerializer;
10412impl SimulationPolicyListTypeSerializer {
10413    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
10414        for (index, obj) in obj.iter().enumerate() {
10415            let key = format!("{}.member.{}", name, index + 1);
10416            params.put(&key, &obj);
10417        }
10418    }
10419}
10420
10421/// <p>Contains a reference to a <code>Statement</code> element in a policy document that determines the result of the simulation.</p> <p>This data type is used by the <code>MatchedStatements</code> member of the <code> <a>EvaluationResult</a> </code> type.</p>
10422#[derive(Clone, Debug, Default, PartialEq)]
10423#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
10424pub struct Statement {
10425    /// <p>The row and column of the end of a <code>Statement</code> in an IAM policy.</p>
10426    pub end_position: Option<Position>,
10427    /// <p>The identifier of the policy that was provided as an input.</p>
10428    pub source_policy_id: Option<String>,
10429    /// <p>The type of the policy.</p>
10430    pub source_policy_type: Option<String>,
10431    /// <p>The row and column of the beginning of the <code>Statement</code> in an IAM policy.</p>
10432    pub start_position: Option<Position>,
10433}
10434
10435#[allow(dead_code)]
10436struct StatementDeserializer;
10437impl StatementDeserializer {
10438    #[allow(dead_code, unused_variables)]
10439    fn deserialize<T: Peek + Next>(
10440        tag_name: &str,
10441        stack: &mut T,
10442    ) -> Result<Statement, XmlParseError> {
10443        deserialize_elements::<_, Statement, _>(tag_name, stack, |name, stack, obj| {
10444            match name {
10445                "EndPosition" => {
10446                    obj.end_position =
10447                        Some(PositionDeserializer::deserialize("EndPosition", stack)?);
10448                }
10449                "SourcePolicyId" => {
10450                    obj.source_policy_id = Some(PolicyIdentifierTypeDeserializer::deserialize(
10451                        "SourcePolicyId",
10452                        stack,
10453                    )?);
10454                }
10455                "SourcePolicyType" => {
10456                    obj.source_policy_type = Some(PolicySourceTypeDeserializer::deserialize(
10457                        "SourcePolicyType",
10458                        stack,
10459                    )?);
10460                }
10461                "StartPosition" => {
10462                    obj.start_position =
10463                        Some(PositionDeserializer::deserialize("StartPosition", stack)?);
10464                }
10465                _ => skip_tree(stack),
10466            }
10467            Ok(())
10468        })
10469    }
10470}
10471#[allow(dead_code)]
10472struct StatementListTypeDeserializer;
10473impl StatementListTypeDeserializer {
10474    #[allow(dead_code, unused_variables)]
10475    fn deserialize<T: Peek + Next>(
10476        tag_name: &str,
10477        stack: &mut T,
10478    ) -> Result<Vec<Statement>, XmlParseError> {
10479        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
10480            if name == "member" {
10481                obj.push(StatementDeserializer::deserialize("member", stack)?);
10482            } else {
10483                skip_tree(stack);
10484            }
10485            Ok(())
10486        })
10487    }
10488}
10489#[allow(dead_code)]
10490struct StatusTypeDeserializer;
10491impl StatusTypeDeserializer {
10492    #[allow(dead_code, unused_variables)]
10493    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
10494        xml_util::deserialize_primitive(tag_name, stack, Ok)
10495    }
10496}
10497#[allow(dead_code)]
10498struct StringTypeDeserializer;
10499impl StringTypeDeserializer {
10500    #[allow(dead_code, unused_variables)]
10501    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
10502        xml_util::deserialize_primitive(tag_name, stack, Ok)
10503    }
10504}
10505#[allow(dead_code)]
10506struct SummaryKeyTypeDeserializer;
10507impl SummaryKeyTypeDeserializer {
10508    #[allow(dead_code, unused_variables)]
10509    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
10510        xml_util::deserialize_primitive(tag_name, stack, Ok)
10511    }
10512}
10513#[allow(dead_code)]
10514struct SummaryMapTypeDeserializer;
10515impl SummaryMapTypeDeserializer {
10516    #[allow(dead_code, unused_variables)]
10517    fn deserialize<T: Peek + Next>(
10518        tag_name: &str,
10519        stack: &mut T,
10520    ) -> Result<::std::collections::HashMap<String, i64>, XmlParseError> {
10521        xml_util::start_element(tag_name, stack)?;
10522
10523        let mut obj = ::std::collections::HashMap::new();
10524
10525        while xml_util::peek_at_name(stack)? == "entry" {
10526            xml_util::start_element("entry", stack)?;
10527            let key = SummaryKeyTypeDeserializer::deserialize("key", stack)?;
10528            let value = SummaryValueTypeDeserializer::deserialize("value", stack)?;
10529            obj.insert(key, value);
10530            xml_util::end_element("entry", stack)?;
10531        }
10532
10533        xml_util::end_element(tag_name, stack)?;
10534        Ok(obj)
10535    }
10536}
10537#[allow(dead_code)]
10538struct SummaryValueTypeDeserializer;
10539impl SummaryValueTypeDeserializer {
10540    #[allow(dead_code, unused_variables)]
10541    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<i64, XmlParseError> {
10542        xml_util::deserialize_primitive(tag_name, stack, |s| Ok(i64::from_str(&s).unwrap()))
10543    }
10544}
10545/// <p>A structure that represents user-provided metadata that can be associated with an IAM resource. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
10546#[derive(Clone, Debug, Default, PartialEq)]
10547#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
10548#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10549pub struct Tag {
10550    /// <p>The key name that can be used to look up or retrieve the associated value. For example, <code>Department</code> or <code>Cost Center</code> are common choices.</p>
10551    pub key: String,
10552    /// <p><p>The value associated with this tag. For example, tags with a key name of <code>Department</code> could have values such as <code>Human Resources</code>, <code>Accounting</code>, and <code>Support</code>. Tags with a key name of <code>Cost Center</code> might have values that consist of the number associated with the different cost centers in your company. Typically, many resources have tags with the same key name but with different values.</p> <note> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </note></p>
10553    pub value: String,
10554}
10555
10556#[allow(dead_code)]
10557struct TagDeserializer;
10558impl TagDeserializer {
10559    #[allow(dead_code, unused_variables)]
10560    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Tag, XmlParseError> {
10561        deserialize_elements::<_, Tag, _>(tag_name, stack, |name, stack, obj| {
10562            match name {
10563                "Key" => {
10564                    obj.key = TagKeyTypeDeserializer::deserialize("Key", stack)?;
10565                }
10566                "Value" => {
10567                    obj.value = TagValueTypeDeserializer::deserialize("Value", stack)?;
10568                }
10569                _ => skip_tree(stack),
10570            }
10571            Ok(())
10572        })
10573    }
10574}
10575
10576/// Serialize `Tag` contents to a `SignedRequest`.
10577struct TagSerializer;
10578impl TagSerializer {
10579    fn serialize(params: &mut Params, name: &str, obj: &Tag) {
10580        let mut prefix = name.to_string();
10581        if prefix != "" {
10582            prefix.push_str(".");
10583        }
10584
10585        params.put(&format!("{}{}", prefix, "Key"), &obj.key);
10586        params.put(&format!("{}{}", prefix, "Value"), &obj.value);
10587    }
10588}
10589
10590#[derive(Clone, Debug, Default, PartialEq)]
10591#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10592pub struct TagInstanceProfileRequest {
10593    /// <p>The name of the IAM instance profile to which you want to add tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10594    pub instance_profile_name: String,
10595    /// <p>The list of tags that you want to attach to the IAM instance profile. Each tag consists of a key name and an associated value.</p>
10596    pub tags: Vec<Tag>,
10597}
10598
10599/// Serialize `TagInstanceProfileRequest` contents to a `SignedRequest`.
10600struct TagInstanceProfileRequestSerializer;
10601impl TagInstanceProfileRequestSerializer {
10602    fn serialize(params: &mut Params, name: &str, obj: &TagInstanceProfileRequest) {
10603        let mut prefix = name.to_string();
10604        if prefix != "" {
10605            prefix.push_str(".");
10606        }
10607
10608        params.put(
10609            &format!("{}{}", prefix, "InstanceProfileName"),
10610            &obj.instance_profile_name,
10611        );
10612        TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), &obj.tags);
10613    }
10614}
10615
10616/// Serialize `TagKeyListType` contents to a `SignedRequest`.
10617struct TagKeyListTypeSerializer;
10618impl TagKeyListTypeSerializer {
10619    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
10620        for (index, obj) in obj.iter().enumerate() {
10621            let key = format!("{}.member.{}", name, index + 1);
10622            params.put(&key, &obj);
10623        }
10624    }
10625}
10626
10627#[allow(dead_code)]
10628struct TagKeyTypeDeserializer;
10629impl TagKeyTypeDeserializer {
10630    #[allow(dead_code, unused_variables)]
10631    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
10632        xml_util::deserialize_primitive(tag_name, stack, Ok)
10633    }
10634}
10635#[allow(dead_code)]
10636struct TagListTypeDeserializer;
10637impl TagListTypeDeserializer {
10638    #[allow(dead_code, unused_variables)]
10639    fn deserialize<T: Peek + Next>(
10640        tag_name: &str,
10641        stack: &mut T,
10642    ) -> Result<Vec<Tag>, XmlParseError> {
10643        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
10644            if name == "member" {
10645                obj.push(TagDeserializer::deserialize("member", stack)?);
10646            } else {
10647                skip_tree(stack);
10648            }
10649            Ok(())
10650        })
10651    }
10652}
10653
10654/// Serialize `TagListType` contents to a `SignedRequest`.
10655struct TagListTypeSerializer;
10656impl TagListTypeSerializer {
10657    fn serialize(params: &mut Params, name: &str, obj: &Vec<Tag>) {
10658        for (index, obj) in obj.iter().enumerate() {
10659            let key = format!("{}.member.{}", name, index + 1);
10660            TagSerializer::serialize(params, &key, obj);
10661        }
10662    }
10663}
10664
10665#[derive(Clone, Debug, Default, PartialEq)]
10666#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10667pub struct TagMFADeviceRequest {
10668    /// <p>The unique identifier for the IAM virtual MFA device to which you want to add tags. For virtual MFA devices, the serial number is the same as the ARN.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10669    pub serial_number: String,
10670    /// <p>The list of tags that you want to attach to the IAM virtual MFA device. Each tag consists of a key name and an associated value.</p>
10671    pub tags: Vec<Tag>,
10672}
10673
10674/// Serialize `TagMFADeviceRequest` contents to a `SignedRequest`.
10675struct TagMFADeviceRequestSerializer;
10676impl TagMFADeviceRequestSerializer {
10677    fn serialize(params: &mut Params, name: &str, obj: &TagMFADeviceRequest) {
10678        let mut prefix = name.to_string();
10679        if prefix != "" {
10680            prefix.push_str(".");
10681        }
10682
10683        params.put(&format!("{}{}", prefix, "SerialNumber"), &obj.serial_number);
10684        TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), &obj.tags);
10685    }
10686}
10687
10688#[derive(Clone, Debug, Default, PartialEq)]
10689#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10690pub struct TagOpenIDConnectProviderRequest {
10691    /// <p>The ARN of the OIDC identity provider in IAM to which you want to add tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10692    pub open_id_connect_provider_arn: String,
10693    /// <p>The list of tags that you want to attach to the OIDC identity provider in IAM. Each tag consists of a key name and an associated value.</p>
10694    pub tags: Vec<Tag>,
10695}
10696
10697/// Serialize `TagOpenIDConnectProviderRequest` contents to a `SignedRequest`.
10698struct TagOpenIDConnectProviderRequestSerializer;
10699impl TagOpenIDConnectProviderRequestSerializer {
10700    fn serialize(params: &mut Params, name: &str, obj: &TagOpenIDConnectProviderRequest) {
10701        let mut prefix = name.to_string();
10702        if prefix != "" {
10703            prefix.push_str(".");
10704        }
10705
10706        params.put(
10707            &format!("{}{}", prefix, "OpenIDConnectProviderArn"),
10708            &obj.open_id_connect_provider_arn,
10709        );
10710        TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), &obj.tags);
10711    }
10712}
10713
10714#[derive(Clone, Debug, Default, PartialEq)]
10715#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10716pub struct TagPolicyRequest {
10717    /// <p>The ARN of the IAM customer managed policy to which you want to add tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10718    pub policy_arn: String,
10719    /// <p>The list of tags that you want to attach to the IAM customer managed policy. Each tag consists of a key name and an associated value.</p>
10720    pub tags: Vec<Tag>,
10721}
10722
10723/// Serialize `TagPolicyRequest` contents to a `SignedRequest`.
10724struct TagPolicyRequestSerializer;
10725impl TagPolicyRequestSerializer {
10726    fn serialize(params: &mut Params, name: &str, obj: &TagPolicyRequest) {
10727        let mut prefix = name.to_string();
10728        if prefix != "" {
10729            prefix.push_str(".");
10730        }
10731
10732        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
10733        TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), &obj.tags);
10734    }
10735}
10736
10737#[derive(Clone, Debug, Default, PartialEq)]
10738#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10739pub struct TagRoleRequest {
10740    /// <p>The name of the IAM role to which you want to add tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
10741    pub role_name: String,
10742    /// <p>The list of tags that you want to attach to the IAM role. Each tag consists of a key name and an associated value.</p>
10743    pub tags: Vec<Tag>,
10744}
10745
10746/// Serialize `TagRoleRequest` contents to a `SignedRequest`.
10747struct TagRoleRequestSerializer;
10748impl TagRoleRequestSerializer {
10749    fn serialize(params: &mut Params, name: &str, obj: &TagRoleRequest) {
10750        let mut prefix = name.to_string();
10751        if prefix != "" {
10752            prefix.push_str(".");
10753        }
10754
10755        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
10756        TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), &obj.tags);
10757    }
10758}
10759
10760#[derive(Clone, Debug, Default, PartialEq)]
10761#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10762pub struct TagSAMLProviderRequest {
10763    /// <p>The ARN of the SAML identity provider in IAM to which you want to add tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10764    pub saml_provider_arn: String,
10765    /// <p>The list of tags that you want to attach to the SAML identity provider in IAM. Each tag consists of a key name and an associated value.</p>
10766    pub tags: Vec<Tag>,
10767}
10768
10769/// Serialize `TagSAMLProviderRequest` contents to a `SignedRequest`.
10770struct TagSAMLProviderRequestSerializer;
10771impl TagSAMLProviderRequestSerializer {
10772    fn serialize(params: &mut Params, name: &str, obj: &TagSAMLProviderRequest) {
10773        let mut prefix = name.to_string();
10774        if prefix != "" {
10775            prefix.push_str(".");
10776        }
10777
10778        params.put(
10779            &format!("{}{}", prefix, "SAMLProviderArn"),
10780            &obj.saml_provider_arn,
10781        );
10782        TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), &obj.tags);
10783    }
10784}
10785
10786#[derive(Clone, Debug, Default, PartialEq)]
10787#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10788pub struct TagServerCertificateRequest {
10789    /// <p>The name of the IAM server certificate to which you want to add tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10790    pub server_certificate_name: String,
10791    /// <p>The list of tags that you want to attach to the IAM server certificate. Each tag consists of a key name and an associated value.</p>
10792    pub tags: Vec<Tag>,
10793}
10794
10795/// Serialize `TagServerCertificateRequest` contents to a `SignedRequest`.
10796struct TagServerCertificateRequestSerializer;
10797impl TagServerCertificateRequestSerializer {
10798    fn serialize(params: &mut Params, name: &str, obj: &TagServerCertificateRequest) {
10799        let mut prefix = name.to_string();
10800        if prefix != "" {
10801            prefix.push_str(".");
10802        }
10803
10804        params.put(
10805            &format!("{}{}", prefix, "ServerCertificateName"),
10806            &obj.server_certificate_name,
10807        );
10808        TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), &obj.tags);
10809    }
10810}
10811
10812#[derive(Clone, Debug, Default, PartialEq)]
10813#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10814pub struct TagUserRequest {
10815    /// <p>The list of tags that you want to attach to the IAM user. Each tag consists of a key name and an associated value.</p>
10816    pub tags: Vec<Tag>,
10817    /// <p>The name of the IAM user to which you want to add tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10818    pub user_name: String,
10819}
10820
10821/// Serialize `TagUserRequest` contents to a `SignedRequest`.
10822struct TagUserRequestSerializer;
10823impl TagUserRequestSerializer {
10824    fn serialize(params: &mut Params, name: &str, obj: &TagUserRequest) {
10825        let mut prefix = name.to_string();
10826        if prefix != "" {
10827            prefix.push_str(".");
10828        }
10829
10830        TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), &obj.tags);
10831        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
10832    }
10833}
10834
10835#[allow(dead_code)]
10836struct TagValueTypeDeserializer;
10837impl TagValueTypeDeserializer {
10838    #[allow(dead_code, unused_variables)]
10839    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
10840        xml_util::deserialize_primitive(tag_name, stack, Ok)
10841    }
10842}
10843#[allow(dead_code)]
10844struct ThumbprintListTypeDeserializer;
10845impl ThumbprintListTypeDeserializer {
10846    #[allow(dead_code, unused_variables)]
10847    fn deserialize<T: Peek + Next>(
10848        tag_name: &str,
10849        stack: &mut T,
10850    ) -> Result<Vec<String>, XmlParseError> {
10851        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
10852            if name == "member" {
10853                obj.push(ThumbprintTypeDeserializer::deserialize("member", stack)?);
10854            } else {
10855                skip_tree(stack);
10856            }
10857            Ok(())
10858        })
10859    }
10860}
10861
10862/// Serialize `ThumbprintListType` contents to a `SignedRequest`.
10863struct ThumbprintListTypeSerializer;
10864impl ThumbprintListTypeSerializer {
10865    fn serialize(params: &mut Params, name: &str, obj: &Vec<String>) {
10866        for (index, obj) in obj.iter().enumerate() {
10867            let key = format!("{}.member.{}", name, index + 1);
10868            params.put(&key, &obj);
10869        }
10870    }
10871}
10872
10873#[allow(dead_code)]
10874struct ThumbprintTypeDeserializer;
10875impl ThumbprintTypeDeserializer {
10876    #[allow(dead_code, unused_variables)]
10877    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
10878        xml_util::deserialize_primitive(tag_name, stack, Ok)
10879    }
10880}
10881/// <p>Contains details about the most recent attempt to access an action within the service.</p> <p>This data type is used as a response element in the <a>GetServiceLastAccessedDetails</a> operation.</p>
10882#[derive(Clone, Debug, Default, PartialEq)]
10883#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
10884pub struct TrackedActionLastAccessed {
10885    /// <p>The name of the tracked action to which access was attempted. Tracked actions are actions that report activity to IAM.</p>
10886    pub action_name: Option<String>,
10887    pub last_accessed_entity: Option<String>,
10888    /// <p>The Region from which the authenticated entity (user or role) last attempted to access the tracked action. AWS does not report unauthenticated requests.</p> <p>This field is null if no IAM entities attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
10889    pub last_accessed_region: Option<String>,
10890    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when an authenticated entity most recently attempted to access the tracked service. AWS does not report unauthenticated requests.</p> <p>This field is null if no IAM entities attempted to access the service within the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period">reporting period</a>.</p>
10891    pub last_accessed_time: Option<String>,
10892}
10893
10894#[allow(dead_code)]
10895struct TrackedActionLastAccessedDeserializer;
10896impl TrackedActionLastAccessedDeserializer {
10897    #[allow(dead_code, unused_variables)]
10898    fn deserialize<T: Peek + Next>(
10899        tag_name: &str,
10900        stack: &mut T,
10901    ) -> Result<TrackedActionLastAccessed, XmlParseError> {
10902        deserialize_elements::<_, TrackedActionLastAccessed, _>(
10903            tag_name,
10904            stack,
10905            |name, stack, obj| {
10906                match name {
10907                    "ActionName" => {
10908                        obj.action_name =
10909                            Some(StringTypeDeserializer::deserialize("ActionName", stack)?);
10910                    }
10911                    "LastAccessedEntity" => {
10912                        obj.last_accessed_entity = Some(ArnTypeDeserializer::deserialize(
10913                            "LastAccessedEntity",
10914                            stack,
10915                        )?);
10916                    }
10917                    "LastAccessedRegion" => {
10918                        obj.last_accessed_region = Some(StringTypeDeserializer::deserialize(
10919                            "LastAccessedRegion",
10920                            stack,
10921                        )?);
10922                    }
10923                    "LastAccessedTime" => {
10924                        obj.last_accessed_time = Some(DateTypeDeserializer::deserialize(
10925                            "LastAccessedTime",
10926                            stack,
10927                        )?);
10928                    }
10929                    _ => skip_tree(stack),
10930                }
10931                Ok(())
10932            },
10933        )
10934    }
10935}
10936#[allow(dead_code)]
10937struct TrackedActionsLastAccessedDeserializer;
10938impl TrackedActionsLastAccessedDeserializer {
10939    #[allow(dead_code, unused_variables)]
10940    fn deserialize<T: Peek + Next>(
10941        tag_name: &str,
10942        stack: &mut T,
10943    ) -> Result<Vec<TrackedActionLastAccessed>, XmlParseError> {
10944        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
10945            if name == "member" {
10946                obj.push(TrackedActionLastAccessedDeserializer::deserialize(
10947                    "member", stack,
10948                )?);
10949            } else {
10950                skip_tree(stack);
10951            }
10952            Ok(())
10953        })
10954    }
10955}
10956#[derive(Clone, Debug, Default, PartialEq)]
10957#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10958pub struct UntagInstanceProfileRequest {
10959    /// <p>The name of the IAM instance profile from which you want to remove tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10960    pub instance_profile_name: String,
10961    /// <p>A list of key names as a simple array of strings. The tags with matching keys are removed from the specified instance profile.</p>
10962    pub tag_keys: Vec<String>,
10963}
10964
10965/// Serialize `UntagInstanceProfileRequest` contents to a `SignedRequest`.
10966struct UntagInstanceProfileRequestSerializer;
10967impl UntagInstanceProfileRequestSerializer {
10968    fn serialize(params: &mut Params, name: &str, obj: &UntagInstanceProfileRequest) {
10969        let mut prefix = name.to_string();
10970        if prefix != "" {
10971            prefix.push_str(".");
10972        }
10973
10974        params.put(
10975            &format!("{}{}", prefix, "InstanceProfileName"),
10976            &obj.instance_profile_name,
10977        );
10978        TagKeyListTypeSerializer::serialize(
10979            params,
10980            &format!("{}{}", prefix, "TagKeys"),
10981            &obj.tag_keys,
10982        );
10983    }
10984}
10985
10986#[derive(Clone, Debug, Default, PartialEq)]
10987#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
10988pub struct UntagMFADeviceRequest {
10989    /// <p>The unique identifier for the IAM virtual MFA device from which you want to remove tags. For virtual MFA devices, the serial number is the same as the ARN.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
10990    pub serial_number: String,
10991    /// <p>A list of key names as a simple array of strings. The tags with matching keys are removed from the specified instance profile.</p>
10992    pub tag_keys: Vec<String>,
10993}
10994
10995/// Serialize `UntagMFADeviceRequest` contents to a `SignedRequest`.
10996struct UntagMFADeviceRequestSerializer;
10997impl UntagMFADeviceRequestSerializer {
10998    fn serialize(params: &mut Params, name: &str, obj: &UntagMFADeviceRequest) {
10999        let mut prefix = name.to_string();
11000        if prefix != "" {
11001            prefix.push_str(".");
11002        }
11003
11004        params.put(&format!("{}{}", prefix, "SerialNumber"), &obj.serial_number);
11005        TagKeyListTypeSerializer::serialize(
11006            params,
11007            &format!("{}{}", prefix, "TagKeys"),
11008            &obj.tag_keys,
11009        );
11010    }
11011}
11012
11013#[derive(Clone, Debug, Default, PartialEq)]
11014#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11015pub struct UntagOpenIDConnectProviderRequest {
11016    /// <p>The ARN of the OIDC provider in IAM from which you want to remove tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
11017    pub open_id_connect_provider_arn: String,
11018    /// <p>A list of key names as a simple array of strings. The tags with matching keys are removed from the specified OIDC provider.</p>
11019    pub tag_keys: Vec<String>,
11020}
11021
11022/// Serialize `UntagOpenIDConnectProviderRequest` contents to a `SignedRequest`.
11023struct UntagOpenIDConnectProviderRequestSerializer;
11024impl UntagOpenIDConnectProviderRequestSerializer {
11025    fn serialize(params: &mut Params, name: &str, obj: &UntagOpenIDConnectProviderRequest) {
11026        let mut prefix = name.to_string();
11027        if prefix != "" {
11028            prefix.push_str(".");
11029        }
11030
11031        params.put(
11032            &format!("{}{}", prefix, "OpenIDConnectProviderArn"),
11033            &obj.open_id_connect_provider_arn,
11034        );
11035        TagKeyListTypeSerializer::serialize(
11036            params,
11037            &format!("{}{}", prefix, "TagKeys"),
11038            &obj.tag_keys,
11039        );
11040    }
11041}
11042
11043#[derive(Clone, Debug, Default, PartialEq)]
11044#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11045pub struct UntagPolicyRequest {
11046    /// <p>The ARN of the IAM customer managed policy from which you want to remove tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
11047    pub policy_arn: String,
11048    /// <p>A list of key names as a simple array of strings. The tags with matching keys are removed from the specified policy.</p>
11049    pub tag_keys: Vec<String>,
11050}
11051
11052/// Serialize `UntagPolicyRequest` contents to a `SignedRequest`.
11053struct UntagPolicyRequestSerializer;
11054impl UntagPolicyRequestSerializer {
11055    fn serialize(params: &mut Params, name: &str, obj: &UntagPolicyRequest) {
11056        let mut prefix = name.to_string();
11057        if prefix != "" {
11058            prefix.push_str(".");
11059        }
11060
11061        params.put(&format!("{}{}", prefix, "PolicyArn"), &obj.policy_arn);
11062        TagKeyListTypeSerializer::serialize(
11063            params,
11064            &format!("{}{}", prefix, "TagKeys"),
11065            &obj.tag_keys,
11066        );
11067    }
11068}
11069
11070#[derive(Clone, Debug, Default, PartialEq)]
11071#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11072pub struct UntagRoleRequest {
11073    /// <p>The name of the IAM role from which you want to remove tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11074    pub role_name: String,
11075    /// <p>A list of key names as a simple array of strings. The tags with matching keys are removed from the specified role.</p>
11076    pub tag_keys: Vec<String>,
11077}
11078
11079/// Serialize `UntagRoleRequest` contents to a `SignedRequest`.
11080struct UntagRoleRequestSerializer;
11081impl UntagRoleRequestSerializer {
11082    fn serialize(params: &mut Params, name: &str, obj: &UntagRoleRequest) {
11083        let mut prefix = name.to_string();
11084        if prefix != "" {
11085            prefix.push_str(".");
11086        }
11087
11088        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
11089        TagKeyListTypeSerializer::serialize(
11090            params,
11091            &format!("{}{}", prefix, "TagKeys"),
11092            &obj.tag_keys,
11093        );
11094    }
11095}
11096
11097#[derive(Clone, Debug, Default, PartialEq)]
11098#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11099pub struct UntagSAMLProviderRequest {
11100    /// <p>The ARN of the SAML identity provider in IAM from which you want to remove tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
11101    pub saml_provider_arn: String,
11102    /// <p>A list of key names as a simple array of strings. The tags with matching keys are removed from the specified SAML identity provider.</p>
11103    pub tag_keys: Vec<String>,
11104}
11105
11106/// Serialize `UntagSAMLProviderRequest` contents to a `SignedRequest`.
11107struct UntagSAMLProviderRequestSerializer;
11108impl UntagSAMLProviderRequestSerializer {
11109    fn serialize(params: &mut Params, name: &str, obj: &UntagSAMLProviderRequest) {
11110        let mut prefix = name.to_string();
11111        if prefix != "" {
11112            prefix.push_str(".");
11113        }
11114
11115        params.put(
11116            &format!("{}{}", prefix, "SAMLProviderArn"),
11117            &obj.saml_provider_arn,
11118        );
11119        TagKeyListTypeSerializer::serialize(
11120            params,
11121            &format!("{}{}", prefix, "TagKeys"),
11122            &obj.tag_keys,
11123        );
11124    }
11125}
11126
11127#[derive(Clone, Debug, Default, PartialEq)]
11128#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11129pub struct UntagServerCertificateRequest {
11130    /// <p>The name of the IAM server certificate from which you want to remove tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
11131    pub server_certificate_name: String,
11132    /// <p>A list of key names as a simple array of strings. The tags with matching keys are removed from the specified IAM server certificate.</p>
11133    pub tag_keys: Vec<String>,
11134}
11135
11136/// Serialize `UntagServerCertificateRequest` contents to a `SignedRequest`.
11137struct UntagServerCertificateRequestSerializer;
11138impl UntagServerCertificateRequestSerializer {
11139    fn serialize(params: &mut Params, name: &str, obj: &UntagServerCertificateRequest) {
11140        let mut prefix = name.to_string();
11141        if prefix != "" {
11142            prefix.push_str(".");
11143        }
11144
11145        params.put(
11146            &format!("{}{}", prefix, "ServerCertificateName"),
11147            &obj.server_certificate_name,
11148        );
11149        TagKeyListTypeSerializer::serialize(
11150            params,
11151            &format!("{}{}", prefix, "TagKeys"),
11152            &obj.tag_keys,
11153        );
11154    }
11155}
11156
11157#[derive(Clone, Debug, Default, PartialEq)]
11158#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11159pub struct UntagUserRequest {
11160    /// <p>A list of key names as a simple array of strings. The tags with matching keys are removed from the specified user.</p>
11161    pub tag_keys: Vec<String>,
11162    /// <p>The name of the IAM user from which you want to remove tags.</p> <p>This parameter accepts (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that consist of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: =,.@-</p>
11163    pub user_name: String,
11164}
11165
11166/// Serialize `UntagUserRequest` contents to a `SignedRequest`.
11167struct UntagUserRequestSerializer;
11168impl UntagUserRequestSerializer {
11169    fn serialize(params: &mut Params, name: &str, obj: &UntagUserRequest) {
11170        let mut prefix = name.to_string();
11171        if prefix != "" {
11172            prefix.push_str(".");
11173        }
11174
11175        TagKeyListTypeSerializer::serialize(
11176            params,
11177            &format!("{}{}", prefix, "TagKeys"),
11178            &obj.tag_keys,
11179        );
11180        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
11181    }
11182}
11183
11184#[derive(Clone, Debug, Default, PartialEq)]
11185#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11186pub struct UpdateAccessKeyRequest {
11187    /// <p>The access key ID of the secret access key you want to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
11188    pub access_key_id: String,
11189    /// <p> The status you want to assign to the secret access key. <code>Active</code> means that the key can be used for programmatic calls to AWS, while <code>Inactive</code> means that the key cannot be used.</p>
11190    pub status: String,
11191    /// <p>The name of the user whose key you want to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11192    pub user_name: Option<String>,
11193}
11194
11195/// Serialize `UpdateAccessKeyRequest` contents to a `SignedRequest`.
11196struct UpdateAccessKeyRequestSerializer;
11197impl UpdateAccessKeyRequestSerializer {
11198    fn serialize(params: &mut Params, name: &str, obj: &UpdateAccessKeyRequest) {
11199        let mut prefix = name.to_string();
11200        if prefix != "" {
11201            prefix.push_str(".");
11202        }
11203
11204        params.put(&format!("{}{}", prefix, "AccessKeyId"), &obj.access_key_id);
11205        params.put(&format!("{}{}", prefix, "Status"), &obj.status);
11206        if let Some(ref field_value) = obj.user_name {
11207            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
11208        }
11209    }
11210}
11211
11212#[derive(Clone, Debug, Default, PartialEq)]
11213#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11214pub struct UpdateAccountPasswordPolicyRequest {
11215    /// <p> Allows all IAM users in your account to use the AWS Management Console to change their own passwords. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/HowToPwdIAMUser.html">Letting IAM users change their own passwords</a> in the <i>IAM User Guide</i>.</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>false</code>. The result is that IAM users in the account do not automatically have permissions to change their own password.</p>
11216    pub allow_users_to_change_password: Option<bool>,
11217    /// <p>Prevents IAM users from setting a new password after their password has expired. The IAM user cannot be accessed until an administrator resets the password.</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>false</code>. The result is that IAM users can change their passwords after they expire and continue to sign in as the user.</p>
11218    pub hard_expiry: Option<bool>,
11219    /// <p>The number of days that an IAM user password is valid.</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>0</code>. The result is that IAM user passwords never expire.</p>
11220    pub max_password_age: Option<i64>,
11221    /// <p>The minimum number of characters allowed in an IAM user password.</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>6</code>.</p>
11222    pub minimum_password_length: Option<i64>,
11223    /// <p>Specifies the number of previous passwords that IAM users are prevented from reusing.</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>0</code>. The result is that IAM users are not prevented from reusing previous passwords.</p>
11224    pub password_reuse_prevention: Option<i64>,
11225    /// <p>Specifies whether IAM user passwords must contain at least one lowercase character from the ISO basic Latin alphabet (a to z).</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>false</code>. The result is that passwords do not require at least one lowercase character.</p>
11226    pub require_lowercase_characters: Option<bool>,
11227    /// <p>Specifies whether IAM user passwords must contain at least one numeric character (0 to 9).</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>false</code>. The result is that passwords do not require at least one numeric character.</p>
11228    pub require_numbers: Option<bool>,
11229    /// <p>Specifies whether IAM user passwords must contain at least one of the following non-alphanumeric characters:</p> <p>! @ # $ % ^ &amp; * ( ) _ + - = [ ] { } | '</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>false</code>. The result is that passwords do not require at least one symbol character.</p>
11230    pub require_symbols: Option<bool>,
11231    /// <p>Specifies whether IAM user passwords must contain at least one uppercase character from the ISO basic Latin alphabet (A to Z).</p> <p>If you do not specify a value for this parameter, then the operation uses the default value of <code>false</code>. The result is that passwords do not require at least one uppercase character.</p>
11232    pub require_uppercase_characters: Option<bool>,
11233}
11234
11235/// Serialize `UpdateAccountPasswordPolicyRequest` contents to a `SignedRequest`.
11236struct UpdateAccountPasswordPolicyRequestSerializer;
11237impl UpdateAccountPasswordPolicyRequestSerializer {
11238    fn serialize(params: &mut Params, name: &str, obj: &UpdateAccountPasswordPolicyRequest) {
11239        let mut prefix = name.to_string();
11240        if prefix != "" {
11241            prefix.push_str(".");
11242        }
11243
11244        if let Some(ref field_value) = obj.allow_users_to_change_password {
11245            params.put(
11246                &format!("{}{}", prefix, "AllowUsersToChangePassword"),
11247                &field_value,
11248            );
11249        }
11250        if let Some(ref field_value) = obj.hard_expiry {
11251            params.put(&format!("{}{}", prefix, "HardExpiry"), &field_value);
11252        }
11253        if let Some(ref field_value) = obj.max_password_age {
11254            params.put(&format!("{}{}", prefix, "MaxPasswordAge"), &field_value);
11255        }
11256        if let Some(ref field_value) = obj.minimum_password_length {
11257            params.put(
11258                &format!("{}{}", prefix, "MinimumPasswordLength"),
11259                &field_value,
11260            );
11261        }
11262        if let Some(ref field_value) = obj.password_reuse_prevention {
11263            params.put(
11264                &format!("{}{}", prefix, "PasswordReusePrevention"),
11265                &field_value,
11266            );
11267        }
11268        if let Some(ref field_value) = obj.require_lowercase_characters {
11269            params.put(
11270                &format!("{}{}", prefix, "RequireLowercaseCharacters"),
11271                &field_value,
11272            );
11273        }
11274        if let Some(ref field_value) = obj.require_numbers {
11275            params.put(&format!("{}{}", prefix, "RequireNumbers"), &field_value);
11276        }
11277        if let Some(ref field_value) = obj.require_symbols {
11278            params.put(&format!("{}{}", prefix, "RequireSymbols"), &field_value);
11279        }
11280        if let Some(ref field_value) = obj.require_uppercase_characters {
11281            params.put(
11282                &format!("{}{}", prefix, "RequireUppercaseCharacters"),
11283                &field_value,
11284            );
11285        }
11286    }
11287}
11288
11289#[derive(Clone, Debug, Default, PartialEq)]
11290#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11291pub struct UpdateAssumeRolePolicyRequest {
11292    /// <p><p>The policy that grants an entity permission to assume the role.</p> <p>You must provide policies in JSON format in IAM. However, for AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
11293    pub policy_document: String,
11294    /// <p>The name of the role to update with the new policy.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11295    pub role_name: String,
11296}
11297
11298/// Serialize `UpdateAssumeRolePolicyRequest` contents to a `SignedRequest`.
11299struct UpdateAssumeRolePolicyRequestSerializer;
11300impl UpdateAssumeRolePolicyRequestSerializer {
11301    fn serialize(params: &mut Params, name: &str, obj: &UpdateAssumeRolePolicyRequest) {
11302        let mut prefix = name.to_string();
11303        if prefix != "" {
11304            prefix.push_str(".");
11305        }
11306
11307        params.put(
11308            &format!("{}{}", prefix, "PolicyDocument"),
11309            &obj.policy_document,
11310        );
11311        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
11312    }
11313}
11314
11315#[derive(Clone, Debug, Default, PartialEq)]
11316#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11317pub struct UpdateGroupRequest {
11318    /// <p>Name of the IAM group to update. If you're changing the name of the group, this is the original name.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11319    pub group_name: String,
11320    /// <p>New name for the IAM group. Only include this if changing the group's name.</p> <p>IAM user, group, role, and policy names must be unique within the account. Names are not distinguished by case. For example, you cannot create resources named both "MyResource" and "myresource".</p>
11321    pub new_group_name: Option<String>,
11322    /// <p>New path for the IAM group. Only include this if changing the group's path.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
11323    pub new_path: Option<String>,
11324}
11325
11326/// Serialize `UpdateGroupRequest` contents to a `SignedRequest`.
11327struct UpdateGroupRequestSerializer;
11328impl UpdateGroupRequestSerializer {
11329    fn serialize(params: &mut Params, name: &str, obj: &UpdateGroupRequest) {
11330        let mut prefix = name.to_string();
11331        if prefix != "" {
11332            prefix.push_str(".");
11333        }
11334
11335        params.put(&format!("{}{}", prefix, "GroupName"), &obj.group_name);
11336        if let Some(ref field_value) = obj.new_group_name {
11337            params.put(&format!("{}{}", prefix, "NewGroupName"), &field_value);
11338        }
11339        if let Some(ref field_value) = obj.new_path {
11340            params.put(&format!("{}{}", prefix, "NewPath"), &field_value);
11341        }
11342    }
11343}
11344
11345#[derive(Clone, Debug, Default, PartialEq)]
11346#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11347pub struct UpdateLoginProfileRequest {
11348    /// <p>The new password for the specified IAM user.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul> <p>However, the format can be further restricted by the account administrator by setting a password policy on the AWS account. For more information, see <a>UpdateAccountPasswordPolicy</a>.</p>
11349    pub password: Option<String>,
11350    /// <p>Allows this new password to be used only once by requiring the specified IAM user to set a new password on next sign-in.</p>
11351    pub password_reset_required: Option<bool>,
11352    /// <p>The name of the user whose password you want to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11353    pub user_name: String,
11354}
11355
11356/// Serialize `UpdateLoginProfileRequest` contents to a `SignedRequest`.
11357struct UpdateLoginProfileRequestSerializer;
11358impl UpdateLoginProfileRequestSerializer {
11359    fn serialize(params: &mut Params, name: &str, obj: &UpdateLoginProfileRequest) {
11360        let mut prefix = name.to_string();
11361        if prefix != "" {
11362            prefix.push_str(".");
11363        }
11364
11365        if let Some(ref field_value) = obj.password {
11366            params.put(&format!("{}{}", prefix, "Password"), &field_value);
11367        }
11368        if let Some(ref field_value) = obj.password_reset_required {
11369            params.put(
11370                &format!("{}{}", prefix, "PasswordResetRequired"),
11371                &field_value,
11372            );
11373        }
11374        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
11375    }
11376}
11377
11378#[derive(Clone, Debug, Default, PartialEq)]
11379#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11380pub struct UpdateOpenIDConnectProviderThumbprintRequest {
11381    /// <p>The Amazon Resource Name (ARN) of the IAM OIDC provider resource object for which you want to update the thumbprint. You can get a list of OIDC provider ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
11382    pub open_id_connect_provider_arn: String,
11383    /// <p>A list of certificate thumbprints that are associated with the specified IAM OpenID Connect provider. For more information, see <a>CreateOpenIDConnectProvider</a>. </p>
11384    pub thumbprint_list: Vec<String>,
11385}
11386
11387/// Serialize `UpdateOpenIDConnectProviderThumbprintRequest` contents to a `SignedRequest`.
11388struct UpdateOpenIDConnectProviderThumbprintRequestSerializer;
11389impl UpdateOpenIDConnectProviderThumbprintRequestSerializer {
11390    fn serialize(
11391        params: &mut Params,
11392        name: &str,
11393        obj: &UpdateOpenIDConnectProviderThumbprintRequest,
11394    ) {
11395        let mut prefix = name.to_string();
11396        if prefix != "" {
11397            prefix.push_str(".");
11398        }
11399
11400        params.put(
11401            &format!("{}{}", prefix, "OpenIDConnectProviderArn"),
11402            &obj.open_id_connect_provider_arn,
11403        );
11404        ThumbprintListTypeSerializer::serialize(
11405            params,
11406            &format!("{}{}", prefix, "ThumbprintList"),
11407            &obj.thumbprint_list,
11408        );
11409    }
11410}
11411
11412#[derive(Clone, Debug, Default, PartialEq)]
11413#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11414pub struct UpdateRoleDescriptionRequest {
11415    /// <p>The new description that you want to apply to the specified role.</p>
11416    pub description: String,
11417    /// <p>The name of the role that you want to modify.</p>
11418    pub role_name: String,
11419}
11420
11421/// Serialize `UpdateRoleDescriptionRequest` contents to a `SignedRequest`.
11422struct UpdateRoleDescriptionRequestSerializer;
11423impl UpdateRoleDescriptionRequestSerializer {
11424    fn serialize(params: &mut Params, name: &str, obj: &UpdateRoleDescriptionRequest) {
11425        let mut prefix = name.to_string();
11426        if prefix != "" {
11427            prefix.push_str(".");
11428        }
11429
11430        params.put(&format!("{}{}", prefix, "Description"), &obj.description);
11431        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
11432    }
11433}
11434
11435#[derive(Clone, Debug, Default, PartialEq)]
11436#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
11437pub struct UpdateRoleDescriptionResponse {
11438    /// <p>A structure that contains details about the modified role.</p>
11439    pub role: Option<Role>,
11440}
11441
11442#[allow(dead_code)]
11443struct UpdateRoleDescriptionResponseDeserializer;
11444impl UpdateRoleDescriptionResponseDeserializer {
11445    #[allow(dead_code, unused_variables)]
11446    fn deserialize<T: Peek + Next>(
11447        tag_name: &str,
11448        stack: &mut T,
11449    ) -> Result<UpdateRoleDescriptionResponse, XmlParseError> {
11450        deserialize_elements::<_, UpdateRoleDescriptionResponse, _>(
11451            tag_name,
11452            stack,
11453            |name, stack, obj| {
11454                match name {
11455                    "Role" => {
11456                        obj.role = Some(RoleDeserializer::deserialize("Role", stack)?);
11457                    }
11458                    _ => skip_tree(stack),
11459                }
11460                Ok(())
11461            },
11462        )
11463    }
11464}
11465#[derive(Clone, Debug, Default, PartialEq)]
11466#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11467pub struct UpdateRoleRequest {
11468    /// <p>The new description that you want to apply to the specified role.</p>
11469    pub description: Option<String>,
11470    /// <p>The maximum session duration (in seconds) that you want to set for the specified role. If you do not specify a value for this setting, the default maximum of one hour is applied. This setting can have a value from 1 hour to 12 hours.</p> <p>Anyone who assumes the role from the AWS CLI or API can use the <code>DurationSeconds</code> API parameter or the <code>duration-seconds</code> CLI parameter to request a longer session. The <code>MaxSessionDuration</code> setting determines the maximum duration that can be requested using the <code>DurationSeconds</code> parameter. If users don't specify a value for the <code>DurationSeconds</code> parameter, their security credentials are valid for one hour by default. This applies when you use the <code>AssumeRole*</code> API operations or the <code>assume-role*</code> CLI operations but does not apply when you use those operations to create a console URL. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html">Using IAM roles</a> in the <i>IAM User Guide</i>.</p>
11471    pub max_session_duration: Option<i64>,
11472    /// <p>The name of the role that you want to modify.</p>
11473    pub role_name: String,
11474}
11475
11476/// Serialize `UpdateRoleRequest` contents to a `SignedRequest`.
11477struct UpdateRoleRequestSerializer;
11478impl UpdateRoleRequestSerializer {
11479    fn serialize(params: &mut Params, name: &str, obj: &UpdateRoleRequest) {
11480        let mut prefix = name.to_string();
11481        if prefix != "" {
11482            prefix.push_str(".");
11483        }
11484
11485        if let Some(ref field_value) = obj.description {
11486            params.put(&format!("{}{}", prefix, "Description"), &field_value);
11487        }
11488        if let Some(ref field_value) = obj.max_session_duration {
11489            params.put(&format!("{}{}", prefix, "MaxSessionDuration"), &field_value);
11490        }
11491        params.put(&format!("{}{}", prefix, "RoleName"), &obj.role_name);
11492    }
11493}
11494
11495#[derive(Clone, Debug, Default, PartialEq)]
11496#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
11497pub struct UpdateRoleResponse {}
11498
11499#[allow(dead_code)]
11500struct UpdateRoleResponseDeserializer;
11501impl UpdateRoleResponseDeserializer {
11502    #[allow(dead_code, unused_variables)]
11503    fn deserialize<T: Peek + Next>(
11504        tag_name: &str,
11505        stack: &mut T,
11506    ) -> Result<UpdateRoleResponse, XmlParseError> {
11507        xml_util::start_element(tag_name, stack)?;
11508
11509        let obj = UpdateRoleResponse::default();
11510
11511        xml_util::end_element(tag_name, stack)?;
11512
11513        Ok(obj)
11514    }
11515}
11516#[derive(Clone, Debug, Default, PartialEq)]
11517#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11518pub struct UpdateSAMLProviderRequest {
11519    /// <p>An XML document generated by an identity provider (IdP) that supports SAML 2.0. The document includes the issuer's name, expiration information, and keys that can be used to validate the SAML authentication response (assertions) that are received from the IdP. You must generate the metadata document using the identity management software that is used as your organization's IdP.</p>
11520    pub saml_metadata_document: String,
11521    /// <p>The Amazon Resource Name (ARN) of the SAML provider to update.</p> <p>For more information about ARNs, see <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon Resource Names (ARNs)</a> in the <i>AWS General Reference</i>.</p>
11522    pub saml_provider_arn: String,
11523}
11524
11525/// Serialize `UpdateSAMLProviderRequest` contents to a `SignedRequest`.
11526struct UpdateSAMLProviderRequestSerializer;
11527impl UpdateSAMLProviderRequestSerializer {
11528    fn serialize(params: &mut Params, name: &str, obj: &UpdateSAMLProviderRequest) {
11529        let mut prefix = name.to_string();
11530        if prefix != "" {
11531            prefix.push_str(".");
11532        }
11533
11534        params.put(
11535            &format!("{}{}", prefix, "SAMLMetadataDocument"),
11536            &obj.saml_metadata_document,
11537        );
11538        params.put(
11539            &format!("{}{}", prefix, "SAMLProviderArn"),
11540            &obj.saml_provider_arn,
11541        );
11542    }
11543}
11544
11545/// <p>Contains the response to a successful <a>UpdateSAMLProvider</a> request. </p>
11546#[derive(Clone, Debug, Default, PartialEq)]
11547#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
11548pub struct UpdateSAMLProviderResponse {
11549    /// <p>The Amazon Resource Name (ARN) of the SAML provider that was updated.</p>
11550    pub saml_provider_arn: Option<String>,
11551}
11552
11553#[allow(dead_code)]
11554struct UpdateSAMLProviderResponseDeserializer;
11555impl UpdateSAMLProviderResponseDeserializer {
11556    #[allow(dead_code, unused_variables)]
11557    fn deserialize<T: Peek + Next>(
11558        tag_name: &str,
11559        stack: &mut T,
11560    ) -> Result<UpdateSAMLProviderResponse, XmlParseError> {
11561        deserialize_elements::<_, UpdateSAMLProviderResponse, _>(
11562            tag_name,
11563            stack,
11564            |name, stack, obj| {
11565                match name {
11566                    "SAMLProviderArn" => {
11567                        obj.saml_provider_arn =
11568                            Some(ArnTypeDeserializer::deserialize("SAMLProviderArn", stack)?);
11569                    }
11570                    _ => skip_tree(stack),
11571                }
11572                Ok(())
11573            },
11574        )
11575    }
11576}
11577#[derive(Clone, Debug, Default, PartialEq)]
11578#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11579pub struct UpdateSSHPublicKeyRequest {
11580    /// <p>The unique identifier for the SSH public key.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
11581    pub ssh_public_key_id: String,
11582    /// <p>The status to assign to the SSH public key. <code>Active</code> means that the key can be used for authentication with an AWS CodeCommit repository. <code>Inactive</code> means that the key cannot be used.</p>
11583    pub status: String,
11584    /// <p>The name of the IAM user associated with the SSH public key.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11585    pub user_name: String,
11586}
11587
11588/// Serialize `UpdateSSHPublicKeyRequest` contents to a `SignedRequest`.
11589struct UpdateSSHPublicKeyRequestSerializer;
11590impl UpdateSSHPublicKeyRequestSerializer {
11591    fn serialize(params: &mut Params, name: &str, obj: &UpdateSSHPublicKeyRequest) {
11592        let mut prefix = name.to_string();
11593        if prefix != "" {
11594            prefix.push_str(".");
11595        }
11596
11597        params.put(
11598            &format!("{}{}", prefix, "SSHPublicKeyId"),
11599            &obj.ssh_public_key_id,
11600        );
11601        params.put(&format!("{}{}", prefix, "Status"), &obj.status);
11602        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
11603    }
11604}
11605
11606#[derive(Clone, Debug, Default, PartialEq)]
11607#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11608pub struct UpdateServerCertificateRequest {
11609    /// <p>The new path for the server certificate. Include this only if you are updating the server certificate's path.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
11610    pub new_path: Option<String>,
11611    /// <p>The new name for the server certificate. Include this only if you are updating the server certificate's name. The name of the certificate cannot contain any spaces.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11612    pub new_server_certificate_name: Option<String>,
11613    /// <p>The name of the server certificate that you want to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11614    pub server_certificate_name: String,
11615}
11616
11617/// Serialize `UpdateServerCertificateRequest` contents to a `SignedRequest`.
11618struct UpdateServerCertificateRequestSerializer;
11619impl UpdateServerCertificateRequestSerializer {
11620    fn serialize(params: &mut Params, name: &str, obj: &UpdateServerCertificateRequest) {
11621        let mut prefix = name.to_string();
11622        if prefix != "" {
11623            prefix.push_str(".");
11624        }
11625
11626        if let Some(ref field_value) = obj.new_path {
11627            params.put(&format!("{}{}", prefix, "NewPath"), &field_value);
11628        }
11629        if let Some(ref field_value) = obj.new_server_certificate_name {
11630            params.put(
11631                &format!("{}{}", prefix, "NewServerCertificateName"),
11632                &field_value,
11633            );
11634        }
11635        params.put(
11636            &format!("{}{}", prefix, "ServerCertificateName"),
11637            &obj.server_certificate_name,
11638        );
11639    }
11640}
11641
11642#[derive(Clone, Debug, Default, PartialEq)]
11643#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11644pub struct UpdateServiceSpecificCredentialRequest {
11645    /// <p>The unique identifier of the service-specific credential.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
11646    pub service_specific_credential_id: String,
11647    /// <p>The status to be assigned to the service-specific credential.</p>
11648    pub status: String,
11649    /// <p>The name of the IAM user associated with the service-specific credential. If you do not specify this value, then the operation assumes the user whose credentials are used to call the operation.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11650    pub user_name: Option<String>,
11651}
11652
11653/// Serialize `UpdateServiceSpecificCredentialRequest` contents to a `SignedRequest`.
11654struct UpdateServiceSpecificCredentialRequestSerializer;
11655impl UpdateServiceSpecificCredentialRequestSerializer {
11656    fn serialize(params: &mut Params, name: &str, obj: &UpdateServiceSpecificCredentialRequest) {
11657        let mut prefix = name.to_string();
11658        if prefix != "" {
11659            prefix.push_str(".");
11660        }
11661
11662        params.put(
11663            &format!("{}{}", prefix, "ServiceSpecificCredentialId"),
11664            &obj.service_specific_credential_id,
11665        );
11666        params.put(&format!("{}{}", prefix, "Status"), &obj.status);
11667        if let Some(ref field_value) = obj.user_name {
11668            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
11669        }
11670    }
11671}
11672
11673#[derive(Clone, Debug, Default, PartialEq)]
11674#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11675pub struct UpdateSigningCertificateRequest {
11676    /// <p>The ID of the signing certificate you want to update.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>
11677    pub certificate_id: String,
11678    /// <p> The status you want to assign to the certificate. <code>Active</code> means that the certificate can be used for programmatic calls to AWS <code>Inactive</code> means that the certificate cannot be used.</p>
11679    pub status: String,
11680    /// <p>The name of the IAM user the signing certificate belongs to.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11681    pub user_name: Option<String>,
11682}
11683
11684/// Serialize `UpdateSigningCertificateRequest` contents to a `SignedRequest`.
11685struct UpdateSigningCertificateRequestSerializer;
11686impl UpdateSigningCertificateRequestSerializer {
11687    fn serialize(params: &mut Params, name: &str, obj: &UpdateSigningCertificateRequest) {
11688        let mut prefix = name.to_string();
11689        if prefix != "" {
11690            prefix.push_str(".");
11691        }
11692
11693        params.put(
11694            &format!("{}{}", prefix, "CertificateId"),
11695            &obj.certificate_id,
11696        );
11697        params.put(&format!("{}{}", prefix, "Status"), &obj.status);
11698        if let Some(ref field_value) = obj.user_name {
11699            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
11700        }
11701    }
11702}
11703
11704#[derive(Clone, Debug, Default, PartialEq)]
11705#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11706pub struct UpdateUserRequest {
11707    /// <p>New path for the IAM user. Include this parameter only if you're changing the user's path.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p>
11708    pub new_path: Option<String>,
11709    /// <p>New name for the user. Include this parameter only if you're changing the user's name.</p> <p>IAM user, group, role, and policy names must be unique within the account. Names are not distinguished by case. For example, you cannot create resources named both "MyResource" and "myresource".</p>
11710    pub new_user_name: Option<String>,
11711    /// <p>Name of the user to update. If you're changing the name of the user, this is the original user name.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11712    pub user_name: String,
11713}
11714
11715/// Serialize `UpdateUserRequest` contents to a `SignedRequest`.
11716struct UpdateUserRequestSerializer;
11717impl UpdateUserRequestSerializer {
11718    fn serialize(params: &mut Params, name: &str, obj: &UpdateUserRequest) {
11719        let mut prefix = name.to_string();
11720        if prefix != "" {
11721            prefix.push_str(".");
11722        }
11723
11724        if let Some(ref field_value) = obj.new_path {
11725            params.put(&format!("{}{}", prefix, "NewPath"), &field_value);
11726        }
11727        if let Some(ref field_value) = obj.new_user_name {
11728            params.put(&format!("{}{}", prefix, "NewUserName"), &field_value);
11729        }
11730        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
11731    }
11732}
11733
11734#[derive(Clone, Debug, Default, PartialEq)]
11735#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11736pub struct UploadSSHPublicKeyRequest {
11737    /// <p><p>The SSH public key. The public key must be encoded in ssh-rsa format or PEM format. The minimum bit-length of the public key is 2048 bits. For example, you can generate a 2048-bit key, and the resulting PEM file is 1679 bytes long.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
11738    pub ssh_public_key_body: String,
11739    /// <p>The name of the IAM user to associate the SSH public key with.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11740    pub user_name: String,
11741}
11742
11743/// Serialize `UploadSSHPublicKeyRequest` contents to a `SignedRequest`.
11744struct UploadSSHPublicKeyRequestSerializer;
11745impl UploadSSHPublicKeyRequestSerializer {
11746    fn serialize(params: &mut Params, name: &str, obj: &UploadSSHPublicKeyRequest) {
11747        let mut prefix = name.to_string();
11748        if prefix != "" {
11749            prefix.push_str(".");
11750        }
11751
11752        params.put(
11753            &format!("{}{}", prefix, "SSHPublicKeyBody"),
11754            &obj.ssh_public_key_body,
11755        );
11756        params.put(&format!("{}{}", prefix, "UserName"), &obj.user_name);
11757    }
11758}
11759
11760/// <p>Contains the response to a successful <a>UploadSSHPublicKey</a> request.</p>
11761#[derive(Clone, Debug, Default, PartialEq)]
11762#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
11763pub struct UploadSSHPublicKeyResponse {
11764    /// <p>Contains information about the SSH public key.</p>
11765    pub ssh_public_key: Option<SSHPublicKey>,
11766}
11767
11768#[allow(dead_code)]
11769struct UploadSSHPublicKeyResponseDeserializer;
11770impl UploadSSHPublicKeyResponseDeserializer {
11771    #[allow(dead_code, unused_variables)]
11772    fn deserialize<T: Peek + Next>(
11773        tag_name: &str,
11774        stack: &mut T,
11775    ) -> Result<UploadSSHPublicKeyResponse, XmlParseError> {
11776        deserialize_elements::<_, UploadSSHPublicKeyResponse, _>(
11777            tag_name,
11778            stack,
11779            |name, stack, obj| {
11780                match name {
11781                    "SSHPublicKey" => {
11782                        obj.ssh_public_key = Some(SSHPublicKeyDeserializer::deserialize(
11783                            "SSHPublicKey",
11784                            stack,
11785                        )?);
11786                    }
11787                    _ => skip_tree(stack),
11788                }
11789                Ok(())
11790            },
11791        )
11792    }
11793}
11794#[derive(Clone, Debug, Default, PartialEq)]
11795#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11796pub struct UploadServerCertificateRequest {
11797    /// <p><p>The contents of the public key certificate in PEM-encoded format.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
11798    pub certificate_body: String,
11799    /// <p><p>The contents of the certificate chain. This is typically a concatenation of the PEM-encoded public key certificates of the chain.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
11800    pub certificate_chain: Option<String>,
11801    /// <p><p>The path for the server certificate. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p> <p>This parameter is optional. If it is not included, it defaults to a slash (/). This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (<code>\u0021</code>) through the DEL character (<code>\u007F</code>), including most punctuation characters, digits, and upper and lowercased letters.</p> <note> <p> If you are uploading a server certificate specifically for use with Amazon CloudFront distributions, you must specify a path using the <code>path</code> parameter. The path must begin with <code>/cloudfront</code> and must include a trailing slash (for example, <code>/cloudfront/test/</code>).</p> </note></p>
11802    pub path: Option<String>,
11803    /// <p><p>The contents of the private key in PEM-encoded format.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
11804    pub private_key: String,
11805    /// <p>The name for the server certificate. Do not include the path in this value. The name of the certificate cannot contain any spaces.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11806    pub server_certificate_name: String,
11807    /// <p><p>A list of tags that you want to attach to the new IAM server certificate resource. Each tag consists of a key name and an associated value. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note></p>
11808    pub tags: Option<Vec<Tag>>,
11809}
11810
11811/// Serialize `UploadServerCertificateRequest` contents to a `SignedRequest`.
11812struct UploadServerCertificateRequestSerializer;
11813impl UploadServerCertificateRequestSerializer {
11814    fn serialize(params: &mut Params, name: &str, obj: &UploadServerCertificateRequest) {
11815        let mut prefix = name.to_string();
11816        if prefix != "" {
11817            prefix.push_str(".");
11818        }
11819
11820        params.put(
11821            &format!("{}{}", prefix, "CertificateBody"),
11822            &obj.certificate_body,
11823        );
11824        if let Some(ref field_value) = obj.certificate_chain {
11825            params.put(&format!("{}{}", prefix, "CertificateChain"), &field_value);
11826        }
11827        if let Some(ref field_value) = obj.path {
11828            params.put(&format!("{}{}", prefix, "Path"), &field_value);
11829        }
11830        params.put(&format!("{}{}", prefix, "PrivateKey"), &obj.private_key);
11831        params.put(
11832            &format!("{}{}", prefix, "ServerCertificateName"),
11833            &obj.server_certificate_name,
11834        );
11835        if let Some(ref field_value) = obj.tags {
11836            TagListTypeSerializer::serialize(params, &format!("{}{}", prefix, "Tags"), field_value);
11837        }
11838    }
11839}
11840
11841/// <p>Contains the response to a successful <a>UploadServerCertificate</a> request. </p>
11842#[derive(Clone, Debug, Default, PartialEq)]
11843#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
11844pub struct UploadServerCertificateResponse {
11845    /// <p>The meta information of the uploaded server certificate without its certificate body, certificate chain, and private key.</p>
11846    pub server_certificate_metadata: Option<ServerCertificateMetadata>,
11847    /// <p>A list of tags that are attached to the new IAM server certificate. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
11848    pub tags: Option<Vec<Tag>>,
11849}
11850
11851#[allow(dead_code)]
11852struct UploadServerCertificateResponseDeserializer;
11853impl UploadServerCertificateResponseDeserializer {
11854    #[allow(dead_code, unused_variables)]
11855    fn deserialize<T: Peek + Next>(
11856        tag_name: &str,
11857        stack: &mut T,
11858    ) -> Result<UploadServerCertificateResponse, XmlParseError> {
11859        deserialize_elements::<_, UploadServerCertificateResponse, _>(
11860            tag_name,
11861            stack,
11862            |name, stack, obj| {
11863                match name {
11864                    "ServerCertificateMetadata" => {
11865                        obj.server_certificate_metadata =
11866                            Some(ServerCertificateMetadataDeserializer::deserialize(
11867                                "ServerCertificateMetadata",
11868                                stack,
11869                            )?);
11870                    }
11871                    "Tags" => {
11872                        obj.tags
11873                            .get_or_insert(vec![])
11874                            .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
11875                    }
11876                    _ => skip_tree(stack),
11877                }
11878                Ok(())
11879            },
11880        )
11881    }
11882}
11883#[derive(Clone, Debug, Default, PartialEq)]
11884#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
11885pub struct UploadSigningCertificateRequest {
11886    /// <p><p>The contents of the signing certificate.</p> <p>The <a href="http://wikipedia.org/wiki/regex">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\u0009</code>), line feed (<code>\u000A</code>), and carriage return (<code>\u000D</code>)</p> </li> </ul></p>
11887    pub certificate_body: String,
11888    /// <p>The name of the user the signing certificate is for.</p> <p>This parameter allows (through its <a href="http://wikipedia.org/wiki/regex">regex pattern</a>) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-</p>
11889    pub user_name: Option<String>,
11890}
11891
11892/// Serialize `UploadSigningCertificateRequest` contents to a `SignedRequest`.
11893struct UploadSigningCertificateRequestSerializer;
11894impl UploadSigningCertificateRequestSerializer {
11895    fn serialize(params: &mut Params, name: &str, obj: &UploadSigningCertificateRequest) {
11896        let mut prefix = name.to_string();
11897        if prefix != "" {
11898            prefix.push_str(".");
11899        }
11900
11901        params.put(
11902            &format!("{}{}", prefix, "CertificateBody"),
11903            &obj.certificate_body,
11904        );
11905        if let Some(ref field_value) = obj.user_name {
11906            params.put(&format!("{}{}", prefix, "UserName"), &field_value);
11907        }
11908    }
11909}
11910
11911/// <p>Contains the response to a successful <a>UploadSigningCertificate</a> request. </p>
11912#[derive(Clone, Debug, Default, PartialEq)]
11913#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
11914pub struct UploadSigningCertificateResponse {
11915    /// <p>Information about the certificate.</p>
11916    pub certificate: SigningCertificate,
11917}
11918
11919#[allow(dead_code)]
11920struct UploadSigningCertificateResponseDeserializer;
11921impl UploadSigningCertificateResponseDeserializer {
11922    #[allow(dead_code, unused_variables)]
11923    fn deserialize<T: Peek + Next>(
11924        tag_name: &str,
11925        stack: &mut T,
11926    ) -> Result<UploadSigningCertificateResponse, XmlParseError> {
11927        deserialize_elements::<_, UploadSigningCertificateResponse, _>(
11928            tag_name,
11929            stack,
11930            |name, stack, obj| {
11931                match name {
11932                    "Certificate" => {
11933                        obj.certificate =
11934                            SigningCertificateDeserializer::deserialize("Certificate", stack)?;
11935                    }
11936                    _ => skip_tree(stack),
11937                }
11938                Ok(())
11939            },
11940        )
11941    }
11942}
11943/// <p><p>Contains information about an IAM user entity.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a>CreateUser</a> </p> </li> <li> <p> <a>GetUser</a> </p> </li> <li> <p> <a>ListUsers</a> </p> </li> </ul></p>
11944#[derive(Clone, Debug, Default, PartialEq)]
11945#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
11946pub struct User {
11947    /// <p>The Amazon Resource Name (ARN) that identifies the user. For more information about ARNs and how to use ARNs in policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM Identifiers</a> in the <i>IAM User Guide</i>. </p>
11948    pub arn: String,
11949    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the user was created.</p>
11950    pub create_date: String,
11951    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the user's password was last used to sign in to an AWS website. For a list of AWS websites that capture a user's last sign-in time, see the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html">Credential reports</a> topic in the <i>IAM User Guide</i>. If a password is used more than once in a five-minute span, only the first use is returned in this field. If the field is null (no value), then it indicates that they never signed in with a password. This can be because:</p> <ul> <li> <p>The user never had a password.</p> </li> <li> <p>A password exists but has not been used since IAM started tracking this information on October 20, 2014.</p> </li> </ul> <p>A null value does not mean that the user <i>never</i> had a password. Also, if the user does not currently have a password but had one in the past, then this field contains the date and time the most recent password was used.</p> <p>This value is returned only in the <a>GetUser</a> and <a>ListUsers</a> operations. </p>
11952    pub password_last_used: Option<String>,
11953    /// <p>The path to the user. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p> <p>The ARN of the policy used to set the permissions boundary for the user.</p>
11954    pub path: String,
11955    /// <p>For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM identities </a> in the <i>IAM User Guide</i>.</p>
11956    pub permissions_boundary: Option<AttachedPermissionsBoundary>,
11957    /// <p>A list of tags that are associated with the user. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
11958    pub tags: Option<Vec<Tag>>,
11959    /// <p>The stable and unique string identifying the user. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
11960    pub user_id: String,
11961    /// <p>The friendly name identifying the user.</p>
11962    pub user_name: String,
11963}
11964
11965#[allow(dead_code)]
11966struct UserDeserializer;
11967impl UserDeserializer {
11968    #[allow(dead_code, unused_variables)]
11969    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<User, XmlParseError> {
11970        deserialize_elements::<_, User, _>(tag_name, stack, |name, stack, obj| {
11971            match name {
11972                "Arn" => {
11973                    obj.arn = ArnTypeDeserializer::deserialize("Arn", stack)?;
11974                }
11975                "CreateDate" => {
11976                    obj.create_date = DateTypeDeserializer::deserialize("CreateDate", stack)?;
11977                }
11978                "PasswordLastUsed" => {
11979                    obj.password_last_used = Some(DateTypeDeserializer::deserialize(
11980                        "PasswordLastUsed",
11981                        stack,
11982                    )?);
11983                }
11984                "Path" => {
11985                    obj.path = PathTypeDeserializer::deserialize("Path", stack)?;
11986                }
11987                "PermissionsBoundary" => {
11988                    obj.permissions_boundary =
11989                        Some(AttachedPermissionsBoundaryDeserializer::deserialize(
11990                            "PermissionsBoundary",
11991                            stack,
11992                        )?);
11993                }
11994                "Tags" => {
11995                    obj.tags
11996                        .get_or_insert(vec![])
11997                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
11998                }
11999                "UserId" => {
12000                    obj.user_id = IdTypeDeserializer::deserialize("UserId", stack)?;
12001                }
12002                "UserName" => {
12003                    obj.user_name = UserNameTypeDeserializer::deserialize("UserName", stack)?;
12004                }
12005                _ => skip_tree(stack),
12006            }
12007            Ok(())
12008        })
12009    }
12010}
12011/// <p>Contains information about an IAM user, including all the user's policies and all the IAM groups the user is in.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p>
12012#[derive(Clone, Debug, Default, PartialEq)]
12013#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
12014pub struct UserDetail {
12015    pub arn: Option<String>,
12016    /// <p>A list of the managed policies attached to the user.</p>
12017    pub attached_managed_policies: Option<Vec<AttachedPolicy>>,
12018    /// <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the user was created.</p>
12019    pub create_date: Option<String>,
12020    /// <p>A list of IAM groups that the user is in.</p>
12021    pub group_list: Option<Vec<String>>,
12022    /// <p>The path to the user. For more information about paths, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
12023    pub path: Option<String>,
12024    /// <p>The ARN of the policy used to set the permissions boundary for the user.</p> <p>For more information about permissions boundaries, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html">Permissions boundaries for IAM identities </a> in the <i>IAM User Guide</i>.</p>
12025    pub permissions_boundary: Option<AttachedPermissionsBoundary>,
12026    /// <p>A list of tags that are associated with the user. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
12027    pub tags: Option<Vec<Tag>>,
12028    /// <p>The stable and unique string identifying the user. For more information about IDs, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>
12029    pub user_id: Option<String>,
12030    /// <p>The friendly name identifying the user.</p>
12031    pub user_name: Option<String>,
12032    /// <p>A list of the inline policies embedded in the user.</p>
12033    pub user_policy_list: Option<Vec<PolicyDetail>>,
12034}
12035
12036#[allow(dead_code)]
12037struct UserDetailDeserializer;
12038impl UserDetailDeserializer {
12039    #[allow(dead_code, unused_variables)]
12040    fn deserialize<T: Peek + Next>(
12041        tag_name: &str,
12042        stack: &mut T,
12043    ) -> Result<UserDetail, XmlParseError> {
12044        deserialize_elements::<_, UserDetail, _>(tag_name, stack, |name, stack, obj| {
12045            match name {
12046                "Arn" => {
12047                    obj.arn = Some(ArnTypeDeserializer::deserialize("Arn", stack)?);
12048                }
12049                "AttachedManagedPolicies" => {
12050                    obj.attached_managed_policies.get_or_insert(vec![]).extend(
12051                        AttachedPoliciesListTypeDeserializer::deserialize(
12052                            "AttachedManagedPolicies",
12053                            stack,
12054                        )?,
12055                    );
12056                }
12057                "CreateDate" => {
12058                    obj.create_date = Some(DateTypeDeserializer::deserialize("CreateDate", stack)?);
12059                }
12060                "GroupList" => {
12061                    obj.group_list.get_or_insert(vec![]).extend(
12062                        GroupNameListTypeDeserializer::deserialize("GroupList", stack)?,
12063                    );
12064                }
12065                "Path" => {
12066                    obj.path = Some(PathTypeDeserializer::deserialize("Path", stack)?);
12067                }
12068                "PermissionsBoundary" => {
12069                    obj.permissions_boundary =
12070                        Some(AttachedPermissionsBoundaryDeserializer::deserialize(
12071                            "PermissionsBoundary",
12072                            stack,
12073                        )?);
12074                }
12075                "Tags" => {
12076                    obj.tags
12077                        .get_or_insert(vec![])
12078                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
12079                }
12080                "UserId" => {
12081                    obj.user_id = Some(IdTypeDeserializer::deserialize("UserId", stack)?);
12082                }
12083                "UserName" => {
12084                    obj.user_name = Some(UserNameTypeDeserializer::deserialize("UserName", stack)?);
12085                }
12086                "UserPolicyList" => {
12087                    obj.user_policy_list.get_or_insert(vec![]).extend(
12088                        PolicyDetailListTypeDeserializer::deserialize("UserPolicyList", stack)?,
12089                    );
12090                }
12091                _ => skip_tree(stack),
12092            }
12093            Ok(())
12094        })
12095    }
12096}
12097#[allow(dead_code)]
12098struct UserDetailListTypeDeserializer;
12099impl UserDetailListTypeDeserializer {
12100    #[allow(dead_code, unused_variables)]
12101    fn deserialize<T: Peek + Next>(
12102        tag_name: &str,
12103        stack: &mut T,
12104    ) -> Result<Vec<UserDetail>, XmlParseError> {
12105        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
12106            if name == "member" {
12107                obj.push(UserDetailDeserializer::deserialize("member", stack)?);
12108            } else {
12109                skip_tree(stack);
12110            }
12111            Ok(())
12112        })
12113    }
12114}
12115#[allow(dead_code)]
12116struct UserListTypeDeserializer;
12117impl UserListTypeDeserializer {
12118    #[allow(dead_code, unused_variables)]
12119    fn deserialize<T: Peek + Next>(
12120        tag_name: &str,
12121        stack: &mut T,
12122    ) -> Result<Vec<User>, XmlParseError> {
12123        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
12124            if name == "member" {
12125                obj.push(UserDeserializer::deserialize("member", stack)?);
12126            } else {
12127                skip_tree(stack);
12128            }
12129            Ok(())
12130        })
12131    }
12132}
12133#[allow(dead_code)]
12134struct UserNameTypeDeserializer;
12135impl UserNameTypeDeserializer {
12136    #[allow(dead_code, unused_variables)]
12137    fn deserialize<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<String, XmlParseError> {
12138        xml_util::deserialize_primitive(tag_name, stack, Ok)
12139    }
12140}
12141/// <p>Contains information about a virtual MFA device.</p>
12142#[derive(Clone, Debug, Default, PartialEq)]
12143#[cfg_attr(feature = "serialize_structs", derive(Serialize))]
12144pub struct VirtualMFADevice {
12145    /// <p> The base32 seed defined as specified in <a href="https://tools.ietf.org/html/rfc3548.txt">RFC3548</a>. The <code>Base32StringSeed</code> is base64-encoded. </p>
12146    pub base_32_string_seed: Option<bytes::Bytes>,
12147    /// <p>The date and time on which the virtual MFA device was enabled.</p>
12148    pub enable_date: Option<String>,
12149    /// <p> A QR code PNG image that encodes <code>otpauth://totp/$virtualMFADeviceName@$AccountName?secret=$Base32String</code> where <code>$virtualMFADeviceName</code> is one of the create call arguments. <code>AccountName</code> is the user name if set (otherwise, the account ID otherwise), and <code>Base32String</code> is the seed in base32 format. The <code>Base32String</code> value is base64-encoded. </p>
12150    pub qr_code_png: Option<bytes::Bytes>,
12151    /// <p>The serial number associated with <code>VirtualMFADevice</code>.</p>
12152    pub serial_number: String,
12153    /// <p>A list of tags that are attached to the virtual MFA device. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
12154    pub tags: Option<Vec<Tag>>,
12155    /// <p>The IAM user associated with this virtual MFA device.</p>
12156    pub user: Option<User>,
12157}
12158
12159#[allow(dead_code)]
12160struct VirtualMFADeviceDeserializer;
12161impl VirtualMFADeviceDeserializer {
12162    #[allow(dead_code, unused_variables)]
12163    fn deserialize<T: Peek + Next>(
12164        tag_name: &str,
12165        stack: &mut T,
12166    ) -> Result<VirtualMFADevice, XmlParseError> {
12167        deserialize_elements::<_, VirtualMFADevice, _>(tag_name, stack, |name, stack, obj| {
12168            match name {
12169                "Base32StringSeed" => {
12170                    obj.base_32_string_seed = Some(BootstrapDatumDeserializer::deserialize(
12171                        "Base32StringSeed",
12172                        stack,
12173                    )?);
12174                }
12175                "EnableDate" => {
12176                    obj.enable_date = Some(DateTypeDeserializer::deserialize("EnableDate", stack)?);
12177                }
12178                "QRCodePNG" => {
12179                    obj.qr_code_png =
12180                        Some(BootstrapDatumDeserializer::deserialize("QRCodePNG", stack)?);
12181                }
12182                "SerialNumber" => {
12183                    obj.serial_number =
12184                        SerialNumberTypeDeserializer::deserialize("SerialNumber", stack)?;
12185                }
12186                "Tags" => {
12187                    obj.tags
12188                        .get_or_insert(vec![])
12189                        .extend(TagListTypeDeserializer::deserialize("Tags", stack)?);
12190                }
12191                "User" => {
12192                    obj.user = Some(UserDeserializer::deserialize("User", stack)?);
12193                }
12194                _ => skip_tree(stack),
12195            }
12196            Ok(())
12197        })
12198    }
12199}
12200#[allow(dead_code)]
12201struct VirtualMFADeviceListTypeDeserializer;
12202impl VirtualMFADeviceListTypeDeserializer {
12203    #[allow(dead_code, unused_variables)]
12204    fn deserialize<T: Peek + Next>(
12205        tag_name: &str,
12206        stack: &mut T,
12207    ) -> Result<Vec<VirtualMFADevice>, XmlParseError> {
12208        deserialize_elements::<_, Vec<_>, _>(tag_name, stack, |name, stack, obj| {
12209            if name == "member" {
12210                obj.push(VirtualMFADeviceDeserializer::deserialize("member", stack)?);
12211            } else {
12212                skip_tree(stack);
12213            }
12214            Ok(())
12215        })
12216    }
12217}
12218/// Errors returned by AddClientIDToOpenIDConnectProvider
12219#[derive(Debug, PartialEq)]
12220pub enum AddClientIDToOpenIDConnectProviderError {
12221    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
12222    InvalidInput(String),
12223    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12224    LimitExceeded(String),
12225    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12226    NoSuchEntity(String),
12227    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12228    ServiceFailure(String),
12229}
12230
12231impl AddClientIDToOpenIDConnectProviderError {
12232    pub fn from_response(
12233        res: BufferedHttpResponse,
12234    ) -> RusotoError<AddClientIDToOpenIDConnectProviderError> {
12235        {
12236            let reader = EventReader::new(res.body.as_ref());
12237            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12238            find_start_element(&mut stack);
12239            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12240                match &parsed_error.code[..] {
12241                    "InvalidInput" => {
12242                        return RusotoError::Service(
12243                            AddClientIDToOpenIDConnectProviderError::InvalidInput(
12244                                parsed_error.message,
12245                            ),
12246                        )
12247                    }
12248                    "LimitExceeded" => {
12249                        return RusotoError::Service(
12250                            AddClientIDToOpenIDConnectProviderError::LimitExceeded(
12251                                parsed_error.message,
12252                            ),
12253                        )
12254                    }
12255                    "NoSuchEntity" => {
12256                        return RusotoError::Service(
12257                            AddClientIDToOpenIDConnectProviderError::NoSuchEntity(
12258                                parsed_error.message,
12259                            ),
12260                        )
12261                    }
12262                    "ServiceFailure" => {
12263                        return RusotoError::Service(
12264                            AddClientIDToOpenIDConnectProviderError::ServiceFailure(
12265                                parsed_error.message,
12266                            ),
12267                        )
12268                    }
12269                    _ => {}
12270                }
12271            }
12272        }
12273        RusotoError::Unknown(res)
12274    }
12275
12276    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12277    where
12278        T: Peek + Next,
12279    {
12280        xml_util::start_element("ErrorResponse", stack)?;
12281        XmlErrorDeserializer::deserialize("Error", stack)
12282    }
12283}
12284impl fmt::Display for AddClientIDToOpenIDConnectProviderError {
12285    #[allow(unused_variables)]
12286    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12287        match *self {
12288            AddClientIDToOpenIDConnectProviderError::InvalidInput(ref cause) => {
12289                write!(f, "{}", cause)
12290            }
12291            AddClientIDToOpenIDConnectProviderError::LimitExceeded(ref cause) => {
12292                write!(f, "{}", cause)
12293            }
12294            AddClientIDToOpenIDConnectProviderError::NoSuchEntity(ref cause) => {
12295                write!(f, "{}", cause)
12296            }
12297            AddClientIDToOpenIDConnectProviderError::ServiceFailure(ref cause) => {
12298                write!(f, "{}", cause)
12299            }
12300        }
12301    }
12302}
12303impl Error for AddClientIDToOpenIDConnectProviderError {}
12304/// Errors returned by AddRoleToInstanceProfile
12305#[derive(Debug, PartialEq)]
12306pub enum AddRoleToInstanceProfileError {
12307    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
12308    EntityAlreadyExists(String),
12309    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12310    LimitExceeded(String),
12311    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12312    NoSuchEntity(String),
12313    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12314    ServiceFailure(String),
12315    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
12316    UnmodifiableEntity(String),
12317}
12318
12319impl AddRoleToInstanceProfileError {
12320    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AddRoleToInstanceProfileError> {
12321        {
12322            let reader = EventReader::new(res.body.as_ref());
12323            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12324            find_start_element(&mut stack);
12325            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12326                match &parsed_error.code[..] {
12327                    "EntityAlreadyExists" => {
12328                        return RusotoError::Service(
12329                            AddRoleToInstanceProfileError::EntityAlreadyExists(
12330                                parsed_error.message,
12331                            ),
12332                        )
12333                    }
12334                    "LimitExceeded" => {
12335                        return RusotoError::Service(AddRoleToInstanceProfileError::LimitExceeded(
12336                            parsed_error.message,
12337                        ))
12338                    }
12339                    "NoSuchEntity" => {
12340                        return RusotoError::Service(AddRoleToInstanceProfileError::NoSuchEntity(
12341                            parsed_error.message,
12342                        ))
12343                    }
12344                    "ServiceFailure" => {
12345                        return RusotoError::Service(AddRoleToInstanceProfileError::ServiceFailure(
12346                            parsed_error.message,
12347                        ))
12348                    }
12349                    "UnmodifiableEntity" => {
12350                        return RusotoError::Service(
12351                            AddRoleToInstanceProfileError::UnmodifiableEntity(parsed_error.message),
12352                        )
12353                    }
12354                    _ => {}
12355                }
12356            }
12357        }
12358        RusotoError::Unknown(res)
12359    }
12360
12361    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12362    where
12363        T: Peek + Next,
12364    {
12365        xml_util::start_element("ErrorResponse", stack)?;
12366        XmlErrorDeserializer::deserialize("Error", stack)
12367    }
12368}
12369impl fmt::Display for AddRoleToInstanceProfileError {
12370    #[allow(unused_variables)]
12371    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12372        match *self {
12373            AddRoleToInstanceProfileError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
12374            AddRoleToInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12375            AddRoleToInstanceProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
12376            AddRoleToInstanceProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12377            AddRoleToInstanceProfileError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
12378        }
12379    }
12380}
12381impl Error for AddRoleToInstanceProfileError {}
12382/// Errors returned by AddUserToGroup
12383#[derive(Debug, PartialEq)]
12384pub enum AddUserToGroupError {
12385    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12386    LimitExceeded(String),
12387    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12388    NoSuchEntity(String),
12389    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12390    ServiceFailure(String),
12391}
12392
12393impl AddUserToGroupError {
12394    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AddUserToGroupError> {
12395        {
12396            let reader = EventReader::new(res.body.as_ref());
12397            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12398            find_start_element(&mut stack);
12399            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12400                match &parsed_error.code[..] {
12401                    "LimitExceeded" => {
12402                        return RusotoError::Service(AddUserToGroupError::LimitExceeded(
12403                            parsed_error.message,
12404                        ))
12405                    }
12406                    "NoSuchEntity" => {
12407                        return RusotoError::Service(AddUserToGroupError::NoSuchEntity(
12408                            parsed_error.message,
12409                        ))
12410                    }
12411                    "ServiceFailure" => {
12412                        return RusotoError::Service(AddUserToGroupError::ServiceFailure(
12413                            parsed_error.message,
12414                        ))
12415                    }
12416                    _ => {}
12417                }
12418            }
12419        }
12420        RusotoError::Unknown(res)
12421    }
12422
12423    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12424    where
12425        T: Peek + Next,
12426    {
12427        xml_util::start_element("ErrorResponse", stack)?;
12428        XmlErrorDeserializer::deserialize("Error", stack)
12429    }
12430}
12431impl fmt::Display for AddUserToGroupError {
12432    #[allow(unused_variables)]
12433    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12434        match *self {
12435            AddUserToGroupError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12436            AddUserToGroupError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
12437            AddUserToGroupError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12438        }
12439    }
12440}
12441impl Error for AddUserToGroupError {}
12442/// Errors returned by AttachGroupPolicy
12443#[derive(Debug, PartialEq)]
12444pub enum AttachGroupPolicyError {
12445    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
12446    InvalidInput(String),
12447    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12448    LimitExceeded(String),
12449    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12450    NoSuchEntity(String),
12451    /// <p>The request failed because AWS service role policies can only be attached to the service-linked role for that service.</p>
12452    PolicyNotAttachable(String),
12453    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12454    ServiceFailure(String),
12455}
12456
12457impl AttachGroupPolicyError {
12458    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AttachGroupPolicyError> {
12459        {
12460            let reader = EventReader::new(res.body.as_ref());
12461            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12462            find_start_element(&mut stack);
12463            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12464                match &parsed_error.code[..] {
12465                    "InvalidInput" => {
12466                        return RusotoError::Service(AttachGroupPolicyError::InvalidInput(
12467                            parsed_error.message,
12468                        ))
12469                    }
12470                    "LimitExceeded" => {
12471                        return RusotoError::Service(AttachGroupPolicyError::LimitExceeded(
12472                            parsed_error.message,
12473                        ))
12474                    }
12475                    "NoSuchEntity" => {
12476                        return RusotoError::Service(AttachGroupPolicyError::NoSuchEntity(
12477                            parsed_error.message,
12478                        ))
12479                    }
12480                    "PolicyNotAttachable" => {
12481                        return RusotoError::Service(AttachGroupPolicyError::PolicyNotAttachable(
12482                            parsed_error.message,
12483                        ))
12484                    }
12485                    "ServiceFailure" => {
12486                        return RusotoError::Service(AttachGroupPolicyError::ServiceFailure(
12487                            parsed_error.message,
12488                        ))
12489                    }
12490                    _ => {}
12491                }
12492            }
12493        }
12494        RusotoError::Unknown(res)
12495    }
12496
12497    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12498    where
12499        T: Peek + Next,
12500    {
12501        xml_util::start_element("ErrorResponse", stack)?;
12502        XmlErrorDeserializer::deserialize("Error", stack)
12503    }
12504}
12505impl fmt::Display for AttachGroupPolicyError {
12506    #[allow(unused_variables)]
12507    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12508        match *self {
12509            AttachGroupPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
12510            AttachGroupPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12511            AttachGroupPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
12512            AttachGroupPolicyError::PolicyNotAttachable(ref cause) => write!(f, "{}", cause),
12513            AttachGroupPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12514        }
12515    }
12516}
12517impl Error for AttachGroupPolicyError {}
12518/// Errors returned by AttachRolePolicy
12519#[derive(Debug, PartialEq)]
12520pub enum AttachRolePolicyError {
12521    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
12522    InvalidInput(String),
12523    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12524    LimitExceeded(String),
12525    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12526    NoSuchEntity(String),
12527    /// <p>The request failed because AWS service role policies can only be attached to the service-linked role for that service.</p>
12528    PolicyNotAttachable(String),
12529    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12530    ServiceFailure(String),
12531    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
12532    UnmodifiableEntity(String),
12533}
12534
12535impl AttachRolePolicyError {
12536    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AttachRolePolicyError> {
12537        {
12538            let reader = EventReader::new(res.body.as_ref());
12539            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12540            find_start_element(&mut stack);
12541            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12542                match &parsed_error.code[..] {
12543                    "InvalidInput" => {
12544                        return RusotoError::Service(AttachRolePolicyError::InvalidInput(
12545                            parsed_error.message,
12546                        ))
12547                    }
12548                    "LimitExceeded" => {
12549                        return RusotoError::Service(AttachRolePolicyError::LimitExceeded(
12550                            parsed_error.message,
12551                        ))
12552                    }
12553                    "NoSuchEntity" => {
12554                        return RusotoError::Service(AttachRolePolicyError::NoSuchEntity(
12555                            parsed_error.message,
12556                        ))
12557                    }
12558                    "PolicyNotAttachable" => {
12559                        return RusotoError::Service(AttachRolePolicyError::PolicyNotAttachable(
12560                            parsed_error.message,
12561                        ))
12562                    }
12563                    "ServiceFailure" => {
12564                        return RusotoError::Service(AttachRolePolicyError::ServiceFailure(
12565                            parsed_error.message,
12566                        ))
12567                    }
12568                    "UnmodifiableEntity" => {
12569                        return RusotoError::Service(AttachRolePolicyError::UnmodifiableEntity(
12570                            parsed_error.message,
12571                        ))
12572                    }
12573                    _ => {}
12574                }
12575            }
12576        }
12577        RusotoError::Unknown(res)
12578    }
12579
12580    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12581    where
12582        T: Peek + Next,
12583    {
12584        xml_util::start_element("ErrorResponse", stack)?;
12585        XmlErrorDeserializer::deserialize("Error", stack)
12586    }
12587}
12588impl fmt::Display for AttachRolePolicyError {
12589    #[allow(unused_variables)]
12590    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12591        match *self {
12592            AttachRolePolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
12593            AttachRolePolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12594            AttachRolePolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
12595            AttachRolePolicyError::PolicyNotAttachable(ref cause) => write!(f, "{}", cause),
12596            AttachRolePolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12597            AttachRolePolicyError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
12598        }
12599    }
12600}
12601impl Error for AttachRolePolicyError {}
12602/// Errors returned by AttachUserPolicy
12603#[derive(Debug, PartialEq)]
12604pub enum AttachUserPolicyError {
12605    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
12606    InvalidInput(String),
12607    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12608    LimitExceeded(String),
12609    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12610    NoSuchEntity(String),
12611    /// <p>The request failed because AWS service role policies can only be attached to the service-linked role for that service.</p>
12612    PolicyNotAttachable(String),
12613    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12614    ServiceFailure(String),
12615}
12616
12617impl AttachUserPolicyError {
12618    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AttachUserPolicyError> {
12619        {
12620            let reader = EventReader::new(res.body.as_ref());
12621            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12622            find_start_element(&mut stack);
12623            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12624                match &parsed_error.code[..] {
12625                    "InvalidInput" => {
12626                        return RusotoError::Service(AttachUserPolicyError::InvalidInput(
12627                            parsed_error.message,
12628                        ))
12629                    }
12630                    "LimitExceeded" => {
12631                        return RusotoError::Service(AttachUserPolicyError::LimitExceeded(
12632                            parsed_error.message,
12633                        ))
12634                    }
12635                    "NoSuchEntity" => {
12636                        return RusotoError::Service(AttachUserPolicyError::NoSuchEntity(
12637                            parsed_error.message,
12638                        ))
12639                    }
12640                    "PolicyNotAttachable" => {
12641                        return RusotoError::Service(AttachUserPolicyError::PolicyNotAttachable(
12642                            parsed_error.message,
12643                        ))
12644                    }
12645                    "ServiceFailure" => {
12646                        return RusotoError::Service(AttachUserPolicyError::ServiceFailure(
12647                            parsed_error.message,
12648                        ))
12649                    }
12650                    _ => {}
12651                }
12652            }
12653        }
12654        RusotoError::Unknown(res)
12655    }
12656
12657    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12658    where
12659        T: Peek + Next,
12660    {
12661        xml_util::start_element("ErrorResponse", stack)?;
12662        XmlErrorDeserializer::deserialize("Error", stack)
12663    }
12664}
12665impl fmt::Display for AttachUserPolicyError {
12666    #[allow(unused_variables)]
12667    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12668        match *self {
12669            AttachUserPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
12670            AttachUserPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12671            AttachUserPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
12672            AttachUserPolicyError::PolicyNotAttachable(ref cause) => write!(f, "{}", cause),
12673            AttachUserPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12674        }
12675    }
12676}
12677impl Error for AttachUserPolicyError {}
12678/// Errors returned by ChangePassword
12679#[derive(Debug, PartialEq)]
12680pub enum ChangePasswordError {
12681    /// <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>
12682    EntityTemporarilyUnmodifiable(String),
12683    /// <p>The request was rejected because the type of user for the transaction was incorrect.</p>
12684    InvalidUserType(String),
12685    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12686    LimitExceeded(String),
12687    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12688    NoSuchEntity(String),
12689    /// <p>The request was rejected because the provided password did not meet the requirements imposed by the account password policy.</p>
12690    PasswordPolicyViolation(String),
12691    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12692    ServiceFailure(String),
12693}
12694
12695impl ChangePasswordError {
12696    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ChangePasswordError> {
12697        {
12698            let reader = EventReader::new(res.body.as_ref());
12699            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12700            find_start_element(&mut stack);
12701            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12702                match &parsed_error.code[..] {
12703                    "EntityTemporarilyUnmodifiable" => {
12704                        return RusotoError::Service(
12705                            ChangePasswordError::EntityTemporarilyUnmodifiable(
12706                                parsed_error.message,
12707                            ),
12708                        )
12709                    }
12710                    "InvalidUserType" => {
12711                        return RusotoError::Service(ChangePasswordError::InvalidUserType(
12712                            parsed_error.message,
12713                        ))
12714                    }
12715                    "LimitExceeded" => {
12716                        return RusotoError::Service(ChangePasswordError::LimitExceeded(
12717                            parsed_error.message,
12718                        ))
12719                    }
12720                    "NoSuchEntity" => {
12721                        return RusotoError::Service(ChangePasswordError::NoSuchEntity(
12722                            parsed_error.message,
12723                        ))
12724                    }
12725                    "PasswordPolicyViolation" => {
12726                        return RusotoError::Service(ChangePasswordError::PasswordPolicyViolation(
12727                            parsed_error.message,
12728                        ))
12729                    }
12730                    "ServiceFailure" => {
12731                        return RusotoError::Service(ChangePasswordError::ServiceFailure(
12732                            parsed_error.message,
12733                        ))
12734                    }
12735                    _ => {}
12736                }
12737            }
12738        }
12739        RusotoError::Unknown(res)
12740    }
12741
12742    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12743    where
12744        T: Peek + Next,
12745    {
12746        xml_util::start_element("ErrorResponse", stack)?;
12747        XmlErrorDeserializer::deserialize("Error", stack)
12748    }
12749}
12750impl fmt::Display for ChangePasswordError {
12751    #[allow(unused_variables)]
12752    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12753        match *self {
12754            ChangePasswordError::EntityTemporarilyUnmodifiable(ref cause) => write!(f, "{}", cause),
12755            ChangePasswordError::InvalidUserType(ref cause) => write!(f, "{}", cause),
12756            ChangePasswordError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12757            ChangePasswordError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
12758            ChangePasswordError::PasswordPolicyViolation(ref cause) => write!(f, "{}", cause),
12759            ChangePasswordError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12760        }
12761    }
12762}
12763impl Error for ChangePasswordError {}
12764/// Errors returned by CreateAccessKey
12765#[derive(Debug, PartialEq)]
12766pub enum CreateAccessKeyError {
12767    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12768    LimitExceeded(String),
12769    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12770    NoSuchEntity(String),
12771    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12772    ServiceFailure(String),
12773}
12774
12775impl CreateAccessKeyError {
12776    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateAccessKeyError> {
12777        {
12778            let reader = EventReader::new(res.body.as_ref());
12779            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12780            find_start_element(&mut stack);
12781            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12782                match &parsed_error.code[..] {
12783                    "LimitExceeded" => {
12784                        return RusotoError::Service(CreateAccessKeyError::LimitExceeded(
12785                            parsed_error.message,
12786                        ))
12787                    }
12788                    "NoSuchEntity" => {
12789                        return RusotoError::Service(CreateAccessKeyError::NoSuchEntity(
12790                            parsed_error.message,
12791                        ))
12792                    }
12793                    "ServiceFailure" => {
12794                        return RusotoError::Service(CreateAccessKeyError::ServiceFailure(
12795                            parsed_error.message,
12796                        ))
12797                    }
12798                    _ => {}
12799                }
12800            }
12801        }
12802        RusotoError::Unknown(res)
12803    }
12804
12805    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12806    where
12807        T: Peek + Next,
12808    {
12809        xml_util::start_element("ErrorResponse", stack)?;
12810        XmlErrorDeserializer::deserialize("Error", stack)
12811    }
12812}
12813impl fmt::Display for CreateAccessKeyError {
12814    #[allow(unused_variables)]
12815    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12816        match *self {
12817            CreateAccessKeyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12818            CreateAccessKeyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
12819            CreateAccessKeyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12820        }
12821    }
12822}
12823impl Error for CreateAccessKeyError {}
12824/// Errors returned by CreateAccountAlias
12825#[derive(Debug, PartialEq)]
12826pub enum CreateAccountAliasError {
12827    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
12828    EntityAlreadyExists(String),
12829    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12830    LimitExceeded(String),
12831    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12832    ServiceFailure(String),
12833}
12834
12835impl CreateAccountAliasError {
12836    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateAccountAliasError> {
12837        {
12838            let reader = EventReader::new(res.body.as_ref());
12839            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12840            find_start_element(&mut stack);
12841            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12842                match &parsed_error.code[..] {
12843                    "EntityAlreadyExists" => {
12844                        return RusotoError::Service(CreateAccountAliasError::EntityAlreadyExists(
12845                            parsed_error.message,
12846                        ))
12847                    }
12848                    "LimitExceeded" => {
12849                        return RusotoError::Service(CreateAccountAliasError::LimitExceeded(
12850                            parsed_error.message,
12851                        ))
12852                    }
12853                    "ServiceFailure" => {
12854                        return RusotoError::Service(CreateAccountAliasError::ServiceFailure(
12855                            parsed_error.message,
12856                        ))
12857                    }
12858                    _ => {}
12859                }
12860            }
12861        }
12862        RusotoError::Unknown(res)
12863    }
12864
12865    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12866    where
12867        T: Peek + Next,
12868    {
12869        xml_util::start_element("ErrorResponse", stack)?;
12870        XmlErrorDeserializer::deserialize("Error", stack)
12871    }
12872}
12873impl fmt::Display for CreateAccountAliasError {
12874    #[allow(unused_variables)]
12875    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12876        match *self {
12877            CreateAccountAliasError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
12878            CreateAccountAliasError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12879            CreateAccountAliasError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12880        }
12881    }
12882}
12883impl Error for CreateAccountAliasError {}
12884/// Errors returned by CreateGroup
12885#[derive(Debug, PartialEq)]
12886pub enum CreateGroupError {
12887    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
12888    EntityAlreadyExists(String),
12889    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12890    LimitExceeded(String),
12891    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
12892    NoSuchEntity(String),
12893    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12894    ServiceFailure(String),
12895}
12896
12897impl CreateGroupError {
12898    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateGroupError> {
12899        {
12900            let reader = EventReader::new(res.body.as_ref());
12901            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12902            find_start_element(&mut stack);
12903            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12904                match &parsed_error.code[..] {
12905                    "EntityAlreadyExists" => {
12906                        return RusotoError::Service(CreateGroupError::EntityAlreadyExists(
12907                            parsed_error.message,
12908                        ))
12909                    }
12910                    "LimitExceeded" => {
12911                        return RusotoError::Service(CreateGroupError::LimitExceeded(
12912                            parsed_error.message,
12913                        ))
12914                    }
12915                    "NoSuchEntity" => {
12916                        return RusotoError::Service(CreateGroupError::NoSuchEntity(
12917                            parsed_error.message,
12918                        ))
12919                    }
12920                    "ServiceFailure" => {
12921                        return RusotoError::Service(CreateGroupError::ServiceFailure(
12922                            parsed_error.message,
12923                        ))
12924                    }
12925                    _ => {}
12926                }
12927            }
12928        }
12929        RusotoError::Unknown(res)
12930    }
12931
12932    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
12933    where
12934        T: Peek + Next,
12935    {
12936        xml_util::start_element("ErrorResponse", stack)?;
12937        XmlErrorDeserializer::deserialize("Error", stack)
12938    }
12939}
12940impl fmt::Display for CreateGroupError {
12941    #[allow(unused_variables)]
12942    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12943        match *self {
12944            CreateGroupError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
12945            CreateGroupError::LimitExceeded(ref cause) => write!(f, "{}", cause),
12946            CreateGroupError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
12947            CreateGroupError::ServiceFailure(ref cause) => write!(f, "{}", cause),
12948        }
12949    }
12950}
12951impl Error for CreateGroupError {}
12952/// Errors returned by CreateInstanceProfile
12953#[derive(Debug, PartialEq)]
12954pub enum CreateInstanceProfileError {
12955    /// <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>
12956    ConcurrentModification(String),
12957    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
12958    EntityAlreadyExists(String),
12959    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
12960    InvalidInput(String),
12961    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
12962    LimitExceeded(String),
12963    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
12964    ServiceFailure(String),
12965}
12966
12967impl CreateInstanceProfileError {
12968    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateInstanceProfileError> {
12969        {
12970            let reader = EventReader::new(res.body.as_ref());
12971            let mut stack = XmlResponse::new(reader.into_iter().peekable());
12972            find_start_element(&mut stack);
12973            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
12974                match &parsed_error.code[..] {
12975                    "ConcurrentModification" => {
12976                        return RusotoError::Service(
12977                            CreateInstanceProfileError::ConcurrentModification(
12978                                parsed_error.message,
12979                            ),
12980                        )
12981                    }
12982                    "EntityAlreadyExists" => {
12983                        return RusotoError::Service(
12984                            CreateInstanceProfileError::EntityAlreadyExists(parsed_error.message),
12985                        )
12986                    }
12987                    "InvalidInput" => {
12988                        return RusotoError::Service(CreateInstanceProfileError::InvalidInput(
12989                            parsed_error.message,
12990                        ))
12991                    }
12992                    "LimitExceeded" => {
12993                        return RusotoError::Service(CreateInstanceProfileError::LimitExceeded(
12994                            parsed_error.message,
12995                        ))
12996                    }
12997                    "ServiceFailure" => {
12998                        return RusotoError::Service(CreateInstanceProfileError::ServiceFailure(
12999                            parsed_error.message,
13000                        ))
13001                    }
13002                    _ => {}
13003                }
13004            }
13005        }
13006        RusotoError::Unknown(res)
13007    }
13008
13009    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13010    where
13011        T: Peek + Next,
13012    {
13013        xml_util::start_element("ErrorResponse", stack)?;
13014        XmlErrorDeserializer::deserialize("Error", stack)
13015    }
13016}
13017impl fmt::Display for CreateInstanceProfileError {
13018    #[allow(unused_variables)]
13019    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13020        match *self {
13021            CreateInstanceProfileError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
13022            CreateInstanceProfileError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
13023            CreateInstanceProfileError::InvalidInput(ref cause) => write!(f, "{}", cause),
13024            CreateInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13025            CreateInstanceProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13026        }
13027    }
13028}
13029impl Error for CreateInstanceProfileError {}
13030/// Errors returned by CreateLoginProfile
13031#[derive(Debug, PartialEq)]
13032pub enum CreateLoginProfileError {
13033    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
13034    EntityAlreadyExists(String),
13035    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13036    LimitExceeded(String),
13037    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
13038    NoSuchEntity(String),
13039    /// <p>The request was rejected because the provided password did not meet the requirements imposed by the account password policy.</p>
13040    PasswordPolicyViolation(String),
13041    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13042    ServiceFailure(String),
13043}
13044
13045impl CreateLoginProfileError {
13046    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateLoginProfileError> {
13047        {
13048            let reader = EventReader::new(res.body.as_ref());
13049            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13050            find_start_element(&mut stack);
13051            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13052                match &parsed_error.code[..] {
13053                    "EntityAlreadyExists" => {
13054                        return RusotoError::Service(CreateLoginProfileError::EntityAlreadyExists(
13055                            parsed_error.message,
13056                        ))
13057                    }
13058                    "LimitExceeded" => {
13059                        return RusotoError::Service(CreateLoginProfileError::LimitExceeded(
13060                            parsed_error.message,
13061                        ))
13062                    }
13063                    "NoSuchEntity" => {
13064                        return RusotoError::Service(CreateLoginProfileError::NoSuchEntity(
13065                            parsed_error.message,
13066                        ))
13067                    }
13068                    "PasswordPolicyViolation" => {
13069                        return RusotoError::Service(
13070                            CreateLoginProfileError::PasswordPolicyViolation(parsed_error.message),
13071                        )
13072                    }
13073                    "ServiceFailure" => {
13074                        return RusotoError::Service(CreateLoginProfileError::ServiceFailure(
13075                            parsed_error.message,
13076                        ))
13077                    }
13078                    _ => {}
13079                }
13080            }
13081        }
13082        RusotoError::Unknown(res)
13083    }
13084
13085    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13086    where
13087        T: Peek + Next,
13088    {
13089        xml_util::start_element("ErrorResponse", stack)?;
13090        XmlErrorDeserializer::deserialize("Error", stack)
13091    }
13092}
13093impl fmt::Display for CreateLoginProfileError {
13094    #[allow(unused_variables)]
13095    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13096        match *self {
13097            CreateLoginProfileError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
13098            CreateLoginProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13099            CreateLoginProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
13100            CreateLoginProfileError::PasswordPolicyViolation(ref cause) => write!(f, "{}", cause),
13101            CreateLoginProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13102        }
13103    }
13104}
13105impl Error for CreateLoginProfileError {}
13106/// Errors returned by CreateOpenIDConnectProvider
13107#[derive(Debug, PartialEq)]
13108pub enum CreateOpenIDConnectProviderError {
13109    /// <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>
13110    ConcurrentModification(String),
13111    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
13112    EntityAlreadyExists(String),
13113    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
13114    InvalidInput(String),
13115    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13116    LimitExceeded(String),
13117    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13118    ServiceFailure(String),
13119}
13120
13121impl CreateOpenIDConnectProviderError {
13122    pub fn from_response(
13123        res: BufferedHttpResponse,
13124    ) -> RusotoError<CreateOpenIDConnectProviderError> {
13125        {
13126            let reader = EventReader::new(res.body.as_ref());
13127            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13128            find_start_element(&mut stack);
13129            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13130                match &parsed_error.code[..] {
13131                    "ConcurrentModification" => {
13132                        return RusotoError::Service(
13133                            CreateOpenIDConnectProviderError::ConcurrentModification(
13134                                parsed_error.message,
13135                            ),
13136                        )
13137                    }
13138                    "EntityAlreadyExists" => {
13139                        return RusotoError::Service(
13140                            CreateOpenIDConnectProviderError::EntityAlreadyExists(
13141                                parsed_error.message,
13142                            ),
13143                        )
13144                    }
13145                    "InvalidInput" => {
13146                        return RusotoError::Service(
13147                            CreateOpenIDConnectProviderError::InvalidInput(parsed_error.message),
13148                        )
13149                    }
13150                    "LimitExceeded" => {
13151                        return RusotoError::Service(
13152                            CreateOpenIDConnectProviderError::LimitExceeded(parsed_error.message),
13153                        )
13154                    }
13155                    "ServiceFailure" => {
13156                        return RusotoError::Service(
13157                            CreateOpenIDConnectProviderError::ServiceFailure(parsed_error.message),
13158                        )
13159                    }
13160                    _ => {}
13161                }
13162            }
13163        }
13164        RusotoError::Unknown(res)
13165    }
13166
13167    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13168    where
13169        T: Peek + Next,
13170    {
13171        xml_util::start_element("ErrorResponse", stack)?;
13172        XmlErrorDeserializer::deserialize("Error", stack)
13173    }
13174}
13175impl fmt::Display for CreateOpenIDConnectProviderError {
13176    #[allow(unused_variables)]
13177    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13178        match *self {
13179            CreateOpenIDConnectProviderError::ConcurrentModification(ref cause) => {
13180                write!(f, "{}", cause)
13181            }
13182            CreateOpenIDConnectProviderError::EntityAlreadyExists(ref cause) => {
13183                write!(f, "{}", cause)
13184            }
13185            CreateOpenIDConnectProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
13186            CreateOpenIDConnectProviderError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13187            CreateOpenIDConnectProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13188        }
13189    }
13190}
13191impl Error for CreateOpenIDConnectProviderError {}
13192/// Errors returned by CreatePolicy
13193#[derive(Debug, PartialEq)]
13194pub enum CreatePolicyError {
13195    /// <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>
13196    ConcurrentModification(String),
13197    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
13198    EntityAlreadyExists(String),
13199    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
13200    InvalidInput(String),
13201    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13202    LimitExceeded(String),
13203    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
13204    MalformedPolicyDocument(String),
13205    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13206    ServiceFailure(String),
13207}
13208
13209impl CreatePolicyError {
13210    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreatePolicyError> {
13211        {
13212            let reader = EventReader::new(res.body.as_ref());
13213            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13214            find_start_element(&mut stack);
13215            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13216                match &parsed_error.code[..] {
13217                    "ConcurrentModification" => {
13218                        return RusotoError::Service(CreatePolicyError::ConcurrentModification(
13219                            parsed_error.message,
13220                        ))
13221                    }
13222                    "EntityAlreadyExists" => {
13223                        return RusotoError::Service(CreatePolicyError::EntityAlreadyExists(
13224                            parsed_error.message,
13225                        ))
13226                    }
13227                    "InvalidInput" => {
13228                        return RusotoError::Service(CreatePolicyError::InvalidInput(
13229                            parsed_error.message,
13230                        ))
13231                    }
13232                    "LimitExceeded" => {
13233                        return RusotoError::Service(CreatePolicyError::LimitExceeded(
13234                            parsed_error.message,
13235                        ))
13236                    }
13237                    "MalformedPolicyDocument" => {
13238                        return RusotoError::Service(CreatePolicyError::MalformedPolicyDocument(
13239                            parsed_error.message,
13240                        ))
13241                    }
13242                    "ServiceFailure" => {
13243                        return RusotoError::Service(CreatePolicyError::ServiceFailure(
13244                            parsed_error.message,
13245                        ))
13246                    }
13247                    _ => {}
13248                }
13249            }
13250        }
13251        RusotoError::Unknown(res)
13252    }
13253
13254    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13255    where
13256        T: Peek + Next,
13257    {
13258        xml_util::start_element("ErrorResponse", stack)?;
13259        XmlErrorDeserializer::deserialize("Error", stack)
13260    }
13261}
13262impl fmt::Display for CreatePolicyError {
13263    #[allow(unused_variables)]
13264    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13265        match *self {
13266            CreatePolicyError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
13267            CreatePolicyError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
13268            CreatePolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
13269            CreatePolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13270            CreatePolicyError::MalformedPolicyDocument(ref cause) => write!(f, "{}", cause),
13271            CreatePolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13272        }
13273    }
13274}
13275impl Error for CreatePolicyError {}
13276/// Errors returned by CreatePolicyVersion
13277#[derive(Debug, PartialEq)]
13278pub enum CreatePolicyVersionError {
13279    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
13280    InvalidInput(String),
13281    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13282    LimitExceeded(String),
13283    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
13284    MalformedPolicyDocument(String),
13285    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
13286    NoSuchEntity(String),
13287    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13288    ServiceFailure(String),
13289}
13290
13291impl CreatePolicyVersionError {
13292    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreatePolicyVersionError> {
13293        {
13294            let reader = EventReader::new(res.body.as_ref());
13295            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13296            find_start_element(&mut stack);
13297            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13298                match &parsed_error.code[..] {
13299                    "InvalidInput" => {
13300                        return RusotoError::Service(CreatePolicyVersionError::InvalidInput(
13301                            parsed_error.message,
13302                        ))
13303                    }
13304                    "LimitExceeded" => {
13305                        return RusotoError::Service(CreatePolicyVersionError::LimitExceeded(
13306                            parsed_error.message,
13307                        ))
13308                    }
13309                    "MalformedPolicyDocument" => {
13310                        return RusotoError::Service(
13311                            CreatePolicyVersionError::MalformedPolicyDocument(parsed_error.message),
13312                        )
13313                    }
13314                    "NoSuchEntity" => {
13315                        return RusotoError::Service(CreatePolicyVersionError::NoSuchEntity(
13316                            parsed_error.message,
13317                        ))
13318                    }
13319                    "ServiceFailure" => {
13320                        return RusotoError::Service(CreatePolicyVersionError::ServiceFailure(
13321                            parsed_error.message,
13322                        ))
13323                    }
13324                    _ => {}
13325                }
13326            }
13327        }
13328        RusotoError::Unknown(res)
13329    }
13330
13331    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13332    where
13333        T: Peek + Next,
13334    {
13335        xml_util::start_element("ErrorResponse", stack)?;
13336        XmlErrorDeserializer::deserialize("Error", stack)
13337    }
13338}
13339impl fmt::Display for CreatePolicyVersionError {
13340    #[allow(unused_variables)]
13341    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13342        match *self {
13343            CreatePolicyVersionError::InvalidInput(ref cause) => write!(f, "{}", cause),
13344            CreatePolicyVersionError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13345            CreatePolicyVersionError::MalformedPolicyDocument(ref cause) => write!(f, "{}", cause),
13346            CreatePolicyVersionError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
13347            CreatePolicyVersionError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13348        }
13349    }
13350}
13351impl Error for CreatePolicyVersionError {}
13352/// Errors returned by CreateRole
13353#[derive(Debug, PartialEq)]
13354pub enum CreateRoleError {
13355    /// <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>
13356    ConcurrentModification(String),
13357    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
13358    EntityAlreadyExists(String),
13359    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
13360    InvalidInput(String),
13361    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13362    LimitExceeded(String),
13363    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
13364    MalformedPolicyDocument(String),
13365    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13366    ServiceFailure(String),
13367}
13368
13369impl CreateRoleError {
13370    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateRoleError> {
13371        {
13372            let reader = EventReader::new(res.body.as_ref());
13373            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13374            find_start_element(&mut stack);
13375            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13376                match &parsed_error.code[..] {
13377                    "ConcurrentModification" => {
13378                        return RusotoError::Service(CreateRoleError::ConcurrentModification(
13379                            parsed_error.message,
13380                        ))
13381                    }
13382                    "EntityAlreadyExists" => {
13383                        return RusotoError::Service(CreateRoleError::EntityAlreadyExists(
13384                            parsed_error.message,
13385                        ))
13386                    }
13387                    "InvalidInput" => {
13388                        return RusotoError::Service(CreateRoleError::InvalidInput(
13389                            parsed_error.message,
13390                        ))
13391                    }
13392                    "LimitExceeded" => {
13393                        return RusotoError::Service(CreateRoleError::LimitExceeded(
13394                            parsed_error.message,
13395                        ))
13396                    }
13397                    "MalformedPolicyDocument" => {
13398                        return RusotoError::Service(CreateRoleError::MalformedPolicyDocument(
13399                            parsed_error.message,
13400                        ))
13401                    }
13402                    "ServiceFailure" => {
13403                        return RusotoError::Service(CreateRoleError::ServiceFailure(
13404                            parsed_error.message,
13405                        ))
13406                    }
13407                    _ => {}
13408                }
13409            }
13410        }
13411        RusotoError::Unknown(res)
13412    }
13413
13414    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13415    where
13416        T: Peek + Next,
13417    {
13418        xml_util::start_element("ErrorResponse", stack)?;
13419        XmlErrorDeserializer::deserialize("Error", stack)
13420    }
13421}
13422impl fmt::Display for CreateRoleError {
13423    #[allow(unused_variables)]
13424    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13425        match *self {
13426            CreateRoleError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
13427            CreateRoleError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
13428            CreateRoleError::InvalidInput(ref cause) => write!(f, "{}", cause),
13429            CreateRoleError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13430            CreateRoleError::MalformedPolicyDocument(ref cause) => write!(f, "{}", cause),
13431            CreateRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13432        }
13433    }
13434}
13435impl Error for CreateRoleError {}
13436/// Errors returned by CreateSAMLProvider
13437#[derive(Debug, PartialEq)]
13438pub enum CreateSAMLProviderError {
13439    /// <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>
13440    ConcurrentModification(String),
13441    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
13442    EntityAlreadyExists(String),
13443    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
13444    InvalidInput(String),
13445    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13446    LimitExceeded(String),
13447    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13448    ServiceFailure(String),
13449}
13450
13451impl CreateSAMLProviderError {
13452    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateSAMLProviderError> {
13453        {
13454            let reader = EventReader::new(res.body.as_ref());
13455            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13456            find_start_element(&mut stack);
13457            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13458                match &parsed_error.code[..] {
13459                    "ConcurrentModification" => {
13460                        return RusotoError::Service(
13461                            CreateSAMLProviderError::ConcurrentModification(parsed_error.message),
13462                        )
13463                    }
13464                    "EntityAlreadyExists" => {
13465                        return RusotoError::Service(CreateSAMLProviderError::EntityAlreadyExists(
13466                            parsed_error.message,
13467                        ))
13468                    }
13469                    "InvalidInput" => {
13470                        return RusotoError::Service(CreateSAMLProviderError::InvalidInput(
13471                            parsed_error.message,
13472                        ))
13473                    }
13474                    "LimitExceeded" => {
13475                        return RusotoError::Service(CreateSAMLProviderError::LimitExceeded(
13476                            parsed_error.message,
13477                        ))
13478                    }
13479                    "ServiceFailure" => {
13480                        return RusotoError::Service(CreateSAMLProviderError::ServiceFailure(
13481                            parsed_error.message,
13482                        ))
13483                    }
13484                    _ => {}
13485                }
13486            }
13487        }
13488        RusotoError::Unknown(res)
13489    }
13490
13491    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13492    where
13493        T: Peek + Next,
13494    {
13495        xml_util::start_element("ErrorResponse", stack)?;
13496        XmlErrorDeserializer::deserialize("Error", stack)
13497    }
13498}
13499impl fmt::Display for CreateSAMLProviderError {
13500    #[allow(unused_variables)]
13501    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13502        match *self {
13503            CreateSAMLProviderError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
13504            CreateSAMLProviderError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
13505            CreateSAMLProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
13506            CreateSAMLProviderError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13507            CreateSAMLProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13508        }
13509    }
13510}
13511impl Error for CreateSAMLProviderError {}
13512/// Errors returned by CreateServiceLinkedRole
13513#[derive(Debug, PartialEq)]
13514pub enum CreateServiceLinkedRoleError {
13515    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
13516    InvalidInput(String),
13517    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13518    LimitExceeded(String),
13519    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
13520    NoSuchEntity(String),
13521    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13522    ServiceFailure(String),
13523}
13524
13525impl CreateServiceLinkedRoleError {
13526    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateServiceLinkedRoleError> {
13527        {
13528            let reader = EventReader::new(res.body.as_ref());
13529            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13530            find_start_element(&mut stack);
13531            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13532                match &parsed_error.code[..] {
13533                    "InvalidInput" => {
13534                        return RusotoError::Service(CreateServiceLinkedRoleError::InvalidInput(
13535                            parsed_error.message,
13536                        ))
13537                    }
13538                    "LimitExceeded" => {
13539                        return RusotoError::Service(CreateServiceLinkedRoleError::LimitExceeded(
13540                            parsed_error.message,
13541                        ))
13542                    }
13543                    "NoSuchEntity" => {
13544                        return RusotoError::Service(CreateServiceLinkedRoleError::NoSuchEntity(
13545                            parsed_error.message,
13546                        ))
13547                    }
13548                    "ServiceFailure" => {
13549                        return RusotoError::Service(CreateServiceLinkedRoleError::ServiceFailure(
13550                            parsed_error.message,
13551                        ))
13552                    }
13553                    _ => {}
13554                }
13555            }
13556        }
13557        RusotoError::Unknown(res)
13558    }
13559
13560    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13561    where
13562        T: Peek + Next,
13563    {
13564        xml_util::start_element("ErrorResponse", stack)?;
13565        XmlErrorDeserializer::deserialize("Error", stack)
13566    }
13567}
13568impl fmt::Display for CreateServiceLinkedRoleError {
13569    #[allow(unused_variables)]
13570    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13571        match *self {
13572            CreateServiceLinkedRoleError::InvalidInput(ref cause) => write!(f, "{}", cause),
13573            CreateServiceLinkedRoleError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13574            CreateServiceLinkedRoleError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
13575            CreateServiceLinkedRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13576        }
13577    }
13578}
13579impl Error for CreateServiceLinkedRoleError {}
13580/// Errors returned by CreateServiceSpecificCredential
13581#[derive(Debug, PartialEq)]
13582pub enum CreateServiceSpecificCredentialError {
13583    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13584    LimitExceeded(String),
13585    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
13586    NoSuchEntity(String),
13587    /// <p>The specified service does not support service-specific credentials.</p>
13588    ServiceNotSupported(String),
13589}
13590
13591impl CreateServiceSpecificCredentialError {
13592    pub fn from_response(
13593        res: BufferedHttpResponse,
13594    ) -> RusotoError<CreateServiceSpecificCredentialError> {
13595        {
13596            let reader = EventReader::new(res.body.as_ref());
13597            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13598            find_start_element(&mut stack);
13599            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13600                match &parsed_error.code[..] {
13601                    "LimitExceeded" => {
13602                        return RusotoError::Service(
13603                            CreateServiceSpecificCredentialError::LimitExceeded(
13604                                parsed_error.message,
13605                            ),
13606                        )
13607                    }
13608                    "NoSuchEntity" => {
13609                        return RusotoError::Service(
13610                            CreateServiceSpecificCredentialError::NoSuchEntity(
13611                                parsed_error.message,
13612                            ),
13613                        )
13614                    }
13615                    "NotSupportedService" => {
13616                        return RusotoError::Service(
13617                            CreateServiceSpecificCredentialError::ServiceNotSupported(
13618                                parsed_error.message,
13619                            ),
13620                        )
13621                    }
13622                    _ => {}
13623                }
13624            }
13625        }
13626        RusotoError::Unknown(res)
13627    }
13628
13629    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13630    where
13631        T: Peek + Next,
13632    {
13633        xml_util::start_element("ErrorResponse", stack)?;
13634        XmlErrorDeserializer::deserialize("Error", stack)
13635    }
13636}
13637impl fmt::Display for CreateServiceSpecificCredentialError {
13638    #[allow(unused_variables)]
13639    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13640        match *self {
13641            CreateServiceSpecificCredentialError::LimitExceeded(ref cause) => {
13642                write!(f, "{}", cause)
13643            }
13644            CreateServiceSpecificCredentialError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
13645            CreateServiceSpecificCredentialError::ServiceNotSupported(ref cause) => {
13646                write!(f, "{}", cause)
13647            }
13648        }
13649    }
13650}
13651impl Error for CreateServiceSpecificCredentialError {}
13652/// Errors returned by CreateUser
13653#[derive(Debug, PartialEq)]
13654pub enum CreateUserError {
13655    /// <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>
13656    ConcurrentModification(String),
13657    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
13658    EntityAlreadyExists(String),
13659    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
13660    InvalidInput(String),
13661    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13662    LimitExceeded(String),
13663    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
13664    NoSuchEntity(String),
13665    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13666    ServiceFailure(String),
13667}
13668
13669impl CreateUserError {
13670    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateUserError> {
13671        {
13672            let reader = EventReader::new(res.body.as_ref());
13673            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13674            find_start_element(&mut stack);
13675            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13676                match &parsed_error.code[..] {
13677                    "ConcurrentModification" => {
13678                        return RusotoError::Service(CreateUserError::ConcurrentModification(
13679                            parsed_error.message,
13680                        ))
13681                    }
13682                    "EntityAlreadyExists" => {
13683                        return RusotoError::Service(CreateUserError::EntityAlreadyExists(
13684                            parsed_error.message,
13685                        ))
13686                    }
13687                    "InvalidInput" => {
13688                        return RusotoError::Service(CreateUserError::InvalidInput(
13689                            parsed_error.message,
13690                        ))
13691                    }
13692                    "LimitExceeded" => {
13693                        return RusotoError::Service(CreateUserError::LimitExceeded(
13694                            parsed_error.message,
13695                        ))
13696                    }
13697                    "NoSuchEntity" => {
13698                        return RusotoError::Service(CreateUserError::NoSuchEntity(
13699                            parsed_error.message,
13700                        ))
13701                    }
13702                    "ServiceFailure" => {
13703                        return RusotoError::Service(CreateUserError::ServiceFailure(
13704                            parsed_error.message,
13705                        ))
13706                    }
13707                    _ => {}
13708                }
13709            }
13710        }
13711        RusotoError::Unknown(res)
13712    }
13713
13714    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13715    where
13716        T: Peek + Next,
13717    {
13718        xml_util::start_element("ErrorResponse", stack)?;
13719        XmlErrorDeserializer::deserialize("Error", stack)
13720    }
13721}
13722impl fmt::Display for CreateUserError {
13723    #[allow(unused_variables)]
13724    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13725        match *self {
13726            CreateUserError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
13727            CreateUserError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
13728            CreateUserError::InvalidInput(ref cause) => write!(f, "{}", cause),
13729            CreateUserError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13730            CreateUserError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
13731            CreateUserError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13732        }
13733    }
13734}
13735impl Error for CreateUserError {}
13736/// Errors returned by CreateVirtualMFADevice
13737#[derive(Debug, PartialEq)]
13738pub enum CreateVirtualMFADeviceError {
13739    /// <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>
13740    ConcurrentModification(String),
13741    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
13742    EntityAlreadyExists(String),
13743    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
13744    InvalidInput(String),
13745    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13746    LimitExceeded(String),
13747    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13748    ServiceFailure(String),
13749}
13750
13751impl CreateVirtualMFADeviceError {
13752    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateVirtualMFADeviceError> {
13753        {
13754            let reader = EventReader::new(res.body.as_ref());
13755            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13756            find_start_element(&mut stack);
13757            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13758                match &parsed_error.code[..] {
13759                    "ConcurrentModification" => {
13760                        return RusotoError::Service(
13761                            CreateVirtualMFADeviceError::ConcurrentModification(
13762                                parsed_error.message,
13763                            ),
13764                        )
13765                    }
13766                    "EntityAlreadyExists" => {
13767                        return RusotoError::Service(
13768                            CreateVirtualMFADeviceError::EntityAlreadyExists(parsed_error.message),
13769                        )
13770                    }
13771                    "InvalidInput" => {
13772                        return RusotoError::Service(CreateVirtualMFADeviceError::InvalidInput(
13773                            parsed_error.message,
13774                        ))
13775                    }
13776                    "LimitExceeded" => {
13777                        return RusotoError::Service(CreateVirtualMFADeviceError::LimitExceeded(
13778                            parsed_error.message,
13779                        ))
13780                    }
13781                    "ServiceFailure" => {
13782                        return RusotoError::Service(CreateVirtualMFADeviceError::ServiceFailure(
13783                            parsed_error.message,
13784                        ))
13785                    }
13786                    _ => {}
13787                }
13788            }
13789        }
13790        RusotoError::Unknown(res)
13791    }
13792
13793    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13794    where
13795        T: Peek + Next,
13796    {
13797        xml_util::start_element("ErrorResponse", stack)?;
13798        XmlErrorDeserializer::deserialize("Error", stack)
13799    }
13800}
13801impl fmt::Display for CreateVirtualMFADeviceError {
13802    #[allow(unused_variables)]
13803    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13804        match *self {
13805            CreateVirtualMFADeviceError::ConcurrentModification(ref cause) => {
13806                write!(f, "{}", cause)
13807            }
13808            CreateVirtualMFADeviceError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
13809            CreateVirtualMFADeviceError::InvalidInput(ref cause) => write!(f, "{}", cause),
13810            CreateVirtualMFADeviceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13811            CreateVirtualMFADeviceError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13812        }
13813    }
13814}
13815impl Error for CreateVirtualMFADeviceError {}
13816/// Errors returned by DeactivateMFADevice
13817#[derive(Debug, PartialEq)]
13818pub enum DeactivateMFADeviceError {
13819    /// <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>
13820    EntityTemporarilyUnmodifiable(String),
13821    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13822    LimitExceeded(String),
13823    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
13824    NoSuchEntity(String),
13825    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13826    ServiceFailure(String),
13827}
13828
13829impl DeactivateMFADeviceError {
13830    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeactivateMFADeviceError> {
13831        {
13832            let reader = EventReader::new(res.body.as_ref());
13833            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13834            find_start_element(&mut stack);
13835            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13836                match &parsed_error.code[..] {
13837                    "EntityTemporarilyUnmodifiable" => {
13838                        return RusotoError::Service(
13839                            DeactivateMFADeviceError::EntityTemporarilyUnmodifiable(
13840                                parsed_error.message,
13841                            ),
13842                        )
13843                    }
13844                    "LimitExceeded" => {
13845                        return RusotoError::Service(DeactivateMFADeviceError::LimitExceeded(
13846                            parsed_error.message,
13847                        ))
13848                    }
13849                    "NoSuchEntity" => {
13850                        return RusotoError::Service(DeactivateMFADeviceError::NoSuchEntity(
13851                            parsed_error.message,
13852                        ))
13853                    }
13854                    "ServiceFailure" => {
13855                        return RusotoError::Service(DeactivateMFADeviceError::ServiceFailure(
13856                            parsed_error.message,
13857                        ))
13858                    }
13859                    _ => {}
13860                }
13861            }
13862        }
13863        RusotoError::Unknown(res)
13864    }
13865
13866    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13867    where
13868        T: Peek + Next,
13869    {
13870        xml_util::start_element("ErrorResponse", stack)?;
13871        XmlErrorDeserializer::deserialize("Error", stack)
13872    }
13873}
13874impl fmt::Display for DeactivateMFADeviceError {
13875    #[allow(unused_variables)]
13876    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13877        match *self {
13878            DeactivateMFADeviceError::EntityTemporarilyUnmodifiable(ref cause) => {
13879                write!(f, "{}", cause)
13880            }
13881            DeactivateMFADeviceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13882            DeactivateMFADeviceError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
13883            DeactivateMFADeviceError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13884        }
13885    }
13886}
13887impl Error for DeactivateMFADeviceError {}
13888/// Errors returned by DeleteAccessKey
13889#[derive(Debug, PartialEq)]
13890pub enum DeleteAccessKeyError {
13891    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13892    LimitExceeded(String),
13893    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
13894    NoSuchEntity(String),
13895    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13896    ServiceFailure(String),
13897}
13898
13899impl DeleteAccessKeyError {
13900    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteAccessKeyError> {
13901        {
13902            let reader = EventReader::new(res.body.as_ref());
13903            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13904            find_start_element(&mut stack);
13905            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13906                match &parsed_error.code[..] {
13907                    "LimitExceeded" => {
13908                        return RusotoError::Service(DeleteAccessKeyError::LimitExceeded(
13909                            parsed_error.message,
13910                        ))
13911                    }
13912                    "NoSuchEntity" => {
13913                        return RusotoError::Service(DeleteAccessKeyError::NoSuchEntity(
13914                            parsed_error.message,
13915                        ))
13916                    }
13917                    "ServiceFailure" => {
13918                        return RusotoError::Service(DeleteAccessKeyError::ServiceFailure(
13919                            parsed_error.message,
13920                        ))
13921                    }
13922                    _ => {}
13923                }
13924            }
13925        }
13926        RusotoError::Unknown(res)
13927    }
13928
13929    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13930    where
13931        T: Peek + Next,
13932    {
13933        xml_util::start_element("ErrorResponse", stack)?;
13934        XmlErrorDeserializer::deserialize("Error", stack)
13935    }
13936}
13937impl fmt::Display for DeleteAccessKeyError {
13938    #[allow(unused_variables)]
13939    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13940        match *self {
13941            DeleteAccessKeyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
13942            DeleteAccessKeyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
13943            DeleteAccessKeyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
13944        }
13945    }
13946}
13947impl Error for DeleteAccessKeyError {}
13948/// Errors returned by DeleteAccountAlias
13949#[derive(Debug, PartialEq)]
13950pub enum DeleteAccountAliasError {
13951    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
13952    LimitExceeded(String),
13953    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
13954    NoSuchEntity(String),
13955    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
13956    ServiceFailure(String),
13957}
13958
13959impl DeleteAccountAliasError {
13960    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteAccountAliasError> {
13961        {
13962            let reader = EventReader::new(res.body.as_ref());
13963            let mut stack = XmlResponse::new(reader.into_iter().peekable());
13964            find_start_element(&mut stack);
13965            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
13966                match &parsed_error.code[..] {
13967                    "LimitExceeded" => {
13968                        return RusotoError::Service(DeleteAccountAliasError::LimitExceeded(
13969                            parsed_error.message,
13970                        ))
13971                    }
13972                    "NoSuchEntity" => {
13973                        return RusotoError::Service(DeleteAccountAliasError::NoSuchEntity(
13974                            parsed_error.message,
13975                        ))
13976                    }
13977                    "ServiceFailure" => {
13978                        return RusotoError::Service(DeleteAccountAliasError::ServiceFailure(
13979                            parsed_error.message,
13980                        ))
13981                    }
13982                    _ => {}
13983                }
13984            }
13985        }
13986        RusotoError::Unknown(res)
13987    }
13988
13989    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
13990    where
13991        T: Peek + Next,
13992    {
13993        xml_util::start_element("ErrorResponse", stack)?;
13994        XmlErrorDeserializer::deserialize("Error", stack)
13995    }
13996}
13997impl fmt::Display for DeleteAccountAliasError {
13998    #[allow(unused_variables)]
13999    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14000        match *self {
14001            DeleteAccountAliasError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14002            DeleteAccountAliasError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14003            DeleteAccountAliasError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14004        }
14005    }
14006}
14007impl Error for DeleteAccountAliasError {}
14008/// Errors returned by DeleteAccountPasswordPolicy
14009#[derive(Debug, PartialEq)]
14010pub enum DeleteAccountPasswordPolicyError {
14011    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14012    LimitExceeded(String),
14013    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14014    NoSuchEntity(String),
14015    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14016    ServiceFailure(String),
14017}
14018
14019impl DeleteAccountPasswordPolicyError {
14020    pub fn from_response(
14021        res: BufferedHttpResponse,
14022    ) -> RusotoError<DeleteAccountPasswordPolicyError> {
14023        {
14024            let reader = EventReader::new(res.body.as_ref());
14025            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14026            find_start_element(&mut stack);
14027            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14028                match &parsed_error.code[..] {
14029                    "LimitExceeded" => {
14030                        return RusotoError::Service(
14031                            DeleteAccountPasswordPolicyError::LimitExceeded(parsed_error.message),
14032                        )
14033                    }
14034                    "NoSuchEntity" => {
14035                        return RusotoError::Service(
14036                            DeleteAccountPasswordPolicyError::NoSuchEntity(parsed_error.message),
14037                        )
14038                    }
14039                    "ServiceFailure" => {
14040                        return RusotoError::Service(
14041                            DeleteAccountPasswordPolicyError::ServiceFailure(parsed_error.message),
14042                        )
14043                    }
14044                    _ => {}
14045                }
14046            }
14047        }
14048        RusotoError::Unknown(res)
14049    }
14050
14051    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14052    where
14053        T: Peek + Next,
14054    {
14055        xml_util::start_element("ErrorResponse", stack)?;
14056        XmlErrorDeserializer::deserialize("Error", stack)
14057    }
14058}
14059impl fmt::Display for DeleteAccountPasswordPolicyError {
14060    #[allow(unused_variables)]
14061    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14062        match *self {
14063            DeleteAccountPasswordPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14064            DeleteAccountPasswordPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14065            DeleteAccountPasswordPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14066        }
14067    }
14068}
14069impl Error for DeleteAccountPasswordPolicyError {}
14070/// Errors returned by DeleteGroup
14071#[derive(Debug, PartialEq)]
14072pub enum DeleteGroupError {
14073    /// <p>The request was rejected because it attempted to delete a resource that has attached subordinate entities. The error message describes these entities.</p>
14074    DeleteConflict(String),
14075    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14076    LimitExceeded(String),
14077    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14078    NoSuchEntity(String),
14079    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14080    ServiceFailure(String),
14081}
14082
14083impl DeleteGroupError {
14084    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteGroupError> {
14085        {
14086            let reader = EventReader::new(res.body.as_ref());
14087            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14088            find_start_element(&mut stack);
14089            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14090                match &parsed_error.code[..] {
14091                    "DeleteConflict" => {
14092                        return RusotoError::Service(DeleteGroupError::DeleteConflict(
14093                            parsed_error.message,
14094                        ))
14095                    }
14096                    "LimitExceeded" => {
14097                        return RusotoError::Service(DeleteGroupError::LimitExceeded(
14098                            parsed_error.message,
14099                        ))
14100                    }
14101                    "NoSuchEntity" => {
14102                        return RusotoError::Service(DeleteGroupError::NoSuchEntity(
14103                            parsed_error.message,
14104                        ))
14105                    }
14106                    "ServiceFailure" => {
14107                        return RusotoError::Service(DeleteGroupError::ServiceFailure(
14108                            parsed_error.message,
14109                        ))
14110                    }
14111                    _ => {}
14112                }
14113            }
14114        }
14115        RusotoError::Unknown(res)
14116    }
14117
14118    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14119    where
14120        T: Peek + Next,
14121    {
14122        xml_util::start_element("ErrorResponse", stack)?;
14123        XmlErrorDeserializer::deserialize("Error", stack)
14124    }
14125}
14126impl fmt::Display for DeleteGroupError {
14127    #[allow(unused_variables)]
14128    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14129        match *self {
14130            DeleteGroupError::DeleteConflict(ref cause) => write!(f, "{}", cause),
14131            DeleteGroupError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14132            DeleteGroupError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14133            DeleteGroupError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14134        }
14135    }
14136}
14137impl Error for DeleteGroupError {}
14138/// Errors returned by DeleteGroupPolicy
14139#[derive(Debug, PartialEq)]
14140pub enum DeleteGroupPolicyError {
14141    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14142    LimitExceeded(String),
14143    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14144    NoSuchEntity(String),
14145    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14146    ServiceFailure(String),
14147}
14148
14149impl DeleteGroupPolicyError {
14150    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteGroupPolicyError> {
14151        {
14152            let reader = EventReader::new(res.body.as_ref());
14153            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14154            find_start_element(&mut stack);
14155            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14156                match &parsed_error.code[..] {
14157                    "LimitExceeded" => {
14158                        return RusotoError::Service(DeleteGroupPolicyError::LimitExceeded(
14159                            parsed_error.message,
14160                        ))
14161                    }
14162                    "NoSuchEntity" => {
14163                        return RusotoError::Service(DeleteGroupPolicyError::NoSuchEntity(
14164                            parsed_error.message,
14165                        ))
14166                    }
14167                    "ServiceFailure" => {
14168                        return RusotoError::Service(DeleteGroupPolicyError::ServiceFailure(
14169                            parsed_error.message,
14170                        ))
14171                    }
14172                    _ => {}
14173                }
14174            }
14175        }
14176        RusotoError::Unknown(res)
14177    }
14178
14179    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14180    where
14181        T: Peek + Next,
14182    {
14183        xml_util::start_element("ErrorResponse", stack)?;
14184        XmlErrorDeserializer::deserialize("Error", stack)
14185    }
14186}
14187impl fmt::Display for DeleteGroupPolicyError {
14188    #[allow(unused_variables)]
14189    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14190        match *self {
14191            DeleteGroupPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14192            DeleteGroupPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14193            DeleteGroupPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14194        }
14195    }
14196}
14197impl Error for DeleteGroupPolicyError {}
14198/// Errors returned by DeleteInstanceProfile
14199#[derive(Debug, PartialEq)]
14200pub enum DeleteInstanceProfileError {
14201    /// <p>The request was rejected because it attempted to delete a resource that has attached subordinate entities. The error message describes these entities.</p>
14202    DeleteConflict(String),
14203    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14204    LimitExceeded(String),
14205    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14206    NoSuchEntity(String),
14207    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14208    ServiceFailure(String),
14209}
14210
14211impl DeleteInstanceProfileError {
14212    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteInstanceProfileError> {
14213        {
14214            let reader = EventReader::new(res.body.as_ref());
14215            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14216            find_start_element(&mut stack);
14217            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14218                match &parsed_error.code[..] {
14219                    "DeleteConflict" => {
14220                        return RusotoError::Service(DeleteInstanceProfileError::DeleteConflict(
14221                            parsed_error.message,
14222                        ))
14223                    }
14224                    "LimitExceeded" => {
14225                        return RusotoError::Service(DeleteInstanceProfileError::LimitExceeded(
14226                            parsed_error.message,
14227                        ))
14228                    }
14229                    "NoSuchEntity" => {
14230                        return RusotoError::Service(DeleteInstanceProfileError::NoSuchEntity(
14231                            parsed_error.message,
14232                        ))
14233                    }
14234                    "ServiceFailure" => {
14235                        return RusotoError::Service(DeleteInstanceProfileError::ServiceFailure(
14236                            parsed_error.message,
14237                        ))
14238                    }
14239                    _ => {}
14240                }
14241            }
14242        }
14243        RusotoError::Unknown(res)
14244    }
14245
14246    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14247    where
14248        T: Peek + Next,
14249    {
14250        xml_util::start_element("ErrorResponse", stack)?;
14251        XmlErrorDeserializer::deserialize("Error", stack)
14252    }
14253}
14254impl fmt::Display for DeleteInstanceProfileError {
14255    #[allow(unused_variables)]
14256    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14257        match *self {
14258            DeleteInstanceProfileError::DeleteConflict(ref cause) => write!(f, "{}", cause),
14259            DeleteInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14260            DeleteInstanceProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14261            DeleteInstanceProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14262        }
14263    }
14264}
14265impl Error for DeleteInstanceProfileError {}
14266/// Errors returned by DeleteLoginProfile
14267#[derive(Debug, PartialEq)]
14268pub enum DeleteLoginProfileError {
14269    /// <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>
14270    EntityTemporarilyUnmodifiable(String),
14271    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14272    LimitExceeded(String),
14273    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14274    NoSuchEntity(String),
14275    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14276    ServiceFailure(String),
14277}
14278
14279impl DeleteLoginProfileError {
14280    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteLoginProfileError> {
14281        {
14282            let reader = EventReader::new(res.body.as_ref());
14283            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14284            find_start_element(&mut stack);
14285            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14286                match &parsed_error.code[..] {
14287                    "EntityTemporarilyUnmodifiable" => {
14288                        return RusotoError::Service(
14289                            DeleteLoginProfileError::EntityTemporarilyUnmodifiable(
14290                                parsed_error.message,
14291                            ),
14292                        )
14293                    }
14294                    "LimitExceeded" => {
14295                        return RusotoError::Service(DeleteLoginProfileError::LimitExceeded(
14296                            parsed_error.message,
14297                        ))
14298                    }
14299                    "NoSuchEntity" => {
14300                        return RusotoError::Service(DeleteLoginProfileError::NoSuchEntity(
14301                            parsed_error.message,
14302                        ))
14303                    }
14304                    "ServiceFailure" => {
14305                        return RusotoError::Service(DeleteLoginProfileError::ServiceFailure(
14306                            parsed_error.message,
14307                        ))
14308                    }
14309                    _ => {}
14310                }
14311            }
14312        }
14313        RusotoError::Unknown(res)
14314    }
14315
14316    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14317    where
14318        T: Peek + Next,
14319    {
14320        xml_util::start_element("ErrorResponse", stack)?;
14321        XmlErrorDeserializer::deserialize("Error", stack)
14322    }
14323}
14324impl fmt::Display for DeleteLoginProfileError {
14325    #[allow(unused_variables)]
14326    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14327        match *self {
14328            DeleteLoginProfileError::EntityTemporarilyUnmodifiable(ref cause) => {
14329                write!(f, "{}", cause)
14330            }
14331            DeleteLoginProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14332            DeleteLoginProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14333            DeleteLoginProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14334        }
14335    }
14336}
14337impl Error for DeleteLoginProfileError {}
14338/// Errors returned by DeleteOpenIDConnectProvider
14339#[derive(Debug, PartialEq)]
14340pub enum DeleteOpenIDConnectProviderError {
14341    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
14342    InvalidInput(String),
14343    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14344    NoSuchEntity(String),
14345    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14346    ServiceFailure(String),
14347}
14348
14349impl DeleteOpenIDConnectProviderError {
14350    pub fn from_response(
14351        res: BufferedHttpResponse,
14352    ) -> RusotoError<DeleteOpenIDConnectProviderError> {
14353        {
14354            let reader = EventReader::new(res.body.as_ref());
14355            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14356            find_start_element(&mut stack);
14357            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14358                match &parsed_error.code[..] {
14359                    "InvalidInput" => {
14360                        return RusotoError::Service(
14361                            DeleteOpenIDConnectProviderError::InvalidInput(parsed_error.message),
14362                        )
14363                    }
14364                    "NoSuchEntity" => {
14365                        return RusotoError::Service(
14366                            DeleteOpenIDConnectProviderError::NoSuchEntity(parsed_error.message),
14367                        )
14368                    }
14369                    "ServiceFailure" => {
14370                        return RusotoError::Service(
14371                            DeleteOpenIDConnectProviderError::ServiceFailure(parsed_error.message),
14372                        )
14373                    }
14374                    _ => {}
14375                }
14376            }
14377        }
14378        RusotoError::Unknown(res)
14379    }
14380
14381    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14382    where
14383        T: Peek + Next,
14384    {
14385        xml_util::start_element("ErrorResponse", stack)?;
14386        XmlErrorDeserializer::deserialize("Error", stack)
14387    }
14388}
14389impl fmt::Display for DeleteOpenIDConnectProviderError {
14390    #[allow(unused_variables)]
14391    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14392        match *self {
14393            DeleteOpenIDConnectProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
14394            DeleteOpenIDConnectProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14395            DeleteOpenIDConnectProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14396        }
14397    }
14398}
14399impl Error for DeleteOpenIDConnectProviderError {}
14400/// Errors returned by DeletePolicy
14401#[derive(Debug, PartialEq)]
14402pub enum DeletePolicyError {
14403    /// <p>The request was rejected because it attempted to delete a resource that has attached subordinate entities. The error message describes these entities.</p>
14404    DeleteConflict(String),
14405    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
14406    InvalidInput(String),
14407    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14408    LimitExceeded(String),
14409    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14410    NoSuchEntity(String),
14411    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14412    ServiceFailure(String),
14413}
14414
14415impl DeletePolicyError {
14416    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeletePolicyError> {
14417        {
14418            let reader = EventReader::new(res.body.as_ref());
14419            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14420            find_start_element(&mut stack);
14421            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14422                match &parsed_error.code[..] {
14423                    "DeleteConflict" => {
14424                        return RusotoError::Service(DeletePolicyError::DeleteConflict(
14425                            parsed_error.message,
14426                        ))
14427                    }
14428                    "InvalidInput" => {
14429                        return RusotoError::Service(DeletePolicyError::InvalidInput(
14430                            parsed_error.message,
14431                        ))
14432                    }
14433                    "LimitExceeded" => {
14434                        return RusotoError::Service(DeletePolicyError::LimitExceeded(
14435                            parsed_error.message,
14436                        ))
14437                    }
14438                    "NoSuchEntity" => {
14439                        return RusotoError::Service(DeletePolicyError::NoSuchEntity(
14440                            parsed_error.message,
14441                        ))
14442                    }
14443                    "ServiceFailure" => {
14444                        return RusotoError::Service(DeletePolicyError::ServiceFailure(
14445                            parsed_error.message,
14446                        ))
14447                    }
14448                    _ => {}
14449                }
14450            }
14451        }
14452        RusotoError::Unknown(res)
14453    }
14454
14455    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14456    where
14457        T: Peek + Next,
14458    {
14459        xml_util::start_element("ErrorResponse", stack)?;
14460        XmlErrorDeserializer::deserialize("Error", stack)
14461    }
14462}
14463impl fmt::Display for DeletePolicyError {
14464    #[allow(unused_variables)]
14465    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14466        match *self {
14467            DeletePolicyError::DeleteConflict(ref cause) => write!(f, "{}", cause),
14468            DeletePolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
14469            DeletePolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14470            DeletePolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14471            DeletePolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14472        }
14473    }
14474}
14475impl Error for DeletePolicyError {}
14476/// Errors returned by DeletePolicyVersion
14477#[derive(Debug, PartialEq)]
14478pub enum DeletePolicyVersionError {
14479    /// <p>The request was rejected because it attempted to delete a resource that has attached subordinate entities. The error message describes these entities.</p>
14480    DeleteConflict(String),
14481    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
14482    InvalidInput(String),
14483    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14484    LimitExceeded(String),
14485    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14486    NoSuchEntity(String),
14487    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14488    ServiceFailure(String),
14489}
14490
14491impl DeletePolicyVersionError {
14492    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeletePolicyVersionError> {
14493        {
14494            let reader = EventReader::new(res.body.as_ref());
14495            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14496            find_start_element(&mut stack);
14497            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14498                match &parsed_error.code[..] {
14499                    "DeleteConflict" => {
14500                        return RusotoError::Service(DeletePolicyVersionError::DeleteConflict(
14501                            parsed_error.message,
14502                        ))
14503                    }
14504                    "InvalidInput" => {
14505                        return RusotoError::Service(DeletePolicyVersionError::InvalidInput(
14506                            parsed_error.message,
14507                        ))
14508                    }
14509                    "LimitExceeded" => {
14510                        return RusotoError::Service(DeletePolicyVersionError::LimitExceeded(
14511                            parsed_error.message,
14512                        ))
14513                    }
14514                    "NoSuchEntity" => {
14515                        return RusotoError::Service(DeletePolicyVersionError::NoSuchEntity(
14516                            parsed_error.message,
14517                        ))
14518                    }
14519                    "ServiceFailure" => {
14520                        return RusotoError::Service(DeletePolicyVersionError::ServiceFailure(
14521                            parsed_error.message,
14522                        ))
14523                    }
14524                    _ => {}
14525                }
14526            }
14527        }
14528        RusotoError::Unknown(res)
14529    }
14530
14531    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14532    where
14533        T: Peek + Next,
14534    {
14535        xml_util::start_element("ErrorResponse", stack)?;
14536        XmlErrorDeserializer::deserialize("Error", stack)
14537    }
14538}
14539impl fmt::Display for DeletePolicyVersionError {
14540    #[allow(unused_variables)]
14541    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14542        match *self {
14543            DeletePolicyVersionError::DeleteConflict(ref cause) => write!(f, "{}", cause),
14544            DeletePolicyVersionError::InvalidInput(ref cause) => write!(f, "{}", cause),
14545            DeletePolicyVersionError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14546            DeletePolicyVersionError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14547            DeletePolicyVersionError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14548        }
14549    }
14550}
14551impl Error for DeletePolicyVersionError {}
14552/// Errors returned by DeleteRole
14553#[derive(Debug, PartialEq)]
14554pub enum DeleteRoleError {
14555    /// <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>
14556    ConcurrentModification(String),
14557    /// <p>The request was rejected because it attempted to delete a resource that has attached subordinate entities. The error message describes these entities.</p>
14558    DeleteConflict(String),
14559    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14560    LimitExceeded(String),
14561    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14562    NoSuchEntity(String),
14563    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14564    ServiceFailure(String),
14565    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
14566    UnmodifiableEntity(String),
14567}
14568
14569impl DeleteRoleError {
14570    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteRoleError> {
14571        {
14572            let reader = EventReader::new(res.body.as_ref());
14573            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14574            find_start_element(&mut stack);
14575            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14576                match &parsed_error.code[..] {
14577                    "ConcurrentModification" => {
14578                        return RusotoError::Service(DeleteRoleError::ConcurrentModification(
14579                            parsed_error.message,
14580                        ))
14581                    }
14582                    "DeleteConflict" => {
14583                        return RusotoError::Service(DeleteRoleError::DeleteConflict(
14584                            parsed_error.message,
14585                        ))
14586                    }
14587                    "LimitExceeded" => {
14588                        return RusotoError::Service(DeleteRoleError::LimitExceeded(
14589                            parsed_error.message,
14590                        ))
14591                    }
14592                    "NoSuchEntity" => {
14593                        return RusotoError::Service(DeleteRoleError::NoSuchEntity(
14594                            parsed_error.message,
14595                        ))
14596                    }
14597                    "ServiceFailure" => {
14598                        return RusotoError::Service(DeleteRoleError::ServiceFailure(
14599                            parsed_error.message,
14600                        ))
14601                    }
14602                    "UnmodifiableEntity" => {
14603                        return RusotoError::Service(DeleteRoleError::UnmodifiableEntity(
14604                            parsed_error.message,
14605                        ))
14606                    }
14607                    _ => {}
14608                }
14609            }
14610        }
14611        RusotoError::Unknown(res)
14612    }
14613
14614    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14615    where
14616        T: Peek + Next,
14617    {
14618        xml_util::start_element("ErrorResponse", stack)?;
14619        XmlErrorDeserializer::deserialize("Error", stack)
14620    }
14621}
14622impl fmt::Display for DeleteRoleError {
14623    #[allow(unused_variables)]
14624    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14625        match *self {
14626            DeleteRoleError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
14627            DeleteRoleError::DeleteConflict(ref cause) => write!(f, "{}", cause),
14628            DeleteRoleError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14629            DeleteRoleError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14630            DeleteRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14631            DeleteRoleError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
14632        }
14633    }
14634}
14635impl Error for DeleteRoleError {}
14636/// Errors returned by DeleteRolePermissionsBoundary
14637#[derive(Debug, PartialEq)]
14638pub enum DeleteRolePermissionsBoundaryError {
14639    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14640    NoSuchEntity(String),
14641    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14642    ServiceFailure(String),
14643    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
14644    UnmodifiableEntity(String),
14645}
14646
14647impl DeleteRolePermissionsBoundaryError {
14648    pub fn from_response(
14649        res: BufferedHttpResponse,
14650    ) -> RusotoError<DeleteRolePermissionsBoundaryError> {
14651        {
14652            let reader = EventReader::new(res.body.as_ref());
14653            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14654            find_start_element(&mut stack);
14655            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14656                match &parsed_error.code[..] {
14657                    "NoSuchEntity" => {
14658                        return RusotoError::Service(
14659                            DeleteRolePermissionsBoundaryError::NoSuchEntity(parsed_error.message),
14660                        )
14661                    }
14662                    "ServiceFailure" => {
14663                        return RusotoError::Service(
14664                            DeleteRolePermissionsBoundaryError::ServiceFailure(
14665                                parsed_error.message,
14666                            ),
14667                        )
14668                    }
14669                    "UnmodifiableEntity" => {
14670                        return RusotoError::Service(
14671                            DeleteRolePermissionsBoundaryError::UnmodifiableEntity(
14672                                parsed_error.message,
14673                            ),
14674                        )
14675                    }
14676                    _ => {}
14677                }
14678            }
14679        }
14680        RusotoError::Unknown(res)
14681    }
14682
14683    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14684    where
14685        T: Peek + Next,
14686    {
14687        xml_util::start_element("ErrorResponse", stack)?;
14688        XmlErrorDeserializer::deserialize("Error", stack)
14689    }
14690}
14691impl fmt::Display for DeleteRolePermissionsBoundaryError {
14692    #[allow(unused_variables)]
14693    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14694        match *self {
14695            DeleteRolePermissionsBoundaryError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14696            DeleteRolePermissionsBoundaryError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14697            DeleteRolePermissionsBoundaryError::UnmodifiableEntity(ref cause) => {
14698                write!(f, "{}", cause)
14699            }
14700        }
14701    }
14702}
14703impl Error for DeleteRolePermissionsBoundaryError {}
14704/// Errors returned by DeleteRolePolicy
14705#[derive(Debug, PartialEq)]
14706pub enum DeleteRolePolicyError {
14707    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14708    LimitExceeded(String),
14709    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14710    NoSuchEntity(String),
14711    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14712    ServiceFailure(String),
14713    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
14714    UnmodifiableEntity(String),
14715}
14716
14717impl DeleteRolePolicyError {
14718    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteRolePolicyError> {
14719        {
14720            let reader = EventReader::new(res.body.as_ref());
14721            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14722            find_start_element(&mut stack);
14723            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14724                match &parsed_error.code[..] {
14725                    "LimitExceeded" => {
14726                        return RusotoError::Service(DeleteRolePolicyError::LimitExceeded(
14727                            parsed_error.message,
14728                        ))
14729                    }
14730                    "NoSuchEntity" => {
14731                        return RusotoError::Service(DeleteRolePolicyError::NoSuchEntity(
14732                            parsed_error.message,
14733                        ))
14734                    }
14735                    "ServiceFailure" => {
14736                        return RusotoError::Service(DeleteRolePolicyError::ServiceFailure(
14737                            parsed_error.message,
14738                        ))
14739                    }
14740                    "UnmodifiableEntity" => {
14741                        return RusotoError::Service(DeleteRolePolicyError::UnmodifiableEntity(
14742                            parsed_error.message,
14743                        ))
14744                    }
14745                    _ => {}
14746                }
14747            }
14748        }
14749        RusotoError::Unknown(res)
14750    }
14751
14752    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14753    where
14754        T: Peek + Next,
14755    {
14756        xml_util::start_element("ErrorResponse", stack)?;
14757        XmlErrorDeserializer::deserialize("Error", stack)
14758    }
14759}
14760impl fmt::Display for DeleteRolePolicyError {
14761    #[allow(unused_variables)]
14762    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14763        match *self {
14764            DeleteRolePolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14765            DeleteRolePolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14766            DeleteRolePolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14767            DeleteRolePolicyError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
14768        }
14769    }
14770}
14771impl Error for DeleteRolePolicyError {}
14772/// Errors returned by DeleteSAMLProvider
14773#[derive(Debug, PartialEq)]
14774pub enum DeleteSAMLProviderError {
14775    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
14776    InvalidInput(String),
14777    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14778    LimitExceeded(String),
14779    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14780    NoSuchEntity(String),
14781    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14782    ServiceFailure(String),
14783}
14784
14785impl DeleteSAMLProviderError {
14786    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteSAMLProviderError> {
14787        {
14788            let reader = EventReader::new(res.body.as_ref());
14789            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14790            find_start_element(&mut stack);
14791            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14792                match &parsed_error.code[..] {
14793                    "InvalidInput" => {
14794                        return RusotoError::Service(DeleteSAMLProviderError::InvalidInput(
14795                            parsed_error.message,
14796                        ))
14797                    }
14798                    "LimitExceeded" => {
14799                        return RusotoError::Service(DeleteSAMLProviderError::LimitExceeded(
14800                            parsed_error.message,
14801                        ))
14802                    }
14803                    "NoSuchEntity" => {
14804                        return RusotoError::Service(DeleteSAMLProviderError::NoSuchEntity(
14805                            parsed_error.message,
14806                        ))
14807                    }
14808                    "ServiceFailure" => {
14809                        return RusotoError::Service(DeleteSAMLProviderError::ServiceFailure(
14810                            parsed_error.message,
14811                        ))
14812                    }
14813                    _ => {}
14814                }
14815            }
14816        }
14817        RusotoError::Unknown(res)
14818    }
14819
14820    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14821    where
14822        T: Peek + Next,
14823    {
14824        xml_util::start_element("ErrorResponse", stack)?;
14825        XmlErrorDeserializer::deserialize("Error", stack)
14826    }
14827}
14828impl fmt::Display for DeleteSAMLProviderError {
14829    #[allow(unused_variables)]
14830    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14831        match *self {
14832            DeleteSAMLProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
14833            DeleteSAMLProviderError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14834            DeleteSAMLProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14835            DeleteSAMLProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14836        }
14837    }
14838}
14839impl Error for DeleteSAMLProviderError {}
14840/// Errors returned by DeleteSSHPublicKey
14841#[derive(Debug, PartialEq)]
14842pub enum DeleteSSHPublicKeyError {
14843    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14844    NoSuchEntity(String),
14845}
14846
14847impl DeleteSSHPublicKeyError {
14848    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteSSHPublicKeyError> {
14849        {
14850            let reader = EventReader::new(res.body.as_ref());
14851            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14852            find_start_element(&mut stack);
14853            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14854                match &parsed_error.code[..] {
14855                    "NoSuchEntity" => {
14856                        return RusotoError::Service(DeleteSSHPublicKeyError::NoSuchEntity(
14857                            parsed_error.message,
14858                        ))
14859                    }
14860                    _ => {}
14861                }
14862            }
14863        }
14864        RusotoError::Unknown(res)
14865    }
14866
14867    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14868    where
14869        T: Peek + Next,
14870    {
14871        xml_util::start_element("ErrorResponse", stack)?;
14872        XmlErrorDeserializer::deserialize("Error", stack)
14873    }
14874}
14875impl fmt::Display for DeleteSSHPublicKeyError {
14876    #[allow(unused_variables)]
14877    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14878        match *self {
14879            DeleteSSHPublicKeyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14880        }
14881    }
14882}
14883impl Error for DeleteSSHPublicKeyError {}
14884/// Errors returned by DeleteServerCertificate
14885#[derive(Debug, PartialEq)]
14886pub enum DeleteServerCertificateError {
14887    /// <p>The request was rejected because it attempted to delete a resource that has attached subordinate entities. The error message describes these entities.</p>
14888    DeleteConflict(String),
14889    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14890    LimitExceeded(String),
14891    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14892    NoSuchEntity(String),
14893    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14894    ServiceFailure(String),
14895}
14896
14897impl DeleteServerCertificateError {
14898    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteServerCertificateError> {
14899        {
14900            let reader = EventReader::new(res.body.as_ref());
14901            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14902            find_start_element(&mut stack);
14903            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14904                match &parsed_error.code[..] {
14905                    "DeleteConflict" => {
14906                        return RusotoError::Service(DeleteServerCertificateError::DeleteConflict(
14907                            parsed_error.message,
14908                        ))
14909                    }
14910                    "LimitExceeded" => {
14911                        return RusotoError::Service(DeleteServerCertificateError::LimitExceeded(
14912                            parsed_error.message,
14913                        ))
14914                    }
14915                    "NoSuchEntity" => {
14916                        return RusotoError::Service(DeleteServerCertificateError::NoSuchEntity(
14917                            parsed_error.message,
14918                        ))
14919                    }
14920                    "ServiceFailure" => {
14921                        return RusotoError::Service(DeleteServerCertificateError::ServiceFailure(
14922                            parsed_error.message,
14923                        ))
14924                    }
14925                    _ => {}
14926                }
14927            }
14928        }
14929        RusotoError::Unknown(res)
14930    }
14931
14932    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14933    where
14934        T: Peek + Next,
14935    {
14936        xml_util::start_element("ErrorResponse", stack)?;
14937        XmlErrorDeserializer::deserialize("Error", stack)
14938    }
14939}
14940impl fmt::Display for DeleteServerCertificateError {
14941    #[allow(unused_variables)]
14942    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
14943        match *self {
14944            DeleteServerCertificateError::DeleteConflict(ref cause) => write!(f, "{}", cause),
14945            DeleteServerCertificateError::LimitExceeded(ref cause) => write!(f, "{}", cause),
14946            DeleteServerCertificateError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
14947            DeleteServerCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
14948        }
14949    }
14950}
14951impl Error for DeleteServerCertificateError {}
14952/// Errors returned by DeleteServiceLinkedRole
14953#[derive(Debug, PartialEq)]
14954pub enum DeleteServiceLinkedRoleError {
14955    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
14956    LimitExceeded(String),
14957    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
14958    NoSuchEntity(String),
14959    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
14960    ServiceFailure(String),
14961}
14962
14963impl DeleteServiceLinkedRoleError {
14964    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteServiceLinkedRoleError> {
14965        {
14966            let reader = EventReader::new(res.body.as_ref());
14967            let mut stack = XmlResponse::new(reader.into_iter().peekable());
14968            find_start_element(&mut stack);
14969            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
14970                match &parsed_error.code[..] {
14971                    "LimitExceeded" => {
14972                        return RusotoError::Service(DeleteServiceLinkedRoleError::LimitExceeded(
14973                            parsed_error.message,
14974                        ))
14975                    }
14976                    "NoSuchEntity" => {
14977                        return RusotoError::Service(DeleteServiceLinkedRoleError::NoSuchEntity(
14978                            parsed_error.message,
14979                        ))
14980                    }
14981                    "ServiceFailure" => {
14982                        return RusotoError::Service(DeleteServiceLinkedRoleError::ServiceFailure(
14983                            parsed_error.message,
14984                        ))
14985                    }
14986                    _ => {}
14987                }
14988            }
14989        }
14990        RusotoError::Unknown(res)
14991    }
14992
14993    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
14994    where
14995        T: Peek + Next,
14996    {
14997        xml_util::start_element("ErrorResponse", stack)?;
14998        XmlErrorDeserializer::deserialize("Error", stack)
14999    }
15000}
15001impl fmt::Display for DeleteServiceLinkedRoleError {
15002    #[allow(unused_variables)]
15003    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15004        match *self {
15005            DeleteServiceLinkedRoleError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15006            DeleteServiceLinkedRoleError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15007            DeleteServiceLinkedRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15008        }
15009    }
15010}
15011impl Error for DeleteServiceLinkedRoleError {}
15012/// Errors returned by DeleteServiceSpecificCredential
15013#[derive(Debug, PartialEq)]
15014pub enum DeleteServiceSpecificCredentialError {
15015    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15016    NoSuchEntity(String),
15017}
15018
15019impl DeleteServiceSpecificCredentialError {
15020    pub fn from_response(
15021        res: BufferedHttpResponse,
15022    ) -> RusotoError<DeleteServiceSpecificCredentialError> {
15023        {
15024            let reader = EventReader::new(res.body.as_ref());
15025            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15026            find_start_element(&mut stack);
15027            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15028                match &parsed_error.code[..] {
15029                    "NoSuchEntity" => {
15030                        return RusotoError::Service(
15031                            DeleteServiceSpecificCredentialError::NoSuchEntity(
15032                                parsed_error.message,
15033                            ),
15034                        )
15035                    }
15036                    _ => {}
15037                }
15038            }
15039        }
15040        RusotoError::Unknown(res)
15041    }
15042
15043    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15044    where
15045        T: Peek + Next,
15046    {
15047        xml_util::start_element("ErrorResponse", stack)?;
15048        XmlErrorDeserializer::deserialize("Error", stack)
15049    }
15050}
15051impl fmt::Display for DeleteServiceSpecificCredentialError {
15052    #[allow(unused_variables)]
15053    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15054        match *self {
15055            DeleteServiceSpecificCredentialError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15056        }
15057    }
15058}
15059impl Error for DeleteServiceSpecificCredentialError {}
15060/// Errors returned by DeleteSigningCertificate
15061#[derive(Debug, PartialEq)]
15062pub enum DeleteSigningCertificateError {
15063    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15064    LimitExceeded(String),
15065    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15066    NoSuchEntity(String),
15067    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15068    ServiceFailure(String),
15069}
15070
15071impl DeleteSigningCertificateError {
15072    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteSigningCertificateError> {
15073        {
15074            let reader = EventReader::new(res.body.as_ref());
15075            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15076            find_start_element(&mut stack);
15077            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15078                match &parsed_error.code[..] {
15079                    "LimitExceeded" => {
15080                        return RusotoError::Service(DeleteSigningCertificateError::LimitExceeded(
15081                            parsed_error.message,
15082                        ))
15083                    }
15084                    "NoSuchEntity" => {
15085                        return RusotoError::Service(DeleteSigningCertificateError::NoSuchEntity(
15086                            parsed_error.message,
15087                        ))
15088                    }
15089                    "ServiceFailure" => {
15090                        return RusotoError::Service(DeleteSigningCertificateError::ServiceFailure(
15091                            parsed_error.message,
15092                        ))
15093                    }
15094                    _ => {}
15095                }
15096            }
15097        }
15098        RusotoError::Unknown(res)
15099    }
15100
15101    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15102    where
15103        T: Peek + Next,
15104    {
15105        xml_util::start_element("ErrorResponse", stack)?;
15106        XmlErrorDeserializer::deserialize("Error", stack)
15107    }
15108}
15109impl fmt::Display for DeleteSigningCertificateError {
15110    #[allow(unused_variables)]
15111    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15112        match *self {
15113            DeleteSigningCertificateError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15114            DeleteSigningCertificateError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15115            DeleteSigningCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15116        }
15117    }
15118}
15119impl Error for DeleteSigningCertificateError {}
15120/// Errors returned by DeleteUser
15121#[derive(Debug, PartialEq)]
15122pub enum DeleteUserError {
15123    /// <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>
15124    ConcurrentModification(String),
15125    /// <p>The request was rejected because it attempted to delete a resource that has attached subordinate entities. The error message describes these entities.</p>
15126    DeleteConflict(String),
15127    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15128    LimitExceeded(String),
15129    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15130    NoSuchEntity(String),
15131    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15132    ServiceFailure(String),
15133}
15134
15135impl DeleteUserError {
15136    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteUserError> {
15137        {
15138            let reader = EventReader::new(res.body.as_ref());
15139            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15140            find_start_element(&mut stack);
15141            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15142                match &parsed_error.code[..] {
15143                    "ConcurrentModification" => {
15144                        return RusotoError::Service(DeleteUserError::ConcurrentModification(
15145                            parsed_error.message,
15146                        ))
15147                    }
15148                    "DeleteConflict" => {
15149                        return RusotoError::Service(DeleteUserError::DeleteConflict(
15150                            parsed_error.message,
15151                        ))
15152                    }
15153                    "LimitExceeded" => {
15154                        return RusotoError::Service(DeleteUserError::LimitExceeded(
15155                            parsed_error.message,
15156                        ))
15157                    }
15158                    "NoSuchEntity" => {
15159                        return RusotoError::Service(DeleteUserError::NoSuchEntity(
15160                            parsed_error.message,
15161                        ))
15162                    }
15163                    "ServiceFailure" => {
15164                        return RusotoError::Service(DeleteUserError::ServiceFailure(
15165                            parsed_error.message,
15166                        ))
15167                    }
15168                    _ => {}
15169                }
15170            }
15171        }
15172        RusotoError::Unknown(res)
15173    }
15174
15175    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15176    where
15177        T: Peek + Next,
15178    {
15179        xml_util::start_element("ErrorResponse", stack)?;
15180        XmlErrorDeserializer::deserialize("Error", stack)
15181    }
15182}
15183impl fmt::Display for DeleteUserError {
15184    #[allow(unused_variables)]
15185    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15186        match *self {
15187            DeleteUserError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
15188            DeleteUserError::DeleteConflict(ref cause) => write!(f, "{}", cause),
15189            DeleteUserError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15190            DeleteUserError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15191            DeleteUserError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15192        }
15193    }
15194}
15195impl Error for DeleteUserError {}
15196/// Errors returned by DeleteUserPermissionsBoundary
15197#[derive(Debug, PartialEq)]
15198pub enum DeleteUserPermissionsBoundaryError {
15199    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15200    NoSuchEntity(String),
15201    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15202    ServiceFailure(String),
15203}
15204
15205impl DeleteUserPermissionsBoundaryError {
15206    pub fn from_response(
15207        res: BufferedHttpResponse,
15208    ) -> RusotoError<DeleteUserPermissionsBoundaryError> {
15209        {
15210            let reader = EventReader::new(res.body.as_ref());
15211            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15212            find_start_element(&mut stack);
15213            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15214                match &parsed_error.code[..] {
15215                    "NoSuchEntity" => {
15216                        return RusotoError::Service(
15217                            DeleteUserPermissionsBoundaryError::NoSuchEntity(parsed_error.message),
15218                        )
15219                    }
15220                    "ServiceFailure" => {
15221                        return RusotoError::Service(
15222                            DeleteUserPermissionsBoundaryError::ServiceFailure(
15223                                parsed_error.message,
15224                            ),
15225                        )
15226                    }
15227                    _ => {}
15228                }
15229            }
15230        }
15231        RusotoError::Unknown(res)
15232    }
15233
15234    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15235    where
15236        T: Peek + Next,
15237    {
15238        xml_util::start_element("ErrorResponse", stack)?;
15239        XmlErrorDeserializer::deserialize("Error", stack)
15240    }
15241}
15242impl fmt::Display for DeleteUserPermissionsBoundaryError {
15243    #[allow(unused_variables)]
15244    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15245        match *self {
15246            DeleteUserPermissionsBoundaryError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15247            DeleteUserPermissionsBoundaryError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15248        }
15249    }
15250}
15251impl Error for DeleteUserPermissionsBoundaryError {}
15252/// Errors returned by DeleteUserPolicy
15253#[derive(Debug, PartialEq)]
15254pub enum DeleteUserPolicyError {
15255    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15256    LimitExceeded(String),
15257    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15258    NoSuchEntity(String),
15259    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15260    ServiceFailure(String),
15261}
15262
15263impl DeleteUserPolicyError {
15264    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteUserPolicyError> {
15265        {
15266            let reader = EventReader::new(res.body.as_ref());
15267            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15268            find_start_element(&mut stack);
15269            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15270                match &parsed_error.code[..] {
15271                    "LimitExceeded" => {
15272                        return RusotoError::Service(DeleteUserPolicyError::LimitExceeded(
15273                            parsed_error.message,
15274                        ))
15275                    }
15276                    "NoSuchEntity" => {
15277                        return RusotoError::Service(DeleteUserPolicyError::NoSuchEntity(
15278                            parsed_error.message,
15279                        ))
15280                    }
15281                    "ServiceFailure" => {
15282                        return RusotoError::Service(DeleteUserPolicyError::ServiceFailure(
15283                            parsed_error.message,
15284                        ))
15285                    }
15286                    _ => {}
15287                }
15288            }
15289        }
15290        RusotoError::Unknown(res)
15291    }
15292
15293    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15294    where
15295        T: Peek + Next,
15296    {
15297        xml_util::start_element("ErrorResponse", stack)?;
15298        XmlErrorDeserializer::deserialize("Error", stack)
15299    }
15300}
15301impl fmt::Display for DeleteUserPolicyError {
15302    #[allow(unused_variables)]
15303    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15304        match *self {
15305            DeleteUserPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15306            DeleteUserPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15307            DeleteUserPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15308        }
15309    }
15310}
15311impl Error for DeleteUserPolicyError {}
15312/// Errors returned by DeleteVirtualMFADevice
15313#[derive(Debug, PartialEq)]
15314pub enum DeleteVirtualMFADeviceError {
15315    /// <p>The request was rejected because it attempted to delete a resource that has attached subordinate entities. The error message describes these entities.</p>
15316    DeleteConflict(String),
15317    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15318    LimitExceeded(String),
15319    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15320    NoSuchEntity(String),
15321    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15322    ServiceFailure(String),
15323}
15324
15325impl DeleteVirtualMFADeviceError {
15326    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteVirtualMFADeviceError> {
15327        {
15328            let reader = EventReader::new(res.body.as_ref());
15329            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15330            find_start_element(&mut stack);
15331            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15332                match &parsed_error.code[..] {
15333                    "DeleteConflict" => {
15334                        return RusotoError::Service(DeleteVirtualMFADeviceError::DeleteConflict(
15335                            parsed_error.message,
15336                        ))
15337                    }
15338                    "LimitExceeded" => {
15339                        return RusotoError::Service(DeleteVirtualMFADeviceError::LimitExceeded(
15340                            parsed_error.message,
15341                        ))
15342                    }
15343                    "NoSuchEntity" => {
15344                        return RusotoError::Service(DeleteVirtualMFADeviceError::NoSuchEntity(
15345                            parsed_error.message,
15346                        ))
15347                    }
15348                    "ServiceFailure" => {
15349                        return RusotoError::Service(DeleteVirtualMFADeviceError::ServiceFailure(
15350                            parsed_error.message,
15351                        ))
15352                    }
15353                    _ => {}
15354                }
15355            }
15356        }
15357        RusotoError::Unknown(res)
15358    }
15359
15360    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15361    where
15362        T: Peek + Next,
15363    {
15364        xml_util::start_element("ErrorResponse", stack)?;
15365        XmlErrorDeserializer::deserialize("Error", stack)
15366    }
15367}
15368impl fmt::Display for DeleteVirtualMFADeviceError {
15369    #[allow(unused_variables)]
15370    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15371        match *self {
15372            DeleteVirtualMFADeviceError::DeleteConflict(ref cause) => write!(f, "{}", cause),
15373            DeleteVirtualMFADeviceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15374            DeleteVirtualMFADeviceError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15375            DeleteVirtualMFADeviceError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15376        }
15377    }
15378}
15379impl Error for DeleteVirtualMFADeviceError {}
15380/// Errors returned by DetachGroupPolicy
15381#[derive(Debug, PartialEq)]
15382pub enum DetachGroupPolicyError {
15383    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
15384    InvalidInput(String),
15385    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15386    LimitExceeded(String),
15387    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15388    NoSuchEntity(String),
15389    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15390    ServiceFailure(String),
15391}
15392
15393impl DetachGroupPolicyError {
15394    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DetachGroupPolicyError> {
15395        {
15396            let reader = EventReader::new(res.body.as_ref());
15397            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15398            find_start_element(&mut stack);
15399            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15400                match &parsed_error.code[..] {
15401                    "InvalidInput" => {
15402                        return RusotoError::Service(DetachGroupPolicyError::InvalidInput(
15403                            parsed_error.message,
15404                        ))
15405                    }
15406                    "LimitExceeded" => {
15407                        return RusotoError::Service(DetachGroupPolicyError::LimitExceeded(
15408                            parsed_error.message,
15409                        ))
15410                    }
15411                    "NoSuchEntity" => {
15412                        return RusotoError::Service(DetachGroupPolicyError::NoSuchEntity(
15413                            parsed_error.message,
15414                        ))
15415                    }
15416                    "ServiceFailure" => {
15417                        return RusotoError::Service(DetachGroupPolicyError::ServiceFailure(
15418                            parsed_error.message,
15419                        ))
15420                    }
15421                    _ => {}
15422                }
15423            }
15424        }
15425        RusotoError::Unknown(res)
15426    }
15427
15428    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15429    where
15430        T: Peek + Next,
15431    {
15432        xml_util::start_element("ErrorResponse", stack)?;
15433        XmlErrorDeserializer::deserialize("Error", stack)
15434    }
15435}
15436impl fmt::Display for DetachGroupPolicyError {
15437    #[allow(unused_variables)]
15438    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15439        match *self {
15440            DetachGroupPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
15441            DetachGroupPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15442            DetachGroupPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15443            DetachGroupPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15444        }
15445    }
15446}
15447impl Error for DetachGroupPolicyError {}
15448/// Errors returned by DetachRolePolicy
15449#[derive(Debug, PartialEq)]
15450pub enum DetachRolePolicyError {
15451    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
15452    InvalidInput(String),
15453    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15454    LimitExceeded(String),
15455    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15456    NoSuchEntity(String),
15457    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15458    ServiceFailure(String),
15459    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
15460    UnmodifiableEntity(String),
15461}
15462
15463impl DetachRolePolicyError {
15464    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DetachRolePolicyError> {
15465        {
15466            let reader = EventReader::new(res.body.as_ref());
15467            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15468            find_start_element(&mut stack);
15469            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15470                match &parsed_error.code[..] {
15471                    "InvalidInput" => {
15472                        return RusotoError::Service(DetachRolePolicyError::InvalidInput(
15473                            parsed_error.message,
15474                        ))
15475                    }
15476                    "LimitExceeded" => {
15477                        return RusotoError::Service(DetachRolePolicyError::LimitExceeded(
15478                            parsed_error.message,
15479                        ))
15480                    }
15481                    "NoSuchEntity" => {
15482                        return RusotoError::Service(DetachRolePolicyError::NoSuchEntity(
15483                            parsed_error.message,
15484                        ))
15485                    }
15486                    "ServiceFailure" => {
15487                        return RusotoError::Service(DetachRolePolicyError::ServiceFailure(
15488                            parsed_error.message,
15489                        ))
15490                    }
15491                    "UnmodifiableEntity" => {
15492                        return RusotoError::Service(DetachRolePolicyError::UnmodifiableEntity(
15493                            parsed_error.message,
15494                        ))
15495                    }
15496                    _ => {}
15497                }
15498            }
15499        }
15500        RusotoError::Unknown(res)
15501    }
15502
15503    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15504    where
15505        T: Peek + Next,
15506    {
15507        xml_util::start_element("ErrorResponse", stack)?;
15508        XmlErrorDeserializer::deserialize("Error", stack)
15509    }
15510}
15511impl fmt::Display for DetachRolePolicyError {
15512    #[allow(unused_variables)]
15513    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15514        match *self {
15515            DetachRolePolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
15516            DetachRolePolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15517            DetachRolePolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15518            DetachRolePolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15519            DetachRolePolicyError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
15520        }
15521    }
15522}
15523impl Error for DetachRolePolicyError {}
15524/// Errors returned by DetachUserPolicy
15525#[derive(Debug, PartialEq)]
15526pub enum DetachUserPolicyError {
15527    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
15528    InvalidInput(String),
15529    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15530    LimitExceeded(String),
15531    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15532    NoSuchEntity(String),
15533    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15534    ServiceFailure(String),
15535}
15536
15537impl DetachUserPolicyError {
15538    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DetachUserPolicyError> {
15539        {
15540            let reader = EventReader::new(res.body.as_ref());
15541            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15542            find_start_element(&mut stack);
15543            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15544                match &parsed_error.code[..] {
15545                    "InvalidInput" => {
15546                        return RusotoError::Service(DetachUserPolicyError::InvalidInput(
15547                            parsed_error.message,
15548                        ))
15549                    }
15550                    "LimitExceeded" => {
15551                        return RusotoError::Service(DetachUserPolicyError::LimitExceeded(
15552                            parsed_error.message,
15553                        ))
15554                    }
15555                    "NoSuchEntity" => {
15556                        return RusotoError::Service(DetachUserPolicyError::NoSuchEntity(
15557                            parsed_error.message,
15558                        ))
15559                    }
15560                    "ServiceFailure" => {
15561                        return RusotoError::Service(DetachUserPolicyError::ServiceFailure(
15562                            parsed_error.message,
15563                        ))
15564                    }
15565                    _ => {}
15566                }
15567            }
15568        }
15569        RusotoError::Unknown(res)
15570    }
15571
15572    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15573    where
15574        T: Peek + Next,
15575    {
15576        xml_util::start_element("ErrorResponse", stack)?;
15577        XmlErrorDeserializer::deserialize("Error", stack)
15578    }
15579}
15580impl fmt::Display for DetachUserPolicyError {
15581    #[allow(unused_variables)]
15582    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15583        match *self {
15584            DetachUserPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
15585            DetachUserPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15586            DetachUserPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15587            DetachUserPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15588        }
15589    }
15590}
15591impl Error for DetachUserPolicyError {}
15592/// Errors returned by EnableMFADevice
15593#[derive(Debug, PartialEq)]
15594pub enum EnableMFADeviceError {
15595    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
15596    EntityAlreadyExists(String),
15597    /// <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>
15598    EntityTemporarilyUnmodifiable(String),
15599    /// <p>The request was rejected because the authentication code was not recognized. The error message describes the specific error.</p>
15600    InvalidAuthenticationCode(String),
15601    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15602    LimitExceeded(String),
15603    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15604    NoSuchEntity(String),
15605    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15606    ServiceFailure(String),
15607}
15608
15609impl EnableMFADeviceError {
15610    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<EnableMFADeviceError> {
15611        {
15612            let reader = EventReader::new(res.body.as_ref());
15613            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15614            find_start_element(&mut stack);
15615            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15616                match &parsed_error.code[..] {
15617                    "EntityAlreadyExists" => {
15618                        return RusotoError::Service(EnableMFADeviceError::EntityAlreadyExists(
15619                            parsed_error.message,
15620                        ))
15621                    }
15622                    "EntityTemporarilyUnmodifiable" => {
15623                        return RusotoError::Service(
15624                            EnableMFADeviceError::EntityTemporarilyUnmodifiable(
15625                                parsed_error.message,
15626                            ),
15627                        )
15628                    }
15629                    "InvalidAuthenticationCode" => {
15630                        return RusotoError::Service(
15631                            EnableMFADeviceError::InvalidAuthenticationCode(parsed_error.message),
15632                        )
15633                    }
15634                    "LimitExceeded" => {
15635                        return RusotoError::Service(EnableMFADeviceError::LimitExceeded(
15636                            parsed_error.message,
15637                        ))
15638                    }
15639                    "NoSuchEntity" => {
15640                        return RusotoError::Service(EnableMFADeviceError::NoSuchEntity(
15641                            parsed_error.message,
15642                        ))
15643                    }
15644                    "ServiceFailure" => {
15645                        return RusotoError::Service(EnableMFADeviceError::ServiceFailure(
15646                            parsed_error.message,
15647                        ))
15648                    }
15649                    _ => {}
15650                }
15651            }
15652        }
15653        RusotoError::Unknown(res)
15654    }
15655
15656    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15657    where
15658        T: Peek + Next,
15659    {
15660        xml_util::start_element("ErrorResponse", stack)?;
15661        XmlErrorDeserializer::deserialize("Error", stack)
15662    }
15663}
15664impl fmt::Display for EnableMFADeviceError {
15665    #[allow(unused_variables)]
15666    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15667        match *self {
15668            EnableMFADeviceError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
15669            EnableMFADeviceError::EntityTemporarilyUnmodifiable(ref cause) => {
15670                write!(f, "{}", cause)
15671            }
15672            EnableMFADeviceError::InvalidAuthenticationCode(ref cause) => write!(f, "{}", cause),
15673            EnableMFADeviceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15674            EnableMFADeviceError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15675            EnableMFADeviceError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15676        }
15677    }
15678}
15679impl Error for EnableMFADeviceError {}
15680/// Errors returned by GenerateCredentialReport
15681#[derive(Debug, PartialEq)]
15682pub enum GenerateCredentialReportError {
15683    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
15684    LimitExceeded(String),
15685    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15686    ServiceFailure(String),
15687}
15688
15689impl GenerateCredentialReportError {
15690    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GenerateCredentialReportError> {
15691        {
15692            let reader = EventReader::new(res.body.as_ref());
15693            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15694            find_start_element(&mut stack);
15695            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15696                match &parsed_error.code[..] {
15697                    "LimitExceeded" => {
15698                        return RusotoError::Service(GenerateCredentialReportError::LimitExceeded(
15699                            parsed_error.message,
15700                        ))
15701                    }
15702                    "ServiceFailure" => {
15703                        return RusotoError::Service(GenerateCredentialReportError::ServiceFailure(
15704                            parsed_error.message,
15705                        ))
15706                    }
15707                    _ => {}
15708                }
15709            }
15710        }
15711        RusotoError::Unknown(res)
15712    }
15713
15714    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15715    where
15716        T: Peek + Next,
15717    {
15718        xml_util::start_element("ErrorResponse", stack)?;
15719        XmlErrorDeserializer::deserialize("Error", stack)
15720    }
15721}
15722impl fmt::Display for GenerateCredentialReportError {
15723    #[allow(unused_variables)]
15724    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15725        match *self {
15726            GenerateCredentialReportError::LimitExceeded(ref cause) => write!(f, "{}", cause),
15727            GenerateCredentialReportError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15728        }
15729    }
15730}
15731impl Error for GenerateCredentialReportError {}
15732/// Errors returned by GenerateOrganizationsAccessReport
15733#[derive(Debug, PartialEq)]
15734pub enum GenerateOrganizationsAccessReportError {
15735    /// <p>The request failed because the maximum number of concurrent requests for this account are already running.</p>
15736    ReportGenerationLimitExceeded(String),
15737}
15738
15739impl GenerateOrganizationsAccessReportError {
15740    pub fn from_response(
15741        res: BufferedHttpResponse,
15742    ) -> RusotoError<GenerateOrganizationsAccessReportError> {
15743        {
15744            let reader = EventReader::new(res.body.as_ref());
15745            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15746            find_start_element(&mut stack);
15747            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15748                match &parsed_error.code[..] {
15749                    "ReportGenerationLimitExceeded" => {
15750                        return RusotoError::Service(
15751                            GenerateOrganizationsAccessReportError::ReportGenerationLimitExceeded(
15752                                parsed_error.message,
15753                            ),
15754                        )
15755                    }
15756                    _ => {}
15757                }
15758            }
15759        }
15760        RusotoError::Unknown(res)
15761    }
15762
15763    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15764    where
15765        T: Peek + Next,
15766    {
15767        xml_util::start_element("ErrorResponse", stack)?;
15768        XmlErrorDeserializer::deserialize("Error", stack)
15769    }
15770}
15771impl fmt::Display for GenerateOrganizationsAccessReportError {
15772    #[allow(unused_variables)]
15773    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15774        match *self {
15775            GenerateOrganizationsAccessReportError::ReportGenerationLimitExceeded(ref cause) => {
15776                write!(f, "{}", cause)
15777            }
15778        }
15779    }
15780}
15781impl Error for GenerateOrganizationsAccessReportError {}
15782/// Errors returned by GenerateServiceLastAccessedDetails
15783#[derive(Debug, PartialEq)]
15784pub enum GenerateServiceLastAccessedDetailsError {
15785    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
15786    InvalidInput(String),
15787    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15788    NoSuchEntity(String),
15789}
15790
15791impl GenerateServiceLastAccessedDetailsError {
15792    pub fn from_response(
15793        res: BufferedHttpResponse,
15794    ) -> RusotoError<GenerateServiceLastAccessedDetailsError> {
15795        {
15796            let reader = EventReader::new(res.body.as_ref());
15797            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15798            find_start_element(&mut stack);
15799            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15800                match &parsed_error.code[..] {
15801                    "InvalidInput" => {
15802                        return RusotoError::Service(
15803                            GenerateServiceLastAccessedDetailsError::InvalidInput(
15804                                parsed_error.message,
15805                            ),
15806                        )
15807                    }
15808                    "NoSuchEntity" => {
15809                        return RusotoError::Service(
15810                            GenerateServiceLastAccessedDetailsError::NoSuchEntity(
15811                                parsed_error.message,
15812                            ),
15813                        )
15814                    }
15815                    _ => {}
15816                }
15817            }
15818        }
15819        RusotoError::Unknown(res)
15820    }
15821
15822    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15823    where
15824        T: Peek + Next,
15825    {
15826        xml_util::start_element("ErrorResponse", stack)?;
15827        XmlErrorDeserializer::deserialize("Error", stack)
15828    }
15829}
15830impl fmt::Display for GenerateServiceLastAccessedDetailsError {
15831    #[allow(unused_variables)]
15832    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15833        match *self {
15834            GenerateServiceLastAccessedDetailsError::InvalidInput(ref cause) => {
15835                write!(f, "{}", cause)
15836            }
15837            GenerateServiceLastAccessedDetailsError::NoSuchEntity(ref cause) => {
15838                write!(f, "{}", cause)
15839            }
15840        }
15841    }
15842}
15843impl Error for GenerateServiceLastAccessedDetailsError {}
15844/// Errors returned by GetAccessKeyLastUsed
15845#[derive(Debug, PartialEq)]
15846pub enum GetAccessKeyLastUsedError {
15847    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15848    NoSuchEntity(String),
15849}
15850
15851impl GetAccessKeyLastUsedError {
15852    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetAccessKeyLastUsedError> {
15853        {
15854            let reader = EventReader::new(res.body.as_ref());
15855            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15856            find_start_element(&mut stack);
15857            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15858                match &parsed_error.code[..] {
15859                    "NoSuchEntity" => {
15860                        return RusotoError::Service(GetAccessKeyLastUsedError::NoSuchEntity(
15861                            parsed_error.message,
15862                        ))
15863                    }
15864                    _ => {}
15865                }
15866            }
15867        }
15868        RusotoError::Unknown(res)
15869    }
15870
15871    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15872    where
15873        T: Peek + Next,
15874    {
15875        xml_util::start_element("ErrorResponse", stack)?;
15876        XmlErrorDeserializer::deserialize("Error", stack)
15877    }
15878}
15879impl fmt::Display for GetAccessKeyLastUsedError {
15880    #[allow(unused_variables)]
15881    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15882        match *self {
15883            GetAccessKeyLastUsedError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15884        }
15885    }
15886}
15887impl Error for GetAccessKeyLastUsedError {}
15888/// Errors returned by GetAccountAuthorizationDetails
15889#[derive(Debug, PartialEq)]
15890pub enum GetAccountAuthorizationDetailsError {
15891    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15892    ServiceFailure(String),
15893}
15894
15895impl GetAccountAuthorizationDetailsError {
15896    pub fn from_response(
15897        res: BufferedHttpResponse,
15898    ) -> RusotoError<GetAccountAuthorizationDetailsError> {
15899        {
15900            let reader = EventReader::new(res.body.as_ref());
15901            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15902            find_start_element(&mut stack);
15903            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15904                match &parsed_error.code[..] {
15905                    "ServiceFailure" => {
15906                        return RusotoError::Service(
15907                            GetAccountAuthorizationDetailsError::ServiceFailure(
15908                                parsed_error.message,
15909                            ),
15910                        )
15911                    }
15912                    _ => {}
15913                }
15914            }
15915        }
15916        RusotoError::Unknown(res)
15917    }
15918
15919    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15920    where
15921        T: Peek + Next,
15922    {
15923        xml_util::start_element("ErrorResponse", stack)?;
15924        XmlErrorDeserializer::deserialize("Error", stack)
15925    }
15926}
15927impl fmt::Display for GetAccountAuthorizationDetailsError {
15928    #[allow(unused_variables)]
15929    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15930        match *self {
15931            GetAccountAuthorizationDetailsError::ServiceFailure(ref cause) => {
15932                write!(f, "{}", cause)
15933            }
15934        }
15935    }
15936}
15937impl Error for GetAccountAuthorizationDetailsError {}
15938/// Errors returned by GetAccountPasswordPolicy
15939#[derive(Debug, PartialEq)]
15940pub enum GetAccountPasswordPolicyError {
15941    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
15942    NoSuchEntity(String),
15943    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15944    ServiceFailure(String),
15945}
15946
15947impl GetAccountPasswordPolicyError {
15948    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetAccountPasswordPolicyError> {
15949        {
15950            let reader = EventReader::new(res.body.as_ref());
15951            let mut stack = XmlResponse::new(reader.into_iter().peekable());
15952            find_start_element(&mut stack);
15953            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
15954                match &parsed_error.code[..] {
15955                    "NoSuchEntity" => {
15956                        return RusotoError::Service(GetAccountPasswordPolicyError::NoSuchEntity(
15957                            parsed_error.message,
15958                        ))
15959                    }
15960                    "ServiceFailure" => {
15961                        return RusotoError::Service(GetAccountPasswordPolicyError::ServiceFailure(
15962                            parsed_error.message,
15963                        ))
15964                    }
15965                    _ => {}
15966                }
15967            }
15968        }
15969        RusotoError::Unknown(res)
15970    }
15971
15972    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
15973    where
15974        T: Peek + Next,
15975    {
15976        xml_util::start_element("ErrorResponse", stack)?;
15977        XmlErrorDeserializer::deserialize("Error", stack)
15978    }
15979}
15980impl fmt::Display for GetAccountPasswordPolicyError {
15981    #[allow(unused_variables)]
15982    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15983        match *self {
15984            GetAccountPasswordPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
15985            GetAccountPasswordPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
15986        }
15987    }
15988}
15989impl Error for GetAccountPasswordPolicyError {}
15990/// Errors returned by GetAccountSummary
15991#[derive(Debug, PartialEq)]
15992pub enum GetAccountSummaryError {
15993    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
15994    ServiceFailure(String),
15995}
15996
15997impl GetAccountSummaryError {
15998    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetAccountSummaryError> {
15999        {
16000            let reader = EventReader::new(res.body.as_ref());
16001            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16002            find_start_element(&mut stack);
16003            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16004                match &parsed_error.code[..] {
16005                    "ServiceFailure" => {
16006                        return RusotoError::Service(GetAccountSummaryError::ServiceFailure(
16007                            parsed_error.message,
16008                        ))
16009                    }
16010                    _ => {}
16011                }
16012            }
16013        }
16014        RusotoError::Unknown(res)
16015    }
16016
16017    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16018    where
16019        T: Peek + Next,
16020    {
16021        xml_util::start_element("ErrorResponse", stack)?;
16022        XmlErrorDeserializer::deserialize("Error", stack)
16023    }
16024}
16025impl fmt::Display for GetAccountSummaryError {
16026    #[allow(unused_variables)]
16027    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16028        match *self {
16029            GetAccountSummaryError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16030        }
16031    }
16032}
16033impl Error for GetAccountSummaryError {}
16034/// Errors returned by GetContextKeysForCustomPolicy
16035#[derive(Debug, PartialEq)]
16036pub enum GetContextKeysForCustomPolicyError {
16037    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
16038    InvalidInput(String),
16039}
16040
16041impl GetContextKeysForCustomPolicyError {
16042    pub fn from_response(
16043        res: BufferedHttpResponse,
16044    ) -> RusotoError<GetContextKeysForCustomPolicyError> {
16045        {
16046            let reader = EventReader::new(res.body.as_ref());
16047            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16048            find_start_element(&mut stack);
16049            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16050                match &parsed_error.code[..] {
16051                    "InvalidInput" => {
16052                        return RusotoError::Service(
16053                            GetContextKeysForCustomPolicyError::InvalidInput(parsed_error.message),
16054                        )
16055                    }
16056                    _ => {}
16057                }
16058            }
16059        }
16060        RusotoError::Unknown(res)
16061    }
16062
16063    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16064    where
16065        T: Peek + Next,
16066    {
16067        xml_util::start_element("ErrorResponse", stack)?;
16068        XmlErrorDeserializer::deserialize("Error", stack)
16069    }
16070}
16071impl fmt::Display for GetContextKeysForCustomPolicyError {
16072    #[allow(unused_variables)]
16073    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16074        match *self {
16075            GetContextKeysForCustomPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
16076        }
16077    }
16078}
16079impl Error for GetContextKeysForCustomPolicyError {}
16080/// Errors returned by GetContextKeysForPrincipalPolicy
16081#[derive(Debug, PartialEq)]
16082pub enum GetContextKeysForPrincipalPolicyError {
16083    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
16084    InvalidInput(String),
16085    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16086    NoSuchEntity(String),
16087}
16088
16089impl GetContextKeysForPrincipalPolicyError {
16090    pub fn from_response(
16091        res: BufferedHttpResponse,
16092    ) -> RusotoError<GetContextKeysForPrincipalPolicyError> {
16093        {
16094            let reader = EventReader::new(res.body.as_ref());
16095            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16096            find_start_element(&mut stack);
16097            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16098                match &parsed_error.code[..] {
16099                    "InvalidInput" => {
16100                        return RusotoError::Service(
16101                            GetContextKeysForPrincipalPolicyError::InvalidInput(
16102                                parsed_error.message,
16103                            ),
16104                        )
16105                    }
16106                    "NoSuchEntity" => {
16107                        return RusotoError::Service(
16108                            GetContextKeysForPrincipalPolicyError::NoSuchEntity(
16109                                parsed_error.message,
16110                            ),
16111                        )
16112                    }
16113                    _ => {}
16114                }
16115            }
16116        }
16117        RusotoError::Unknown(res)
16118    }
16119
16120    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16121    where
16122        T: Peek + Next,
16123    {
16124        xml_util::start_element("ErrorResponse", stack)?;
16125        XmlErrorDeserializer::deserialize("Error", stack)
16126    }
16127}
16128impl fmt::Display for GetContextKeysForPrincipalPolicyError {
16129    #[allow(unused_variables)]
16130    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16131        match *self {
16132            GetContextKeysForPrincipalPolicyError::InvalidInput(ref cause) => {
16133                write!(f, "{}", cause)
16134            }
16135            GetContextKeysForPrincipalPolicyError::NoSuchEntity(ref cause) => {
16136                write!(f, "{}", cause)
16137            }
16138        }
16139    }
16140}
16141impl Error for GetContextKeysForPrincipalPolicyError {}
16142/// Errors returned by GetCredentialReport
16143#[derive(Debug, PartialEq)]
16144pub enum GetCredentialReportError {
16145    /// <p>The request was rejected because the most recent credential report has expired. To generate a new credential report, use <a>GenerateCredentialReport</a>. For more information about credential report expiration, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html">Getting credential reports</a> in the <i>IAM User Guide</i>.</p>
16146    CredentialReportExpired(String),
16147    /// <p>The request was rejected because the credential report does not exist. To generate a credential report, use <a>GenerateCredentialReport</a>.</p>
16148    CredentialReportNotPresent(String),
16149    /// <p>The request was rejected because the credential report is still being generated.</p>
16150    CredentialReportNotReady(String),
16151    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16152    ServiceFailure(String),
16153}
16154
16155impl GetCredentialReportError {
16156    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetCredentialReportError> {
16157        {
16158            let reader = EventReader::new(res.body.as_ref());
16159            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16160            find_start_element(&mut stack);
16161            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16162                match &parsed_error.code[..] {
16163                    "ReportExpired" => {
16164                        return RusotoError::Service(
16165                            GetCredentialReportError::CredentialReportExpired(parsed_error.message),
16166                        )
16167                    }
16168                    "ReportNotPresent" => {
16169                        return RusotoError::Service(
16170                            GetCredentialReportError::CredentialReportNotPresent(
16171                                parsed_error.message,
16172                            ),
16173                        )
16174                    }
16175                    "ReportInProgress" => {
16176                        return RusotoError::Service(
16177                            GetCredentialReportError::CredentialReportNotReady(
16178                                parsed_error.message,
16179                            ),
16180                        )
16181                    }
16182                    "ServiceFailure" => {
16183                        return RusotoError::Service(GetCredentialReportError::ServiceFailure(
16184                            parsed_error.message,
16185                        ))
16186                    }
16187                    _ => {}
16188                }
16189            }
16190        }
16191        RusotoError::Unknown(res)
16192    }
16193
16194    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16195    where
16196        T: Peek + Next,
16197    {
16198        xml_util::start_element("ErrorResponse", stack)?;
16199        XmlErrorDeserializer::deserialize("Error", stack)
16200    }
16201}
16202impl fmt::Display for GetCredentialReportError {
16203    #[allow(unused_variables)]
16204    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16205        match *self {
16206            GetCredentialReportError::CredentialReportExpired(ref cause) => write!(f, "{}", cause),
16207            GetCredentialReportError::CredentialReportNotPresent(ref cause) => {
16208                write!(f, "{}", cause)
16209            }
16210            GetCredentialReportError::CredentialReportNotReady(ref cause) => write!(f, "{}", cause),
16211            GetCredentialReportError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16212        }
16213    }
16214}
16215impl Error for GetCredentialReportError {}
16216/// Errors returned by GetGroup
16217#[derive(Debug, PartialEq)]
16218pub enum GetGroupError {
16219    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16220    NoSuchEntity(String),
16221    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16222    ServiceFailure(String),
16223}
16224
16225impl GetGroupError {
16226    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetGroupError> {
16227        {
16228            let reader = EventReader::new(res.body.as_ref());
16229            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16230            find_start_element(&mut stack);
16231            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16232                match &parsed_error.code[..] {
16233                    "NoSuchEntity" => {
16234                        return RusotoError::Service(GetGroupError::NoSuchEntity(
16235                            parsed_error.message,
16236                        ))
16237                    }
16238                    "ServiceFailure" => {
16239                        return RusotoError::Service(GetGroupError::ServiceFailure(
16240                            parsed_error.message,
16241                        ))
16242                    }
16243                    _ => {}
16244                }
16245            }
16246        }
16247        RusotoError::Unknown(res)
16248    }
16249
16250    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16251    where
16252        T: Peek + Next,
16253    {
16254        xml_util::start_element("ErrorResponse", stack)?;
16255        XmlErrorDeserializer::deserialize("Error", stack)
16256    }
16257}
16258impl fmt::Display for GetGroupError {
16259    #[allow(unused_variables)]
16260    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16261        match *self {
16262            GetGroupError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16263            GetGroupError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16264        }
16265    }
16266}
16267impl Error for GetGroupError {}
16268/// Errors returned by GetGroupPolicy
16269#[derive(Debug, PartialEq)]
16270pub enum GetGroupPolicyError {
16271    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16272    NoSuchEntity(String),
16273    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16274    ServiceFailure(String),
16275}
16276
16277impl GetGroupPolicyError {
16278    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetGroupPolicyError> {
16279        {
16280            let reader = EventReader::new(res.body.as_ref());
16281            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16282            find_start_element(&mut stack);
16283            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16284                match &parsed_error.code[..] {
16285                    "NoSuchEntity" => {
16286                        return RusotoError::Service(GetGroupPolicyError::NoSuchEntity(
16287                            parsed_error.message,
16288                        ))
16289                    }
16290                    "ServiceFailure" => {
16291                        return RusotoError::Service(GetGroupPolicyError::ServiceFailure(
16292                            parsed_error.message,
16293                        ))
16294                    }
16295                    _ => {}
16296                }
16297            }
16298        }
16299        RusotoError::Unknown(res)
16300    }
16301
16302    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16303    where
16304        T: Peek + Next,
16305    {
16306        xml_util::start_element("ErrorResponse", stack)?;
16307        XmlErrorDeserializer::deserialize("Error", stack)
16308    }
16309}
16310impl fmt::Display for GetGroupPolicyError {
16311    #[allow(unused_variables)]
16312    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16313        match *self {
16314            GetGroupPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16315            GetGroupPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16316        }
16317    }
16318}
16319impl Error for GetGroupPolicyError {}
16320/// Errors returned by GetInstanceProfile
16321#[derive(Debug, PartialEq)]
16322pub enum GetInstanceProfileError {
16323    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16324    NoSuchEntity(String),
16325    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16326    ServiceFailure(String),
16327}
16328
16329impl GetInstanceProfileError {
16330    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetInstanceProfileError> {
16331        {
16332            let reader = EventReader::new(res.body.as_ref());
16333            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16334            find_start_element(&mut stack);
16335            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16336                match &parsed_error.code[..] {
16337                    "NoSuchEntity" => {
16338                        return RusotoError::Service(GetInstanceProfileError::NoSuchEntity(
16339                            parsed_error.message,
16340                        ))
16341                    }
16342                    "ServiceFailure" => {
16343                        return RusotoError::Service(GetInstanceProfileError::ServiceFailure(
16344                            parsed_error.message,
16345                        ))
16346                    }
16347                    _ => {}
16348                }
16349            }
16350        }
16351        RusotoError::Unknown(res)
16352    }
16353
16354    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16355    where
16356        T: Peek + Next,
16357    {
16358        xml_util::start_element("ErrorResponse", stack)?;
16359        XmlErrorDeserializer::deserialize("Error", stack)
16360    }
16361}
16362impl fmt::Display for GetInstanceProfileError {
16363    #[allow(unused_variables)]
16364    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16365        match *self {
16366            GetInstanceProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16367            GetInstanceProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16368        }
16369    }
16370}
16371impl Error for GetInstanceProfileError {}
16372/// Errors returned by GetLoginProfile
16373#[derive(Debug, PartialEq)]
16374pub enum GetLoginProfileError {
16375    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16376    NoSuchEntity(String),
16377    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16378    ServiceFailure(String),
16379}
16380
16381impl GetLoginProfileError {
16382    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetLoginProfileError> {
16383        {
16384            let reader = EventReader::new(res.body.as_ref());
16385            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16386            find_start_element(&mut stack);
16387            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16388                match &parsed_error.code[..] {
16389                    "NoSuchEntity" => {
16390                        return RusotoError::Service(GetLoginProfileError::NoSuchEntity(
16391                            parsed_error.message,
16392                        ))
16393                    }
16394                    "ServiceFailure" => {
16395                        return RusotoError::Service(GetLoginProfileError::ServiceFailure(
16396                            parsed_error.message,
16397                        ))
16398                    }
16399                    _ => {}
16400                }
16401            }
16402        }
16403        RusotoError::Unknown(res)
16404    }
16405
16406    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16407    where
16408        T: Peek + Next,
16409    {
16410        xml_util::start_element("ErrorResponse", stack)?;
16411        XmlErrorDeserializer::deserialize("Error", stack)
16412    }
16413}
16414impl fmt::Display for GetLoginProfileError {
16415    #[allow(unused_variables)]
16416    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16417        match *self {
16418            GetLoginProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16419            GetLoginProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16420        }
16421    }
16422}
16423impl Error for GetLoginProfileError {}
16424/// Errors returned by GetOpenIDConnectProvider
16425#[derive(Debug, PartialEq)]
16426pub enum GetOpenIDConnectProviderError {
16427    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
16428    InvalidInput(String),
16429    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16430    NoSuchEntity(String),
16431    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16432    ServiceFailure(String),
16433}
16434
16435impl GetOpenIDConnectProviderError {
16436    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetOpenIDConnectProviderError> {
16437        {
16438            let reader = EventReader::new(res.body.as_ref());
16439            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16440            find_start_element(&mut stack);
16441            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16442                match &parsed_error.code[..] {
16443                    "InvalidInput" => {
16444                        return RusotoError::Service(GetOpenIDConnectProviderError::InvalidInput(
16445                            parsed_error.message,
16446                        ))
16447                    }
16448                    "NoSuchEntity" => {
16449                        return RusotoError::Service(GetOpenIDConnectProviderError::NoSuchEntity(
16450                            parsed_error.message,
16451                        ))
16452                    }
16453                    "ServiceFailure" => {
16454                        return RusotoError::Service(GetOpenIDConnectProviderError::ServiceFailure(
16455                            parsed_error.message,
16456                        ))
16457                    }
16458                    _ => {}
16459                }
16460            }
16461        }
16462        RusotoError::Unknown(res)
16463    }
16464
16465    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16466    where
16467        T: Peek + Next,
16468    {
16469        xml_util::start_element("ErrorResponse", stack)?;
16470        XmlErrorDeserializer::deserialize("Error", stack)
16471    }
16472}
16473impl fmt::Display for GetOpenIDConnectProviderError {
16474    #[allow(unused_variables)]
16475    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16476        match *self {
16477            GetOpenIDConnectProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
16478            GetOpenIDConnectProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16479            GetOpenIDConnectProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16480        }
16481    }
16482}
16483impl Error for GetOpenIDConnectProviderError {}
16484/// Errors returned by GetOrganizationsAccessReport
16485#[derive(Debug, PartialEq)]
16486pub enum GetOrganizationsAccessReportError {
16487    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16488    NoSuchEntity(String),
16489}
16490
16491impl GetOrganizationsAccessReportError {
16492    pub fn from_response(
16493        res: BufferedHttpResponse,
16494    ) -> RusotoError<GetOrganizationsAccessReportError> {
16495        {
16496            let reader = EventReader::new(res.body.as_ref());
16497            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16498            find_start_element(&mut stack);
16499            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16500                match &parsed_error.code[..] {
16501                    "NoSuchEntity" => {
16502                        return RusotoError::Service(
16503                            GetOrganizationsAccessReportError::NoSuchEntity(parsed_error.message),
16504                        )
16505                    }
16506                    _ => {}
16507                }
16508            }
16509        }
16510        RusotoError::Unknown(res)
16511    }
16512
16513    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16514    where
16515        T: Peek + Next,
16516    {
16517        xml_util::start_element("ErrorResponse", stack)?;
16518        XmlErrorDeserializer::deserialize("Error", stack)
16519    }
16520}
16521impl fmt::Display for GetOrganizationsAccessReportError {
16522    #[allow(unused_variables)]
16523    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16524        match *self {
16525            GetOrganizationsAccessReportError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16526        }
16527    }
16528}
16529impl Error for GetOrganizationsAccessReportError {}
16530/// Errors returned by GetPolicy
16531#[derive(Debug, PartialEq)]
16532pub enum GetPolicyError {
16533    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
16534    InvalidInput(String),
16535    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16536    NoSuchEntity(String),
16537    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16538    ServiceFailure(String),
16539}
16540
16541impl GetPolicyError {
16542    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetPolicyError> {
16543        {
16544            let reader = EventReader::new(res.body.as_ref());
16545            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16546            find_start_element(&mut stack);
16547            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16548                match &parsed_error.code[..] {
16549                    "InvalidInput" => {
16550                        return RusotoError::Service(GetPolicyError::InvalidInput(
16551                            parsed_error.message,
16552                        ))
16553                    }
16554                    "NoSuchEntity" => {
16555                        return RusotoError::Service(GetPolicyError::NoSuchEntity(
16556                            parsed_error.message,
16557                        ))
16558                    }
16559                    "ServiceFailure" => {
16560                        return RusotoError::Service(GetPolicyError::ServiceFailure(
16561                            parsed_error.message,
16562                        ))
16563                    }
16564                    _ => {}
16565                }
16566            }
16567        }
16568        RusotoError::Unknown(res)
16569    }
16570
16571    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16572    where
16573        T: Peek + Next,
16574    {
16575        xml_util::start_element("ErrorResponse", stack)?;
16576        XmlErrorDeserializer::deserialize("Error", stack)
16577    }
16578}
16579impl fmt::Display for GetPolicyError {
16580    #[allow(unused_variables)]
16581    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16582        match *self {
16583            GetPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
16584            GetPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16585            GetPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16586        }
16587    }
16588}
16589impl Error for GetPolicyError {}
16590/// Errors returned by GetPolicyVersion
16591#[derive(Debug, PartialEq)]
16592pub enum GetPolicyVersionError {
16593    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
16594    InvalidInput(String),
16595    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16596    NoSuchEntity(String),
16597    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16598    ServiceFailure(String),
16599}
16600
16601impl GetPolicyVersionError {
16602    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetPolicyVersionError> {
16603        {
16604            let reader = EventReader::new(res.body.as_ref());
16605            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16606            find_start_element(&mut stack);
16607            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16608                match &parsed_error.code[..] {
16609                    "InvalidInput" => {
16610                        return RusotoError::Service(GetPolicyVersionError::InvalidInput(
16611                            parsed_error.message,
16612                        ))
16613                    }
16614                    "NoSuchEntity" => {
16615                        return RusotoError::Service(GetPolicyVersionError::NoSuchEntity(
16616                            parsed_error.message,
16617                        ))
16618                    }
16619                    "ServiceFailure" => {
16620                        return RusotoError::Service(GetPolicyVersionError::ServiceFailure(
16621                            parsed_error.message,
16622                        ))
16623                    }
16624                    _ => {}
16625                }
16626            }
16627        }
16628        RusotoError::Unknown(res)
16629    }
16630
16631    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16632    where
16633        T: Peek + Next,
16634    {
16635        xml_util::start_element("ErrorResponse", stack)?;
16636        XmlErrorDeserializer::deserialize("Error", stack)
16637    }
16638}
16639impl fmt::Display for GetPolicyVersionError {
16640    #[allow(unused_variables)]
16641    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16642        match *self {
16643            GetPolicyVersionError::InvalidInput(ref cause) => write!(f, "{}", cause),
16644            GetPolicyVersionError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16645            GetPolicyVersionError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16646        }
16647    }
16648}
16649impl Error for GetPolicyVersionError {}
16650/// Errors returned by GetRole
16651#[derive(Debug, PartialEq)]
16652pub enum GetRoleError {
16653    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16654    NoSuchEntity(String),
16655    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16656    ServiceFailure(String),
16657}
16658
16659impl GetRoleError {
16660    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetRoleError> {
16661        {
16662            let reader = EventReader::new(res.body.as_ref());
16663            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16664            find_start_element(&mut stack);
16665            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16666                match &parsed_error.code[..] {
16667                    "NoSuchEntity" => {
16668                        return RusotoError::Service(GetRoleError::NoSuchEntity(
16669                            parsed_error.message,
16670                        ))
16671                    }
16672                    "ServiceFailure" => {
16673                        return RusotoError::Service(GetRoleError::ServiceFailure(
16674                            parsed_error.message,
16675                        ))
16676                    }
16677                    _ => {}
16678                }
16679            }
16680        }
16681        RusotoError::Unknown(res)
16682    }
16683
16684    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16685    where
16686        T: Peek + Next,
16687    {
16688        xml_util::start_element("ErrorResponse", stack)?;
16689        XmlErrorDeserializer::deserialize("Error", stack)
16690    }
16691}
16692impl fmt::Display for GetRoleError {
16693    #[allow(unused_variables)]
16694    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16695        match *self {
16696            GetRoleError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16697            GetRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16698        }
16699    }
16700}
16701impl Error for GetRoleError {}
16702/// Errors returned by GetRolePolicy
16703#[derive(Debug, PartialEq)]
16704pub enum GetRolePolicyError {
16705    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16706    NoSuchEntity(String),
16707    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16708    ServiceFailure(String),
16709}
16710
16711impl GetRolePolicyError {
16712    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetRolePolicyError> {
16713        {
16714            let reader = EventReader::new(res.body.as_ref());
16715            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16716            find_start_element(&mut stack);
16717            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16718                match &parsed_error.code[..] {
16719                    "NoSuchEntity" => {
16720                        return RusotoError::Service(GetRolePolicyError::NoSuchEntity(
16721                            parsed_error.message,
16722                        ))
16723                    }
16724                    "ServiceFailure" => {
16725                        return RusotoError::Service(GetRolePolicyError::ServiceFailure(
16726                            parsed_error.message,
16727                        ))
16728                    }
16729                    _ => {}
16730                }
16731            }
16732        }
16733        RusotoError::Unknown(res)
16734    }
16735
16736    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16737    where
16738        T: Peek + Next,
16739    {
16740        xml_util::start_element("ErrorResponse", stack)?;
16741        XmlErrorDeserializer::deserialize("Error", stack)
16742    }
16743}
16744impl fmt::Display for GetRolePolicyError {
16745    #[allow(unused_variables)]
16746    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16747        match *self {
16748            GetRolePolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16749            GetRolePolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16750        }
16751    }
16752}
16753impl Error for GetRolePolicyError {}
16754/// Errors returned by GetSAMLProvider
16755#[derive(Debug, PartialEq)]
16756pub enum GetSAMLProviderError {
16757    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
16758    InvalidInput(String),
16759    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16760    NoSuchEntity(String),
16761    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16762    ServiceFailure(String),
16763}
16764
16765impl GetSAMLProviderError {
16766    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetSAMLProviderError> {
16767        {
16768            let reader = EventReader::new(res.body.as_ref());
16769            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16770            find_start_element(&mut stack);
16771            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16772                match &parsed_error.code[..] {
16773                    "InvalidInput" => {
16774                        return RusotoError::Service(GetSAMLProviderError::InvalidInput(
16775                            parsed_error.message,
16776                        ))
16777                    }
16778                    "NoSuchEntity" => {
16779                        return RusotoError::Service(GetSAMLProviderError::NoSuchEntity(
16780                            parsed_error.message,
16781                        ))
16782                    }
16783                    "ServiceFailure" => {
16784                        return RusotoError::Service(GetSAMLProviderError::ServiceFailure(
16785                            parsed_error.message,
16786                        ))
16787                    }
16788                    _ => {}
16789                }
16790            }
16791        }
16792        RusotoError::Unknown(res)
16793    }
16794
16795    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16796    where
16797        T: Peek + Next,
16798    {
16799        xml_util::start_element("ErrorResponse", stack)?;
16800        XmlErrorDeserializer::deserialize("Error", stack)
16801    }
16802}
16803impl fmt::Display for GetSAMLProviderError {
16804    #[allow(unused_variables)]
16805    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16806        match *self {
16807            GetSAMLProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
16808            GetSAMLProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16809            GetSAMLProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16810        }
16811    }
16812}
16813impl Error for GetSAMLProviderError {}
16814/// Errors returned by GetSSHPublicKey
16815#[derive(Debug, PartialEq)]
16816pub enum GetSSHPublicKeyError {
16817    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16818    NoSuchEntity(String),
16819    /// <p>The request was rejected because the public key encoding format is unsupported or unrecognized.</p>
16820    UnrecognizedPublicKeyEncoding(String),
16821}
16822
16823impl GetSSHPublicKeyError {
16824    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetSSHPublicKeyError> {
16825        {
16826            let reader = EventReader::new(res.body.as_ref());
16827            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16828            find_start_element(&mut stack);
16829            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16830                match &parsed_error.code[..] {
16831                    "NoSuchEntity" => {
16832                        return RusotoError::Service(GetSSHPublicKeyError::NoSuchEntity(
16833                            parsed_error.message,
16834                        ))
16835                    }
16836                    "UnrecognizedPublicKeyEncoding" => {
16837                        return RusotoError::Service(
16838                            GetSSHPublicKeyError::UnrecognizedPublicKeyEncoding(
16839                                parsed_error.message,
16840                            ),
16841                        )
16842                    }
16843                    _ => {}
16844                }
16845            }
16846        }
16847        RusotoError::Unknown(res)
16848    }
16849
16850    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16851    where
16852        T: Peek + Next,
16853    {
16854        xml_util::start_element("ErrorResponse", stack)?;
16855        XmlErrorDeserializer::deserialize("Error", stack)
16856    }
16857}
16858impl fmt::Display for GetSSHPublicKeyError {
16859    #[allow(unused_variables)]
16860    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16861        match *self {
16862            GetSSHPublicKeyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16863            GetSSHPublicKeyError::UnrecognizedPublicKeyEncoding(ref cause) => {
16864                write!(f, "{}", cause)
16865            }
16866        }
16867    }
16868}
16869impl Error for GetSSHPublicKeyError {}
16870/// Errors returned by GetServerCertificate
16871#[derive(Debug, PartialEq)]
16872pub enum GetServerCertificateError {
16873    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16874    NoSuchEntity(String),
16875    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
16876    ServiceFailure(String),
16877}
16878
16879impl GetServerCertificateError {
16880    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetServerCertificateError> {
16881        {
16882            let reader = EventReader::new(res.body.as_ref());
16883            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16884            find_start_element(&mut stack);
16885            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16886                match &parsed_error.code[..] {
16887                    "NoSuchEntity" => {
16888                        return RusotoError::Service(GetServerCertificateError::NoSuchEntity(
16889                            parsed_error.message,
16890                        ))
16891                    }
16892                    "ServiceFailure" => {
16893                        return RusotoError::Service(GetServerCertificateError::ServiceFailure(
16894                            parsed_error.message,
16895                        ))
16896                    }
16897                    _ => {}
16898                }
16899            }
16900        }
16901        RusotoError::Unknown(res)
16902    }
16903
16904    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16905    where
16906        T: Peek + Next,
16907    {
16908        xml_util::start_element("ErrorResponse", stack)?;
16909        XmlErrorDeserializer::deserialize("Error", stack)
16910    }
16911}
16912impl fmt::Display for GetServerCertificateError {
16913    #[allow(unused_variables)]
16914    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16915        match *self {
16916            GetServerCertificateError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16917            GetServerCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
16918        }
16919    }
16920}
16921impl Error for GetServerCertificateError {}
16922/// Errors returned by GetServiceLastAccessedDetails
16923#[derive(Debug, PartialEq)]
16924pub enum GetServiceLastAccessedDetailsError {
16925    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
16926    InvalidInput(String),
16927    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16928    NoSuchEntity(String),
16929}
16930
16931impl GetServiceLastAccessedDetailsError {
16932    pub fn from_response(
16933        res: BufferedHttpResponse,
16934    ) -> RusotoError<GetServiceLastAccessedDetailsError> {
16935        {
16936            let reader = EventReader::new(res.body.as_ref());
16937            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16938            find_start_element(&mut stack);
16939            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16940                match &parsed_error.code[..] {
16941                    "InvalidInput" => {
16942                        return RusotoError::Service(
16943                            GetServiceLastAccessedDetailsError::InvalidInput(parsed_error.message),
16944                        )
16945                    }
16946                    "NoSuchEntity" => {
16947                        return RusotoError::Service(
16948                            GetServiceLastAccessedDetailsError::NoSuchEntity(parsed_error.message),
16949                        )
16950                    }
16951                    _ => {}
16952                }
16953            }
16954        }
16955        RusotoError::Unknown(res)
16956    }
16957
16958    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
16959    where
16960        T: Peek + Next,
16961    {
16962        xml_util::start_element("ErrorResponse", stack)?;
16963        XmlErrorDeserializer::deserialize("Error", stack)
16964    }
16965}
16966impl fmt::Display for GetServiceLastAccessedDetailsError {
16967    #[allow(unused_variables)]
16968    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16969        match *self {
16970            GetServiceLastAccessedDetailsError::InvalidInput(ref cause) => write!(f, "{}", cause),
16971            GetServiceLastAccessedDetailsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
16972        }
16973    }
16974}
16975impl Error for GetServiceLastAccessedDetailsError {}
16976/// Errors returned by GetServiceLastAccessedDetailsWithEntities
16977#[derive(Debug, PartialEq)]
16978pub enum GetServiceLastAccessedDetailsWithEntitiesError {
16979    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
16980    InvalidInput(String),
16981    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
16982    NoSuchEntity(String),
16983}
16984
16985impl GetServiceLastAccessedDetailsWithEntitiesError {
16986    pub fn from_response(
16987        res: BufferedHttpResponse,
16988    ) -> RusotoError<GetServiceLastAccessedDetailsWithEntitiesError> {
16989        {
16990            let reader = EventReader::new(res.body.as_ref());
16991            let mut stack = XmlResponse::new(reader.into_iter().peekable());
16992            find_start_element(&mut stack);
16993            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
16994                match &parsed_error.code[..] {
16995                    "InvalidInput" => {
16996                        return RusotoError::Service(
16997                            GetServiceLastAccessedDetailsWithEntitiesError::InvalidInput(
16998                                parsed_error.message,
16999                            ),
17000                        )
17001                    }
17002                    "NoSuchEntity" => {
17003                        return RusotoError::Service(
17004                            GetServiceLastAccessedDetailsWithEntitiesError::NoSuchEntity(
17005                                parsed_error.message,
17006                            ),
17007                        )
17008                    }
17009                    _ => {}
17010                }
17011            }
17012        }
17013        RusotoError::Unknown(res)
17014    }
17015
17016    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17017    where
17018        T: Peek + Next,
17019    {
17020        xml_util::start_element("ErrorResponse", stack)?;
17021        XmlErrorDeserializer::deserialize("Error", stack)
17022    }
17023}
17024impl fmt::Display for GetServiceLastAccessedDetailsWithEntitiesError {
17025    #[allow(unused_variables)]
17026    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17027        match *self {
17028            GetServiceLastAccessedDetailsWithEntitiesError::InvalidInput(ref cause) => {
17029                write!(f, "{}", cause)
17030            }
17031            GetServiceLastAccessedDetailsWithEntitiesError::NoSuchEntity(ref cause) => {
17032                write!(f, "{}", cause)
17033            }
17034        }
17035    }
17036}
17037impl Error for GetServiceLastAccessedDetailsWithEntitiesError {}
17038/// Errors returned by GetServiceLinkedRoleDeletionStatus
17039#[derive(Debug, PartialEq)]
17040pub enum GetServiceLinkedRoleDeletionStatusError {
17041    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
17042    InvalidInput(String),
17043    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17044    NoSuchEntity(String),
17045    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17046    ServiceFailure(String),
17047}
17048
17049impl GetServiceLinkedRoleDeletionStatusError {
17050    pub fn from_response(
17051        res: BufferedHttpResponse,
17052    ) -> RusotoError<GetServiceLinkedRoleDeletionStatusError> {
17053        {
17054            let reader = EventReader::new(res.body.as_ref());
17055            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17056            find_start_element(&mut stack);
17057            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17058                match &parsed_error.code[..] {
17059                    "InvalidInput" => {
17060                        return RusotoError::Service(
17061                            GetServiceLinkedRoleDeletionStatusError::InvalidInput(
17062                                parsed_error.message,
17063                            ),
17064                        )
17065                    }
17066                    "NoSuchEntity" => {
17067                        return RusotoError::Service(
17068                            GetServiceLinkedRoleDeletionStatusError::NoSuchEntity(
17069                                parsed_error.message,
17070                            ),
17071                        )
17072                    }
17073                    "ServiceFailure" => {
17074                        return RusotoError::Service(
17075                            GetServiceLinkedRoleDeletionStatusError::ServiceFailure(
17076                                parsed_error.message,
17077                            ),
17078                        )
17079                    }
17080                    _ => {}
17081                }
17082            }
17083        }
17084        RusotoError::Unknown(res)
17085    }
17086
17087    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17088    where
17089        T: Peek + Next,
17090    {
17091        xml_util::start_element("ErrorResponse", stack)?;
17092        XmlErrorDeserializer::deserialize("Error", stack)
17093    }
17094}
17095impl fmt::Display for GetServiceLinkedRoleDeletionStatusError {
17096    #[allow(unused_variables)]
17097    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17098        match *self {
17099            GetServiceLinkedRoleDeletionStatusError::InvalidInput(ref cause) => {
17100                write!(f, "{}", cause)
17101            }
17102            GetServiceLinkedRoleDeletionStatusError::NoSuchEntity(ref cause) => {
17103                write!(f, "{}", cause)
17104            }
17105            GetServiceLinkedRoleDeletionStatusError::ServiceFailure(ref cause) => {
17106                write!(f, "{}", cause)
17107            }
17108        }
17109    }
17110}
17111impl Error for GetServiceLinkedRoleDeletionStatusError {}
17112/// Errors returned by GetUser
17113#[derive(Debug, PartialEq)]
17114pub enum GetUserError {
17115    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17116    NoSuchEntity(String),
17117    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17118    ServiceFailure(String),
17119}
17120
17121impl GetUserError {
17122    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetUserError> {
17123        {
17124            let reader = EventReader::new(res.body.as_ref());
17125            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17126            find_start_element(&mut stack);
17127            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17128                match &parsed_error.code[..] {
17129                    "NoSuchEntity" => {
17130                        return RusotoError::Service(GetUserError::NoSuchEntity(
17131                            parsed_error.message,
17132                        ))
17133                    }
17134                    "ServiceFailure" => {
17135                        return RusotoError::Service(GetUserError::ServiceFailure(
17136                            parsed_error.message,
17137                        ))
17138                    }
17139                    _ => {}
17140                }
17141            }
17142        }
17143        RusotoError::Unknown(res)
17144    }
17145
17146    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17147    where
17148        T: Peek + Next,
17149    {
17150        xml_util::start_element("ErrorResponse", stack)?;
17151        XmlErrorDeserializer::deserialize("Error", stack)
17152    }
17153}
17154impl fmt::Display for GetUserError {
17155    #[allow(unused_variables)]
17156    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17157        match *self {
17158            GetUserError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17159            GetUserError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17160        }
17161    }
17162}
17163impl Error for GetUserError {}
17164/// Errors returned by GetUserPolicy
17165#[derive(Debug, PartialEq)]
17166pub enum GetUserPolicyError {
17167    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17168    NoSuchEntity(String),
17169    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17170    ServiceFailure(String),
17171}
17172
17173impl GetUserPolicyError {
17174    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetUserPolicyError> {
17175        {
17176            let reader = EventReader::new(res.body.as_ref());
17177            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17178            find_start_element(&mut stack);
17179            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17180                match &parsed_error.code[..] {
17181                    "NoSuchEntity" => {
17182                        return RusotoError::Service(GetUserPolicyError::NoSuchEntity(
17183                            parsed_error.message,
17184                        ))
17185                    }
17186                    "ServiceFailure" => {
17187                        return RusotoError::Service(GetUserPolicyError::ServiceFailure(
17188                            parsed_error.message,
17189                        ))
17190                    }
17191                    _ => {}
17192                }
17193            }
17194        }
17195        RusotoError::Unknown(res)
17196    }
17197
17198    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17199    where
17200        T: Peek + Next,
17201    {
17202        xml_util::start_element("ErrorResponse", stack)?;
17203        XmlErrorDeserializer::deserialize("Error", stack)
17204    }
17205}
17206impl fmt::Display for GetUserPolicyError {
17207    #[allow(unused_variables)]
17208    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17209        match *self {
17210            GetUserPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17211            GetUserPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17212        }
17213    }
17214}
17215impl Error for GetUserPolicyError {}
17216/// Errors returned by ListAccessKeys
17217#[derive(Debug, PartialEq)]
17218pub enum ListAccessKeysError {
17219    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17220    NoSuchEntity(String),
17221    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17222    ServiceFailure(String),
17223}
17224
17225impl ListAccessKeysError {
17226    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListAccessKeysError> {
17227        {
17228            let reader = EventReader::new(res.body.as_ref());
17229            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17230            find_start_element(&mut stack);
17231            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17232                match &parsed_error.code[..] {
17233                    "NoSuchEntity" => {
17234                        return RusotoError::Service(ListAccessKeysError::NoSuchEntity(
17235                            parsed_error.message,
17236                        ))
17237                    }
17238                    "ServiceFailure" => {
17239                        return RusotoError::Service(ListAccessKeysError::ServiceFailure(
17240                            parsed_error.message,
17241                        ))
17242                    }
17243                    _ => {}
17244                }
17245            }
17246        }
17247        RusotoError::Unknown(res)
17248    }
17249
17250    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17251    where
17252        T: Peek + Next,
17253    {
17254        xml_util::start_element("ErrorResponse", stack)?;
17255        XmlErrorDeserializer::deserialize("Error", stack)
17256    }
17257}
17258impl fmt::Display for ListAccessKeysError {
17259    #[allow(unused_variables)]
17260    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17261        match *self {
17262            ListAccessKeysError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17263            ListAccessKeysError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17264        }
17265    }
17266}
17267impl Error for ListAccessKeysError {}
17268/// Errors returned by ListAccountAliases
17269#[derive(Debug, PartialEq)]
17270pub enum ListAccountAliasesError {
17271    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17272    ServiceFailure(String),
17273}
17274
17275impl ListAccountAliasesError {
17276    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListAccountAliasesError> {
17277        {
17278            let reader = EventReader::new(res.body.as_ref());
17279            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17280            find_start_element(&mut stack);
17281            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17282                match &parsed_error.code[..] {
17283                    "ServiceFailure" => {
17284                        return RusotoError::Service(ListAccountAliasesError::ServiceFailure(
17285                            parsed_error.message,
17286                        ))
17287                    }
17288                    _ => {}
17289                }
17290            }
17291        }
17292        RusotoError::Unknown(res)
17293    }
17294
17295    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17296    where
17297        T: Peek + Next,
17298    {
17299        xml_util::start_element("ErrorResponse", stack)?;
17300        XmlErrorDeserializer::deserialize("Error", stack)
17301    }
17302}
17303impl fmt::Display for ListAccountAliasesError {
17304    #[allow(unused_variables)]
17305    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17306        match *self {
17307            ListAccountAliasesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17308        }
17309    }
17310}
17311impl Error for ListAccountAliasesError {}
17312/// Errors returned by ListAttachedGroupPolicies
17313#[derive(Debug, PartialEq)]
17314pub enum ListAttachedGroupPoliciesError {
17315    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
17316    InvalidInput(String),
17317    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17318    NoSuchEntity(String),
17319    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17320    ServiceFailure(String),
17321}
17322
17323impl ListAttachedGroupPoliciesError {
17324    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListAttachedGroupPoliciesError> {
17325        {
17326            let reader = EventReader::new(res.body.as_ref());
17327            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17328            find_start_element(&mut stack);
17329            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17330                match &parsed_error.code[..] {
17331                    "InvalidInput" => {
17332                        return RusotoError::Service(ListAttachedGroupPoliciesError::InvalidInput(
17333                            parsed_error.message,
17334                        ))
17335                    }
17336                    "NoSuchEntity" => {
17337                        return RusotoError::Service(ListAttachedGroupPoliciesError::NoSuchEntity(
17338                            parsed_error.message,
17339                        ))
17340                    }
17341                    "ServiceFailure" => {
17342                        return RusotoError::Service(
17343                            ListAttachedGroupPoliciesError::ServiceFailure(parsed_error.message),
17344                        )
17345                    }
17346                    _ => {}
17347                }
17348            }
17349        }
17350        RusotoError::Unknown(res)
17351    }
17352
17353    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17354    where
17355        T: Peek + Next,
17356    {
17357        xml_util::start_element("ErrorResponse", stack)?;
17358        XmlErrorDeserializer::deserialize("Error", stack)
17359    }
17360}
17361impl fmt::Display for ListAttachedGroupPoliciesError {
17362    #[allow(unused_variables)]
17363    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17364        match *self {
17365            ListAttachedGroupPoliciesError::InvalidInput(ref cause) => write!(f, "{}", cause),
17366            ListAttachedGroupPoliciesError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17367            ListAttachedGroupPoliciesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17368        }
17369    }
17370}
17371impl Error for ListAttachedGroupPoliciesError {}
17372/// Errors returned by ListAttachedRolePolicies
17373#[derive(Debug, PartialEq)]
17374pub enum ListAttachedRolePoliciesError {
17375    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
17376    InvalidInput(String),
17377    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17378    NoSuchEntity(String),
17379    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17380    ServiceFailure(String),
17381}
17382
17383impl ListAttachedRolePoliciesError {
17384    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListAttachedRolePoliciesError> {
17385        {
17386            let reader = EventReader::new(res.body.as_ref());
17387            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17388            find_start_element(&mut stack);
17389            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17390                match &parsed_error.code[..] {
17391                    "InvalidInput" => {
17392                        return RusotoError::Service(ListAttachedRolePoliciesError::InvalidInput(
17393                            parsed_error.message,
17394                        ))
17395                    }
17396                    "NoSuchEntity" => {
17397                        return RusotoError::Service(ListAttachedRolePoliciesError::NoSuchEntity(
17398                            parsed_error.message,
17399                        ))
17400                    }
17401                    "ServiceFailure" => {
17402                        return RusotoError::Service(ListAttachedRolePoliciesError::ServiceFailure(
17403                            parsed_error.message,
17404                        ))
17405                    }
17406                    _ => {}
17407                }
17408            }
17409        }
17410        RusotoError::Unknown(res)
17411    }
17412
17413    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17414    where
17415        T: Peek + Next,
17416    {
17417        xml_util::start_element("ErrorResponse", stack)?;
17418        XmlErrorDeserializer::deserialize("Error", stack)
17419    }
17420}
17421impl fmt::Display for ListAttachedRolePoliciesError {
17422    #[allow(unused_variables)]
17423    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17424        match *self {
17425            ListAttachedRolePoliciesError::InvalidInput(ref cause) => write!(f, "{}", cause),
17426            ListAttachedRolePoliciesError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17427            ListAttachedRolePoliciesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17428        }
17429    }
17430}
17431impl Error for ListAttachedRolePoliciesError {}
17432/// Errors returned by ListAttachedUserPolicies
17433#[derive(Debug, PartialEq)]
17434pub enum ListAttachedUserPoliciesError {
17435    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
17436    InvalidInput(String),
17437    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17438    NoSuchEntity(String),
17439    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17440    ServiceFailure(String),
17441}
17442
17443impl ListAttachedUserPoliciesError {
17444    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListAttachedUserPoliciesError> {
17445        {
17446            let reader = EventReader::new(res.body.as_ref());
17447            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17448            find_start_element(&mut stack);
17449            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17450                match &parsed_error.code[..] {
17451                    "InvalidInput" => {
17452                        return RusotoError::Service(ListAttachedUserPoliciesError::InvalidInput(
17453                            parsed_error.message,
17454                        ))
17455                    }
17456                    "NoSuchEntity" => {
17457                        return RusotoError::Service(ListAttachedUserPoliciesError::NoSuchEntity(
17458                            parsed_error.message,
17459                        ))
17460                    }
17461                    "ServiceFailure" => {
17462                        return RusotoError::Service(ListAttachedUserPoliciesError::ServiceFailure(
17463                            parsed_error.message,
17464                        ))
17465                    }
17466                    _ => {}
17467                }
17468            }
17469        }
17470        RusotoError::Unknown(res)
17471    }
17472
17473    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17474    where
17475        T: Peek + Next,
17476    {
17477        xml_util::start_element("ErrorResponse", stack)?;
17478        XmlErrorDeserializer::deserialize("Error", stack)
17479    }
17480}
17481impl fmt::Display for ListAttachedUserPoliciesError {
17482    #[allow(unused_variables)]
17483    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17484        match *self {
17485            ListAttachedUserPoliciesError::InvalidInput(ref cause) => write!(f, "{}", cause),
17486            ListAttachedUserPoliciesError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17487            ListAttachedUserPoliciesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17488        }
17489    }
17490}
17491impl Error for ListAttachedUserPoliciesError {}
17492/// Errors returned by ListEntitiesForPolicy
17493#[derive(Debug, PartialEq)]
17494pub enum ListEntitiesForPolicyError {
17495    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
17496    InvalidInput(String),
17497    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17498    NoSuchEntity(String),
17499    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17500    ServiceFailure(String),
17501}
17502
17503impl ListEntitiesForPolicyError {
17504    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListEntitiesForPolicyError> {
17505        {
17506            let reader = EventReader::new(res.body.as_ref());
17507            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17508            find_start_element(&mut stack);
17509            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17510                match &parsed_error.code[..] {
17511                    "InvalidInput" => {
17512                        return RusotoError::Service(ListEntitiesForPolicyError::InvalidInput(
17513                            parsed_error.message,
17514                        ))
17515                    }
17516                    "NoSuchEntity" => {
17517                        return RusotoError::Service(ListEntitiesForPolicyError::NoSuchEntity(
17518                            parsed_error.message,
17519                        ))
17520                    }
17521                    "ServiceFailure" => {
17522                        return RusotoError::Service(ListEntitiesForPolicyError::ServiceFailure(
17523                            parsed_error.message,
17524                        ))
17525                    }
17526                    _ => {}
17527                }
17528            }
17529        }
17530        RusotoError::Unknown(res)
17531    }
17532
17533    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17534    where
17535        T: Peek + Next,
17536    {
17537        xml_util::start_element("ErrorResponse", stack)?;
17538        XmlErrorDeserializer::deserialize("Error", stack)
17539    }
17540}
17541impl fmt::Display for ListEntitiesForPolicyError {
17542    #[allow(unused_variables)]
17543    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17544        match *self {
17545            ListEntitiesForPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
17546            ListEntitiesForPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17547            ListEntitiesForPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17548        }
17549    }
17550}
17551impl Error for ListEntitiesForPolicyError {}
17552/// Errors returned by ListGroupPolicies
17553#[derive(Debug, PartialEq)]
17554pub enum ListGroupPoliciesError {
17555    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17556    NoSuchEntity(String),
17557    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17558    ServiceFailure(String),
17559}
17560
17561impl ListGroupPoliciesError {
17562    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListGroupPoliciesError> {
17563        {
17564            let reader = EventReader::new(res.body.as_ref());
17565            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17566            find_start_element(&mut stack);
17567            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17568                match &parsed_error.code[..] {
17569                    "NoSuchEntity" => {
17570                        return RusotoError::Service(ListGroupPoliciesError::NoSuchEntity(
17571                            parsed_error.message,
17572                        ))
17573                    }
17574                    "ServiceFailure" => {
17575                        return RusotoError::Service(ListGroupPoliciesError::ServiceFailure(
17576                            parsed_error.message,
17577                        ))
17578                    }
17579                    _ => {}
17580                }
17581            }
17582        }
17583        RusotoError::Unknown(res)
17584    }
17585
17586    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17587    where
17588        T: Peek + Next,
17589    {
17590        xml_util::start_element("ErrorResponse", stack)?;
17591        XmlErrorDeserializer::deserialize("Error", stack)
17592    }
17593}
17594impl fmt::Display for ListGroupPoliciesError {
17595    #[allow(unused_variables)]
17596    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17597        match *self {
17598            ListGroupPoliciesError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17599            ListGroupPoliciesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17600        }
17601    }
17602}
17603impl Error for ListGroupPoliciesError {}
17604/// Errors returned by ListGroups
17605#[derive(Debug, PartialEq)]
17606pub enum ListGroupsError {
17607    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17608    ServiceFailure(String),
17609}
17610
17611impl ListGroupsError {
17612    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListGroupsError> {
17613        {
17614            let reader = EventReader::new(res.body.as_ref());
17615            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17616            find_start_element(&mut stack);
17617            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17618                match &parsed_error.code[..] {
17619                    "ServiceFailure" => {
17620                        return RusotoError::Service(ListGroupsError::ServiceFailure(
17621                            parsed_error.message,
17622                        ))
17623                    }
17624                    _ => {}
17625                }
17626            }
17627        }
17628        RusotoError::Unknown(res)
17629    }
17630
17631    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17632    where
17633        T: Peek + Next,
17634    {
17635        xml_util::start_element("ErrorResponse", stack)?;
17636        XmlErrorDeserializer::deserialize("Error", stack)
17637    }
17638}
17639impl fmt::Display for ListGroupsError {
17640    #[allow(unused_variables)]
17641    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17642        match *self {
17643            ListGroupsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17644        }
17645    }
17646}
17647impl Error for ListGroupsError {}
17648/// Errors returned by ListGroupsForUser
17649#[derive(Debug, PartialEq)]
17650pub enum ListGroupsForUserError {
17651    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17652    NoSuchEntity(String),
17653    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17654    ServiceFailure(String),
17655}
17656
17657impl ListGroupsForUserError {
17658    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListGroupsForUserError> {
17659        {
17660            let reader = EventReader::new(res.body.as_ref());
17661            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17662            find_start_element(&mut stack);
17663            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17664                match &parsed_error.code[..] {
17665                    "NoSuchEntity" => {
17666                        return RusotoError::Service(ListGroupsForUserError::NoSuchEntity(
17667                            parsed_error.message,
17668                        ))
17669                    }
17670                    "ServiceFailure" => {
17671                        return RusotoError::Service(ListGroupsForUserError::ServiceFailure(
17672                            parsed_error.message,
17673                        ))
17674                    }
17675                    _ => {}
17676                }
17677            }
17678        }
17679        RusotoError::Unknown(res)
17680    }
17681
17682    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17683    where
17684        T: Peek + Next,
17685    {
17686        xml_util::start_element("ErrorResponse", stack)?;
17687        XmlErrorDeserializer::deserialize("Error", stack)
17688    }
17689}
17690impl fmt::Display for ListGroupsForUserError {
17691    #[allow(unused_variables)]
17692    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17693        match *self {
17694            ListGroupsForUserError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17695            ListGroupsForUserError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17696        }
17697    }
17698}
17699impl Error for ListGroupsForUserError {}
17700/// Errors returned by ListInstanceProfileTags
17701#[derive(Debug, PartialEq)]
17702pub enum ListInstanceProfileTagsError {
17703    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17704    NoSuchEntity(String),
17705    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17706    ServiceFailure(String),
17707}
17708
17709impl ListInstanceProfileTagsError {
17710    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListInstanceProfileTagsError> {
17711        {
17712            let reader = EventReader::new(res.body.as_ref());
17713            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17714            find_start_element(&mut stack);
17715            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17716                match &parsed_error.code[..] {
17717                    "NoSuchEntity" => {
17718                        return RusotoError::Service(ListInstanceProfileTagsError::NoSuchEntity(
17719                            parsed_error.message,
17720                        ))
17721                    }
17722                    "ServiceFailure" => {
17723                        return RusotoError::Service(ListInstanceProfileTagsError::ServiceFailure(
17724                            parsed_error.message,
17725                        ))
17726                    }
17727                    _ => {}
17728                }
17729            }
17730        }
17731        RusotoError::Unknown(res)
17732    }
17733
17734    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17735    where
17736        T: Peek + Next,
17737    {
17738        xml_util::start_element("ErrorResponse", stack)?;
17739        XmlErrorDeserializer::deserialize("Error", stack)
17740    }
17741}
17742impl fmt::Display for ListInstanceProfileTagsError {
17743    #[allow(unused_variables)]
17744    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17745        match *self {
17746            ListInstanceProfileTagsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17747            ListInstanceProfileTagsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17748        }
17749    }
17750}
17751impl Error for ListInstanceProfileTagsError {}
17752/// Errors returned by ListInstanceProfiles
17753#[derive(Debug, PartialEq)]
17754pub enum ListInstanceProfilesError {
17755    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17756    ServiceFailure(String),
17757}
17758
17759impl ListInstanceProfilesError {
17760    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListInstanceProfilesError> {
17761        {
17762            let reader = EventReader::new(res.body.as_ref());
17763            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17764            find_start_element(&mut stack);
17765            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17766                match &parsed_error.code[..] {
17767                    "ServiceFailure" => {
17768                        return RusotoError::Service(ListInstanceProfilesError::ServiceFailure(
17769                            parsed_error.message,
17770                        ))
17771                    }
17772                    _ => {}
17773                }
17774            }
17775        }
17776        RusotoError::Unknown(res)
17777    }
17778
17779    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17780    where
17781        T: Peek + Next,
17782    {
17783        xml_util::start_element("ErrorResponse", stack)?;
17784        XmlErrorDeserializer::deserialize("Error", stack)
17785    }
17786}
17787impl fmt::Display for ListInstanceProfilesError {
17788    #[allow(unused_variables)]
17789    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17790        match *self {
17791            ListInstanceProfilesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17792        }
17793    }
17794}
17795impl Error for ListInstanceProfilesError {}
17796/// Errors returned by ListInstanceProfilesForRole
17797#[derive(Debug, PartialEq)]
17798pub enum ListInstanceProfilesForRoleError {
17799    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17800    NoSuchEntity(String),
17801    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17802    ServiceFailure(String),
17803}
17804
17805impl ListInstanceProfilesForRoleError {
17806    pub fn from_response(
17807        res: BufferedHttpResponse,
17808    ) -> RusotoError<ListInstanceProfilesForRoleError> {
17809        {
17810            let reader = EventReader::new(res.body.as_ref());
17811            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17812            find_start_element(&mut stack);
17813            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17814                match &parsed_error.code[..] {
17815                    "NoSuchEntity" => {
17816                        return RusotoError::Service(
17817                            ListInstanceProfilesForRoleError::NoSuchEntity(parsed_error.message),
17818                        )
17819                    }
17820                    "ServiceFailure" => {
17821                        return RusotoError::Service(
17822                            ListInstanceProfilesForRoleError::ServiceFailure(parsed_error.message),
17823                        )
17824                    }
17825                    _ => {}
17826                }
17827            }
17828        }
17829        RusotoError::Unknown(res)
17830    }
17831
17832    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17833    where
17834        T: Peek + Next,
17835    {
17836        xml_util::start_element("ErrorResponse", stack)?;
17837        XmlErrorDeserializer::deserialize("Error", stack)
17838    }
17839}
17840impl fmt::Display for ListInstanceProfilesForRoleError {
17841    #[allow(unused_variables)]
17842    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17843        match *self {
17844            ListInstanceProfilesForRoleError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17845            ListInstanceProfilesForRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17846        }
17847    }
17848}
17849impl Error for ListInstanceProfilesForRoleError {}
17850/// Errors returned by ListMFADeviceTags
17851#[derive(Debug, PartialEq)]
17852pub enum ListMFADeviceTagsError {
17853    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
17854    InvalidInput(String),
17855    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17856    NoSuchEntity(String),
17857    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17858    ServiceFailure(String),
17859}
17860
17861impl ListMFADeviceTagsError {
17862    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListMFADeviceTagsError> {
17863        {
17864            let reader = EventReader::new(res.body.as_ref());
17865            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17866            find_start_element(&mut stack);
17867            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17868                match &parsed_error.code[..] {
17869                    "InvalidInput" => {
17870                        return RusotoError::Service(ListMFADeviceTagsError::InvalidInput(
17871                            parsed_error.message,
17872                        ))
17873                    }
17874                    "NoSuchEntity" => {
17875                        return RusotoError::Service(ListMFADeviceTagsError::NoSuchEntity(
17876                            parsed_error.message,
17877                        ))
17878                    }
17879                    "ServiceFailure" => {
17880                        return RusotoError::Service(ListMFADeviceTagsError::ServiceFailure(
17881                            parsed_error.message,
17882                        ))
17883                    }
17884                    _ => {}
17885                }
17886            }
17887        }
17888        RusotoError::Unknown(res)
17889    }
17890
17891    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17892    where
17893        T: Peek + Next,
17894    {
17895        xml_util::start_element("ErrorResponse", stack)?;
17896        XmlErrorDeserializer::deserialize("Error", stack)
17897    }
17898}
17899impl fmt::Display for ListMFADeviceTagsError {
17900    #[allow(unused_variables)]
17901    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17902        match *self {
17903            ListMFADeviceTagsError::InvalidInput(ref cause) => write!(f, "{}", cause),
17904            ListMFADeviceTagsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17905            ListMFADeviceTagsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17906        }
17907    }
17908}
17909impl Error for ListMFADeviceTagsError {}
17910/// Errors returned by ListMFADevices
17911#[derive(Debug, PartialEq)]
17912pub enum ListMFADevicesError {
17913    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17914    NoSuchEntity(String),
17915    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17916    ServiceFailure(String),
17917}
17918
17919impl ListMFADevicesError {
17920    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListMFADevicesError> {
17921        {
17922            let reader = EventReader::new(res.body.as_ref());
17923            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17924            find_start_element(&mut stack);
17925            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17926                match &parsed_error.code[..] {
17927                    "NoSuchEntity" => {
17928                        return RusotoError::Service(ListMFADevicesError::NoSuchEntity(
17929                            parsed_error.message,
17930                        ))
17931                    }
17932                    "ServiceFailure" => {
17933                        return RusotoError::Service(ListMFADevicesError::ServiceFailure(
17934                            parsed_error.message,
17935                        ))
17936                    }
17937                    _ => {}
17938                }
17939            }
17940        }
17941        RusotoError::Unknown(res)
17942    }
17943
17944    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
17945    where
17946        T: Peek + Next,
17947    {
17948        xml_util::start_element("ErrorResponse", stack)?;
17949        XmlErrorDeserializer::deserialize("Error", stack)
17950    }
17951}
17952impl fmt::Display for ListMFADevicesError {
17953    #[allow(unused_variables)]
17954    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17955        match *self {
17956            ListMFADevicesError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
17957            ListMFADevicesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
17958        }
17959    }
17960}
17961impl Error for ListMFADevicesError {}
17962/// Errors returned by ListOpenIDConnectProviderTags
17963#[derive(Debug, PartialEq)]
17964pub enum ListOpenIDConnectProviderTagsError {
17965    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
17966    InvalidInput(String),
17967    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
17968    NoSuchEntity(String),
17969    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
17970    ServiceFailure(String),
17971}
17972
17973impl ListOpenIDConnectProviderTagsError {
17974    pub fn from_response(
17975        res: BufferedHttpResponse,
17976    ) -> RusotoError<ListOpenIDConnectProviderTagsError> {
17977        {
17978            let reader = EventReader::new(res.body.as_ref());
17979            let mut stack = XmlResponse::new(reader.into_iter().peekable());
17980            find_start_element(&mut stack);
17981            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
17982                match &parsed_error.code[..] {
17983                    "InvalidInput" => {
17984                        return RusotoError::Service(
17985                            ListOpenIDConnectProviderTagsError::InvalidInput(parsed_error.message),
17986                        )
17987                    }
17988                    "NoSuchEntity" => {
17989                        return RusotoError::Service(
17990                            ListOpenIDConnectProviderTagsError::NoSuchEntity(parsed_error.message),
17991                        )
17992                    }
17993                    "ServiceFailure" => {
17994                        return RusotoError::Service(
17995                            ListOpenIDConnectProviderTagsError::ServiceFailure(
17996                                parsed_error.message,
17997                            ),
17998                        )
17999                    }
18000                    _ => {}
18001                }
18002            }
18003        }
18004        RusotoError::Unknown(res)
18005    }
18006
18007    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18008    where
18009        T: Peek + Next,
18010    {
18011        xml_util::start_element("ErrorResponse", stack)?;
18012        XmlErrorDeserializer::deserialize("Error", stack)
18013    }
18014}
18015impl fmt::Display for ListOpenIDConnectProviderTagsError {
18016    #[allow(unused_variables)]
18017    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18018        match *self {
18019            ListOpenIDConnectProviderTagsError::InvalidInput(ref cause) => write!(f, "{}", cause),
18020            ListOpenIDConnectProviderTagsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18021            ListOpenIDConnectProviderTagsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18022        }
18023    }
18024}
18025impl Error for ListOpenIDConnectProviderTagsError {}
18026/// Errors returned by ListOpenIDConnectProviders
18027#[derive(Debug, PartialEq)]
18028pub enum ListOpenIDConnectProvidersError {
18029    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18030    ServiceFailure(String),
18031}
18032
18033impl ListOpenIDConnectProvidersError {
18034    pub fn from_response(
18035        res: BufferedHttpResponse,
18036    ) -> RusotoError<ListOpenIDConnectProvidersError> {
18037        {
18038            let reader = EventReader::new(res.body.as_ref());
18039            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18040            find_start_element(&mut stack);
18041            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18042                match &parsed_error.code[..] {
18043                    "ServiceFailure" => {
18044                        return RusotoError::Service(
18045                            ListOpenIDConnectProvidersError::ServiceFailure(parsed_error.message),
18046                        )
18047                    }
18048                    _ => {}
18049                }
18050            }
18051        }
18052        RusotoError::Unknown(res)
18053    }
18054
18055    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18056    where
18057        T: Peek + Next,
18058    {
18059        xml_util::start_element("ErrorResponse", stack)?;
18060        XmlErrorDeserializer::deserialize("Error", stack)
18061    }
18062}
18063impl fmt::Display for ListOpenIDConnectProvidersError {
18064    #[allow(unused_variables)]
18065    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18066        match *self {
18067            ListOpenIDConnectProvidersError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18068        }
18069    }
18070}
18071impl Error for ListOpenIDConnectProvidersError {}
18072/// Errors returned by ListPolicies
18073#[derive(Debug, PartialEq)]
18074pub enum ListPoliciesError {
18075    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18076    ServiceFailure(String),
18077}
18078
18079impl ListPoliciesError {
18080    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListPoliciesError> {
18081        {
18082            let reader = EventReader::new(res.body.as_ref());
18083            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18084            find_start_element(&mut stack);
18085            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18086                match &parsed_error.code[..] {
18087                    "ServiceFailure" => {
18088                        return RusotoError::Service(ListPoliciesError::ServiceFailure(
18089                            parsed_error.message,
18090                        ))
18091                    }
18092                    _ => {}
18093                }
18094            }
18095        }
18096        RusotoError::Unknown(res)
18097    }
18098
18099    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18100    where
18101        T: Peek + Next,
18102    {
18103        xml_util::start_element("ErrorResponse", stack)?;
18104        XmlErrorDeserializer::deserialize("Error", stack)
18105    }
18106}
18107impl fmt::Display for ListPoliciesError {
18108    #[allow(unused_variables)]
18109    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18110        match *self {
18111            ListPoliciesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18112        }
18113    }
18114}
18115impl Error for ListPoliciesError {}
18116/// Errors returned by ListPoliciesGrantingServiceAccess
18117#[derive(Debug, PartialEq)]
18118pub enum ListPoliciesGrantingServiceAccessError {
18119    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
18120    InvalidInput(String),
18121    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18122    NoSuchEntity(String),
18123}
18124
18125impl ListPoliciesGrantingServiceAccessError {
18126    pub fn from_response(
18127        res: BufferedHttpResponse,
18128    ) -> RusotoError<ListPoliciesGrantingServiceAccessError> {
18129        {
18130            let reader = EventReader::new(res.body.as_ref());
18131            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18132            find_start_element(&mut stack);
18133            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18134                match &parsed_error.code[..] {
18135                    "InvalidInput" => {
18136                        return RusotoError::Service(
18137                            ListPoliciesGrantingServiceAccessError::InvalidInput(
18138                                parsed_error.message,
18139                            ),
18140                        )
18141                    }
18142                    "NoSuchEntity" => {
18143                        return RusotoError::Service(
18144                            ListPoliciesGrantingServiceAccessError::NoSuchEntity(
18145                                parsed_error.message,
18146                            ),
18147                        )
18148                    }
18149                    _ => {}
18150                }
18151            }
18152        }
18153        RusotoError::Unknown(res)
18154    }
18155
18156    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18157    where
18158        T: Peek + Next,
18159    {
18160        xml_util::start_element("ErrorResponse", stack)?;
18161        XmlErrorDeserializer::deserialize("Error", stack)
18162    }
18163}
18164impl fmt::Display for ListPoliciesGrantingServiceAccessError {
18165    #[allow(unused_variables)]
18166    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18167        match *self {
18168            ListPoliciesGrantingServiceAccessError::InvalidInput(ref cause) => {
18169                write!(f, "{}", cause)
18170            }
18171            ListPoliciesGrantingServiceAccessError::NoSuchEntity(ref cause) => {
18172                write!(f, "{}", cause)
18173            }
18174        }
18175    }
18176}
18177impl Error for ListPoliciesGrantingServiceAccessError {}
18178/// Errors returned by ListPolicyTags
18179#[derive(Debug, PartialEq)]
18180pub enum ListPolicyTagsError {
18181    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
18182    InvalidInput(String),
18183    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18184    NoSuchEntity(String),
18185    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18186    ServiceFailure(String),
18187}
18188
18189impl ListPolicyTagsError {
18190    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListPolicyTagsError> {
18191        {
18192            let reader = EventReader::new(res.body.as_ref());
18193            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18194            find_start_element(&mut stack);
18195            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18196                match &parsed_error.code[..] {
18197                    "InvalidInput" => {
18198                        return RusotoError::Service(ListPolicyTagsError::InvalidInput(
18199                            parsed_error.message,
18200                        ))
18201                    }
18202                    "NoSuchEntity" => {
18203                        return RusotoError::Service(ListPolicyTagsError::NoSuchEntity(
18204                            parsed_error.message,
18205                        ))
18206                    }
18207                    "ServiceFailure" => {
18208                        return RusotoError::Service(ListPolicyTagsError::ServiceFailure(
18209                            parsed_error.message,
18210                        ))
18211                    }
18212                    _ => {}
18213                }
18214            }
18215        }
18216        RusotoError::Unknown(res)
18217    }
18218
18219    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18220    where
18221        T: Peek + Next,
18222    {
18223        xml_util::start_element("ErrorResponse", stack)?;
18224        XmlErrorDeserializer::deserialize("Error", stack)
18225    }
18226}
18227impl fmt::Display for ListPolicyTagsError {
18228    #[allow(unused_variables)]
18229    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18230        match *self {
18231            ListPolicyTagsError::InvalidInput(ref cause) => write!(f, "{}", cause),
18232            ListPolicyTagsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18233            ListPolicyTagsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18234        }
18235    }
18236}
18237impl Error for ListPolicyTagsError {}
18238/// Errors returned by ListPolicyVersions
18239#[derive(Debug, PartialEq)]
18240pub enum ListPolicyVersionsError {
18241    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
18242    InvalidInput(String),
18243    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18244    NoSuchEntity(String),
18245    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18246    ServiceFailure(String),
18247}
18248
18249impl ListPolicyVersionsError {
18250    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListPolicyVersionsError> {
18251        {
18252            let reader = EventReader::new(res.body.as_ref());
18253            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18254            find_start_element(&mut stack);
18255            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18256                match &parsed_error.code[..] {
18257                    "InvalidInput" => {
18258                        return RusotoError::Service(ListPolicyVersionsError::InvalidInput(
18259                            parsed_error.message,
18260                        ))
18261                    }
18262                    "NoSuchEntity" => {
18263                        return RusotoError::Service(ListPolicyVersionsError::NoSuchEntity(
18264                            parsed_error.message,
18265                        ))
18266                    }
18267                    "ServiceFailure" => {
18268                        return RusotoError::Service(ListPolicyVersionsError::ServiceFailure(
18269                            parsed_error.message,
18270                        ))
18271                    }
18272                    _ => {}
18273                }
18274            }
18275        }
18276        RusotoError::Unknown(res)
18277    }
18278
18279    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18280    where
18281        T: Peek + Next,
18282    {
18283        xml_util::start_element("ErrorResponse", stack)?;
18284        XmlErrorDeserializer::deserialize("Error", stack)
18285    }
18286}
18287impl fmt::Display for ListPolicyVersionsError {
18288    #[allow(unused_variables)]
18289    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18290        match *self {
18291            ListPolicyVersionsError::InvalidInput(ref cause) => write!(f, "{}", cause),
18292            ListPolicyVersionsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18293            ListPolicyVersionsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18294        }
18295    }
18296}
18297impl Error for ListPolicyVersionsError {}
18298/// Errors returned by ListRolePolicies
18299#[derive(Debug, PartialEq)]
18300pub enum ListRolePoliciesError {
18301    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18302    NoSuchEntity(String),
18303    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18304    ServiceFailure(String),
18305}
18306
18307impl ListRolePoliciesError {
18308    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListRolePoliciesError> {
18309        {
18310            let reader = EventReader::new(res.body.as_ref());
18311            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18312            find_start_element(&mut stack);
18313            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18314                match &parsed_error.code[..] {
18315                    "NoSuchEntity" => {
18316                        return RusotoError::Service(ListRolePoliciesError::NoSuchEntity(
18317                            parsed_error.message,
18318                        ))
18319                    }
18320                    "ServiceFailure" => {
18321                        return RusotoError::Service(ListRolePoliciesError::ServiceFailure(
18322                            parsed_error.message,
18323                        ))
18324                    }
18325                    _ => {}
18326                }
18327            }
18328        }
18329        RusotoError::Unknown(res)
18330    }
18331
18332    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18333    where
18334        T: Peek + Next,
18335    {
18336        xml_util::start_element("ErrorResponse", stack)?;
18337        XmlErrorDeserializer::deserialize("Error", stack)
18338    }
18339}
18340impl fmt::Display for ListRolePoliciesError {
18341    #[allow(unused_variables)]
18342    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18343        match *self {
18344            ListRolePoliciesError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18345            ListRolePoliciesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18346        }
18347    }
18348}
18349impl Error for ListRolePoliciesError {}
18350/// Errors returned by ListRoleTags
18351#[derive(Debug, PartialEq)]
18352pub enum ListRoleTagsError {
18353    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18354    NoSuchEntity(String),
18355    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18356    ServiceFailure(String),
18357}
18358
18359impl ListRoleTagsError {
18360    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListRoleTagsError> {
18361        {
18362            let reader = EventReader::new(res.body.as_ref());
18363            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18364            find_start_element(&mut stack);
18365            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18366                match &parsed_error.code[..] {
18367                    "NoSuchEntity" => {
18368                        return RusotoError::Service(ListRoleTagsError::NoSuchEntity(
18369                            parsed_error.message,
18370                        ))
18371                    }
18372                    "ServiceFailure" => {
18373                        return RusotoError::Service(ListRoleTagsError::ServiceFailure(
18374                            parsed_error.message,
18375                        ))
18376                    }
18377                    _ => {}
18378                }
18379            }
18380        }
18381        RusotoError::Unknown(res)
18382    }
18383
18384    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18385    where
18386        T: Peek + Next,
18387    {
18388        xml_util::start_element("ErrorResponse", stack)?;
18389        XmlErrorDeserializer::deserialize("Error", stack)
18390    }
18391}
18392impl fmt::Display for ListRoleTagsError {
18393    #[allow(unused_variables)]
18394    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18395        match *self {
18396            ListRoleTagsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18397            ListRoleTagsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18398        }
18399    }
18400}
18401impl Error for ListRoleTagsError {}
18402/// Errors returned by ListRoles
18403#[derive(Debug, PartialEq)]
18404pub enum ListRolesError {
18405    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18406    ServiceFailure(String),
18407}
18408
18409impl ListRolesError {
18410    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListRolesError> {
18411        {
18412            let reader = EventReader::new(res.body.as_ref());
18413            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18414            find_start_element(&mut stack);
18415            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18416                match &parsed_error.code[..] {
18417                    "ServiceFailure" => {
18418                        return RusotoError::Service(ListRolesError::ServiceFailure(
18419                            parsed_error.message,
18420                        ))
18421                    }
18422                    _ => {}
18423                }
18424            }
18425        }
18426        RusotoError::Unknown(res)
18427    }
18428
18429    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18430    where
18431        T: Peek + Next,
18432    {
18433        xml_util::start_element("ErrorResponse", stack)?;
18434        XmlErrorDeserializer::deserialize("Error", stack)
18435    }
18436}
18437impl fmt::Display for ListRolesError {
18438    #[allow(unused_variables)]
18439    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18440        match *self {
18441            ListRolesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18442        }
18443    }
18444}
18445impl Error for ListRolesError {}
18446/// Errors returned by ListSAMLProviderTags
18447#[derive(Debug, PartialEq)]
18448pub enum ListSAMLProviderTagsError {
18449    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
18450    InvalidInput(String),
18451    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18452    NoSuchEntity(String),
18453    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18454    ServiceFailure(String),
18455}
18456
18457impl ListSAMLProviderTagsError {
18458    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSAMLProviderTagsError> {
18459        {
18460            let reader = EventReader::new(res.body.as_ref());
18461            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18462            find_start_element(&mut stack);
18463            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18464                match &parsed_error.code[..] {
18465                    "InvalidInput" => {
18466                        return RusotoError::Service(ListSAMLProviderTagsError::InvalidInput(
18467                            parsed_error.message,
18468                        ))
18469                    }
18470                    "NoSuchEntity" => {
18471                        return RusotoError::Service(ListSAMLProviderTagsError::NoSuchEntity(
18472                            parsed_error.message,
18473                        ))
18474                    }
18475                    "ServiceFailure" => {
18476                        return RusotoError::Service(ListSAMLProviderTagsError::ServiceFailure(
18477                            parsed_error.message,
18478                        ))
18479                    }
18480                    _ => {}
18481                }
18482            }
18483        }
18484        RusotoError::Unknown(res)
18485    }
18486
18487    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18488    where
18489        T: Peek + Next,
18490    {
18491        xml_util::start_element("ErrorResponse", stack)?;
18492        XmlErrorDeserializer::deserialize("Error", stack)
18493    }
18494}
18495impl fmt::Display for ListSAMLProviderTagsError {
18496    #[allow(unused_variables)]
18497    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18498        match *self {
18499            ListSAMLProviderTagsError::InvalidInput(ref cause) => write!(f, "{}", cause),
18500            ListSAMLProviderTagsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18501            ListSAMLProviderTagsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18502        }
18503    }
18504}
18505impl Error for ListSAMLProviderTagsError {}
18506/// Errors returned by ListSAMLProviders
18507#[derive(Debug, PartialEq)]
18508pub enum ListSAMLProvidersError {
18509    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18510    ServiceFailure(String),
18511}
18512
18513impl ListSAMLProvidersError {
18514    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSAMLProvidersError> {
18515        {
18516            let reader = EventReader::new(res.body.as_ref());
18517            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18518            find_start_element(&mut stack);
18519            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18520                match &parsed_error.code[..] {
18521                    "ServiceFailure" => {
18522                        return RusotoError::Service(ListSAMLProvidersError::ServiceFailure(
18523                            parsed_error.message,
18524                        ))
18525                    }
18526                    _ => {}
18527                }
18528            }
18529        }
18530        RusotoError::Unknown(res)
18531    }
18532
18533    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18534    where
18535        T: Peek + Next,
18536    {
18537        xml_util::start_element("ErrorResponse", stack)?;
18538        XmlErrorDeserializer::deserialize("Error", stack)
18539    }
18540}
18541impl fmt::Display for ListSAMLProvidersError {
18542    #[allow(unused_variables)]
18543    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18544        match *self {
18545            ListSAMLProvidersError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18546        }
18547    }
18548}
18549impl Error for ListSAMLProvidersError {}
18550/// Errors returned by ListSSHPublicKeys
18551#[derive(Debug, PartialEq)]
18552pub enum ListSSHPublicKeysError {
18553    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18554    NoSuchEntity(String),
18555}
18556
18557impl ListSSHPublicKeysError {
18558    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSSHPublicKeysError> {
18559        {
18560            let reader = EventReader::new(res.body.as_ref());
18561            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18562            find_start_element(&mut stack);
18563            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18564                match &parsed_error.code[..] {
18565                    "NoSuchEntity" => {
18566                        return RusotoError::Service(ListSSHPublicKeysError::NoSuchEntity(
18567                            parsed_error.message,
18568                        ))
18569                    }
18570                    _ => {}
18571                }
18572            }
18573        }
18574        RusotoError::Unknown(res)
18575    }
18576
18577    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18578    where
18579        T: Peek + Next,
18580    {
18581        xml_util::start_element("ErrorResponse", stack)?;
18582        XmlErrorDeserializer::deserialize("Error", stack)
18583    }
18584}
18585impl fmt::Display for ListSSHPublicKeysError {
18586    #[allow(unused_variables)]
18587    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18588        match *self {
18589            ListSSHPublicKeysError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18590        }
18591    }
18592}
18593impl Error for ListSSHPublicKeysError {}
18594/// Errors returned by ListServerCertificateTags
18595#[derive(Debug, PartialEq)]
18596pub enum ListServerCertificateTagsError {
18597    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18598    NoSuchEntity(String),
18599    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18600    ServiceFailure(String),
18601}
18602
18603impl ListServerCertificateTagsError {
18604    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListServerCertificateTagsError> {
18605        {
18606            let reader = EventReader::new(res.body.as_ref());
18607            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18608            find_start_element(&mut stack);
18609            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18610                match &parsed_error.code[..] {
18611                    "NoSuchEntity" => {
18612                        return RusotoError::Service(ListServerCertificateTagsError::NoSuchEntity(
18613                            parsed_error.message,
18614                        ))
18615                    }
18616                    "ServiceFailure" => {
18617                        return RusotoError::Service(
18618                            ListServerCertificateTagsError::ServiceFailure(parsed_error.message),
18619                        )
18620                    }
18621                    _ => {}
18622                }
18623            }
18624        }
18625        RusotoError::Unknown(res)
18626    }
18627
18628    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18629    where
18630        T: Peek + Next,
18631    {
18632        xml_util::start_element("ErrorResponse", stack)?;
18633        XmlErrorDeserializer::deserialize("Error", stack)
18634    }
18635}
18636impl fmt::Display for ListServerCertificateTagsError {
18637    #[allow(unused_variables)]
18638    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18639        match *self {
18640            ListServerCertificateTagsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18641            ListServerCertificateTagsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18642        }
18643    }
18644}
18645impl Error for ListServerCertificateTagsError {}
18646/// Errors returned by ListServerCertificates
18647#[derive(Debug, PartialEq)]
18648pub enum ListServerCertificatesError {
18649    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18650    ServiceFailure(String),
18651}
18652
18653impl ListServerCertificatesError {
18654    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListServerCertificatesError> {
18655        {
18656            let reader = EventReader::new(res.body.as_ref());
18657            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18658            find_start_element(&mut stack);
18659            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18660                match &parsed_error.code[..] {
18661                    "ServiceFailure" => {
18662                        return RusotoError::Service(ListServerCertificatesError::ServiceFailure(
18663                            parsed_error.message,
18664                        ))
18665                    }
18666                    _ => {}
18667                }
18668            }
18669        }
18670        RusotoError::Unknown(res)
18671    }
18672
18673    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18674    where
18675        T: Peek + Next,
18676    {
18677        xml_util::start_element("ErrorResponse", stack)?;
18678        XmlErrorDeserializer::deserialize("Error", stack)
18679    }
18680}
18681impl fmt::Display for ListServerCertificatesError {
18682    #[allow(unused_variables)]
18683    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18684        match *self {
18685            ListServerCertificatesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18686        }
18687    }
18688}
18689impl Error for ListServerCertificatesError {}
18690/// Errors returned by ListServiceSpecificCredentials
18691#[derive(Debug, PartialEq)]
18692pub enum ListServiceSpecificCredentialsError {
18693    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18694    NoSuchEntity(String),
18695    /// <p>The specified service does not support service-specific credentials.</p>
18696    ServiceNotSupported(String),
18697}
18698
18699impl ListServiceSpecificCredentialsError {
18700    pub fn from_response(
18701        res: BufferedHttpResponse,
18702    ) -> RusotoError<ListServiceSpecificCredentialsError> {
18703        {
18704            let reader = EventReader::new(res.body.as_ref());
18705            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18706            find_start_element(&mut stack);
18707            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18708                match &parsed_error.code[..] {
18709                    "NoSuchEntity" => {
18710                        return RusotoError::Service(
18711                            ListServiceSpecificCredentialsError::NoSuchEntity(parsed_error.message),
18712                        )
18713                    }
18714                    "NotSupportedService" => {
18715                        return RusotoError::Service(
18716                            ListServiceSpecificCredentialsError::ServiceNotSupported(
18717                                parsed_error.message,
18718                            ),
18719                        )
18720                    }
18721                    _ => {}
18722                }
18723            }
18724        }
18725        RusotoError::Unknown(res)
18726    }
18727
18728    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18729    where
18730        T: Peek + Next,
18731    {
18732        xml_util::start_element("ErrorResponse", stack)?;
18733        XmlErrorDeserializer::deserialize("Error", stack)
18734    }
18735}
18736impl fmt::Display for ListServiceSpecificCredentialsError {
18737    #[allow(unused_variables)]
18738    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18739        match *self {
18740            ListServiceSpecificCredentialsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18741            ListServiceSpecificCredentialsError::ServiceNotSupported(ref cause) => {
18742                write!(f, "{}", cause)
18743            }
18744        }
18745    }
18746}
18747impl Error for ListServiceSpecificCredentialsError {}
18748/// Errors returned by ListSigningCertificates
18749#[derive(Debug, PartialEq)]
18750pub enum ListSigningCertificatesError {
18751    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18752    NoSuchEntity(String),
18753    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18754    ServiceFailure(String),
18755}
18756
18757impl ListSigningCertificatesError {
18758    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSigningCertificatesError> {
18759        {
18760            let reader = EventReader::new(res.body.as_ref());
18761            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18762            find_start_element(&mut stack);
18763            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18764                match &parsed_error.code[..] {
18765                    "NoSuchEntity" => {
18766                        return RusotoError::Service(ListSigningCertificatesError::NoSuchEntity(
18767                            parsed_error.message,
18768                        ))
18769                    }
18770                    "ServiceFailure" => {
18771                        return RusotoError::Service(ListSigningCertificatesError::ServiceFailure(
18772                            parsed_error.message,
18773                        ))
18774                    }
18775                    _ => {}
18776                }
18777            }
18778        }
18779        RusotoError::Unknown(res)
18780    }
18781
18782    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18783    where
18784        T: Peek + Next,
18785    {
18786        xml_util::start_element("ErrorResponse", stack)?;
18787        XmlErrorDeserializer::deserialize("Error", stack)
18788    }
18789}
18790impl fmt::Display for ListSigningCertificatesError {
18791    #[allow(unused_variables)]
18792    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18793        match *self {
18794            ListSigningCertificatesError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18795            ListSigningCertificatesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18796        }
18797    }
18798}
18799impl Error for ListSigningCertificatesError {}
18800/// Errors returned by ListUserPolicies
18801#[derive(Debug, PartialEq)]
18802pub enum ListUserPoliciesError {
18803    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18804    NoSuchEntity(String),
18805    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18806    ServiceFailure(String),
18807}
18808
18809impl ListUserPoliciesError {
18810    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListUserPoliciesError> {
18811        {
18812            let reader = EventReader::new(res.body.as_ref());
18813            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18814            find_start_element(&mut stack);
18815            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18816                match &parsed_error.code[..] {
18817                    "NoSuchEntity" => {
18818                        return RusotoError::Service(ListUserPoliciesError::NoSuchEntity(
18819                            parsed_error.message,
18820                        ))
18821                    }
18822                    "ServiceFailure" => {
18823                        return RusotoError::Service(ListUserPoliciesError::ServiceFailure(
18824                            parsed_error.message,
18825                        ))
18826                    }
18827                    _ => {}
18828                }
18829            }
18830        }
18831        RusotoError::Unknown(res)
18832    }
18833
18834    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18835    where
18836        T: Peek + Next,
18837    {
18838        xml_util::start_element("ErrorResponse", stack)?;
18839        XmlErrorDeserializer::deserialize("Error", stack)
18840    }
18841}
18842impl fmt::Display for ListUserPoliciesError {
18843    #[allow(unused_variables)]
18844    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18845        match *self {
18846            ListUserPoliciesError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18847            ListUserPoliciesError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18848        }
18849    }
18850}
18851impl Error for ListUserPoliciesError {}
18852/// Errors returned by ListUserTags
18853#[derive(Debug, PartialEq)]
18854pub enum ListUserTagsError {
18855    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18856    NoSuchEntity(String),
18857    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18858    ServiceFailure(String),
18859}
18860
18861impl ListUserTagsError {
18862    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListUserTagsError> {
18863        {
18864            let reader = EventReader::new(res.body.as_ref());
18865            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18866            find_start_element(&mut stack);
18867            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18868                match &parsed_error.code[..] {
18869                    "NoSuchEntity" => {
18870                        return RusotoError::Service(ListUserTagsError::NoSuchEntity(
18871                            parsed_error.message,
18872                        ))
18873                    }
18874                    "ServiceFailure" => {
18875                        return RusotoError::Service(ListUserTagsError::ServiceFailure(
18876                            parsed_error.message,
18877                        ))
18878                    }
18879                    _ => {}
18880                }
18881            }
18882        }
18883        RusotoError::Unknown(res)
18884    }
18885
18886    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18887    where
18888        T: Peek + Next,
18889    {
18890        xml_util::start_element("ErrorResponse", stack)?;
18891        XmlErrorDeserializer::deserialize("Error", stack)
18892    }
18893}
18894impl fmt::Display for ListUserTagsError {
18895    #[allow(unused_variables)]
18896    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18897        match *self {
18898            ListUserTagsError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
18899            ListUserTagsError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18900        }
18901    }
18902}
18903impl Error for ListUserTagsError {}
18904/// Errors returned by ListUsers
18905#[derive(Debug, PartialEq)]
18906pub enum ListUsersError {
18907    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18908    ServiceFailure(String),
18909}
18910
18911impl ListUsersError {
18912    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListUsersError> {
18913        {
18914            let reader = EventReader::new(res.body.as_ref());
18915            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18916            find_start_element(&mut stack);
18917            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18918                match &parsed_error.code[..] {
18919                    "ServiceFailure" => {
18920                        return RusotoError::Service(ListUsersError::ServiceFailure(
18921                            parsed_error.message,
18922                        ))
18923                    }
18924                    _ => {}
18925                }
18926            }
18927        }
18928        RusotoError::Unknown(res)
18929    }
18930
18931    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18932    where
18933        T: Peek + Next,
18934    {
18935        xml_util::start_element("ErrorResponse", stack)?;
18936        XmlErrorDeserializer::deserialize("Error", stack)
18937    }
18938}
18939impl fmt::Display for ListUsersError {
18940    #[allow(unused_variables)]
18941    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18942        match *self {
18943            ListUsersError::ServiceFailure(ref cause) => write!(f, "{}", cause),
18944        }
18945    }
18946}
18947impl Error for ListUsersError {}
18948/// Errors returned by ListVirtualMFADevices
18949#[derive(Debug, PartialEq)]
18950pub enum ListVirtualMFADevicesError {}
18951
18952impl ListVirtualMFADevicesError {
18953    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListVirtualMFADevicesError> {
18954        {
18955            let reader = EventReader::new(res.body.as_ref());
18956            let mut stack = XmlResponse::new(reader.into_iter().peekable());
18957            find_start_element(&mut stack);
18958            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
18959                match &parsed_error.code[..] {
18960                    _ => {}
18961                }
18962            }
18963        }
18964        RusotoError::Unknown(res)
18965    }
18966
18967    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
18968    where
18969        T: Peek + Next,
18970    {
18971        xml_util::start_element("ErrorResponse", stack)?;
18972        XmlErrorDeserializer::deserialize("Error", stack)
18973    }
18974}
18975impl fmt::Display for ListVirtualMFADevicesError {
18976    #[allow(unused_variables)]
18977    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18978        match *self {}
18979    }
18980}
18981impl Error for ListVirtualMFADevicesError {}
18982/// Errors returned by PutGroupPolicy
18983#[derive(Debug, PartialEq)]
18984pub enum PutGroupPolicyError {
18985    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
18986    LimitExceeded(String),
18987    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
18988    MalformedPolicyDocument(String),
18989    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
18990    NoSuchEntity(String),
18991    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
18992    ServiceFailure(String),
18993}
18994
18995impl PutGroupPolicyError {
18996    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<PutGroupPolicyError> {
18997        {
18998            let reader = EventReader::new(res.body.as_ref());
18999            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19000            find_start_element(&mut stack);
19001            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19002                match &parsed_error.code[..] {
19003                    "LimitExceeded" => {
19004                        return RusotoError::Service(PutGroupPolicyError::LimitExceeded(
19005                            parsed_error.message,
19006                        ))
19007                    }
19008                    "MalformedPolicyDocument" => {
19009                        return RusotoError::Service(PutGroupPolicyError::MalformedPolicyDocument(
19010                            parsed_error.message,
19011                        ))
19012                    }
19013                    "NoSuchEntity" => {
19014                        return RusotoError::Service(PutGroupPolicyError::NoSuchEntity(
19015                            parsed_error.message,
19016                        ))
19017                    }
19018                    "ServiceFailure" => {
19019                        return RusotoError::Service(PutGroupPolicyError::ServiceFailure(
19020                            parsed_error.message,
19021                        ))
19022                    }
19023                    _ => {}
19024                }
19025            }
19026        }
19027        RusotoError::Unknown(res)
19028    }
19029
19030    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19031    where
19032        T: Peek + Next,
19033    {
19034        xml_util::start_element("ErrorResponse", stack)?;
19035        XmlErrorDeserializer::deserialize("Error", stack)
19036    }
19037}
19038impl fmt::Display for PutGroupPolicyError {
19039    #[allow(unused_variables)]
19040    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19041        match *self {
19042            PutGroupPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
19043            PutGroupPolicyError::MalformedPolicyDocument(ref cause) => write!(f, "{}", cause),
19044            PutGroupPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19045            PutGroupPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19046        }
19047    }
19048}
19049impl Error for PutGroupPolicyError {}
19050/// Errors returned by PutRolePermissionsBoundary
19051#[derive(Debug, PartialEq)]
19052pub enum PutRolePermissionsBoundaryError {
19053    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
19054    InvalidInput(String),
19055    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19056    NoSuchEntity(String),
19057    /// <p>The request failed because AWS service role policies can only be attached to the service-linked role for that service.</p>
19058    PolicyNotAttachable(String),
19059    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19060    ServiceFailure(String),
19061    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
19062    UnmodifiableEntity(String),
19063}
19064
19065impl PutRolePermissionsBoundaryError {
19066    pub fn from_response(
19067        res: BufferedHttpResponse,
19068    ) -> RusotoError<PutRolePermissionsBoundaryError> {
19069        {
19070            let reader = EventReader::new(res.body.as_ref());
19071            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19072            find_start_element(&mut stack);
19073            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19074                match &parsed_error.code[..] {
19075                    "InvalidInput" => {
19076                        return RusotoError::Service(PutRolePermissionsBoundaryError::InvalidInput(
19077                            parsed_error.message,
19078                        ))
19079                    }
19080                    "NoSuchEntity" => {
19081                        return RusotoError::Service(PutRolePermissionsBoundaryError::NoSuchEntity(
19082                            parsed_error.message,
19083                        ))
19084                    }
19085                    "PolicyNotAttachable" => {
19086                        return RusotoError::Service(
19087                            PutRolePermissionsBoundaryError::PolicyNotAttachable(
19088                                parsed_error.message,
19089                            ),
19090                        )
19091                    }
19092                    "ServiceFailure" => {
19093                        return RusotoError::Service(
19094                            PutRolePermissionsBoundaryError::ServiceFailure(parsed_error.message),
19095                        )
19096                    }
19097                    "UnmodifiableEntity" => {
19098                        return RusotoError::Service(
19099                            PutRolePermissionsBoundaryError::UnmodifiableEntity(
19100                                parsed_error.message,
19101                            ),
19102                        )
19103                    }
19104                    _ => {}
19105                }
19106            }
19107        }
19108        RusotoError::Unknown(res)
19109    }
19110
19111    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19112    where
19113        T: Peek + Next,
19114    {
19115        xml_util::start_element("ErrorResponse", stack)?;
19116        XmlErrorDeserializer::deserialize("Error", stack)
19117    }
19118}
19119impl fmt::Display for PutRolePermissionsBoundaryError {
19120    #[allow(unused_variables)]
19121    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19122        match *self {
19123            PutRolePermissionsBoundaryError::InvalidInput(ref cause) => write!(f, "{}", cause),
19124            PutRolePermissionsBoundaryError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19125            PutRolePermissionsBoundaryError::PolicyNotAttachable(ref cause) => {
19126                write!(f, "{}", cause)
19127            }
19128            PutRolePermissionsBoundaryError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19129            PutRolePermissionsBoundaryError::UnmodifiableEntity(ref cause) => {
19130                write!(f, "{}", cause)
19131            }
19132        }
19133    }
19134}
19135impl Error for PutRolePermissionsBoundaryError {}
19136/// Errors returned by PutRolePolicy
19137#[derive(Debug, PartialEq)]
19138pub enum PutRolePolicyError {
19139    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
19140    LimitExceeded(String),
19141    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
19142    MalformedPolicyDocument(String),
19143    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19144    NoSuchEntity(String),
19145    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19146    ServiceFailure(String),
19147    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
19148    UnmodifiableEntity(String),
19149}
19150
19151impl PutRolePolicyError {
19152    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<PutRolePolicyError> {
19153        {
19154            let reader = EventReader::new(res.body.as_ref());
19155            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19156            find_start_element(&mut stack);
19157            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19158                match &parsed_error.code[..] {
19159                    "LimitExceeded" => {
19160                        return RusotoError::Service(PutRolePolicyError::LimitExceeded(
19161                            parsed_error.message,
19162                        ))
19163                    }
19164                    "MalformedPolicyDocument" => {
19165                        return RusotoError::Service(PutRolePolicyError::MalformedPolicyDocument(
19166                            parsed_error.message,
19167                        ))
19168                    }
19169                    "NoSuchEntity" => {
19170                        return RusotoError::Service(PutRolePolicyError::NoSuchEntity(
19171                            parsed_error.message,
19172                        ))
19173                    }
19174                    "ServiceFailure" => {
19175                        return RusotoError::Service(PutRolePolicyError::ServiceFailure(
19176                            parsed_error.message,
19177                        ))
19178                    }
19179                    "UnmodifiableEntity" => {
19180                        return RusotoError::Service(PutRolePolicyError::UnmodifiableEntity(
19181                            parsed_error.message,
19182                        ))
19183                    }
19184                    _ => {}
19185                }
19186            }
19187        }
19188        RusotoError::Unknown(res)
19189    }
19190
19191    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19192    where
19193        T: Peek + Next,
19194    {
19195        xml_util::start_element("ErrorResponse", stack)?;
19196        XmlErrorDeserializer::deserialize("Error", stack)
19197    }
19198}
19199impl fmt::Display for PutRolePolicyError {
19200    #[allow(unused_variables)]
19201    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19202        match *self {
19203            PutRolePolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
19204            PutRolePolicyError::MalformedPolicyDocument(ref cause) => write!(f, "{}", cause),
19205            PutRolePolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19206            PutRolePolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19207            PutRolePolicyError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
19208        }
19209    }
19210}
19211impl Error for PutRolePolicyError {}
19212/// Errors returned by PutUserPermissionsBoundary
19213#[derive(Debug, PartialEq)]
19214pub enum PutUserPermissionsBoundaryError {
19215    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
19216    InvalidInput(String),
19217    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19218    NoSuchEntity(String),
19219    /// <p>The request failed because AWS service role policies can only be attached to the service-linked role for that service.</p>
19220    PolicyNotAttachable(String),
19221    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19222    ServiceFailure(String),
19223}
19224
19225impl PutUserPermissionsBoundaryError {
19226    pub fn from_response(
19227        res: BufferedHttpResponse,
19228    ) -> RusotoError<PutUserPermissionsBoundaryError> {
19229        {
19230            let reader = EventReader::new(res.body.as_ref());
19231            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19232            find_start_element(&mut stack);
19233            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19234                match &parsed_error.code[..] {
19235                    "InvalidInput" => {
19236                        return RusotoError::Service(PutUserPermissionsBoundaryError::InvalidInput(
19237                            parsed_error.message,
19238                        ))
19239                    }
19240                    "NoSuchEntity" => {
19241                        return RusotoError::Service(PutUserPermissionsBoundaryError::NoSuchEntity(
19242                            parsed_error.message,
19243                        ))
19244                    }
19245                    "PolicyNotAttachable" => {
19246                        return RusotoError::Service(
19247                            PutUserPermissionsBoundaryError::PolicyNotAttachable(
19248                                parsed_error.message,
19249                            ),
19250                        )
19251                    }
19252                    "ServiceFailure" => {
19253                        return RusotoError::Service(
19254                            PutUserPermissionsBoundaryError::ServiceFailure(parsed_error.message),
19255                        )
19256                    }
19257                    _ => {}
19258                }
19259            }
19260        }
19261        RusotoError::Unknown(res)
19262    }
19263
19264    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19265    where
19266        T: Peek + Next,
19267    {
19268        xml_util::start_element("ErrorResponse", stack)?;
19269        XmlErrorDeserializer::deserialize("Error", stack)
19270    }
19271}
19272impl fmt::Display for PutUserPermissionsBoundaryError {
19273    #[allow(unused_variables)]
19274    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19275        match *self {
19276            PutUserPermissionsBoundaryError::InvalidInput(ref cause) => write!(f, "{}", cause),
19277            PutUserPermissionsBoundaryError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19278            PutUserPermissionsBoundaryError::PolicyNotAttachable(ref cause) => {
19279                write!(f, "{}", cause)
19280            }
19281            PutUserPermissionsBoundaryError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19282        }
19283    }
19284}
19285impl Error for PutUserPermissionsBoundaryError {}
19286/// Errors returned by PutUserPolicy
19287#[derive(Debug, PartialEq)]
19288pub enum PutUserPolicyError {
19289    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
19290    LimitExceeded(String),
19291    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
19292    MalformedPolicyDocument(String),
19293    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19294    NoSuchEntity(String),
19295    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19296    ServiceFailure(String),
19297}
19298
19299impl PutUserPolicyError {
19300    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<PutUserPolicyError> {
19301        {
19302            let reader = EventReader::new(res.body.as_ref());
19303            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19304            find_start_element(&mut stack);
19305            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19306                match &parsed_error.code[..] {
19307                    "LimitExceeded" => {
19308                        return RusotoError::Service(PutUserPolicyError::LimitExceeded(
19309                            parsed_error.message,
19310                        ))
19311                    }
19312                    "MalformedPolicyDocument" => {
19313                        return RusotoError::Service(PutUserPolicyError::MalformedPolicyDocument(
19314                            parsed_error.message,
19315                        ))
19316                    }
19317                    "NoSuchEntity" => {
19318                        return RusotoError::Service(PutUserPolicyError::NoSuchEntity(
19319                            parsed_error.message,
19320                        ))
19321                    }
19322                    "ServiceFailure" => {
19323                        return RusotoError::Service(PutUserPolicyError::ServiceFailure(
19324                            parsed_error.message,
19325                        ))
19326                    }
19327                    _ => {}
19328                }
19329            }
19330        }
19331        RusotoError::Unknown(res)
19332    }
19333
19334    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19335    where
19336        T: Peek + Next,
19337    {
19338        xml_util::start_element("ErrorResponse", stack)?;
19339        XmlErrorDeserializer::deserialize("Error", stack)
19340    }
19341}
19342impl fmt::Display for PutUserPolicyError {
19343    #[allow(unused_variables)]
19344    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19345        match *self {
19346            PutUserPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
19347            PutUserPolicyError::MalformedPolicyDocument(ref cause) => write!(f, "{}", cause),
19348            PutUserPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19349            PutUserPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19350        }
19351    }
19352}
19353impl Error for PutUserPolicyError {}
19354/// Errors returned by RemoveClientIDFromOpenIDConnectProvider
19355#[derive(Debug, PartialEq)]
19356pub enum RemoveClientIDFromOpenIDConnectProviderError {
19357    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
19358    InvalidInput(String),
19359    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19360    NoSuchEntity(String),
19361    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19362    ServiceFailure(String),
19363}
19364
19365impl RemoveClientIDFromOpenIDConnectProviderError {
19366    pub fn from_response(
19367        res: BufferedHttpResponse,
19368    ) -> RusotoError<RemoveClientIDFromOpenIDConnectProviderError> {
19369        {
19370            let reader = EventReader::new(res.body.as_ref());
19371            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19372            find_start_element(&mut stack);
19373            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19374                match &parsed_error.code[..] {
19375                    "InvalidInput" => {
19376                        return RusotoError::Service(
19377                            RemoveClientIDFromOpenIDConnectProviderError::InvalidInput(
19378                                parsed_error.message,
19379                            ),
19380                        )
19381                    }
19382                    "NoSuchEntity" => {
19383                        return RusotoError::Service(
19384                            RemoveClientIDFromOpenIDConnectProviderError::NoSuchEntity(
19385                                parsed_error.message,
19386                            ),
19387                        )
19388                    }
19389                    "ServiceFailure" => {
19390                        return RusotoError::Service(
19391                            RemoveClientIDFromOpenIDConnectProviderError::ServiceFailure(
19392                                parsed_error.message,
19393                            ),
19394                        )
19395                    }
19396                    _ => {}
19397                }
19398            }
19399        }
19400        RusotoError::Unknown(res)
19401    }
19402
19403    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19404    where
19405        T: Peek + Next,
19406    {
19407        xml_util::start_element("ErrorResponse", stack)?;
19408        XmlErrorDeserializer::deserialize("Error", stack)
19409    }
19410}
19411impl fmt::Display for RemoveClientIDFromOpenIDConnectProviderError {
19412    #[allow(unused_variables)]
19413    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19414        match *self {
19415            RemoveClientIDFromOpenIDConnectProviderError::InvalidInput(ref cause) => {
19416                write!(f, "{}", cause)
19417            }
19418            RemoveClientIDFromOpenIDConnectProviderError::NoSuchEntity(ref cause) => {
19419                write!(f, "{}", cause)
19420            }
19421            RemoveClientIDFromOpenIDConnectProviderError::ServiceFailure(ref cause) => {
19422                write!(f, "{}", cause)
19423            }
19424        }
19425    }
19426}
19427impl Error for RemoveClientIDFromOpenIDConnectProviderError {}
19428/// Errors returned by RemoveRoleFromInstanceProfile
19429#[derive(Debug, PartialEq)]
19430pub enum RemoveRoleFromInstanceProfileError {
19431    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
19432    LimitExceeded(String),
19433    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19434    NoSuchEntity(String),
19435    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19436    ServiceFailure(String),
19437    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
19438    UnmodifiableEntity(String),
19439}
19440
19441impl RemoveRoleFromInstanceProfileError {
19442    pub fn from_response(
19443        res: BufferedHttpResponse,
19444    ) -> RusotoError<RemoveRoleFromInstanceProfileError> {
19445        {
19446            let reader = EventReader::new(res.body.as_ref());
19447            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19448            find_start_element(&mut stack);
19449            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19450                match &parsed_error.code[..] {
19451                    "LimitExceeded" => {
19452                        return RusotoError::Service(
19453                            RemoveRoleFromInstanceProfileError::LimitExceeded(parsed_error.message),
19454                        )
19455                    }
19456                    "NoSuchEntity" => {
19457                        return RusotoError::Service(
19458                            RemoveRoleFromInstanceProfileError::NoSuchEntity(parsed_error.message),
19459                        )
19460                    }
19461                    "ServiceFailure" => {
19462                        return RusotoError::Service(
19463                            RemoveRoleFromInstanceProfileError::ServiceFailure(
19464                                parsed_error.message,
19465                            ),
19466                        )
19467                    }
19468                    "UnmodifiableEntity" => {
19469                        return RusotoError::Service(
19470                            RemoveRoleFromInstanceProfileError::UnmodifiableEntity(
19471                                parsed_error.message,
19472                            ),
19473                        )
19474                    }
19475                    _ => {}
19476                }
19477            }
19478        }
19479        RusotoError::Unknown(res)
19480    }
19481
19482    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19483    where
19484        T: Peek + Next,
19485    {
19486        xml_util::start_element("ErrorResponse", stack)?;
19487        XmlErrorDeserializer::deserialize("Error", stack)
19488    }
19489}
19490impl fmt::Display for RemoveRoleFromInstanceProfileError {
19491    #[allow(unused_variables)]
19492    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19493        match *self {
19494            RemoveRoleFromInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
19495            RemoveRoleFromInstanceProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19496            RemoveRoleFromInstanceProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19497            RemoveRoleFromInstanceProfileError::UnmodifiableEntity(ref cause) => {
19498                write!(f, "{}", cause)
19499            }
19500        }
19501    }
19502}
19503impl Error for RemoveRoleFromInstanceProfileError {}
19504/// Errors returned by RemoveUserFromGroup
19505#[derive(Debug, PartialEq)]
19506pub enum RemoveUserFromGroupError {
19507    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
19508    LimitExceeded(String),
19509    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19510    NoSuchEntity(String),
19511    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19512    ServiceFailure(String),
19513}
19514
19515impl RemoveUserFromGroupError {
19516    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<RemoveUserFromGroupError> {
19517        {
19518            let reader = EventReader::new(res.body.as_ref());
19519            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19520            find_start_element(&mut stack);
19521            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19522                match &parsed_error.code[..] {
19523                    "LimitExceeded" => {
19524                        return RusotoError::Service(RemoveUserFromGroupError::LimitExceeded(
19525                            parsed_error.message,
19526                        ))
19527                    }
19528                    "NoSuchEntity" => {
19529                        return RusotoError::Service(RemoveUserFromGroupError::NoSuchEntity(
19530                            parsed_error.message,
19531                        ))
19532                    }
19533                    "ServiceFailure" => {
19534                        return RusotoError::Service(RemoveUserFromGroupError::ServiceFailure(
19535                            parsed_error.message,
19536                        ))
19537                    }
19538                    _ => {}
19539                }
19540            }
19541        }
19542        RusotoError::Unknown(res)
19543    }
19544
19545    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19546    where
19547        T: Peek + Next,
19548    {
19549        xml_util::start_element("ErrorResponse", stack)?;
19550        XmlErrorDeserializer::deserialize("Error", stack)
19551    }
19552}
19553impl fmt::Display for RemoveUserFromGroupError {
19554    #[allow(unused_variables)]
19555    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19556        match *self {
19557            RemoveUserFromGroupError::LimitExceeded(ref cause) => write!(f, "{}", cause),
19558            RemoveUserFromGroupError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19559            RemoveUserFromGroupError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19560        }
19561    }
19562}
19563impl Error for RemoveUserFromGroupError {}
19564/// Errors returned by ResetServiceSpecificCredential
19565#[derive(Debug, PartialEq)]
19566pub enum ResetServiceSpecificCredentialError {
19567    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19568    NoSuchEntity(String),
19569}
19570
19571impl ResetServiceSpecificCredentialError {
19572    pub fn from_response(
19573        res: BufferedHttpResponse,
19574    ) -> RusotoError<ResetServiceSpecificCredentialError> {
19575        {
19576            let reader = EventReader::new(res.body.as_ref());
19577            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19578            find_start_element(&mut stack);
19579            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19580                match &parsed_error.code[..] {
19581                    "NoSuchEntity" => {
19582                        return RusotoError::Service(
19583                            ResetServiceSpecificCredentialError::NoSuchEntity(parsed_error.message),
19584                        )
19585                    }
19586                    _ => {}
19587                }
19588            }
19589        }
19590        RusotoError::Unknown(res)
19591    }
19592
19593    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19594    where
19595        T: Peek + Next,
19596    {
19597        xml_util::start_element("ErrorResponse", stack)?;
19598        XmlErrorDeserializer::deserialize("Error", stack)
19599    }
19600}
19601impl fmt::Display for ResetServiceSpecificCredentialError {
19602    #[allow(unused_variables)]
19603    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19604        match *self {
19605            ResetServiceSpecificCredentialError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19606        }
19607    }
19608}
19609impl Error for ResetServiceSpecificCredentialError {}
19610/// Errors returned by ResyncMFADevice
19611#[derive(Debug, PartialEq)]
19612pub enum ResyncMFADeviceError {
19613    /// <p>The request was rejected because the authentication code was not recognized. The error message describes the specific error.</p>
19614    InvalidAuthenticationCode(String),
19615    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
19616    LimitExceeded(String),
19617    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19618    NoSuchEntity(String),
19619    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19620    ServiceFailure(String),
19621}
19622
19623impl ResyncMFADeviceError {
19624    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ResyncMFADeviceError> {
19625        {
19626            let reader = EventReader::new(res.body.as_ref());
19627            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19628            find_start_element(&mut stack);
19629            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19630                match &parsed_error.code[..] {
19631                    "InvalidAuthenticationCode" => {
19632                        return RusotoError::Service(
19633                            ResyncMFADeviceError::InvalidAuthenticationCode(parsed_error.message),
19634                        )
19635                    }
19636                    "LimitExceeded" => {
19637                        return RusotoError::Service(ResyncMFADeviceError::LimitExceeded(
19638                            parsed_error.message,
19639                        ))
19640                    }
19641                    "NoSuchEntity" => {
19642                        return RusotoError::Service(ResyncMFADeviceError::NoSuchEntity(
19643                            parsed_error.message,
19644                        ))
19645                    }
19646                    "ServiceFailure" => {
19647                        return RusotoError::Service(ResyncMFADeviceError::ServiceFailure(
19648                            parsed_error.message,
19649                        ))
19650                    }
19651                    _ => {}
19652                }
19653            }
19654        }
19655        RusotoError::Unknown(res)
19656    }
19657
19658    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19659    where
19660        T: Peek + Next,
19661    {
19662        xml_util::start_element("ErrorResponse", stack)?;
19663        XmlErrorDeserializer::deserialize("Error", stack)
19664    }
19665}
19666impl fmt::Display for ResyncMFADeviceError {
19667    #[allow(unused_variables)]
19668    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19669        match *self {
19670            ResyncMFADeviceError::InvalidAuthenticationCode(ref cause) => write!(f, "{}", cause),
19671            ResyncMFADeviceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
19672            ResyncMFADeviceError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19673            ResyncMFADeviceError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19674        }
19675    }
19676}
19677impl Error for ResyncMFADeviceError {}
19678/// Errors returned by SetDefaultPolicyVersion
19679#[derive(Debug, PartialEq)]
19680pub enum SetDefaultPolicyVersionError {
19681    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
19682    InvalidInput(String),
19683    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
19684    LimitExceeded(String),
19685    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19686    NoSuchEntity(String),
19687    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19688    ServiceFailure(String),
19689}
19690
19691impl SetDefaultPolicyVersionError {
19692    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<SetDefaultPolicyVersionError> {
19693        {
19694            let reader = EventReader::new(res.body.as_ref());
19695            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19696            find_start_element(&mut stack);
19697            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19698                match &parsed_error.code[..] {
19699                    "InvalidInput" => {
19700                        return RusotoError::Service(SetDefaultPolicyVersionError::InvalidInput(
19701                            parsed_error.message,
19702                        ))
19703                    }
19704                    "LimitExceeded" => {
19705                        return RusotoError::Service(SetDefaultPolicyVersionError::LimitExceeded(
19706                            parsed_error.message,
19707                        ))
19708                    }
19709                    "NoSuchEntity" => {
19710                        return RusotoError::Service(SetDefaultPolicyVersionError::NoSuchEntity(
19711                            parsed_error.message,
19712                        ))
19713                    }
19714                    "ServiceFailure" => {
19715                        return RusotoError::Service(SetDefaultPolicyVersionError::ServiceFailure(
19716                            parsed_error.message,
19717                        ))
19718                    }
19719                    _ => {}
19720                }
19721            }
19722        }
19723        RusotoError::Unknown(res)
19724    }
19725
19726    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19727    where
19728        T: Peek + Next,
19729    {
19730        xml_util::start_element("ErrorResponse", stack)?;
19731        XmlErrorDeserializer::deserialize("Error", stack)
19732    }
19733}
19734impl fmt::Display for SetDefaultPolicyVersionError {
19735    #[allow(unused_variables)]
19736    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19737        match *self {
19738            SetDefaultPolicyVersionError::InvalidInput(ref cause) => write!(f, "{}", cause),
19739            SetDefaultPolicyVersionError::LimitExceeded(ref cause) => write!(f, "{}", cause),
19740            SetDefaultPolicyVersionError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19741            SetDefaultPolicyVersionError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19742        }
19743    }
19744}
19745impl Error for SetDefaultPolicyVersionError {}
19746/// Errors returned by SetSecurityTokenServicePreferences
19747#[derive(Debug, PartialEq)]
19748pub enum SetSecurityTokenServicePreferencesError {
19749    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19750    ServiceFailure(String),
19751}
19752
19753impl SetSecurityTokenServicePreferencesError {
19754    pub fn from_response(
19755        res: BufferedHttpResponse,
19756    ) -> RusotoError<SetSecurityTokenServicePreferencesError> {
19757        {
19758            let reader = EventReader::new(res.body.as_ref());
19759            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19760            find_start_element(&mut stack);
19761            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19762                match &parsed_error.code[..] {
19763                    "ServiceFailure" => {
19764                        return RusotoError::Service(
19765                            SetSecurityTokenServicePreferencesError::ServiceFailure(
19766                                parsed_error.message,
19767                            ),
19768                        )
19769                    }
19770                    _ => {}
19771                }
19772            }
19773        }
19774        RusotoError::Unknown(res)
19775    }
19776
19777    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19778    where
19779        T: Peek + Next,
19780    {
19781        xml_util::start_element("ErrorResponse", stack)?;
19782        XmlErrorDeserializer::deserialize("Error", stack)
19783    }
19784}
19785impl fmt::Display for SetSecurityTokenServicePreferencesError {
19786    #[allow(unused_variables)]
19787    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19788        match *self {
19789            SetSecurityTokenServicePreferencesError::ServiceFailure(ref cause) => {
19790                write!(f, "{}", cause)
19791            }
19792        }
19793    }
19794}
19795impl Error for SetSecurityTokenServicePreferencesError {}
19796/// Errors returned by SimulateCustomPolicy
19797#[derive(Debug, PartialEq)]
19798pub enum SimulateCustomPolicyError {
19799    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
19800    InvalidInput(String),
19801    /// <p>The request failed because a provided policy could not be successfully evaluated. An additional detailed message indicates the source of the failure.</p>
19802    PolicyEvaluation(String),
19803}
19804
19805impl SimulateCustomPolicyError {
19806    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<SimulateCustomPolicyError> {
19807        {
19808            let reader = EventReader::new(res.body.as_ref());
19809            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19810            find_start_element(&mut stack);
19811            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19812                match &parsed_error.code[..] {
19813                    "InvalidInput" => {
19814                        return RusotoError::Service(SimulateCustomPolicyError::InvalidInput(
19815                            parsed_error.message,
19816                        ))
19817                    }
19818                    "PolicyEvaluation" => {
19819                        return RusotoError::Service(SimulateCustomPolicyError::PolicyEvaluation(
19820                            parsed_error.message,
19821                        ))
19822                    }
19823                    _ => {}
19824                }
19825            }
19826        }
19827        RusotoError::Unknown(res)
19828    }
19829
19830    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19831    where
19832        T: Peek + Next,
19833    {
19834        xml_util::start_element("ErrorResponse", stack)?;
19835        XmlErrorDeserializer::deserialize("Error", stack)
19836    }
19837}
19838impl fmt::Display for SimulateCustomPolicyError {
19839    #[allow(unused_variables)]
19840    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19841        match *self {
19842            SimulateCustomPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
19843            SimulateCustomPolicyError::PolicyEvaluation(ref cause) => write!(f, "{}", cause),
19844        }
19845    }
19846}
19847impl Error for SimulateCustomPolicyError {}
19848/// Errors returned by SimulatePrincipalPolicy
19849#[derive(Debug, PartialEq)]
19850pub enum SimulatePrincipalPolicyError {
19851    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
19852    InvalidInput(String),
19853    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19854    NoSuchEntity(String),
19855    /// <p>The request failed because a provided policy could not be successfully evaluated. An additional detailed message indicates the source of the failure.</p>
19856    PolicyEvaluation(String),
19857}
19858
19859impl SimulatePrincipalPolicyError {
19860    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<SimulatePrincipalPolicyError> {
19861        {
19862            let reader = EventReader::new(res.body.as_ref());
19863            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19864            find_start_element(&mut stack);
19865            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19866                match &parsed_error.code[..] {
19867                    "InvalidInput" => {
19868                        return RusotoError::Service(SimulatePrincipalPolicyError::InvalidInput(
19869                            parsed_error.message,
19870                        ))
19871                    }
19872                    "NoSuchEntity" => {
19873                        return RusotoError::Service(SimulatePrincipalPolicyError::NoSuchEntity(
19874                            parsed_error.message,
19875                        ))
19876                    }
19877                    "PolicyEvaluation" => {
19878                        return RusotoError::Service(
19879                            SimulatePrincipalPolicyError::PolicyEvaluation(parsed_error.message),
19880                        )
19881                    }
19882                    _ => {}
19883                }
19884            }
19885        }
19886        RusotoError::Unknown(res)
19887    }
19888
19889    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19890    where
19891        T: Peek + Next,
19892    {
19893        xml_util::start_element("ErrorResponse", stack)?;
19894        XmlErrorDeserializer::deserialize("Error", stack)
19895    }
19896}
19897impl fmt::Display for SimulatePrincipalPolicyError {
19898    #[allow(unused_variables)]
19899    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19900        match *self {
19901            SimulatePrincipalPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
19902            SimulatePrincipalPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19903            SimulatePrincipalPolicyError::PolicyEvaluation(ref cause) => write!(f, "{}", cause),
19904        }
19905    }
19906}
19907impl Error for SimulatePrincipalPolicyError {}
19908/// Errors returned by TagInstanceProfile
19909#[derive(Debug, PartialEq)]
19910pub enum TagInstanceProfileError {
19911    /// <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>
19912    ConcurrentModification(String),
19913    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
19914    InvalidInput(String),
19915    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
19916    LimitExceeded(String),
19917    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19918    NoSuchEntity(String),
19919    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19920    ServiceFailure(String),
19921}
19922
19923impl TagInstanceProfileError {
19924    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagInstanceProfileError> {
19925        {
19926            let reader = EventReader::new(res.body.as_ref());
19927            let mut stack = XmlResponse::new(reader.into_iter().peekable());
19928            find_start_element(&mut stack);
19929            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
19930                match &parsed_error.code[..] {
19931                    "ConcurrentModification" => {
19932                        return RusotoError::Service(
19933                            TagInstanceProfileError::ConcurrentModification(parsed_error.message),
19934                        )
19935                    }
19936                    "InvalidInput" => {
19937                        return RusotoError::Service(TagInstanceProfileError::InvalidInput(
19938                            parsed_error.message,
19939                        ))
19940                    }
19941                    "LimitExceeded" => {
19942                        return RusotoError::Service(TagInstanceProfileError::LimitExceeded(
19943                            parsed_error.message,
19944                        ))
19945                    }
19946                    "NoSuchEntity" => {
19947                        return RusotoError::Service(TagInstanceProfileError::NoSuchEntity(
19948                            parsed_error.message,
19949                        ))
19950                    }
19951                    "ServiceFailure" => {
19952                        return RusotoError::Service(TagInstanceProfileError::ServiceFailure(
19953                            parsed_error.message,
19954                        ))
19955                    }
19956                    _ => {}
19957                }
19958            }
19959        }
19960        RusotoError::Unknown(res)
19961    }
19962
19963    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
19964    where
19965        T: Peek + Next,
19966    {
19967        xml_util::start_element("ErrorResponse", stack)?;
19968        XmlErrorDeserializer::deserialize("Error", stack)
19969    }
19970}
19971impl fmt::Display for TagInstanceProfileError {
19972    #[allow(unused_variables)]
19973    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19974        match *self {
19975            TagInstanceProfileError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
19976            TagInstanceProfileError::InvalidInput(ref cause) => write!(f, "{}", cause),
19977            TagInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
19978            TagInstanceProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
19979            TagInstanceProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
19980        }
19981    }
19982}
19983impl Error for TagInstanceProfileError {}
19984/// Errors returned by TagMFADevice
19985#[derive(Debug, PartialEq)]
19986pub enum TagMFADeviceError {
19987    /// <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>
19988    ConcurrentModification(String),
19989    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
19990    InvalidInput(String),
19991    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
19992    LimitExceeded(String),
19993    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
19994    NoSuchEntity(String),
19995    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
19996    ServiceFailure(String),
19997}
19998
19999impl TagMFADeviceError {
20000    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagMFADeviceError> {
20001        {
20002            let reader = EventReader::new(res.body.as_ref());
20003            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20004            find_start_element(&mut stack);
20005            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20006                match &parsed_error.code[..] {
20007                    "ConcurrentModification" => {
20008                        return RusotoError::Service(TagMFADeviceError::ConcurrentModification(
20009                            parsed_error.message,
20010                        ))
20011                    }
20012                    "InvalidInput" => {
20013                        return RusotoError::Service(TagMFADeviceError::InvalidInput(
20014                            parsed_error.message,
20015                        ))
20016                    }
20017                    "LimitExceeded" => {
20018                        return RusotoError::Service(TagMFADeviceError::LimitExceeded(
20019                            parsed_error.message,
20020                        ))
20021                    }
20022                    "NoSuchEntity" => {
20023                        return RusotoError::Service(TagMFADeviceError::NoSuchEntity(
20024                            parsed_error.message,
20025                        ))
20026                    }
20027                    "ServiceFailure" => {
20028                        return RusotoError::Service(TagMFADeviceError::ServiceFailure(
20029                            parsed_error.message,
20030                        ))
20031                    }
20032                    _ => {}
20033                }
20034            }
20035        }
20036        RusotoError::Unknown(res)
20037    }
20038
20039    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20040    where
20041        T: Peek + Next,
20042    {
20043        xml_util::start_element("ErrorResponse", stack)?;
20044        XmlErrorDeserializer::deserialize("Error", stack)
20045    }
20046}
20047impl fmt::Display for TagMFADeviceError {
20048    #[allow(unused_variables)]
20049    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20050        match *self {
20051            TagMFADeviceError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20052            TagMFADeviceError::InvalidInput(ref cause) => write!(f, "{}", cause),
20053            TagMFADeviceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
20054            TagMFADeviceError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20055            TagMFADeviceError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20056        }
20057    }
20058}
20059impl Error for TagMFADeviceError {}
20060/// Errors returned by TagOpenIDConnectProvider
20061#[derive(Debug, PartialEq)]
20062pub enum TagOpenIDConnectProviderError {
20063    /// <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>
20064    ConcurrentModification(String),
20065    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20066    InvalidInput(String),
20067    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
20068    LimitExceeded(String),
20069    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20070    NoSuchEntity(String),
20071    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20072    ServiceFailure(String),
20073}
20074
20075impl TagOpenIDConnectProviderError {
20076    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagOpenIDConnectProviderError> {
20077        {
20078            let reader = EventReader::new(res.body.as_ref());
20079            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20080            find_start_element(&mut stack);
20081            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20082                match &parsed_error.code[..] {
20083                    "ConcurrentModification" => {
20084                        return RusotoError::Service(
20085                            TagOpenIDConnectProviderError::ConcurrentModification(
20086                                parsed_error.message,
20087                            ),
20088                        )
20089                    }
20090                    "InvalidInput" => {
20091                        return RusotoError::Service(TagOpenIDConnectProviderError::InvalidInput(
20092                            parsed_error.message,
20093                        ))
20094                    }
20095                    "LimitExceeded" => {
20096                        return RusotoError::Service(TagOpenIDConnectProviderError::LimitExceeded(
20097                            parsed_error.message,
20098                        ))
20099                    }
20100                    "NoSuchEntity" => {
20101                        return RusotoError::Service(TagOpenIDConnectProviderError::NoSuchEntity(
20102                            parsed_error.message,
20103                        ))
20104                    }
20105                    "ServiceFailure" => {
20106                        return RusotoError::Service(TagOpenIDConnectProviderError::ServiceFailure(
20107                            parsed_error.message,
20108                        ))
20109                    }
20110                    _ => {}
20111                }
20112            }
20113        }
20114        RusotoError::Unknown(res)
20115    }
20116
20117    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20118    where
20119        T: Peek + Next,
20120    {
20121        xml_util::start_element("ErrorResponse", stack)?;
20122        XmlErrorDeserializer::deserialize("Error", stack)
20123    }
20124}
20125impl fmt::Display for TagOpenIDConnectProviderError {
20126    #[allow(unused_variables)]
20127    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20128        match *self {
20129            TagOpenIDConnectProviderError::ConcurrentModification(ref cause) => {
20130                write!(f, "{}", cause)
20131            }
20132            TagOpenIDConnectProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
20133            TagOpenIDConnectProviderError::LimitExceeded(ref cause) => write!(f, "{}", cause),
20134            TagOpenIDConnectProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20135            TagOpenIDConnectProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20136        }
20137    }
20138}
20139impl Error for TagOpenIDConnectProviderError {}
20140/// Errors returned by TagPolicy
20141#[derive(Debug, PartialEq)]
20142pub enum TagPolicyError {
20143    /// <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>
20144    ConcurrentModification(String),
20145    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20146    InvalidInput(String),
20147    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
20148    LimitExceeded(String),
20149    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20150    NoSuchEntity(String),
20151    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20152    ServiceFailure(String),
20153}
20154
20155impl TagPolicyError {
20156    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagPolicyError> {
20157        {
20158            let reader = EventReader::new(res.body.as_ref());
20159            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20160            find_start_element(&mut stack);
20161            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20162                match &parsed_error.code[..] {
20163                    "ConcurrentModification" => {
20164                        return RusotoError::Service(TagPolicyError::ConcurrentModification(
20165                            parsed_error.message,
20166                        ))
20167                    }
20168                    "InvalidInput" => {
20169                        return RusotoError::Service(TagPolicyError::InvalidInput(
20170                            parsed_error.message,
20171                        ))
20172                    }
20173                    "LimitExceeded" => {
20174                        return RusotoError::Service(TagPolicyError::LimitExceeded(
20175                            parsed_error.message,
20176                        ))
20177                    }
20178                    "NoSuchEntity" => {
20179                        return RusotoError::Service(TagPolicyError::NoSuchEntity(
20180                            parsed_error.message,
20181                        ))
20182                    }
20183                    "ServiceFailure" => {
20184                        return RusotoError::Service(TagPolicyError::ServiceFailure(
20185                            parsed_error.message,
20186                        ))
20187                    }
20188                    _ => {}
20189                }
20190            }
20191        }
20192        RusotoError::Unknown(res)
20193    }
20194
20195    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20196    where
20197        T: Peek + Next,
20198    {
20199        xml_util::start_element("ErrorResponse", stack)?;
20200        XmlErrorDeserializer::deserialize("Error", stack)
20201    }
20202}
20203impl fmt::Display for TagPolicyError {
20204    #[allow(unused_variables)]
20205    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20206        match *self {
20207            TagPolicyError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20208            TagPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
20209            TagPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
20210            TagPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20211            TagPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20212        }
20213    }
20214}
20215impl Error for TagPolicyError {}
20216/// Errors returned by TagRole
20217#[derive(Debug, PartialEq)]
20218pub enum TagRoleError {
20219    /// <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>
20220    ConcurrentModification(String),
20221    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20222    InvalidInput(String),
20223    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
20224    LimitExceeded(String),
20225    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20226    NoSuchEntity(String),
20227    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20228    ServiceFailure(String),
20229}
20230
20231impl TagRoleError {
20232    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagRoleError> {
20233        {
20234            let reader = EventReader::new(res.body.as_ref());
20235            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20236            find_start_element(&mut stack);
20237            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20238                match &parsed_error.code[..] {
20239                    "ConcurrentModification" => {
20240                        return RusotoError::Service(TagRoleError::ConcurrentModification(
20241                            parsed_error.message,
20242                        ))
20243                    }
20244                    "InvalidInput" => {
20245                        return RusotoError::Service(TagRoleError::InvalidInput(
20246                            parsed_error.message,
20247                        ))
20248                    }
20249                    "LimitExceeded" => {
20250                        return RusotoError::Service(TagRoleError::LimitExceeded(
20251                            parsed_error.message,
20252                        ))
20253                    }
20254                    "NoSuchEntity" => {
20255                        return RusotoError::Service(TagRoleError::NoSuchEntity(
20256                            parsed_error.message,
20257                        ))
20258                    }
20259                    "ServiceFailure" => {
20260                        return RusotoError::Service(TagRoleError::ServiceFailure(
20261                            parsed_error.message,
20262                        ))
20263                    }
20264                    _ => {}
20265                }
20266            }
20267        }
20268        RusotoError::Unknown(res)
20269    }
20270
20271    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20272    where
20273        T: Peek + Next,
20274    {
20275        xml_util::start_element("ErrorResponse", stack)?;
20276        XmlErrorDeserializer::deserialize("Error", stack)
20277    }
20278}
20279impl fmt::Display for TagRoleError {
20280    #[allow(unused_variables)]
20281    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20282        match *self {
20283            TagRoleError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20284            TagRoleError::InvalidInput(ref cause) => write!(f, "{}", cause),
20285            TagRoleError::LimitExceeded(ref cause) => write!(f, "{}", cause),
20286            TagRoleError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20287            TagRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20288        }
20289    }
20290}
20291impl Error for TagRoleError {}
20292/// Errors returned by TagSAMLProvider
20293#[derive(Debug, PartialEq)]
20294pub enum TagSAMLProviderError {
20295    /// <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>
20296    ConcurrentModification(String),
20297    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20298    InvalidInput(String),
20299    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
20300    LimitExceeded(String),
20301    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20302    NoSuchEntity(String),
20303    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20304    ServiceFailure(String),
20305}
20306
20307impl TagSAMLProviderError {
20308    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagSAMLProviderError> {
20309        {
20310            let reader = EventReader::new(res.body.as_ref());
20311            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20312            find_start_element(&mut stack);
20313            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20314                match &parsed_error.code[..] {
20315                    "ConcurrentModification" => {
20316                        return RusotoError::Service(TagSAMLProviderError::ConcurrentModification(
20317                            parsed_error.message,
20318                        ))
20319                    }
20320                    "InvalidInput" => {
20321                        return RusotoError::Service(TagSAMLProviderError::InvalidInput(
20322                            parsed_error.message,
20323                        ))
20324                    }
20325                    "LimitExceeded" => {
20326                        return RusotoError::Service(TagSAMLProviderError::LimitExceeded(
20327                            parsed_error.message,
20328                        ))
20329                    }
20330                    "NoSuchEntity" => {
20331                        return RusotoError::Service(TagSAMLProviderError::NoSuchEntity(
20332                            parsed_error.message,
20333                        ))
20334                    }
20335                    "ServiceFailure" => {
20336                        return RusotoError::Service(TagSAMLProviderError::ServiceFailure(
20337                            parsed_error.message,
20338                        ))
20339                    }
20340                    _ => {}
20341                }
20342            }
20343        }
20344        RusotoError::Unknown(res)
20345    }
20346
20347    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20348    where
20349        T: Peek + Next,
20350    {
20351        xml_util::start_element("ErrorResponse", stack)?;
20352        XmlErrorDeserializer::deserialize("Error", stack)
20353    }
20354}
20355impl fmt::Display for TagSAMLProviderError {
20356    #[allow(unused_variables)]
20357    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20358        match *self {
20359            TagSAMLProviderError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20360            TagSAMLProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
20361            TagSAMLProviderError::LimitExceeded(ref cause) => write!(f, "{}", cause),
20362            TagSAMLProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20363            TagSAMLProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20364        }
20365    }
20366}
20367impl Error for TagSAMLProviderError {}
20368/// Errors returned by TagServerCertificate
20369#[derive(Debug, PartialEq)]
20370pub enum TagServerCertificateError {
20371    /// <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>
20372    ConcurrentModification(String),
20373    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20374    InvalidInput(String),
20375    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
20376    LimitExceeded(String),
20377    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20378    NoSuchEntity(String),
20379    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20380    ServiceFailure(String),
20381}
20382
20383impl TagServerCertificateError {
20384    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagServerCertificateError> {
20385        {
20386            let reader = EventReader::new(res.body.as_ref());
20387            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20388            find_start_element(&mut stack);
20389            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20390                match &parsed_error.code[..] {
20391                    "ConcurrentModification" => {
20392                        return RusotoError::Service(
20393                            TagServerCertificateError::ConcurrentModification(parsed_error.message),
20394                        )
20395                    }
20396                    "InvalidInput" => {
20397                        return RusotoError::Service(TagServerCertificateError::InvalidInput(
20398                            parsed_error.message,
20399                        ))
20400                    }
20401                    "LimitExceeded" => {
20402                        return RusotoError::Service(TagServerCertificateError::LimitExceeded(
20403                            parsed_error.message,
20404                        ))
20405                    }
20406                    "NoSuchEntity" => {
20407                        return RusotoError::Service(TagServerCertificateError::NoSuchEntity(
20408                            parsed_error.message,
20409                        ))
20410                    }
20411                    "ServiceFailure" => {
20412                        return RusotoError::Service(TagServerCertificateError::ServiceFailure(
20413                            parsed_error.message,
20414                        ))
20415                    }
20416                    _ => {}
20417                }
20418            }
20419        }
20420        RusotoError::Unknown(res)
20421    }
20422
20423    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20424    where
20425        T: Peek + Next,
20426    {
20427        xml_util::start_element("ErrorResponse", stack)?;
20428        XmlErrorDeserializer::deserialize("Error", stack)
20429    }
20430}
20431impl fmt::Display for TagServerCertificateError {
20432    #[allow(unused_variables)]
20433    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20434        match *self {
20435            TagServerCertificateError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20436            TagServerCertificateError::InvalidInput(ref cause) => write!(f, "{}", cause),
20437            TagServerCertificateError::LimitExceeded(ref cause) => write!(f, "{}", cause),
20438            TagServerCertificateError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20439            TagServerCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20440        }
20441    }
20442}
20443impl Error for TagServerCertificateError {}
20444/// Errors returned by TagUser
20445#[derive(Debug, PartialEq)]
20446pub enum TagUserError {
20447    /// <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>
20448    ConcurrentModification(String),
20449    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20450    InvalidInput(String),
20451    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
20452    LimitExceeded(String),
20453    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20454    NoSuchEntity(String),
20455    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20456    ServiceFailure(String),
20457}
20458
20459impl TagUserError {
20460    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagUserError> {
20461        {
20462            let reader = EventReader::new(res.body.as_ref());
20463            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20464            find_start_element(&mut stack);
20465            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20466                match &parsed_error.code[..] {
20467                    "ConcurrentModification" => {
20468                        return RusotoError::Service(TagUserError::ConcurrentModification(
20469                            parsed_error.message,
20470                        ))
20471                    }
20472                    "InvalidInput" => {
20473                        return RusotoError::Service(TagUserError::InvalidInput(
20474                            parsed_error.message,
20475                        ))
20476                    }
20477                    "LimitExceeded" => {
20478                        return RusotoError::Service(TagUserError::LimitExceeded(
20479                            parsed_error.message,
20480                        ))
20481                    }
20482                    "NoSuchEntity" => {
20483                        return RusotoError::Service(TagUserError::NoSuchEntity(
20484                            parsed_error.message,
20485                        ))
20486                    }
20487                    "ServiceFailure" => {
20488                        return RusotoError::Service(TagUserError::ServiceFailure(
20489                            parsed_error.message,
20490                        ))
20491                    }
20492                    _ => {}
20493                }
20494            }
20495        }
20496        RusotoError::Unknown(res)
20497    }
20498
20499    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20500    where
20501        T: Peek + Next,
20502    {
20503        xml_util::start_element("ErrorResponse", stack)?;
20504        XmlErrorDeserializer::deserialize("Error", stack)
20505    }
20506}
20507impl fmt::Display for TagUserError {
20508    #[allow(unused_variables)]
20509    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20510        match *self {
20511            TagUserError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20512            TagUserError::InvalidInput(ref cause) => write!(f, "{}", cause),
20513            TagUserError::LimitExceeded(ref cause) => write!(f, "{}", cause),
20514            TagUserError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20515            TagUserError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20516        }
20517    }
20518}
20519impl Error for TagUserError {}
20520/// Errors returned by UntagInstanceProfile
20521#[derive(Debug, PartialEq)]
20522pub enum UntagInstanceProfileError {
20523    /// <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>
20524    ConcurrentModification(String),
20525    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20526    InvalidInput(String),
20527    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20528    NoSuchEntity(String),
20529    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20530    ServiceFailure(String),
20531}
20532
20533impl UntagInstanceProfileError {
20534    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagInstanceProfileError> {
20535        {
20536            let reader = EventReader::new(res.body.as_ref());
20537            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20538            find_start_element(&mut stack);
20539            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20540                match &parsed_error.code[..] {
20541                    "ConcurrentModification" => {
20542                        return RusotoError::Service(
20543                            UntagInstanceProfileError::ConcurrentModification(parsed_error.message),
20544                        )
20545                    }
20546                    "InvalidInput" => {
20547                        return RusotoError::Service(UntagInstanceProfileError::InvalidInput(
20548                            parsed_error.message,
20549                        ))
20550                    }
20551                    "NoSuchEntity" => {
20552                        return RusotoError::Service(UntagInstanceProfileError::NoSuchEntity(
20553                            parsed_error.message,
20554                        ))
20555                    }
20556                    "ServiceFailure" => {
20557                        return RusotoError::Service(UntagInstanceProfileError::ServiceFailure(
20558                            parsed_error.message,
20559                        ))
20560                    }
20561                    _ => {}
20562                }
20563            }
20564        }
20565        RusotoError::Unknown(res)
20566    }
20567
20568    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20569    where
20570        T: Peek + Next,
20571    {
20572        xml_util::start_element("ErrorResponse", stack)?;
20573        XmlErrorDeserializer::deserialize("Error", stack)
20574    }
20575}
20576impl fmt::Display for UntagInstanceProfileError {
20577    #[allow(unused_variables)]
20578    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20579        match *self {
20580            UntagInstanceProfileError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20581            UntagInstanceProfileError::InvalidInput(ref cause) => write!(f, "{}", cause),
20582            UntagInstanceProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20583            UntagInstanceProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20584        }
20585    }
20586}
20587impl Error for UntagInstanceProfileError {}
20588/// Errors returned by UntagMFADevice
20589#[derive(Debug, PartialEq)]
20590pub enum UntagMFADeviceError {
20591    /// <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>
20592    ConcurrentModification(String),
20593    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20594    InvalidInput(String),
20595    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20596    NoSuchEntity(String),
20597    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20598    ServiceFailure(String),
20599}
20600
20601impl UntagMFADeviceError {
20602    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagMFADeviceError> {
20603        {
20604            let reader = EventReader::new(res.body.as_ref());
20605            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20606            find_start_element(&mut stack);
20607            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20608                match &parsed_error.code[..] {
20609                    "ConcurrentModification" => {
20610                        return RusotoError::Service(UntagMFADeviceError::ConcurrentModification(
20611                            parsed_error.message,
20612                        ))
20613                    }
20614                    "InvalidInput" => {
20615                        return RusotoError::Service(UntagMFADeviceError::InvalidInput(
20616                            parsed_error.message,
20617                        ))
20618                    }
20619                    "NoSuchEntity" => {
20620                        return RusotoError::Service(UntagMFADeviceError::NoSuchEntity(
20621                            parsed_error.message,
20622                        ))
20623                    }
20624                    "ServiceFailure" => {
20625                        return RusotoError::Service(UntagMFADeviceError::ServiceFailure(
20626                            parsed_error.message,
20627                        ))
20628                    }
20629                    _ => {}
20630                }
20631            }
20632        }
20633        RusotoError::Unknown(res)
20634    }
20635
20636    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20637    where
20638        T: Peek + Next,
20639    {
20640        xml_util::start_element("ErrorResponse", stack)?;
20641        XmlErrorDeserializer::deserialize("Error", stack)
20642    }
20643}
20644impl fmt::Display for UntagMFADeviceError {
20645    #[allow(unused_variables)]
20646    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20647        match *self {
20648            UntagMFADeviceError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20649            UntagMFADeviceError::InvalidInput(ref cause) => write!(f, "{}", cause),
20650            UntagMFADeviceError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20651            UntagMFADeviceError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20652        }
20653    }
20654}
20655impl Error for UntagMFADeviceError {}
20656/// Errors returned by UntagOpenIDConnectProvider
20657#[derive(Debug, PartialEq)]
20658pub enum UntagOpenIDConnectProviderError {
20659    /// <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>
20660    ConcurrentModification(String),
20661    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20662    InvalidInput(String),
20663    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20664    NoSuchEntity(String),
20665    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20666    ServiceFailure(String),
20667}
20668
20669impl UntagOpenIDConnectProviderError {
20670    pub fn from_response(
20671        res: BufferedHttpResponse,
20672    ) -> RusotoError<UntagOpenIDConnectProviderError> {
20673        {
20674            let reader = EventReader::new(res.body.as_ref());
20675            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20676            find_start_element(&mut stack);
20677            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20678                match &parsed_error.code[..] {
20679                    "ConcurrentModification" => {
20680                        return RusotoError::Service(
20681                            UntagOpenIDConnectProviderError::ConcurrentModification(
20682                                parsed_error.message,
20683                            ),
20684                        )
20685                    }
20686                    "InvalidInput" => {
20687                        return RusotoError::Service(UntagOpenIDConnectProviderError::InvalidInput(
20688                            parsed_error.message,
20689                        ))
20690                    }
20691                    "NoSuchEntity" => {
20692                        return RusotoError::Service(UntagOpenIDConnectProviderError::NoSuchEntity(
20693                            parsed_error.message,
20694                        ))
20695                    }
20696                    "ServiceFailure" => {
20697                        return RusotoError::Service(
20698                            UntagOpenIDConnectProviderError::ServiceFailure(parsed_error.message),
20699                        )
20700                    }
20701                    _ => {}
20702                }
20703            }
20704        }
20705        RusotoError::Unknown(res)
20706    }
20707
20708    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20709    where
20710        T: Peek + Next,
20711    {
20712        xml_util::start_element("ErrorResponse", stack)?;
20713        XmlErrorDeserializer::deserialize("Error", stack)
20714    }
20715}
20716impl fmt::Display for UntagOpenIDConnectProviderError {
20717    #[allow(unused_variables)]
20718    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20719        match *self {
20720            UntagOpenIDConnectProviderError::ConcurrentModification(ref cause) => {
20721                write!(f, "{}", cause)
20722            }
20723            UntagOpenIDConnectProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
20724            UntagOpenIDConnectProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20725            UntagOpenIDConnectProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20726        }
20727    }
20728}
20729impl Error for UntagOpenIDConnectProviderError {}
20730/// Errors returned by UntagPolicy
20731#[derive(Debug, PartialEq)]
20732pub enum UntagPolicyError {
20733    /// <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>
20734    ConcurrentModification(String),
20735    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20736    InvalidInput(String),
20737    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20738    NoSuchEntity(String),
20739    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20740    ServiceFailure(String),
20741}
20742
20743impl UntagPolicyError {
20744    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagPolicyError> {
20745        {
20746            let reader = EventReader::new(res.body.as_ref());
20747            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20748            find_start_element(&mut stack);
20749            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20750                match &parsed_error.code[..] {
20751                    "ConcurrentModification" => {
20752                        return RusotoError::Service(UntagPolicyError::ConcurrentModification(
20753                            parsed_error.message,
20754                        ))
20755                    }
20756                    "InvalidInput" => {
20757                        return RusotoError::Service(UntagPolicyError::InvalidInput(
20758                            parsed_error.message,
20759                        ))
20760                    }
20761                    "NoSuchEntity" => {
20762                        return RusotoError::Service(UntagPolicyError::NoSuchEntity(
20763                            parsed_error.message,
20764                        ))
20765                    }
20766                    "ServiceFailure" => {
20767                        return RusotoError::Service(UntagPolicyError::ServiceFailure(
20768                            parsed_error.message,
20769                        ))
20770                    }
20771                    _ => {}
20772                }
20773            }
20774        }
20775        RusotoError::Unknown(res)
20776    }
20777
20778    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20779    where
20780        T: Peek + Next,
20781    {
20782        xml_util::start_element("ErrorResponse", stack)?;
20783        XmlErrorDeserializer::deserialize("Error", stack)
20784    }
20785}
20786impl fmt::Display for UntagPolicyError {
20787    #[allow(unused_variables)]
20788    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20789        match *self {
20790            UntagPolicyError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20791            UntagPolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
20792            UntagPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20793            UntagPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20794        }
20795    }
20796}
20797impl Error for UntagPolicyError {}
20798/// Errors returned by UntagRole
20799#[derive(Debug, PartialEq)]
20800pub enum UntagRoleError {
20801    /// <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>
20802    ConcurrentModification(String),
20803    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20804    NoSuchEntity(String),
20805    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20806    ServiceFailure(String),
20807}
20808
20809impl UntagRoleError {
20810    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagRoleError> {
20811        {
20812            let reader = EventReader::new(res.body.as_ref());
20813            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20814            find_start_element(&mut stack);
20815            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20816                match &parsed_error.code[..] {
20817                    "ConcurrentModification" => {
20818                        return RusotoError::Service(UntagRoleError::ConcurrentModification(
20819                            parsed_error.message,
20820                        ))
20821                    }
20822                    "NoSuchEntity" => {
20823                        return RusotoError::Service(UntagRoleError::NoSuchEntity(
20824                            parsed_error.message,
20825                        ))
20826                    }
20827                    "ServiceFailure" => {
20828                        return RusotoError::Service(UntagRoleError::ServiceFailure(
20829                            parsed_error.message,
20830                        ))
20831                    }
20832                    _ => {}
20833                }
20834            }
20835        }
20836        RusotoError::Unknown(res)
20837    }
20838
20839    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20840    where
20841        T: Peek + Next,
20842    {
20843        xml_util::start_element("ErrorResponse", stack)?;
20844        XmlErrorDeserializer::deserialize("Error", stack)
20845    }
20846}
20847impl fmt::Display for UntagRoleError {
20848    #[allow(unused_variables)]
20849    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20850        match *self {
20851            UntagRoleError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20852            UntagRoleError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20853            UntagRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20854        }
20855    }
20856}
20857impl Error for UntagRoleError {}
20858/// Errors returned by UntagSAMLProvider
20859#[derive(Debug, PartialEq)]
20860pub enum UntagSAMLProviderError {
20861    /// <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>
20862    ConcurrentModification(String),
20863    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20864    InvalidInput(String),
20865    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20866    NoSuchEntity(String),
20867    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20868    ServiceFailure(String),
20869}
20870
20871impl UntagSAMLProviderError {
20872    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagSAMLProviderError> {
20873        {
20874            let reader = EventReader::new(res.body.as_ref());
20875            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20876            find_start_element(&mut stack);
20877            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20878                match &parsed_error.code[..] {
20879                    "ConcurrentModification" => {
20880                        return RusotoError::Service(
20881                            UntagSAMLProviderError::ConcurrentModification(parsed_error.message),
20882                        )
20883                    }
20884                    "InvalidInput" => {
20885                        return RusotoError::Service(UntagSAMLProviderError::InvalidInput(
20886                            parsed_error.message,
20887                        ))
20888                    }
20889                    "NoSuchEntity" => {
20890                        return RusotoError::Service(UntagSAMLProviderError::NoSuchEntity(
20891                            parsed_error.message,
20892                        ))
20893                    }
20894                    "ServiceFailure" => {
20895                        return RusotoError::Service(UntagSAMLProviderError::ServiceFailure(
20896                            parsed_error.message,
20897                        ))
20898                    }
20899                    _ => {}
20900                }
20901            }
20902        }
20903        RusotoError::Unknown(res)
20904    }
20905
20906    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20907    where
20908        T: Peek + Next,
20909    {
20910        xml_util::start_element("ErrorResponse", stack)?;
20911        XmlErrorDeserializer::deserialize("Error", stack)
20912    }
20913}
20914impl fmt::Display for UntagSAMLProviderError {
20915    #[allow(unused_variables)]
20916    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20917        match *self {
20918            UntagSAMLProviderError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
20919            UntagSAMLProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
20920            UntagSAMLProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20921            UntagSAMLProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20922        }
20923    }
20924}
20925impl Error for UntagSAMLProviderError {}
20926/// Errors returned by UntagServerCertificate
20927#[derive(Debug, PartialEq)]
20928pub enum UntagServerCertificateError {
20929    /// <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>
20930    ConcurrentModification(String),
20931    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
20932    InvalidInput(String),
20933    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
20934    NoSuchEntity(String),
20935    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
20936    ServiceFailure(String),
20937}
20938
20939impl UntagServerCertificateError {
20940    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagServerCertificateError> {
20941        {
20942            let reader = EventReader::new(res.body.as_ref());
20943            let mut stack = XmlResponse::new(reader.into_iter().peekable());
20944            find_start_element(&mut stack);
20945            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
20946                match &parsed_error.code[..] {
20947                    "ConcurrentModification" => {
20948                        return RusotoError::Service(
20949                            UntagServerCertificateError::ConcurrentModification(
20950                                parsed_error.message,
20951                            ),
20952                        )
20953                    }
20954                    "InvalidInput" => {
20955                        return RusotoError::Service(UntagServerCertificateError::InvalidInput(
20956                            parsed_error.message,
20957                        ))
20958                    }
20959                    "NoSuchEntity" => {
20960                        return RusotoError::Service(UntagServerCertificateError::NoSuchEntity(
20961                            parsed_error.message,
20962                        ))
20963                    }
20964                    "ServiceFailure" => {
20965                        return RusotoError::Service(UntagServerCertificateError::ServiceFailure(
20966                            parsed_error.message,
20967                        ))
20968                    }
20969                    _ => {}
20970                }
20971            }
20972        }
20973        RusotoError::Unknown(res)
20974    }
20975
20976    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
20977    where
20978        T: Peek + Next,
20979    {
20980        xml_util::start_element("ErrorResponse", stack)?;
20981        XmlErrorDeserializer::deserialize("Error", stack)
20982    }
20983}
20984impl fmt::Display for UntagServerCertificateError {
20985    #[allow(unused_variables)]
20986    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20987        match *self {
20988            UntagServerCertificateError::ConcurrentModification(ref cause) => {
20989                write!(f, "{}", cause)
20990            }
20991            UntagServerCertificateError::InvalidInput(ref cause) => write!(f, "{}", cause),
20992            UntagServerCertificateError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
20993            UntagServerCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
20994        }
20995    }
20996}
20997impl Error for UntagServerCertificateError {}
20998/// Errors returned by UntagUser
20999#[derive(Debug, PartialEq)]
21000pub enum UntagUserError {
21001    /// <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>
21002    ConcurrentModification(String),
21003    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21004    NoSuchEntity(String),
21005    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21006    ServiceFailure(String),
21007}
21008
21009impl UntagUserError {
21010    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagUserError> {
21011        {
21012            let reader = EventReader::new(res.body.as_ref());
21013            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21014            find_start_element(&mut stack);
21015            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21016                match &parsed_error.code[..] {
21017                    "ConcurrentModification" => {
21018                        return RusotoError::Service(UntagUserError::ConcurrentModification(
21019                            parsed_error.message,
21020                        ))
21021                    }
21022                    "NoSuchEntity" => {
21023                        return RusotoError::Service(UntagUserError::NoSuchEntity(
21024                            parsed_error.message,
21025                        ))
21026                    }
21027                    "ServiceFailure" => {
21028                        return RusotoError::Service(UntagUserError::ServiceFailure(
21029                            parsed_error.message,
21030                        ))
21031                    }
21032                    _ => {}
21033                }
21034            }
21035        }
21036        RusotoError::Unknown(res)
21037    }
21038
21039    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21040    where
21041        T: Peek + Next,
21042    {
21043        xml_util::start_element("ErrorResponse", stack)?;
21044        XmlErrorDeserializer::deserialize("Error", stack)
21045    }
21046}
21047impl fmt::Display for UntagUserError {
21048    #[allow(unused_variables)]
21049    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21050        match *self {
21051            UntagUserError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
21052            UntagUserError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21053            UntagUserError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21054        }
21055    }
21056}
21057impl Error for UntagUserError {}
21058/// Errors returned by UpdateAccessKey
21059#[derive(Debug, PartialEq)]
21060pub enum UpdateAccessKeyError {
21061    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21062    LimitExceeded(String),
21063    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21064    NoSuchEntity(String),
21065    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21066    ServiceFailure(String),
21067}
21068
21069impl UpdateAccessKeyError {
21070    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateAccessKeyError> {
21071        {
21072            let reader = EventReader::new(res.body.as_ref());
21073            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21074            find_start_element(&mut stack);
21075            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21076                match &parsed_error.code[..] {
21077                    "LimitExceeded" => {
21078                        return RusotoError::Service(UpdateAccessKeyError::LimitExceeded(
21079                            parsed_error.message,
21080                        ))
21081                    }
21082                    "NoSuchEntity" => {
21083                        return RusotoError::Service(UpdateAccessKeyError::NoSuchEntity(
21084                            parsed_error.message,
21085                        ))
21086                    }
21087                    "ServiceFailure" => {
21088                        return RusotoError::Service(UpdateAccessKeyError::ServiceFailure(
21089                            parsed_error.message,
21090                        ))
21091                    }
21092                    _ => {}
21093                }
21094            }
21095        }
21096        RusotoError::Unknown(res)
21097    }
21098
21099    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21100    where
21101        T: Peek + Next,
21102    {
21103        xml_util::start_element("ErrorResponse", stack)?;
21104        XmlErrorDeserializer::deserialize("Error", stack)
21105    }
21106}
21107impl fmt::Display for UpdateAccessKeyError {
21108    #[allow(unused_variables)]
21109    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21110        match *self {
21111            UpdateAccessKeyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21112            UpdateAccessKeyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21113            UpdateAccessKeyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21114        }
21115    }
21116}
21117impl Error for UpdateAccessKeyError {}
21118/// Errors returned by UpdateAccountPasswordPolicy
21119#[derive(Debug, PartialEq)]
21120pub enum UpdateAccountPasswordPolicyError {
21121    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21122    LimitExceeded(String),
21123    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
21124    MalformedPolicyDocument(String),
21125    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21126    NoSuchEntity(String),
21127    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21128    ServiceFailure(String),
21129}
21130
21131impl UpdateAccountPasswordPolicyError {
21132    pub fn from_response(
21133        res: BufferedHttpResponse,
21134    ) -> RusotoError<UpdateAccountPasswordPolicyError> {
21135        {
21136            let reader = EventReader::new(res.body.as_ref());
21137            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21138            find_start_element(&mut stack);
21139            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21140                match &parsed_error.code[..] {
21141                    "LimitExceeded" => {
21142                        return RusotoError::Service(
21143                            UpdateAccountPasswordPolicyError::LimitExceeded(parsed_error.message),
21144                        )
21145                    }
21146                    "MalformedPolicyDocument" => {
21147                        return RusotoError::Service(
21148                            UpdateAccountPasswordPolicyError::MalformedPolicyDocument(
21149                                parsed_error.message,
21150                            ),
21151                        )
21152                    }
21153                    "NoSuchEntity" => {
21154                        return RusotoError::Service(
21155                            UpdateAccountPasswordPolicyError::NoSuchEntity(parsed_error.message),
21156                        )
21157                    }
21158                    "ServiceFailure" => {
21159                        return RusotoError::Service(
21160                            UpdateAccountPasswordPolicyError::ServiceFailure(parsed_error.message),
21161                        )
21162                    }
21163                    _ => {}
21164                }
21165            }
21166        }
21167        RusotoError::Unknown(res)
21168    }
21169
21170    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21171    where
21172        T: Peek + Next,
21173    {
21174        xml_util::start_element("ErrorResponse", stack)?;
21175        XmlErrorDeserializer::deserialize("Error", stack)
21176    }
21177}
21178impl fmt::Display for UpdateAccountPasswordPolicyError {
21179    #[allow(unused_variables)]
21180    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21181        match *self {
21182            UpdateAccountPasswordPolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21183            UpdateAccountPasswordPolicyError::MalformedPolicyDocument(ref cause) => {
21184                write!(f, "{}", cause)
21185            }
21186            UpdateAccountPasswordPolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21187            UpdateAccountPasswordPolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21188        }
21189    }
21190}
21191impl Error for UpdateAccountPasswordPolicyError {}
21192/// Errors returned by UpdateAssumeRolePolicy
21193#[derive(Debug, PartialEq)]
21194pub enum UpdateAssumeRolePolicyError {
21195    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21196    LimitExceeded(String),
21197    /// <p>The request was rejected because the policy document was malformed. The error message describes the specific error.</p>
21198    MalformedPolicyDocument(String),
21199    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21200    NoSuchEntity(String),
21201    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21202    ServiceFailure(String),
21203    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
21204    UnmodifiableEntity(String),
21205}
21206
21207impl UpdateAssumeRolePolicyError {
21208    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateAssumeRolePolicyError> {
21209        {
21210            let reader = EventReader::new(res.body.as_ref());
21211            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21212            find_start_element(&mut stack);
21213            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21214                match &parsed_error.code[..] {
21215                    "LimitExceeded" => {
21216                        return RusotoError::Service(UpdateAssumeRolePolicyError::LimitExceeded(
21217                            parsed_error.message,
21218                        ))
21219                    }
21220                    "MalformedPolicyDocument" => {
21221                        return RusotoError::Service(
21222                            UpdateAssumeRolePolicyError::MalformedPolicyDocument(
21223                                parsed_error.message,
21224                            ),
21225                        )
21226                    }
21227                    "NoSuchEntity" => {
21228                        return RusotoError::Service(UpdateAssumeRolePolicyError::NoSuchEntity(
21229                            parsed_error.message,
21230                        ))
21231                    }
21232                    "ServiceFailure" => {
21233                        return RusotoError::Service(UpdateAssumeRolePolicyError::ServiceFailure(
21234                            parsed_error.message,
21235                        ))
21236                    }
21237                    "UnmodifiableEntity" => {
21238                        return RusotoError::Service(
21239                            UpdateAssumeRolePolicyError::UnmodifiableEntity(parsed_error.message),
21240                        )
21241                    }
21242                    _ => {}
21243                }
21244            }
21245        }
21246        RusotoError::Unknown(res)
21247    }
21248
21249    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21250    where
21251        T: Peek + Next,
21252    {
21253        xml_util::start_element("ErrorResponse", stack)?;
21254        XmlErrorDeserializer::deserialize("Error", stack)
21255    }
21256}
21257impl fmt::Display for UpdateAssumeRolePolicyError {
21258    #[allow(unused_variables)]
21259    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21260        match *self {
21261            UpdateAssumeRolePolicyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21262            UpdateAssumeRolePolicyError::MalformedPolicyDocument(ref cause) => {
21263                write!(f, "{}", cause)
21264            }
21265            UpdateAssumeRolePolicyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21266            UpdateAssumeRolePolicyError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21267            UpdateAssumeRolePolicyError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
21268        }
21269    }
21270}
21271impl Error for UpdateAssumeRolePolicyError {}
21272/// Errors returned by UpdateGroup
21273#[derive(Debug, PartialEq)]
21274pub enum UpdateGroupError {
21275    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
21276    EntityAlreadyExists(String),
21277    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21278    LimitExceeded(String),
21279    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21280    NoSuchEntity(String),
21281    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21282    ServiceFailure(String),
21283}
21284
21285impl UpdateGroupError {
21286    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateGroupError> {
21287        {
21288            let reader = EventReader::new(res.body.as_ref());
21289            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21290            find_start_element(&mut stack);
21291            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21292                match &parsed_error.code[..] {
21293                    "EntityAlreadyExists" => {
21294                        return RusotoError::Service(UpdateGroupError::EntityAlreadyExists(
21295                            parsed_error.message,
21296                        ))
21297                    }
21298                    "LimitExceeded" => {
21299                        return RusotoError::Service(UpdateGroupError::LimitExceeded(
21300                            parsed_error.message,
21301                        ))
21302                    }
21303                    "NoSuchEntity" => {
21304                        return RusotoError::Service(UpdateGroupError::NoSuchEntity(
21305                            parsed_error.message,
21306                        ))
21307                    }
21308                    "ServiceFailure" => {
21309                        return RusotoError::Service(UpdateGroupError::ServiceFailure(
21310                            parsed_error.message,
21311                        ))
21312                    }
21313                    _ => {}
21314                }
21315            }
21316        }
21317        RusotoError::Unknown(res)
21318    }
21319
21320    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21321    where
21322        T: Peek + Next,
21323    {
21324        xml_util::start_element("ErrorResponse", stack)?;
21325        XmlErrorDeserializer::deserialize("Error", stack)
21326    }
21327}
21328impl fmt::Display for UpdateGroupError {
21329    #[allow(unused_variables)]
21330    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21331        match *self {
21332            UpdateGroupError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
21333            UpdateGroupError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21334            UpdateGroupError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21335            UpdateGroupError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21336        }
21337    }
21338}
21339impl Error for UpdateGroupError {}
21340/// Errors returned by UpdateLoginProfile
21341#[derive(Debug, PartialEq)]
21342pub enum UpdateLoginProfileError {
21343    /// <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>
21344    EntityTemporarilyUnmodifiable(String),
21345    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21346    LimitExceeded(String),
21347    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21348    NoSuchEntity(String),
21349    /// <p>The request was rejected because the provided password did not meet the requirements imposed by the account password policy.</p>
21350    PasswordPolicyViolation(String),
21351    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21352    ServiceFailure(String),
21353}
21354
21355impl UpdateLoginProfileError {
21356    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateLoginProfileError> {
21357        {
21358            let reader = EventReader::new(res.body.as_ref());
21359            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21360            find_start_element(&mut stack);
21361            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21362                match &parsed_error.code[..] {
21363                    "EntityTemporarilyUnmodifiable" => {
21364                        return RusotoError::Service(
21365                            UpdateLoginProfileError::EntityTemporarilyUnmodifiable(
21366                                parsed_error.message,
21367                            ),
21368                        )
21369                    }
21370                    "LimitExceeded" => {
21371                        return RusotoError::Service(UpdateLoginProfileError::LimitExceeded(
21372                            parsed_error.message,
21373                        ))
21374                    }
21375                    "NoSuchEntity" => {
21376                        return RusotoError::Service(UpdateLoginProfileError::NoSuchEntity(
21377                            parsed_error.message,
21378                        ))
21379                    }
21380                    "PasswordPolicyViolation" => {
21381                        return RusotoError::Service(
21382                            UpdateLoginProfileError::PasswordPolicyViolation(parsed_error.message),
21383                        )
21384                    }
21385                    "ServiceFailure" => {
21386                        return RusotoError::Service(UpdateLoginProfileError::ServiceFailure(
21387                            parsed_error.message,
21388                        ))
21389                    }
21390                    _ => {}
21391                }
21392            }
21393        }
21394        RusotoError::Unknown(res)
21395    }
21396
21397    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21398    where
21399        T: Peek + Next,
21400    {
21401        xml_util::start_element("ErrorResponse", stack)?;
21402        XmlErrorDeserializer::deserialize("Error", stack)
21403    }
21404}
21405impl fmt::Display for UpdateLoginProfileError {
21406    #[allow(unused_variables)]
21407    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21408        match *self {
21409            UpdateLoginProfileError::EntityTemporarilyUnmodifiable(ref cause) => {
21410                write!(f, "{}", cause)
21411            }
21412            UpdateLoginProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21413            UpdateLoginProfileError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21414            UpdateLoginProfileError::PasswordPolicyViolation(ref cause) => write!(f, "{}", cause),
21415            UpdateLoginProfileError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21416        }
21417    }
21418}
21419impl Error for UpdateLoginProfileError {}
21420/// Errors returned by UpdateOpenIDConnectProviderThumbprint
21421#[derive(Debug, PartialEq)]
21422pub enum UpdateOpenIDConnectProviderThumbprintError {
21423    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
21424    InvalidInput(String),
21425    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21426    NoSuchEntity(String),
21427    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21428    ServiceFailure(String),
21429}
21430
21431impl UpdateOpenIDConnectProviderThumbprintError {
21432    pub fn from_response(
21433        res: BufferedHttpResponse,
21434    ) -> RusotoError<UpdateOpenIDConnectProviderThumbprintError> {
21435        {
21436            let reader = EventReader::new(res.body.as_ref());
21437            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21438            find_start_element(&mut stack);
21439            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21440                match &parsed_error.code[..] {
21441                    "InvalidInput" => {
21442                        return RusotoError::Service(
21443                            UpdateOpenIDConnectProviderThumbprintError::InvalidInput(
21444                                parsed_error.message,
21445                            ),
21446                        )
21447                    }
21448                    "NoSuchEntity" => {
21449                        return RusotoError::Service(
21450                            UpdateOpenIDConnectProviderThumbprintError::NoSuchEntity(
21451                                parsed_error.message,
21452                            ),
21453                        )
21454                    }
21455                    "ServiceFailure" => {
21456                        return RusotoError::Service(
21457                            UpdateOpenIDConnectProviderThumbprintError::ServiceFailure(
21458                                parsed_error.message,
21459                            ),
21460                        )
21461                    }
21462                    _ => {}
21463                }
21464            }
21465        }
21466        RusotoError::Unknown(res)
21467    }
21468
21469    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21470    where
21471        T: Peek + Next,
21472    {
21473        xml_util::start_element("ErrorResponse", stack)?;
21474        XmlErrorDeserializer::deserialize("Error", stack)
21475    }
21476}
21477impl fmt::Display for UpdateOpenIDConnectProviderThumbprintError {
21478    #[allow(unused_variables)]
21479    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21480        match *self {
21481            UpdateOpenIDConnectProviderThumbprintError::InvalidInput(ref cause) => {
21482                write!(f, "{}", cause)
21483            }
21484            UpdateOpenIDConnectProviderThumbprintError::NoSuchEntity(ref cause) => {
21485                write!(f, "{}", cause)
21486            }
21487            UpdateOpenIDConnectProviderThumbprintError::ServiceFailure(ref cause) => {
21488                write!(f, "{}", cause)
21489            }
21490        }
21491    }
21492}
21493impl Error for UpdateOpenIDConnectProviderThumbprintError {}
21494/// Errors returned by UpdateRole
21495#[derive(Debug, PartialEq)]
21496pub enum UpdateRoleError {
21497    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21498    NoSuchEntity(String),
21499    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21500    ServiceFailure(String),
21501    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
21502    UnmodifiableEntity(String),
21503}
21504
21505impl UpdateRoleError {
21506    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateRoleError> {
21507        {
21508            let reader = EventReader::new(res.body.as_ref());
21509            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21510            find_start_element(&mut stack);
21511            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21512                match &parsed_error.code[..] {
21513                    "NoSuchEntity" => {
21514                        return RusotoError::Service(UpdateRoleError::NoSuchEntity(
21515                            parsed_error.message,
21516                        ))
21517                    }
21518                    "ServiceFailure" => {
21519                        return RusotoError::Service(UpdateRoleError::ServiceFailure(
21520                            parsed_error.message,
21521                        ))
21522                    }
21523                    "UnmodifiableEntity" => {
21524                        return RusotoError::Service(UpdateRoleError::UnmodifiableEntity(
21525                            parsed_error.message,
21526                        ))
21527                    }
21528                    _ => {}
21529                }
21530            }
21531        }
21532        RusotoError::Unknown(res)
21533    }
21534
21535    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21536    where
21537        T: Peek + Next,
21538    {
21539        xml_util::start_element("ErrorResponse", stack)?;
21540        XmlErrorDeserializer::deserialize("Error", stack)
21541    }
21542}
21543impl fmt::Display for UpdateRoleError {
21544    #[allow(unused_variables)]
21545    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21546        match *self {
21547            UpdateRoleError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21548            UpdateRoleError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21549            UpdateRoleError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
21550        }
21551    }
21552}
21553impl Error for UpdateRoleError {}
21554/// Errors returned by UpdateRoleDescription
21555#[derive(Debug, PartialEq)]
21556pub enum UpdateRoleDescriptionError {
21557    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21558    NoSuchEntity(String),
21559    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21560    ServiceFailure(String),
21561    /// <p>The request was rejected because only the service that depends on the service-linked role can modify or delete the role on your behalf. The error message includes the name of the service that depends on this service-linked role. You must request the change through that service.</p>
21562    UnmodifiableEntity(String),
21563}
21564
21565impl UpdateRoleDescriptionError {
21566    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateRoleDescriptionError> {
21567        {
21568            let reader = EventReader::new(res.body.as_ref());
21569            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21570            find_start_element(&mut stack);
21571            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21572                match &parsed_error.code[..] {
21573                    "NoSuchEntity" => {
21574                        return RusotoError::Service(UpdateRoleDescriptionError::NoSuchEntity(
21575                            parsed_error.message,
21576                        ))
21577                    }
21578                    "ServiceFailure" => {
21579                        return RusotoError::Service(UpdateRoleDescriptionError::ServiceFailure(
21580                            parsed_error.message,
21581                        ))
21582                    }
21583                    "UnmodifiableEntity" => {
21584                        return RusotoError::Service(
21585                            UpdateRoleDescriptionError::UnmodifiableEntity(parsed_error.message),
21586                        )
21587                    }
21588                    _ => {}
21589                }
21590            }
21591        }
21592        RusotoError::Unknown(res)
21593    }
21594
21595    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21596    where
21597        T: Peek + Next,
21598    {
21599        xml_util::start_element("ErrorResponse", stack)?;
21600        XmlErrorDeserializer::deserialize("Error", stack)
21601    }
21602}
21603impl fmt::Display for UpdateRoleDescriptionError {
21604    #[allow(unused_variables)]
21605    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21606        match *self {
21607            UpdateRoleDescriptionError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21608            UpdateRoleDescriptionError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21609            UpdateRoleDescriptionError::UnmodifiableEntity(ref cause) => write!(f, "{}", cause),
21610        }
21611    }
21612}
21613impl Error for UpdateRoleDescriptionError {}
21614/// Errors returned by UpdateSAMLProvider
21615#[derive(Debug, PartialEq)]
21616pub enum UpdateSAMLProviderError {
21617    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
21618    InvalidInput(String),
21619    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21620    LimitExceeded(String),
21621    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21622    NoSuchEntity(String),
21623    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21624    ServiceFailure(String),
21625}
21626
21627impl UpdateSAMLProviderError {
21628    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateSAMLProviderError> {
21629        {
21630            let reader = EventReader::new(res.body.as_ref());
21631            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21632            find_start_element(&mut stack);
21633            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21634                match &parsed_error.code[..] {
21635                    "InvalidInput" => {
21636                        return RusotoError::Service(UpdateSAMLProviderError::InvalidInput(
21637                            parsed_error.message,
21638                        ))
21639                    }
21640                    "LimitExceeded" => {
21641                        return RusotoError::Service(UpdateSAMLProviderError::LimitExceeded(
21642                            parsed_error.message,
21643                        ))
21644                    }
21645                    "NoSuchEntity" => {
21646                        return RusotoError::Service(UpdateSAMLProviderError::NoSuchEntity(
21647                            parsed_error.message,
21648                        ))
21649                    }
21650                    "ServiceFailure" => {
21651                        return RusotoError::Service(UpdateSAMLProviderError::ServiceFailure(
21652                            parsed_error.message,
21653                        ))
21654                    }
21655                    _ => {}
21656                }
21657            }
21658        }
21659        RusotoError::Unknown(res)
21660    }
21661
21662    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21663    where
21664        T: Peek + Next,
21665    {
21666        xml_util::start_element("ErrorResponse", stack)?;
21667        XmlErrorDeserializer::deserialize("Error", stack)
21668    }
21669}
21670impl fmt::Display for UpdateSAMLProviderError {
21671    #[allow(unused_variables)]
21672    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21673        match *self {
21674            UpdateSAMLProviderError::InvalidInput(ref cause) => write!(f, "{}", cause),
21675            UpdateSAMLProviderError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21676            UpdateSAMLProviderError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21677            UpdateSAMLProviderError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21678        }
21679    }
21680}
21681impl Error for UpdateSAMLProviderError {}
21682/// Errors returned by UpdateSSHPublicKey
21683#[derive(Debug, PartialEq)]
21684pub enum UpdateSSHPublicKeyError {
21685    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21686    NoSuchEntity(String),
21687}
21688
21689impl UpdateSSHPublicKeyError {
21690    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateSSHPublicKeyError> {
21691        {
21692            let reader = EventReader::new(res.body.as_ref());
21693            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21694            find_start_element(&mut stack);
21695            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21696                match &parsed_error.code[..] {
21697                    "NoSuchEntity" => {
21698                        return RusotoError::Service(UpdateSSHPublicKeyError::NoSuchEntity(
21699                            parsed_error.message,
21700                        ))
21701                    }
21702                    _ => {}
21703                }
21704            }
21705        }
21706        RusotoError::Unknown(res)
21707    }
21708
21709    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21710    where
21711        T: Peek + Next,
21712    {
21713        xml_util::start_element("ErrorResponse", stack)?;
21714        XmlErrorDeserializer::deserialize("Error", stack)
21715    }
21716}
21717impl fmt::Display for UpdateSSHPublicKeyError {
21718    #[allow(unused_variables)]
21719    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21720        match *self {
21721            UpdateSSHPublicKeyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21722        }
21723    }
21724}
21725impl Error for UpdateSSHPublicKeyError {}
21726/// Errors returned by UpdateServerCertificate
21727#[derive(Debug, PartialEq)]
21728pub enum UpdateServerCertificateError {
21729    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
21730    EntityAlreadyExists(String),
21731    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21732    LimitExceeded(String),
21733    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21734    NoSuchEntity(String),
21735    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21736    ServiceFailure(String),
21737}
21738
21739impl UpdateServerCertificateError {
21740    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateServerCertificateError> {
21741        {
21742            let reader = EventReader::new(res.body.as_ref());
21743            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21744            find_start_element(&mut stack);
21745            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21746                match &parsed_error.code[..] {
21747                    "EntityAlreadyExists" => {
21748                        return RusotoError::Service(
21749                            UpdateServerCertificateError::EntityAlreadyExists(parsed_error.message),
21750                        )
21751                    }
21752                    "LimitExceeded" => {
21753                        return RusotoError::Service(UpdateServerCertificateError::LimitExceeded(
21754                            parsed_error.message,
21755                        ))
21756                    }
21757                    "NoSuchEntity" => {
21758                        return RusotoError::Service(UpdateServerCertificateError::NoSuchEntity(
21759                            parsed_error.message,
21760                        ))
21761                    }
21762                    "ServiceFailure" => {
21763                        return RusotoError::Service(UpdateServerCertificateError::ServiceFailure(
21764                            parsed_error.message,
21765                        ))
21766                    }
21767                    _ => {}
21768                }
21769            }
21770        }
21771        RusotoError::Unknown(res)
21772    }
21773
21774    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21775    where
21776        T: Peek + Next,
21777    {
21778        xml_util::start_element("ErrorResponse", stack)?;
21779        XmlErrorDeserializer::deserialize("Error", stack)
21780    }
21781}
21782impl fmt::Display for UpdateServerCertificateError {
21783    #[allow(unused_variables)]
21784    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21785        match *self {
21786            UpdateServerCertificateError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
21787            UpdateServerCertificateError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21788            UpdateServerCertificateError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21789            UpdateServerCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21790        }
21791    }
21792}
21793impl Error for UpdateServerCertificateError {}
21794/// Errors returned by UpdateServiceSpecificCredential
21795#[derive(Debug, PartialEq)]
21796pub enum UpdateServiceSpecificCredentialError {
21797    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21798    NoSuchEntity(String),
21799}
21800
21801impl UpdateServiceSpecificCredentialError {
21802    pub fn from_response(
21803        res: BufferedHttpResponse,
21804    ) -> RusotoError<UpdateServiceSpecificCredentialError> {
21805        {
21806            let reader = EventReader::new(res.body.as_ref());
21807            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21808            find_start_element(&mut stack);
21809            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21810                match &parsed_error.code[..] {
21811                    "NoSuchEntity" => {
21812                        return RusotoError::Service(
21813                            UpdateServiceSpecificCredentialError::NoSuchEntity(
21814                                parsed_error.message,
21815                            ),
21816                        )
21817                    }
21818                    _ => {}
21819                }
21820            }
21821        }
21822        RusotoError::Unknown(res)
21823    }
21824
21825    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21826    where
21827        T: Peek + Next,
21828    {
21829        xml_util::start_element("ErrorResponse", stack)?;
21830        XmlErrorDeserializer::deserialize("Error", stack)
21831    }
21832}
21833impl fmt::Display for UpdateServiceSpecificCredentialError {
21834    #[allow(unused_variables)]
21835    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21836        match *self {
21837            UpdateServiceSpecificCredentialError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21838        }
21839    }
21840}
21841impl Error for UpdateServiceSpecificCredentialError {}
21842/// Errors returned by UpdateSigningCertificate
21843#[derive(Debug, PartialEq)]
21844pub enum UpdateSigningCertificateError {
21845    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21846    LimitExceeded(String),
21847    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21848    NoSuchEntity(String),
21849    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21850    ServiceFailure(String),
21851}
21852
21853impl UpdateSigningCertificateError {
21854    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateSigningCertificateError> {
21855        {
21856            let reader = EventReader::new(res.body.as_ref());
21857            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21858            find_start_element(&mut stack);
21859            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21860                match &parsed_error.code[..] {
21861                    "LimitExceeded" => {
21862                        return RusotoError::Service(UpdateSigningCertificateError::LimitExceeded(
21863                            parsed_error.message,
21864                        ))
21865                    }
21866                    "NoSuchEntity" => {
21867                        return RusotoError::Service(UpdateSigningCertificateError::NoSuchEntity(
21868                            parsed_error.message,
21869                        ))
21870                    }
21871                    "ServiceFailure" => {
21872                        return RusotoError::Service(UpdateSigningCertificateError::ServiceFailure(
21873                            parsed_error.message,
21874                        ))
21875                    }
21876                    _ => {}
21877                }
21878            }
21879        }
21880        RusotoError::Unknown(res)
21881    }
21882
21883    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21884    where
21885        T: Peek + Next,
21886    {
21887        xml_util::start_element("ErrorResponse", stack)?;
21888        XmlErrorDeserializer::deserialize("Error", stack)
21889    }
21890}
21891impl fmt::Display for UpdateSigningCertificateError {
21892    #[allow(unused_variables)]
21893    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21894        match *self {
21895            UpdateSigningCertificateError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21896            UpdateSigningCertificateError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21897            UpdateSigningCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21898        }
21899    }
21900}
21901impl Error for UpdateSigningCertificateError {}
21902/// Errors returned by UpdateUser
21903#[derive(Debug, PartialEq)]
21904pub enum UpdateUserError {
21905    /// <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>
21906    ConcurrentModification(String),
21907    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
21908    EntityAlreadyExists(String),
21909    /// <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>
21910    EntityTemporarilyUnmodifiable(String),
21911    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21912    LimitExceeded(String),
21913    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21914    NoSuchEntity(String),
21915    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
21916    ServiceFailure(String),
21917}
21918
21919impl UpdateUserError {
21920    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateUserError> {
21921        {
21922            let reader = EventReader::new(res.body.as_ref());
21923            let mut stack = XmlResponse::new(reader.into_iter().peekable());
21924            find_start_element(&mut stack);
21925            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
21926                match &parsed_error.code[..] {
21927                    "ConcurrentModification" => {
21928                        return RusotoError::Service(UpdateUserError::ConcurrentModification(
21929                            parsed_error.message,
21930                        ))
21931                    }
21932                    "EntityAlreadyExists" => {
21933                        return RusotoError::Service(UpdateUserError::EntityAlreadyExists(
21934                            parsed_error.message,
21935                        ))
21936                    }
21937                    "EntityTemporarilyUnmodifiable" => {
21938                        return RusotoError::Service(
21939                            UpdateUserError::EntityTemporarilyUnmodifiable(parsed_error.message),
21940                        )
21941                    }
21942                    "LimitExceeded" => {
21943                        return RusotoError::Service(UpdateUserError::LimitExceeded(
21944                            parsed_error.message,
21945                        ))
21946                    }
21947                    "NoSuchEntity" => {
21948                        return RusotoError::Service(UpdateUserError::NoSuchEntity(
21949                            parsed_error.message,
21950                        ))
21951                    }
21952                    "ServiceFailure" => {
21953                        return RusotoError::Service(UpdateUserError::ServiceFailure(
21954                            parsed_error.message,
21955                        ))
21956                    }
21957                    _ => {}
21958                }
21959            }
21960        }
21961        RusotoError::Unknown(res)
21962    }
21963
21964    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
21965    where
21966        T: Peek + Next,
21967    {
21968        xml_util::start_element("ErrorResponse", stack)?;
21969        XmlErrorDeserializer::deserialize("Error", stack)
21970    }
21971}
21972impl fmt::Display for UpdateUserError {
21973    #[allow(unused_variables)]
21974    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21975        match *self {
21976            UpdateUserError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
21977            UpdateUserError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
21978            UpdateUserError::EntityTemporarilyUnmodifiable(ref cause) => write!(f, "{}", cause),
21979            UpdateUserError::LimitExceeded(ref cause) => write!(f, "{}", cause),
21980            UpdateUserError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
21981            UpdateUserError::ServiceFailure(ref cause) => write!(f, "{}", cause),
21982        }
21983    }
21984}
21985impl Error for UpdateUserError {}
21986/// Errors returned by UploadSSHPublicKey
21987#[derive(Debug, PartialEq)]
21988pub enum UploadSSHPublicKeyError {
21989    /// <p>The request was rejected because the SSH public key is already associated with the specified IAM user.</p>
21990    DuplicateSSHPublicKey(String),
21991    /// <p>The request was rejected because the public key is malformed or otherwise invalid.</p>
21992    InvalidPublicKey(String),
21993    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
21994    LimitExceeded(String),
21995    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
21996    NoSuchEntity(String),
21997    /// <p>The request was rejected because the public key encoding format is unsupported or unrecognized.</p>
21998    UnrecognizedPublicKeyEncoding(String),
21999}
22000
22001impl UploadSSHPublicKeyError {
22002    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UploadSSHPublicKeyError> {
22003        {
22004            let reader = EventReader::new(res.body.as_ref());
22005            let mut stack = XmlResponse::new(reader.into_iter().peekable());
22006            find_start_element(&mut stack);
22007            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
22008                match &parsed_error.code[..] {
22009                    "DuplicateSSHPublicKey" => {
22010                        return RusotoError::Service(
22011                            UploadSSHPublicKeyError::DuplicateSSHPublicKey(parsed_error.message),
22012                        )
22013                    }
22014                    "InvalidPublicKey" => {
22015                        return RusotoError::Service(UploadSSHPublicKeyError::InvalidPublicKey(
22016                            parsed_error.message,
22017                        ))
22018                    }
22019                    "LimitExceeded" => {
22020                        return RusotoError::Service(UploadSSHPublicKeyError::LimitExceeded(
22021                            parsed_error.message,
22022                        ))
22023                    }
22024                    "NoSuchEntity" => {
22025                        return RusotoError::Service(UploadSSHPublicKeyError::NoSuchEntity(
22026                            parsed_error.message,
22027                        ))
22028                    }
22029                    "UnrecognizedPublicKeyEncoding" => {
22030                        return RusotoError::Service(
22031                            UploadSSHPublicKeyError::UnrecognizedPublicKeyEncoding(
22032                                parsed_error.message,
22033                            ),
22034                        )
22035                    }
22036                    _ => {}
22037                }
22038            }
22039        }
22040        RusotoError::Unknown(res)
22041    }
22042
22043    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
22044    where
22045        T: Peek + Next,
22046    {
22047        xml_util::start_element("ErrorResponse", stack)?;
22048        XmlErrorDeserializer::deserialize("Error", stack)
22049    }
22050}
22051impl fmt::Display for UploadSSHPublicKeyError {
22052    #[allow(unused_variables)]
22053    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22054        match *self {
22055            UploadSSHPublicKeyError::DuplicateSSHPublicKey(ref cause) => write!(f, "{}", cause),
22056            UploadSSHPublicKeyError::InvalidPublicKey(ref cause) => write!(f, "{}", cause),
22057            UploadSSHPublicKeyError::LimitExceeded(ref cause) => write!(f, "{}", cause),
22058            UploadSSHPublicKeyError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
22059            UploadSSHPublicKeyError::UnrecognizedPublicKeyEncoding(ref cause) => {
22060                write!(f, "{}", cause)
22061            }
22062        }
22063    }
22064}
22065impl Error for UploadSSHPublicKeyError {}
22066/// Errors returned by UploadServerCertificate
22067#[derive(Debug, PartialEq)]
22068pub enum UploadServerCertificateError {
22069    /// <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>
22070    ConcurrentModification(String),
22071    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
22072    EntityAlreadyExists(String),
22073    /// <p>The request was rejected because an invalid or out-of-range value was supplied for an input parameter.</p>
22074    InvalidInput(String),
22075    /// <p>The request was rejected because the public key certificate and the private key do not match.</p>
22076    KeyPairMismatch(String),
22077    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
22078    LimitExceeded(String),
22079    /// <p>The request was rejected because the certificate was malformed or expired. The error message describes the specific error.</p>
22080    MalformedCertificate(String),
22081    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
22082    ServiceFailure(String),
22083}
22084
22085impl UploadServerCertificateError {
22086    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UploadServerCertificateError> {
22087        {
22088            let reader = EventReader::new(res.body.as_ref());
22089            let mut stack = XmlResponse::new(reader.into_iter().peekable());
22090            find_start_element(&mut stack);
22091            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
22092                match &parsed_error.code[..] {
22093                    "ConcurrentModification" => {
22094                        return RusotoError::Service(
22095                            UploadServerCertificateError::ConcurrentModification(
22096                                parsed_error.message,
22097                            ),
22098                        )
22099                    }
22100                    "EntityAlreadyExists" => {
22101                        return RusotoError::Service(
22102                            UploadServerCertificateError::EntityAlreadyExists(parsed_error.message),
22103                        )
22104                    }
22105                    "InvalidInput" => {
22106                        return RusotoError::Service(UploadServerCertificateError::InvalidInput(
22107                            parsed_error.message,
22108                        ))
22109                    }
22110                    "KeyPairMismatch" => {
22111                        return RusotoError::Service(UploadServerCertificateError::KeyPairMismatch(
22112                            parsed_error.message,
22113                        ))
22114                    }
22115                    "LimitExceeded" => {
22116                        return RusotoError::Service(UploadServerCertificateError::LimitExceeded(
22117                            parsed_error.message,
22118                        ))
22119                    }
22120                    "MalformedCertificate" => {
22121                        return RusotoError::Service(
22122                            UploadServerCertificateError::MalformedCertificate(
22123                                parsed_error.message,
22124                            ),
22125                        )
22126                    }
22127                    "ServiceFailure" => {
22128                        return RusotoError::Service(UploadServerCertificateError::ServiceFailure(
22129                            parsed_error.message,
22130                        ))
22131                    }
22132                    _ => {}
22133                }
22134            }
22135        }
22136        RusotoError::Unknown(res)
22137    }
22138
22139    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
22140    where
22141        T: Peek + Next,
22142    {
22143        xml_util::start_element("ErrorResponse", stack)?;
22144        XmlErrorDeserializer::deserialize("Error", stack)
22145    }
22146}
22147impl fmt::Display for UploadServerCertificateError {
22148    #[allow(unused_variables)]
22149    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22150        match *self {
22151            UploadServerCertificateError::ConcurrentModification(ref cause) => {
22152                write!(f, "{}", cause)
22153            }
22154            UploadServerCertificateError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
22155            UploadServerCertificateError::InvalidInput(ref cause) => write!(f, "{}", cause),
22156            UploadServerCertificateError::KeyPairMismatch(ref cause) => write!(f, "{}", cause),
22157            UploadServerCertificateError::LimitExceeded(ref cause) => write!(f, "{}", cause),
22158            UploadServerCertificateError::MalformedCertificate(ref cause) => write!(f, "{}", cause),
22159            UploadServerCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
22160        }
22161    }
22162}
22163impl Error for UploadServerCertificateError {}
22164/// Errors returned by UploadSigningCertificate
22165#[derive(Debug, PartialEq)]
22166pub enum UploadSigningCertificateError {
22167    /// <p>The request was rejected because the same certificate is associated with an IAM user in the account.</p>
22168    DuplicateCertificate(String),
22169    /// <p>The request was rejected because it attempted to create a resource that already exists.</p>
22170    EntityAlreadyExists(String),
22171    /// <p>The request was rejected because the certificate is invalid.</p>
22172    InvalidCertificate(String),
22173    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error message describes the limit exceeded.</p>
22174    LimitExceeded(String),
22175    /// <p>The request was rejected because the certificate was malformed or expired. The error message describes the specific error.</p>
22176    MalformedCertificate(String),
22177    /// <p>The request was rejected because it referenced a resource entity that does not exist. The error message describes the resource.</p>
22178    NoSuchEntity(String),
22179    /// <p>The request processing has failed because of an unknown error, exception or failure.</p>
22180    ServiceFailure(String),
22181}
22182
22183impl UploadSigningCertificateError {
22184    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UploadSigningCertificateError> {
22185        {
22186            let reader = EventReader::new(res.body.as_ref());
22187            let mut stack = XmlResponse::new(reader.into_iter().peekable());
22188            find_start_element(&mut stack);
22189            if let Ok(parsed_error) = Self::deserialize(&mut stack) {
22190                match &parsed_error.code[..] {
22191                    "DuplicateCertificate" => {
22192                        return RusotoError::Service(
22193                            UploadSigningCertificateError::DuplicateCertificate(
22194                                parsed_error.message,
22195                            ),
22196                        )
22197                    }
22198                    "EntityAlreadyExists" => {
22199                        return RusotoError::Service(
22200                            UploadSigningCertificateError::EntityAlreadyExists(
22201                                parsed_error.message,
22202                            ),
22203                        )
22204                    }
22205                    "InvalidCertificate" => {
22206                        return RusotoError::Service(
22207                            UploadSigningCertificateError::InvalidCertificate(parsed_error.message),
22208                        )
22209                    }
22210                    "LimitExceeded" => {
22211                        return RusotoError::Service(UploadSigningCertificateError::LimitExceeded(
22212                            parsed_error.message,
22213                        ))
22214                    }
22215                    "MalformedCertificate" => {
22216                        return RusotoError::Service(
22217                            UploadSigningCertificateError::MalformedCertificate(
22218                                parsed_error.message,
22219                            ),
22220                        )
22221                    }
22222                    "NoSuchEntity" => {
22223                        return RusotoError::Service(UploadSigningCertificateError::NoSuchEntity(
22224                            parsed_error.message,
22225                        ))
22226                    }
22227                    "ServiceFailure" => {
22228                        return RusotoError::Service(UploadSigningCertificateError::ServiceFailure(
22229                            parsed_error.message,
22230                        ))
22231                    }
22232                    _ => {}
22233                }
22234            }
22235        }
22236        RusotoError::Unknown(res)
22237    }
22238
22239    fn deserialize<T>(stack: &mut T) -> Result<XmlError, XmlParseError>
22240    where
22241        T: Peek + Next,
22242    {
22243        xml_util::start_element("ErrorResponse", stack)?;
22244        XmlErrorDeserializer::deserialize("Error", stack)
22245    }
22246}
22247impl fmt::Display for UploadSigningCertificateError {
22248    #[allow(unused_variables)]
22249    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22250        match *self {
22251            UploadSigningCertificateError::DuplicateCertificate(ref cause) => {
22252                write!(f, "{}", cause)
22253            }
22254            UploadSigningCertificateError::EntityAlreadyExists(ref cause) => write!(f, "{}", cause),
22255            UploadSigningCertificateError::InvalidCertificate(ref cause) => write!(f, "{}", cause),
22256            UploadSigningCertificateError::LimitExceeded(ref cause) => write!(f, "{}", cause),
22257            UploadSigningCertificateError::MalformedCertificate(ref cause) => {
22258                write!(f, "{}", cause)
22259            }
22260            UploadSigningCertificateError::NoSuchEntity(ref cause) => write!(f, "{}", cause),
22261            UploadSigningCertificateError::ServiceFailure(ref cause) => write!(f, "{}", cause),
22262        }
22263    }
22264}
22265impl Error for UploadSigningCertificateError {}
22266/// Trait representing the capabilities of the IAM API. IAM clients implement this trait.
22267#[async_trait]
22268pub trait Iam {
22269    /// <p>Adds a new client ID (also known as audience) to the list of client IDs already registered for the specified IAM OpenID Connect (OIDC) provider resource.</p> <p>This operation is idempotent; it does not fail or return an error if you add an existing client ID to the provider.</p>
22270    async fn add_client_id_to_open_id_connect_provider(
22271        &self,
22272        input: AddClientIDToOpenIDConnectProviderRequest,
22273    ) -> Result<(), RusotoError<AddClientIDToOpenIDConnectProviderError>>;
22274
22275    /// <p>Adds the specified IAM role to the specified instance profile. An instance profile can contain only one role, and this quota cannot be increased. You can remove the existing role and then add a different role to an instance profile. You must then wait for the change to appear across all of AWS because of <a href="https://en.wikipedia.org/wiki/Eventual_consistency">eventual consistency</a>. To force the change, you must <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html">disassociate the instance profile</a> and then <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html">associate the instance profile</a>, or you can stop your instance and then restart it.</p> <note> <p>The caller of this operation must be granted the <code>PassRole</code> permission on the IAM role by a permissions policy.</p> </note> <p>For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>. For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p>
22276    async fn add_role_to_instance_profile(
22277        &self,
22278        input: AddRoleToInstanceProfileRequest,
22279    ) -> Result<(), RusotoError<AddRoleToInstanceProfileError>>;
22280
22281    /// <p>Adds the specified user to the specified group.</p>
22282    async fn add_user_to_group(
22283        &self,
22284        input: AddUserToGroupRequest,
22285    ) -> Result<(), RusotoError<AddUserToGroupError>>;
22286
22287    /// <p>Attaches the specified managed policy to the specified IAM group.</p> <p>You use this operation to attach a managed policy to a group. To embed an inline policy in a group, use <a>PutGroupPolicy</a>.</p> <p>As a best practice, you can validate your IAM policies. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html">Validating IAM policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22288    async fn attach_group_policy(
22289        &self,
22290        input: AttachGroupPolicyRequest,
22291    ) -> Result<(), RusotoError<AttachGroupPolicyError>>;
22292
22293    /// <p>Attaches the specified managed policy to the specified IAM role. When you attach a managed policy to a role, the managed policy becomes part of the role's permission (access) policy.</p> <note> <p>You cannot use a managed policy as the role's trust policy. The role's trust policy is created at the same time as the role, using <a>CreateRole</a>. You can update a role's trust policy using <a>UpdateAssumeRolePolicy</a>.</p> </note> <p>Use this operation to attach a <i>managed</i> policy to a role. To embed an inline policy in a role, use <a>PutRolePolicy</a>. For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>As a best practice, you can validate your IAM policies. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html">Validating IAM policies</a> in the <i>IAM User Guide</i>.</p>
22294    async fn attach_role_policy(
22295        &self,
22296        input: AttachRolePolicyRequest,
22297    ) -> Result<(), RusotoError<AttachRolePolicyError>>;
22298
22299    /// <p>Attaches the specified managed policy to the specified user.</p> <p>You use this operation to attach a <i>managed</i> policy to a user. To embed an inline policy in a user, use <a>PutUserPolicy</a>.</p> <p>As a best practice, you can validate your IAM policies. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html">Validating IAM policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22300    async fn attach_user_policy(
22301        &self,
22302        input: AttachUserPolicyRequest,
22303    ) -> Result<(), RusotoError<AttachUserPolicyError>>;
22304
22305    /// <p>Changes the password of the IAM user who is calling this operation. This operation can be performed using the AWS CLI, the AWS API, or the <b>My Security Credentials</b> page in the AWS Management Console. The AWS account root user password is not affected by this operation.</p> <p>Use <a>UpdateLoginProfile</a> to use the AWS CLI, the AWS API, or the <b>Users</b> page in the IAM console to change the password for any IAM user. For more information about modifying passwords, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html">Managing passwords</a> in the <i>IAM User Guide</i>.</p>
22306    async fn change_password(
22307        &self,
22308        input: ChangePasswordRequest,
22309    ) -> Result<(), RusotoError<ChangePasswordError>>;
22310
22311    /// <p><p> Creates a new AWS secret access key and corresponding AWS access key ID for the specified user. The default status for new keys is <code>Active</code>.</p> <p>If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID signing the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials. This is true even if the AWS account has no associated users.</p> <p> For information about quotas on the number of keys you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <important> <p>To ensure the security of your AWS account, the secret access key is accessible only during key and user creation. You must save the key (for example, in a text file) if you want to be able to access it again. If a secret key is lost, you can delete the access keys for the associated user and then create new keys.</p> </important></p>
22312    async fn create_access_key(
22313        &self,
22314        input: CreateAccessKeyRequest,
22315    ) -> Result<CreateAccessKeyResponse, RusotoError<CreateAccessKeyError>>;
22316
22317    /// <p>Creates an alias for your AWS account. For information about using an AWS account alias, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AccountAlias.html">Using an alias for your AWS account ID</a> in the <i>IAM User Guide</i>.</p>
22318    async fn create_account_alias(
22319        &self,
22320        input: CreateAccountAliasRequest,
22321    ) -> Result<(), RusotoError<CreateAccountAliasError>>;
22322
22323    /// <p>Creates a new group.</p> <p> For information about the number of groups you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p>
22324    async fn create_group(
22325        &self,
22326        input: CreateGroupRequest,
22327    ) -> Result<CreateGroupResponse, RusotoError<CreateGroupError>>;
22328
22329    /// <p> Creates a new instance profile. For information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html">Using roles for applications on Amazon EC2</a> in the <i>IAM User Guide</i>, and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#ec2-instance-profile">Instance profiles</a> in the <i>Amazon EC2 User Guide</i>.</p> <p> For information about the number of instance profiles you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM object quotas</a> in the <i>IAM User Guide</i>.</p>
22330    async fn create_instance_profile(
22331        &self,
22332        input: CreateInstanceProfileRequest,
22333    ) -> Result<CreateInstanceProfileResponse, RusotoError<CreateInstanceProfileError>>;
22334
22335    /// <p>Creates a password for the specified IAM user. A password allows an IAM user to access AWS services through the AWS Management Console.</p> <p>You can use the AWS CLI, the AWS API, or the <b>Users</b> page in the IAM console to create a password for any IAM user. Use <a>ChangePassword</a> to update your own existing password in the <b>My Security Credentials</b> page in the AWS Management Console.</p> <p>For more information about managing passwords, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html">Managing passwords</a> in the <i>IAM User Guide</i>.</p>
22336    async fn create_login_profile(
22337        &self,
22338        input: CreateLoginProfileRequest,
22339    ) -> Result<CreateLoginProfileResponse, RusotoError<CreateLoginProfileError>>;
22340
22341    /// <p><p>Creates an IAM entity to describe an identity provider (IdP) that supports <a href="http://openid.net/connect/">OpenID Connect (OIDC)</a>.</p> <p>The OIDC provider that you create with this operation can be used as a principal in a role&#39;s trust policy. Such a policy establishes a trust relationship between AWS and the OIDC provider.</p> <p>If you are using an OIDC identity provider from Google, Facebook, or Amazon Cognito, you don&#39;t need to create a separate IAM identity provider. These OIDC identity providers are already built-in to AWS and are available for your use. Instead, you can move directly to creating new roles using your identity provider. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html">Creating a role for web identity or OpenID connect federation</a> in the <i>IAM User Guide</i>.</p> <p>When you create the IAM OIDC provider, you specify the following:</p> <ul> <li> <p>The URL of the OIDC identity provider (IdP) to trust</p> </li> <li> <p>A list of client IDs (also known as audiences) that identify the application or applications that are allowed to authenticate using the OIDC provider</p> </li> <li> <p>A list of thumbprints of one or more server certificates that the IdP uses</p> </li> </ul> <p>You get all of this information from the OIDC IdP that you want to use to access AWS.</p> <note> <p>The trust for the OIDC provider is derived from the IAM provider that this operation creates. Therefore, it is best to limit access to the <a>CreateOpenIDConnectProvider</a> operation to highly privileged users.</p> </note></p>
22342    async fn create_open_id_connect_provider(
22343        &self,
22344        input: CreateOpenIDConnectProviderRequest,
22345    ) -> Result<CreateOpenIDConnectProviderResponse, RusotoError<CreateOpenIDConnectProviderError>>;
22346
22347    /// <p>Creates a new managed policy for your AWS account.</p> <p>This operation creates a policy version with a version identifier of <code>v1</code> and sets v1 as the policy's default version. For more information about policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p> <p>As a best practice, you can validate your IAM policies. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html">Validating IAM policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about managed policies in general, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22348    async fn create_policy(
22349        &self,
22350        input: CreatePolicyRequest,
22351    ) -> Result<CreatePolicyResponse, RusotoError<CreatePolicyError>>;
22352
22353    /// <p>Creates a new version of the specified managed policy. To update a managed policy, you create a new policy version. A managed policy can have up to five versions. If the policy has five versions, you must delete an existing version using <a>DeletePolicyVersion</a> before you create a new version.</p> <p>Optionally, you can set the new version as the policy's default version. The default version is the version that is in effect for the IAM users, groups, and roles to which the policy is attached.</p> <p>For more information about managed policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
22354    async fn create_policy_version(
22355        &self,
22356        input: CreatePolicyVersionRequest,
22357    ) -> Result<CreatePolicyVersionResponse, RusotoError<CreatePolicyVersionError>>;
22358
22359    /// <p>Creates a new role for your AWS account. For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">IAM roles</a>. For information about quotas for role names and the number of roles you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p>
22360    async fn create_role(
22361        &self,
22362        input: CreateRoleRequest,
22363    ) -> Result<CreateRoleResponse, RusotoError<CreateRoleError>>;
22364
22365    /// <p>Creates an IAM resource that describes an identity provider (IdP) that supports SAML 2.0.</p> <p>The SAML provider resource that you create with this operation can be used as a principal in an IAM role's trust policy. Such a policy can enable federated users who sign in using the SAML IdP to assume the role. You can create an IAM role that supports Web-based single sign-on (SSO) to the AWS Management Console or one that supports API access to AWS.</p> <p>When you create the SAML provider resource, you upload a SAML metadata document that you get from your IdP. That document includes the issuer's name, expiration information, and keys that can be used to validate the SAML authentication response (assertions) that the IdP sends. You must generate the metadata document using the identity management software that is used as your organization's IdP.</p> <note> <p> This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </note> <p> For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-saml.html">Enabling SAML 2.0 federated users to access the AWS Management Console</a> and <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html">About SAML 2.0-based federation</a> in the <i>IAM User Guide</i>.</p>
22366    async fn create_saml_provider(
22367        &self,
22368        input: CreateSAMLProviderRequest,
22369    ) -> Result<CreateSAMLProviderResponse, RusotoError<CreateSAMLProviderError>>;
22370
22371    /// <p>Creates an IAM role that is linked to a specific AWS service. The service controls the attached policies and when the role can be deleted. This helps ensure that the service is not broken by an unexpectedly changed or deleted role, which could put your AWS resources into an unknown state. Allowing the service to control the role helps improve service stability and proper cleanup when a service and its role are no longer needed. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html">Using service-linked roles</a> in the <i>IAM User Guide</i>. </p> <p>To attach a policy to this service-linked role, you must make the request using the AWS service that depends on this role.</p>
22372    async fn create_service_linked_role(
22373        &self,
22374        input: CreateServiceLinkedRoleRequest,
22375    ) -> Result<CreateServiceLinkedRoleResponse, RusotoError<CreateServiceLinkedRoleError>>;
22376
22377    /// <p>Generates a set of credentials consisting of a user name and password that can be used to access the service specified in the request. These credentials are generated by IAM, and can be used only for the specified service. </p> <p>You can have a maximum of two sets of service-specific credentials for each supported service per user.</p> <p>You can create service-specific credentials for AWS CodeCommit and Amazon Keyspaces (for Apache Cassandra).</p> <p>You can reset the password to a new service-generated value by calling <a>ResetServiceSpecificCredential</a>.</p> <p>For more information about service-specific credentials, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_ssh-keys.html">Using IAM with AWS CodeCommit: Git credentials, SSH keys, and AWS access keys</a> in the <i>IAM User Guide</i>.</p>
22378    async fn create_service_specific_credential(
22379        &self,
22380        input: CreateServiceSpecificCredentialRequest,
22381    ) -> Result<
22382        CreateServiceSpecificCredentialResponse,
22383        RusotoError<CreateServiceSpecificCredentialError>,
22384    >;
22385
22386    /// <p>Creates a new IAM user for your AWS account.</p> <p> For information about quotas for the number of IAM users you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p>
22387    async fn create_user(
22388        &self,
22389        input: CreateUserRequest,
22390    ) -> Result<CreateUserResponse, RusotoError<CreateUserError>>;
22391
22392    /// <p><p>Creates a new virtual MFA device for the AWS account. After creating the virtual MFA, use <a>EnableMFADevice</a> to attach the MFA device to an IAM user. For more information about creating and working with virtual MFA devices, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_VirtualMFA.html">Using a virtual MFA device</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of MFA devices you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <important> <p>The seed information contained in the QR code and the Base32 string should be treated like any other secret access information. In other words, protect the seed information as you would your AWS access keys or your passwords. After you provision your virtual device, you should ensure that the information is destroyed following secure procedures.</p> </important></p>
22393    async fn create_virtual_mfa_device(
22394        &self,
22395        input: CreateVirtualMFADeviceRequest,
22396    ) -> Result<CreateVirtualMFADeviceResponse, RusotoError<CreateVirtualMFADeviceError>>;
22397
22398    /// <p>Deactivates the specified MFA device and removes it from association with the user name for which it was originally enabled.</p> <p>For more information about creating and working with virtual MFA devices, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_VirtualMFA.html">Enabling a virtual multi-factor authentication (MFA) device</a> in the <i>IAM User Guide</i>.</p>
22399    async fn deactivate_mfa_device(
22400        &self,
22401        input: DeactivateMFADeviceRequest,
22402    ) -> Result<(), RusotoError<DeactivateMFADeviceError>>;
22403
22404    /// <p>Deletes the access key pair associated with the specified IAM user.</p> <p>If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID signing the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p>
22405    async fn delete_access_key(
22406        &self,
22407        input: DeleteAccessKeyRequest,
22408    ) -> Result<(), RusotoError<DeleteAccessKeyError>>;
22409
22410    /// <p> Deletes the specified AWS account alias. For information about using an AWS account alias, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AccountAlias.html">Using an alias for your AWS account ID</a> in the <i>IAM User Guide</i>.</p>
22411    async fn delete_account_alias(
22412        &self,
22413        input: DeleteAccountAliasRequest,
22414    ) -> Result<(), RusotoError<DeleteAccountAliasError>>;
22415
22416    /// <p>Deletes the password policy for the AWS account. There are no parameters.</p>
22417    async fn delete_account_password_policy(
22418        &self,
22419    ) -> Result<(), RusotoError<DeleteAccountPasswordPolicyError>>;
22420
22421    /// <p>Deletes the specified IAM group. The group must not contain any users or have any attached policies.</p>
22422    async fn delete_group(
22423        &self,
22424        input: DeleteGroupRequest,
22425    ) -> Result<(), RusotoError<DeleteGroupError>>;
22426
22427    /// <p>Deletes the specified inline policy that is embedded in the specified IAM group.</p> <p>A group can also have managed policies attached to it. To detach a managed policy from a group, use <a>DetachGroupPolicy</a>. For more information about policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22428    async fn delete_group_policy(
22429        &self,
22430        input: DeleteGroupPolicyRequest,
22431    ) -> Result<(), RusotoError<DeleteGroupPolicyError>>;
22432
22433    /// <p>Deletes the specified instance profile. The instance profile must not have an associated role.</p> <important> <p>Make sure that you do not have any Amazon EC2 instances running with the instance profile you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance.</p> </important> <p>For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p>
22434    async fn delete_instance_profile(
22435        &self,
22436        input: DeleteInstanceProfileRequest,
22437    ) -> Result<(), RusotoError<DeleteInstanceProfileError>>;
22438
22439    /// <p><p>Deletes the password for the specified IAM user, which terminates the user&#39;s ability to access AWS services through the AWS Management Console.</p> <p>You can use the AWS CLI, the AWS API, or the <b>Users</b> page in the IAM console to delete a password for any IAM user. You can use <a>ChangePassword</a> to update, but not delete, your own password in the <b>My Security Credentials</b> page in the AWS Management Console.</p> <important> <p> Deleting a user&#39;s password does not prevent a user from accessing AWS through the command line interface or the API. To prevent all user access, you must also either make any access keys inactive or delete them. For more information about making keys inactive or deleting them, see <a>UpdateAccessKey</a> and <a>DeleteAccessKey</a>. </p> </important></p>
22440    async fn delete_login_profile(
22441        &self,
22442        input: DeleteLoginProfileRequest,
22443    ) -> Result<(), RusotoError<DeleteLoginProfileError>>;
22444
22445    /// <p>Deletes an OpenID Connect identity provider (IdP) resource object in IAM.</p> <p>Deleting an IAM OIDC provider resource does not update any roles that reference the provider as a principal in their trust policies. Any attempt to assume a role that references a deleted provider fails.</p> <p>This operation is idempotent; it does not fail or return an error if you call the operation for a provider that does not exist.</p>
22446    async fn delete_open_id_connect_provider(
22447        &self,
22448        input: DeleteOpenIDConnectProviderRequest,
22449    ) -> Result<(), RusotoError<DeleteOpenIDConnectProviderError>>;
22450
22451    /// <p>Deletes the specified managed policy.</p> <p>Before you can delete a managed policy, you must first detach the policy from all users, groups, and roles that it is attached to. In addition, you must delete all the policy's versions. The following steps describe the process for deleting a managed policy:</p> <ul> <li> <p>Detach the policy from all users, groups, and roles that the policy is attached to, using <a>DetachUserPolicy</a>, <a>DetachGroupPolicy</a>, or <a>DetachRolePolicy</a>. To list all the users, groups, and roles that a policy is attached to, use <a>ListEntitiesForPolicy</a>.</p> </li> <li> <p>Delete all versions of the policy using <a>DeletePolicyVersion</a>. To list the policy's versions, use <a>ListPolicyVersions</a>. You cannot use <a>DeletePolicyVersion</a> to delete the version that is marked as the default version. You delete the policy's default version in the next step of the process.</p> </li> <li> <p>Delete the policy (this automatically deletes the policy's default version) using this operation.</p> </li> </ul> <p>For information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22452    async fn delete_policy(
22453        &self,
22454        input: DeletePolicyRequest,
22455    ) -> Result<(), RusotoError<DeletePolicyError>>;
22456
22457    /// <p>Deletes the specified version from the specified managed policy.</p> <p>You cannot delete the default version from a policy using this operation. To delete the default version from a policy, use <a>DeletePolicy</a>. To find out which version of a policy is marked as the default version, use <a>ListPolicyVersions</a>.</p> <p>For information about versions for managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
22458    async fn delete_policy_version(
22459        &self,
22460        input: DeletePolicyVersionRequest,
22461    ) -> Result<(), RusotoError<DeletePolicyVersionError>>;
22462
22463    /// <p><p>Deletes the specified role. The role must not have any policies attached. For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>.</p> <important> <p>Make sure that you do not have any Amazon EC2 instances running with the role you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance.</p> </important></p>
22464    async fn delete_role(
22465        &self,
22466        input: DeleteRoleRequest,
22467    ) -> Result<(), RusotoError<DeleteRoleError>>;
22468
22469    /// <p><p>Deletes the permissions boundary for the specified IAM role. </p> <important> <p>Deleting the permissions boundary for a role might increase its permissions. For example, it might allow anyone who assumes the role to perform all the actions granted in its permissions policies. </p> </important></p>
22470    async fn delete_role_permissions_boundary(
22471        &self,
22472        input: DeleteRolePermissionsBoundaryRequest,
22473    ) -> Result<(), RusotoError<DeleteRolePermissionsBoundaryError>>;
22474
22475    /// <p>Deletes the specified inline policy that is embedded in the specified IAM role.</p> <p>A role can also have managed policies attached to it. To detach a managed policy from a role, use <a>DetachRolePolicy</a>. For more information about policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22476    async fn delete_role_policy(
22477        &self,
22478        input: DeleteRolePolicyRequest,
22479    ) -> Result<(), RusotoError<DeleteRolePolicyError>>;
22480
22481    /// <p><p>Deletes a SAML provider resource in IAM.</p> <p>Deleting the provider resource from IAM does not update any roles that reference the SAML provider resource&#39;s ARN as a principal in their trust policies. Any attempt to assume a role that references a non-existent provider resource ARN fails.</p> <note> <p> This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </note></p>
22482    async fn delete_saml_provider(
22483        &self,
22484        input: DeleteSAMLProviderRequest,
22485    ) -> Result<(), RusotoError<DeleteSAMLProviderError>>;
22486
22487    /// <p>Deletes the specified SSH public key.</p> <p>The SSH public key deleted by this operation is used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p>
22488    async fn delete_ssh_public_key(
22489        &self,
22490        input: DeleteSSHPublicKeyRequest,
22491    ) -> Result<(), RusotoError<DeleteSSHPublicKeyError>>;
22492
22493    /// <p><p>Deletes the specified server certificate.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic also includes a list of AWS services that can use the server certificates that you manage with IAM.</p> <important> <p> If you are using a server certificate with Elastic Load Balancing, deleting the certificate could have implications for your application. If Elastic Load Balancing doesn&#39;t detect the deletion of bound certificates, it may continue to use the certificates. This could cause Elastic Load Balancing to stop accepting traffic. We recommend that you remove the reference to the certificate from Elastic Load Balancing before using this command to delete the certificate. For more information, see <a href="https://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/API_DeleteLoadBalancerListeners.html">DeleteLoadBalancerListeners</a> in the <i>Elastic Load Balancing API Reference</i>.</p> </important></p>
22494    async fn delete_server_certificate(
22495        &self,
22496        input: DeleteServerCertificateRequest,
22497    ) -> Result<(), RusotoError<DeleteServerCertificateError>>;
22498
22499    /// <p>Submits a service-linked role deletion request and returns a <code>DeletionTaskId</code>, which you can use to check the status of the deletion. Before you call this operation, confirm that the role has no active sessions and that any resources used by the role in the linked service are deleted. If you call this operation more than once for the same service-linked role and an earlier deletion task is not complete, then the <code>DeletionTaskId</code> of the earlier request is returned.</p> <p>If you submit a deletion request for a service-linked role whose linked service is still accessing a resource, then the deletion task fails. If it fails, the <a>GetServiceLinkedRoleDeletionStatus</a> operation returns the reason for the failure, usually including the resources that must be deleted. To delete the service-linked role, you must first remove those resources from the linked service and then submit the deletion request again. Resources are specific to the service that is linked to the role. For more information about removing resources from a service, see the <a href="http://docs.aws.amazon.com/">AWS documentation</a> for your service.</p> <p>For more information about service-linked roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role">Roles terms and concepts: AWS service-linked role</a> in the <i>IAM User Guide</i>.</p>
22500    async fn delete_service_linked_role(
22501        &self,
22502        input: DeleteServiceLinkedRoleRequest,
22503    ) -> Result<DeleteServiceLinkedRoleResponse, RusotoError<DeleteServiceLinkedRoleError>>;
22504
22505    /// <p>Deletes the specified service-specific credential.</p>
22506    async fn delete_service_specific_credential(
22507        &self,
22508        input: DeleteServiceSpecificCredentialRequest,
22509    ) -> Result<(), RusotoError<DeleteServiceSpecificCredentialError>>;
22510
22511    /// <p>Deletes a signing certificate associated with the specified IAM user.</p> <p>If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID signing the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated IAM users.</p>
22512    async fn delete_signing_certificate(
22513        &self,
22514        input: DeleteSigningCertificateRequest,
22515    ) -> Result<(), RusotoError<DeleteSigningCertificateError>>;
22516
22517    /// <p><p>Deletes the specified IAM user. Unlike the AWS Management Console, when you delete a user programmatically, you must delete the items attached to the user manually, or the deletion fails. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting_cli">Deleting an IAM user</a>. Before attempting to delete a user, remove the following items:</p> <ul> <li> <p>Password (<a>DeleteLoginProfile</a>)</p> </li> <li> <p>Access keys (<a>DeleteAccessKey</a>)</p> </li> <li> <p>Signing certificate (<a>DeleteSigningCertificate</a>)</p> </li> <li> <p>SSH public key (<a>DeleteSSHPublicKey</a>)</p> </li> <li> <p>Git credentials (<a>DeleteServiceSpecificCredential</a>)</p> </li> <li> <p>Multi-factor authentication (MFA) device (<a>DeactivateMFADevice</a>, <a>DeleteVirtualMFADevice</a>)</p> </li> <li> <p>Inline policies (<a>DeleteUserPolicy</a>)</p> </li> <li> <p>Attached managed policies (<a>DetachUserPolicy</a>)</p> </li> <li> <p>Group memberships (<a>RemoveUserFromGroup</a>)</p> </li> </ul></p>
22518    async fn delete_user(
22519        &self,
22520        input: DeleteUserRequest,
22521    ) -> Result<(), RusotoError<DeleteUserError>>;
22522
22523    /// <p><p>Deletes the permissions boundary for the specified IAM user.</p> <important> <p>Deleting the permissions boundary for a user might increase its permissions by allowing the user to perform all the actions granted in its permissions policies. </p> </important></p>
22524    async fn delete_user_permissions_boundary(
22525        &self,
22526        input: DeleteUserPermissionsBoundaryRequest,
22527    ) -> Result<(), RusotoError<DeleteUserPermissionsBoundaryError>>;
22528
22529    /// <p>Deletes the specified inline policy that is embedded in the specified IAM user.</p> <p>A user can also have managed policies attached to it. To detach a managed policy from a user, use <a>DetachUserPolicy</a>. For more information about policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22530    async fn delete_user_policy(
22531        &self,
22532        input: DeleteUserPolicyRequest,
22533    ) -> Result<(), RusotoError<DeleteUserPolicyError>>;
22534
22535    /// <p><p>Deletes a virtual MFA device.</p> <note> <p> You must deactivate a user&#39;s virtual MFA device before you can delete it. For information about deactivating MFA devices, see <a>DeactivateMFADevice</a>. </p> </note></p>
22536    async fn delete_virtual_mfa_device(
22537        &self,
22538        input: DeleteVirtualMFADeviceRequest,
22539    ) -> Result<(), RusotoError<DeleteVirtualMFADeviceError>>;
22540
22541    /// <p>Removes the specified managed policy from the specified IAM group.</p> <p>A group can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteGroupPolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22542    async fn detach_group_policy(
22543        &self,
22544        input: DetachGroupPolicyRequest,
22545    ) -> Result<(), RusotoError<DetachGroupPolicyError>>;
22546
22547    /// <p>Removes the specified managed policy from the specified role.</p> <p>A role can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteRolePolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22548    async fn detach_role_policy(
22549        &self,
22550        input: DetachRolePolicyRequest,
22551    ) -> Result<(), RusotoError<DetachRolePolicyError>>;
22552
22553    /// <p>Removes the specified managed policy from the specified user.</p> <p>A user can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteUserPolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22554    async fn detach_user_policy(
22555        &self,
22556        input: DetachUserPolicyRequest,
22557    ) -> Result<(), RusotoError<DetachUserPolicyError>>;
22558
22559    /// <p>Enables the specified MFA device and associates it with the specified IAM user. When enabled, the MFA device is required for every subsequent login by the IAM user associated with the device.</p>
22560    async fn enable_mfa_device(
22561        &self,
22562        input: EnableMFADeviceRequest,
22563    ) -> Result<(), RusotoError<EnableMFADeviceError>>;
22564
22565    /// <p> Generates a credential report for the AWS account. For more information about the credential report, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html">Getting credential reports</a> in the <i>IAM User Guide</i>.</p>
22566    async fn generate_credential_report(
22567        &self,
22568    ) -> Result<GenerateCredentialReportResponse, RusotoError<GenerateCredentialReportError>>;
22569
22570    /// <p>Generates a report for service last accessed data for AWS Organizations. You can generate a report for any entities (organization root, organizational unit, or account) or policies in your organization.</p> <p>To call this operation, you must be signed in using your AWS Organizations management account credentials. You can use your long-term IAM user or root user credentials, or temporary credentials from assuming an IAM role. SCPs must be enabled for your organization root. You must have the required IAM and AWS Organizations permissions. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Refining permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <p>You can generate a service last accessed data report for entities by specifying only the entity's path. This data includes a list of services that are allowed by any service control policies (SCPs) that apply to the entity.</p> <p>You can generate a service last accessed data report for a policy by specifying an entity's path and an optional AWS Organizations policy ID. This data includes a list of services that are allowed by the specified SCP.</p> <p>For each service in both report types, the data includes the most recent account activity that the policy allows to account principals in the entity or the entity's children. For important information about the data, reporting period, permissions required, troubleshooting, and supported Regions see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <important> <p>The data includes all attempts to access AWS, not just the successful ones. This includes all attempts that were made using the AWS Management Console, the AWS API through any of the SDKs, or any of the command line tools. An unexpected entry in the service last accessed data does not mean that an account has been compromised, because the request might have been denied. Refer to your CloudTrail logs as the authoritative source for information about all API calls and whether they were successful or denied access. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html">Logging IAM events with CloudTrail</a> in the <i>IAM User Guide</i>.</p> </important> <p>This operation returns a <code>JobId</code>. Use this parameter in the <code> <a>GetOrganizationsAccessReport</a> </code> operation to check the status of the report generation. To check the status of this request, use the <code>JobId</code> parameter in the <code> <a>GetOrganizationsAccessReport</a> </code> operation and test the <code>JobStatus</code> response parameter. When the job is complete, you can retrieve the report.</p> <p>To generate a service last accessed data report for entities, specify an entity path without specifying the optional AWS Organizations policy ID. The type of entity that you specify determines the data returned in the report.</p> <ul> <li> <p> <b>Root</b> – When you specify the organizations root as the entity, the resulting report lists all of the services allowed by SCPs that are attached to your root. For each service, the report includes data for all accounts in your organization except the management account, because the management account is not limited by SCPs.</p> </li> <li> <p> <b>OU</b> – When you specify an organizational unit (OU) as the entity, the resulting report lists all of the services allowed by SCPs that are attached to the OU and its parents. For each service, the report includes data for all accounts in the OU or its children. This data excludes the management account, because the management account is not limited by SCPs.</p> </li> <li> <p> <b>management account</b> – When you specify the management account, the resulting report lists all AWS services, because the management account is not limited by SCPs. For each service, the report includes data for only the management account.</p> </li> <li> <p> <b>Account</b> – When you specify another account as the entity, the resulting report lists all of the services allowed by SCPs that are attached to the account and its parents. For each service, the report includes data for only the specified account.</p> </li> </ul> <p>To generate a service last accessed data report for policies, specify an entity path and the optional AWS Organizations policy ID. The type of entity that you specify determines the data returned for each service.</p> <ul> <li> <p> <b>Root</b> – When you specify the root entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for all accounts in your organization to which the SCP applies. This data excludes the management account, because the management account is not limited by SCPs. If the SCP is not attached to any entities in the organization, then the report will return a list of services with no data.</p> </li> <li> <p> <b>OU</b> – When you specify an OU entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for all accounts in the OU or its children to which the SCP applies. This means that other accounts outside the OU that are affected by the SCP might not be included in the data. This data excludes the management account, because the management account is not limited by SCPs. If the SCP is not attached to the OU or one of its children, the report will return a list of services with no data.</p> </li> <li> <p> <b>management account</b> – When you specify the management account, the resulting report lists all AWS services, because the management account is not limited by SCPs. If you specify a policy ID in the CLI or API, the policy is ignored. For each service, the report includes data for only the management account.</p> </li> <li> <p> <b>Account</b> – When you specify another account entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for only the specified account. This means that other accounts in the organization that are affected by the SCP might not be included in the data. If the SCP is not attached to the account, the report will return a list of services with no data.</p> </li> </ul> <note> <p>Service last accessed data does not use other policy types when determining whether a principal could access a service. These other policy types include identity-based policies, resource-based policies, access control lists, IAM permissions boundaries, and STS assume role policies. It only applies SCP logic. For more about the evaluation of policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For more information about service last accessed data, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Reducing policy scope by viewing user activity</a> in the <i>IAM User Guide</i>.</p>
22571    async fn generate_organizations_access_report(
22572        &self,
22573        input: GenerateOrganizationsAccessReportRequest,
22574    ) -> Result<
22575        GenerateOrganizationsAccessReportResponse,
22576        RusotoError<GenerateOrganizationsAccessReportError>,
22577    >;
22578
22579    /// <p>Generates a report that includes details about when an IAM resource (user, group, role, or policy) was last used in an attempt to access AWS services. Recent activity usually appears within four hours. IAM reports activity for the last 365 days, or less if your Region began supporting this feature within the last year. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period">Regions where data is tracked</a>.</p> <important> <p>The service last accessed data includes all attempts to access an AWS API, not just the successful ones. This includes all attempts that were made using the AWS Management Console, the AWS API through any of the SDKs, or any of the command line tools. An unexpected entry in the service last accessed data does not mean that your account has been compromised, because the request might have been denied. Refer to your CloudTrail logs as the authoritative source for information about all API calls and whether they were successful or denied access. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html">Logging IAM events with CloudTrail</a> in the <i>IAM User Guide</i>.</p> </important> <p>The <code>GenerateServiceLastAccessedDetails</code> operation returns a <code>JobId</code>. Use this parameter in the following operations to retrieve the following details from your report: </p> <ul> <li> <p> <a>GetServiceLastAccessedDetails</a> – Use this operation for users, groups, roles, or policies to list every AWS service that the resource could access using permissions policies. For each service, the response includes information about the most recent access attempt.</p> <p>The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p> </li> <li> <p> <a>GetServiceLastAccessedDetailsWithEntities</a> – Use this operation for groups and policies to list information about the associated entities (users or roles) that attempted to access a specific AWS service. </p> </li> </ul> <p>To check the status of the <code>GenerateServiceLastAccessedDetails</code> request, use the <code>JobId</code> parameter in the same operations and test the <code>JobStatus</code> response parameter.</p> <p>For additional information about the permissions policies that allow an identity (user, group, or role) to access specific services, use the <a>ListPoliciesGrantingServiceAccess</a> operation.</p> <note> <p>Service last accessed data does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, AWS Organizations policies, IAM permissions boundaries, and AWS STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For more information about service and action last accessed data, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p>
22580    async fn generate_service_last_accessed_details(
22581        &self,
22582        input: GenerateServiceLastAccessedDetailsRequest,
22583    ) -> Result<
22584        GenerateServiceLastAccessedDetailsResponse,
22585        RusotoError<GenerateServiceLastAccessedDetailsError>,
22586    >;
22587
22588    /// <p>Retrieves information about when the specified access key was last used. The information includes the date and time of last use, along with the AWS service and Region that were specified in the last request made with that key.</p>
22589    async fn get_access_key_last_used(
22590        &self,
22591        input: GetAccessKeyLastUsedRequest,
22592    ) -> Result<GetAccessKeyLastUsedResponse, RusotoError<GetAccessKeyLastUsedError>>;
22593
22594    /// <p>Retrieves information about all IAM users, groups, roles, and policies in your AWS account, including their relationships to one another. Use this operation to obtain a snapshot of the configuration of IAM permissions (users, groups, roles, and policies) in your account.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>You can optionally filter the results using the <code>Filter</code> parameter. You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22595    async fn get_account_authorization_details(
22596        &self,
22597        input: GetAccountAuthorizationDetailsRequest,
22598    ) -> Result<
22599        GetAccountAuthorizationDetailsResponse,
22600        RusotoError<GetAccountAuthorizationDetailsError>,
22601    >;
22602
22603    /// <p>Retrieves the password policy for the AWS account. This tells you the complexity requirements and mandatory rotation periods for the IAM user passwords in your account. For more information about using a password policy, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingPasswordPolicies.html">Managing an IAM password policy</a>.</p>
22604    async fn get_account_password_policy(
22605        &self,
22606    ) -> Result<GetAccountPasswordPolicyResponse, RusotoError<GetAccountPasswordPolicyError>>;
22607
22608    /// <p>Retrieves information about IAM entity usage and IAM quotas in the AWS account.</p> <p> For information about IAM quotas, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p>
22609    async fn get_account_summary(
22610        &self,
22611    ) -> Result<GetAccountSummaryResponse, RusotoError<GetAccountSummaryError>>;
22612
22613    /// <p>Gets a list of all of the context keys referenced in the input policies. The policies are supplied as a list of one or more strings. To get the context keys from policies associated with an IAM user, group, or role, use <a>GetContextKeysForPrincipalPolicy</a>.</p> <p>Context keys are variables maintained by AWS and its services that provide details about the context of an API query request. Context keys can be evaluated by testing against a value specified in an IAM policy. Use <code>GetContextKeysForCustomPolicy</code> to understand what key names and values you must supply when you call <a>SimulateCustomPolicy</a>. Note that all parameters are shown in unencoded form here for clarity but must be URL encoded to be included as a part of a real HTML request.</p>
22614    async fn get_context_keys_for_custom_policy(
22615        &self,
22616        input: GetContextKeysForCustomPolicyRequest,
22617    ) -> Result<GetContextKeysForPolicyResponse, RusotoError<GetContextKeysForCustomPolicyError>>;
22618
22619    /// <p>Gets a list of all of the context keys referenced in all the IAM policies that are attached to the specified IAM entity. The entity can be an IAM user, group, or role. If you specify a user, then the request also includes all of the policies attached to groups that the user is a member of.</p> <p>You can optionally include a list of one or more additional policies, specified as strings. If you want to include <i>only</i> a list of policies by string, use <a>GetContextKeysForCustomPolicy</a> instead.</p> <p> <b>Note:</b> This operation discloses information about the permissions granted to other users. If you do not want users to see other user's permissions, then consider allowing them to use <a>GetContextKeysForCustomPolicy</a> instead.</p> <p>Context keys are variables maintained by AWS and its services that provide details about the context of an API query request. Context keys can be evaluated by testing against a value in an IAM policy. Use <a>GetContextKeysForPrincipalPolicy</a> to understand what key names and values you must supply when you call <a>SimulatePrincipalPolicy</a>.</p>
22620    async fn get_context_keys_for_principal_policy(
22621        &self,
22622        input: GetContextKeysForPrincipalPolicyRequest,
22623    ) -> Result<GetContextKeysForPolicyResponse, RusotoError<GetContextKeysForPrincipalPolicyError>>;
22624
22625    /// <p> Retrieves a credential report for the AWS account. For more information about the credential report, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html">Getting credential reports</a> in the <i>IAM User Guide</i>.</p>
22626    async fn get_credential_report(
22627        &self,
22628    ) -> Result<GetCredentialReportResponse, RusotoError<GetCredentialReportError>>;
22629
22630    /// <p> Returns a list of IAM users that are in the specified IAM group. You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22631    async fn get_group(
22632        &self,
22633        input: GetGroupRequest,
22634    ) -> Result<GetGroupResponse, RusotoError<GetGroupError>>;
22635
22636    /// <p>Retrieves the specified inline policy document that is embedded in the specified IAM group.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM group can also have managed policies attached to it. To retrieve a managed policy document that is attached to a group, use <a>GetPolicy</a> to determine the policy's default version, then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22637    async fn get_group_policy(
22638        &self,
22639        input: GetGroupPolicyRequest,
22640    ) -> Result<GetGroupPolicyResponse, RusotoError<GetGroupPolicyError>>;
22641
22642    /// <p> Retrieves information about the specified instance profile, including the instance profile's path, GUID, ARN, and role. For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a> in the <i>IAM User Guide</i>.</p>
22643    async fn get_instance_profile(
22644        &self,
22645        input: GetInstanceProfileRequest,
22646    ) -> Result<GetInstanceProfileResponse, RusotoError<GetInstanceProfileError>>;
22647
22648    /// <p>Retrieves the user name and password creation date for the specified IAM user. If the user has not been assigned a password, the operation returns a 404 (<code>NoSuchEntity</code>) error.</p>
22649    async fn get_login_profile(
22650        &self,
22651        input: GetLoginProfileRequest,
22652    ) -> Result<GetLoginProfileResponse, RusotoError<GetLoginProfileError>>;
22653
22654    /// <p>Returns information about the specified OpenID Connect (OIDC) provider resource object in IAM.</p>
22655    async fn get_open_id_connect_provider(
22656        &self,
22657        input: GetOpenIDConnectProviderRequest,
22658    ) -> Result<GetOpenIDConnectProviderResponse, RusotoError<GetOpenIDConnectProviderError>>;
22659
22660    /// <p>Retrieves the service last accessed data report for AWS Organizations that was previously generated using the <code> <a>GenerateOrganizationsAccessReport</a> </code> operation. This operation retrieves the status of your report job and the report contents.</p> <p>Depending on the parameters that you passed when you generated the report, the data returned could include different information. For details, see <a>GenerateOrganizationsAccessReport</a>.</p> <p>To call this operation, you must be signed in to the management account in your organization. SCPs must be enabled for your organization root. You must have permissions to perform this operation. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Refining permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <p>For each service that principals in an account (root users, IAM users, or IAM roles) could access using SCPs, the operation returns details about the most recent access attempt. If there was no attempt, the service is listed without details about the most recent attempt to access the service. If the operation fails, it returns the reason that it failed.</p> <p>By default, the list is sorted by service namespace.</p>
22661    async fn get_organizations_access_report(
22662        &self,
22663        input: GetOrganizationsAccessReportRequest,
22664    ) -> Result<GetOrganizationsAccessReportResponse, RusotoError<GetOrganizationsAccessReportError>>;
22665
22666    /// <p>Retrieves information about the specified managed policy, including the policy's default version and the total number of IAM users, groups, and roles to which the policy is attached. To retrieve the list of the specific users, groups, and roles that the policy is attached to, use <a>ListEntitiesForPolicy</a>. This operation returns metadata about the policy. To retrieve the actual policy document for a specific version of the policy, use <a>GetPolicyVersion</a>.</p> <p>This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded with an IAM user, group, or role, use <a>GetUserPolicy</a>, <a>GetGroupPolicy</a>, or <a>GetRolePolicy</a>.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22667    async fn get_policy(
22668        &self,
22669        input: GetPolicyRequest,
22670    ) -> Result<GetPolicyResponse, RusotoError<GetPolicyError>>;
22671
22672    /// <p>Retrieves information about the specified version of the specified managed policy, including the policy document.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>To list the available versions for a policy, use <a>ListPolicyVersions</a>.</p> <p>This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded in a user, group, or role, use <a>GetUserPolicy</a>, <a>GetGroupPolicy</a>, or <a>GetRolePolicy</a>.</p> <p>For more information about the types of policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about managed policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
22673    async fn get_policy_version(
22674        &self,
22675        input: GetPolicyVersionRequest,
22676    ) -> Result<GetPolicyVersionResponse, RusotoError<GetPolicyVersionError>>;
22677
22678    /// <p><p>Retrieves information about the specified role, including the role&#39;s path, GUID, ARN, and the role&#39;s trust policy that grants permission to assume the role. For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note></p>
22679    async fn get_role(
22680        &self,
22681        input: GetRoleRequest,
22682    ) -> Result<GetRoleResponse, RusotoError<GetRoleError>>;
22683
22684    /// <p>Retrieves the specified inline policy document that is embedded with the specified IAM role.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM role can also have managed policies attached to it. To retrieve a managed policy document that is attached to a role, use <a>GetPolicy</a> to determine the policy's default version, then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html">Using roles to delegate permissions and federate identities</a>.</p>
22685    async fn get_role_policy(
22686        &self,
22687        input: GetRolePolicyRequest,
22688    ) -> Result<GetRolePolicyResponse, RusotoError<GetRolePolicyError>>;
22689
22690    /// <p><p>Returns the SAML provider metadocument that was uploaded when the IAM SAML provider resource object was created or updated.</p> <note> <p>This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </note></p>
22691    async fn get_saml_provider(
22692        &self,
22693        input: GetSAMLProviderRequest,
22694    ) -> Result<GetSAMLProviderResponse, RusotoError<GetSAMLProviderError>>;
22695
22696    /// <p>Retrieves the specified SSH public key, including metadata about the key.</p> <p>The SSH public key retrieved by this operation is used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p>
22697    async fn get_ssh_public_key(
22698        &self,
22699        input: GetSSHPublicKeyRequest,
22700    ) -> Result<GetSSHPublicKeyResponse, RusotoError<GetSSHPublicKeyError>>;
22701
22702    /// <p>Retrieves information about the specified server certificate stored in IAM.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic includes a list of AWS services that can use the server certificates that you manage with IAM.</p>
22703    async fn get_server_certificate(
22704        &self,
22705        input: GetServerCertificateRequest,
22706    ) -> Result<GetServerCertificateResponse, RusotoError<GetServerCertificateError>>;
22707
22708    /// <p>Retrieves a service last accessed report that was created using the <code>GenerateServiceLastAccessedDetails</code> operation. You can use the <code>JobId</code> parameter in <code>GetServiceLastAccessedDetails</code> to retrieve the status of your report job. When the report is complete, you can retrieve the generated report. The report includes a list of AWS services that the resource (user, group, role, or managed policy) can access.</p> <note> <p>Service last accessed data does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, AWS Organizations policies, IAM permissions boundaries, and AWS STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For each service that the resource could access using permissions policies, the operation returns details about the most recent access attempt. If there was no attempt, the service is listed without details about the most recent attempt to access the service. If the operation fails, the <code>GetServiceLastAccessedDetails</code> operation returns the reason that it failed.</p> <p>The <code>GetServiceLastAccessedDetails</code> operation returns a list of services. This list includes the number of entities that have attempted to access the service and the date and time of the last attempt. It also returns the ARN of the following entity, depending on the resource ARN that you used to generate the report:</p> <ul> <li> <p> <b>User</b> – Returns the user ARN that you used to generate the report</p> </li> <li> <p> <b>Group</b> – Returns the ARN of the group member (user) that last attempted to access the service</p> </li> <li> <p> <b>Role</b> – Returns the role ARN that you used to generate the report</p> </li> <li> <p> <b>Policy</b> – Returns the ARN of the user or role that last used the policy to attempt to access the service</p> </li> </ul> <p>By default, the list is sorted by service namespace.</p> <p>If you specified <code>ACTION_LEVEL</code> granularity when you generated the report, this operation returns service and action last accessed data. This includes the most recent access attempt for each tracked action within a service. Otherwise, this operation returns only service data.</p> <p>For more information about service and action last accessed data, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p>
22709    async fn get_service_last_accessed_details(
22710        &self,
22711        input: GetServiceLastAccessedDetailsRequest,
22712    ) -> Result<
22713        GetServiceLastAccessedDetailsResponse,
22714        RusotoError<GetServiceLastAccessedDetailsError>,
22715    >;
22716
22717    /// <p>After you generate a group or policy report using the <code>GenerateServiceLastAccessedDetails</code> operation, you can use the <code>JobId</code> parameter in <code>GetServiceLastAccessedDetailsWithEntities</code>. This operation retrieves the status of your report job and a list of entities that could have used group or policy permissions to access the specified service.</p> <ul> <li> <p> <b>Group</b> – For a group report, this operation returns a list of users in the group that could have used the group’s policies in an attempt to access the service.</p> </li> <li> <p> <b>Policy</b> – For a policy report, this operation returns a list of entities (users or roles) that could have used the policy in an attempt to access the service.</p> </li> </ul> <p>You can also use this operation for user or role reports to retrieve details about those entities.</p> <p>If the operation fails, the <code>GetServiceLastAccessedDetailsWithEntities</code> operation returns the reason that it failed.</p> <p>By default, the list of associated entities is sorted by date, with the most recent access listed first.</p>
22718    async fn get_service_last_accessed_details_with_entities(
22719        &self,
22720        input: GetServiceLastAccessedDetailsWithEntitiesRequest,
22721    ) -> Result<
22722        GetServiceLastAccessedDetailsWithEntitiesResponse,
22723        RusotoError<GetServiceLastAccessedDetailsWithEntitiesError>,
22724    >;
22725
22726    /// <p>Retrieves the status of your service-linked role deletion. After you use <a>DeleteServiceLinkedRole</a> to submit a service-linked role for deletion, you can use the <code>DeletionTaskId</code> parameter in <code>GetServiceLinkedRoleDeletionStatus</code> to check the status of the deletion. If the deletion fails, this operation returns the reason that it failed, if that information is returned by the service.</p>
22727    async fn get_service_linked_role_deletion_status(
22728        &self,
22729        input: GetServiceLinkedRoleDeletionStatusRequest,
22730    ) -> Result<
22731        GetServiceLinkedRoleDeletionStatusResponse,
22732        RusotoError<GetServiceLinkedRoleDeletionStatusError>,
22733    >;
22734
22735    /// <p>Retrieves information about the specified IAM user, including the user's creation date, path, unique ID, and ARN.</p> <p>If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID used to sign the request to this operation.</p>
22736    async fn get_user(
22737        &self,
22738        input: GetUserRequest,
22739    ) -> Result<GetUserResponse, RusotoError<GetUserError>>;
22740
22741    /// <p>Retrieves the specified inline policy document that is embedded in the specified IAM user.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM user can also have managed policies attached to it. To retrieve a managed policy document that is attached to a user, use <a>GetPolicy</a> to determine the policy's default version. Then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22742    async fn get_user_policy(
22743        &self,
22744        input: GetUserPolicyRequest,
22745    ) -> Result<GetUserPolicyResponse, RusotoError<GetUserPolicyError>>;
22746
22747    /// <p><p>Returns information about the access key IDs associated with the specified IAM user. If there is none, the operation returns an empty list.</p> <p>Although each user is limited to a small number of keys, you can still paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>If the <code>UserName</code> field is not specified, the user name is determined implicitly based on the AWS access key ID used to sign the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p> <note> <p>To ensure the security of your AWS account, the secret access key is accessible only during key and user creation.</p> </note></p>
22748    async fn list_access_keys(
22749        &self,
22750        input: ListAccessKeysRequest,
22751    ) -> Result<ListAccessKeysResponse, RusotoError<ListAccessKeysError>>;
22752
22753    /// <p>Lists the account alias associated with the AWS account (Note: you can have only one). For information about using an AWS account alias, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AccountAlias.html">Using an alias for your AWS account ID</a> in the <i>IAM User Guide</i>.</p>
22754    async fn list_account_aliases(
22755        &self,
22756        input: ListAccountAliasesRequest,
22757    ) -> Result<ListAccountAliasesResponse, RusotoError<ListAccountAliasesError>>;
22758
22759    /// <p>Lists all managed policies that are attached to the specified IAM group.</p> <p>An IAM group can also have inline policies embedded with it. To list the inline policies for a group, use <a>ListGroupPolicies</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified group (or none that match the specified path prefix), the operation returns an empty list.</p>
22760    async fn list_attached_group_policies(
22761        &self,
22762        input: ListAttachedGroupPoliciesRequest,
22763    ) -> Result<ListAttachedGroupPoliciesResponse, RusotoError<ListAttachedGroupPoliciesError>>;
22764
22765    /// <p>Lists all managed policies that are attached to the specified IAM role.</p> <p>An IAM role can also have inline policies embedded with it. To list the inline policies for a role, use <a>ListRolePolicies</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified role (or none that match the specified path prefix), the operation returns an empty list.</p>
22766    async fn list_attached_role_policies(
22767        &self,
22768        input: ListAttachedRolePoliciesRequest,
22769    ) -> Result<ListAttachedRolePoliciesResponse, RusotoError<ListAttachedRolePoliciesError>>;
22770
22771    /// <p>Lists all managed policies that are attached to the specified IAM user.</p> <p>An IAM user can also have inline policies embedded with it. To list the inline policies for a user, use <a>ListUserPolicies</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified group (or none that match the specified path prefix), the operation returns an empty list.</p>
22772    async fn list_attached_user_policies(
22773        &self,
22774        input: ListAttachedUserPoliciesRequest,
22775    ) -> Result<ListAttachedUserPoliciesResponse, RusotoError<ListAttachedUserPoliciesError>>;
22776
22777    /// <p>Lists all IAM users, groups, and roles that the specified managed policy is attached to.</p> <p>You can use the optional <code>EntityFilter</code> parameter to limit the results to a particular type of entity (users, groups, or roles). For example, to list only the roles that are attached to the specified policy, set <code>EntityFilter</code> to <code>Role</code>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22778    async fn list_entities_for_policy(
22779        &self,
22780        input: ListEntitiesForPolicyRequest,
22781    ) -> Result<ListEntitiesForPolicyResponse, RusotoError<ListEntitiesForPolicyError>>;
22782
22783    /// <p>Lists the names of the inline policies that are embedded in the specified IAM group.</p> <p>An IAM group can also have managed policies attached to it. To list the managed policies that are attached to a group, use <a>ListAttachedGroupPolicies</a>. For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified group, the operation returns an empty list.</p>
22784    async fn list_group_policies(
22785        &self,
22786        input: ListGroupPoliciesRequest,
22787    ) -> Result<ListGroupPoliciesResponse, RusotoError<ListGroupPoliciesError>>;
22788
22789    /// <p>Lists the IAM groups that have the specified path prefix.</p> <p> You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22790    async fn list_groups(
22791        &self,
22792        input: ListGroupsRequest,
22793    ) -> Result<ListGroupsResponse, RusotoError<ListGroupsError>>;
22794
22795    /// <p>Lists the IAM groups that the specified IAM user belongs to.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22796    async fn list_groups_for_user(
22797        &self,
22798        input: ListGroupsForUserRequest,
22799    ) -> Result<ListGroupsForUserResponse, RusotoError<ListGroupsForUserError>>;
22800
22801    /// <p>Lists the tags that are attached to the specified IAM instance profile. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
22802    async fn list_instance_profile_tags(
22803        &self,
22804        input: ListInstanceProfileTagsRequest,
22805    ) -> Result<ListInstanceProfileTagsResponse, RusotoError<ListInstanceProfileTagsError>>;
22806
22807    /// <p>Lists the instance profiles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an instance profile, see <a>GetInstanceProfile</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22808    async fn list_instance_profiles(
22809        &self,
22810        input: ListInstanceProfilesRequest,
22811    ) -> Result<ListInstanceProfilesResponse, RusotoError<ListInstanceProfilesError>>;
22812
22813    /// <p>Lists the instance profiles that have the specified associated IAM role. If there are none, the operation returns an empty list. For more information about instance profiles, go to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22814    async fn list_instance_profiles_for_role(
22815        &self,
22816        input: ListInstanceProfilesForRoleRequest,
22817    ) -> Result<ListInstanceProfilesForRoleResponse, RusotoError<ListInstanceProfilesForRoleError>>;
22818
22819    /// <p>Lists the tags that are attached to the specified IAM virtual multi-factor authentication (MFA) device. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
22820    async fn list_mfa_device_tags(
22821        &self,
22822        input: ListMFADeviceTagsRequest,
22823    ) -> Result<ListMFADeviceTagsResponse, RusotoError<ListMFADeviceTagsError>>;
22824
22825    /// <p>Lists the MFA devices for an IAM user. If the request includes a IAM user name, then this operation lists all the MFA devices associated with the specified user. If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID signing the request for this operation.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22826    async fn list_mfa_devices(
22827        &self,
22828        input: ListMFADevicesRequest,
22829    ) -> Result<ListMFADevicesResponse, RusotoError<ListMFADevicesError>>;
22830
22831    /// <p>Lists the tags that are attached to the specified OpenID Connect (OIDC)-compatible identity provider. The returned list of tags is sorted by tag key. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html">About web identity federation</a>.</p> <p>For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
22832    async fn list_open_id_connect_provider_tags(
22833        &self,
22834        input: ListOpenIDConnectProviderTagsRequest,
22835    ) -> Result<
22836        ListOpenIDConnectProviderTagsResponse,
22837        RusotoError<ListOpenIDConnectProviderTagsError>,
22838    >;
22839
22840    /// <p><p>Lists information about the IAM OpenID Connect (OIDC) provider resource objects defined in the AWS account.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an OIDC provider, see <a>GetOpenIDConnectProvider</a>.</p> </note></p>
22841    async fn list_open_id_connect_providers(
22842        &self,
22843        input: ListOpenIDConnectProvidersRequest,
22844    ) -> Result<ListOpenIDConnectProvidersResponse, RusotoError<ListOpenIDConnectProvidersError>>;
22845
22846    /// <p><p>Lists all the managed policies that are available in your AWS account, including your own customer-defined managed policies and all AWS managed policies.</p> <p>You can filter the list of policies that is returned using the optional <code>OnlyAttached</code>, <code>Scope</code>, and <code>PathPrefix</code> parameters. For example, to list only the customer managed policies in your AWS account, set <code>Scope</code> to <code>Local</code>. To list only AWS managed policies, set <code>Scope</code> to <code>AWS</code>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>For more information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a customer manged policy, see <a>GetPolicy</a>.</p> </note></p>
22847    async fn list_policies(
22848        &self,
22849        input: ListPoliciesRequest,
22850    ) -> Result<ListPoliciesResponse, RusotoError<ListPoliciesError>>;
22851
22852    /// <p>Retrieves a list of policies that the IAM identity (user, group, or role) can use to access each specified service.</p> <note> <p>This operation does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, AWS Organizations policies, IAM permissions boundaries, and AWS STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>The list of policies returned by the operation depends on the ARN of the identity that you provide.</p> <ul> <li> <p> <b>User</b> – The list of policies includes the managed and inline policies that are attached to the user directly. The list also includes any additional managed and inline policies that are attached to the group to which the user belongs. </p> </li> <li> <p> <b>Group</b> – The list of policies includes only the managed and inline policies that are attached to the group directly. Policies that are attached to the group’s user are not included.</p> </li> <li> <p> <b>Role</b> – The list of policies includes only the managed and inline policies that are attached to the role.</p> </li> </ul> <p>For each managed policy, this operation returns the ARN and policy name. For each inline policy, it returns the policy name and the entity to which it is attached. Inline policies do not have an ARN. For more information about these policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>Policies that are attached to users and roles as permissions boundaries are not returned. To view which managed policy is currently used to set the permissions boundary for a user or role, use the <a>GetUser</a> or <a>GetRole</a> operations.</p>
22853    async fn list_policies_granting_service_access(
22854        &self,
22855        input: ListPoliciesGrantingServiceAccessRequest,
22856    ) -> Result<
22857        ListPoliciesGrantingServiceAccessResponse,
22858        RusotoError<ListPoliciesGrantingServiceAccessError>,
22859    >;
22860
22861    /// <p>Lists the tags that are attached to the specified IAM customer managed policy. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
22862    async fn list_policy_tags(
22863        &self,
22864        input: ListPolicyTagsRequest,
22865    ) -> Result<ListPolicyTagsResponse, RusotoError<ListPolicyTagsError>>;
22866
22867    /// <p>Lists information about the versions of the specified managed policy, including the version that is currently set as the policy's default version.</p> <p>For more information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
22868    async fn list_policy_versions(
22869        &self,
22870        input: ListPolicyVersionsRequest,
22871    ) -> Result<ListPolicyVersionsResponse, RusotoError<ListPolicyVersionsError>>;
22872
22873    /// <p>Lists the names of the inline policies that are embedded in the specified IAM role.</p> <p>An IAM role can also have managed policies attached to it. To list the managed policies that are attached to a role, use <a>ListAttachedRolePolicies</a>. For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified role, the operation returns an empty list.</p>
22874    async fn list_role_policies(
22875        &self,
22876        input: ListRolePoliciesRequest,
22877    ) -> Result<ListRolePoliciesResponse, RusotoError<ListRolePoliciesError>>;
22878
22879    /// <p>Lists the tags that are attached to the specified role. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
22880    async fn list_role_tags(
22881        &self,
22882        input: ListRoleTagsRequest,
22883    ) -> Result<ListRoleTagsResponse, RusotoError<ListRoleTagsError>>;
22884
22885    /// <p>Lists the IAM roles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a role, see <a>GetRole</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22886    async fn list_roles(
22887        &self,
22888        input: ListRolesRequest,
22889    ) -> Result<ListRolesResponse, RusotoError<ListRolesError>>;
22890
22891    /// <p>Lists the tags that are attached to the specified Security Assertion Markup Language (SAML) identity provider. The returned list of tags is sorted by tag key. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html">About SAML 2.0-based federation</a>.</p> <p>For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
22892    async fn list_saml_provider_tags(
22893        &self,
22894        input: ListSAMLProviderTagsRequest,
22895    ) -> Result<ListSAMLProviderTagsResponse, RusotoError<ListSAMLProviderTagsError>>;
22896
22897    /// <p><p>Lists the SAML provider resource objects defined in IAM in the account. IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a SAML provider, see <a>GetSAMLProvider</a>.</p> <important> <p> This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </important></p>
22898    async fn list_saml_providers(
22899        &self,
22900        input: ListSAMLProvidersRequest,
22901    ) -> Result<ListSAMLProvidersResponse, RusotoError<ListSAMLProvidersError>>;
22902
22903    /// <p>Returns information about the SSH public keys associated with the specified IAM user. If none exists, the operation returns an empty list.</p> <p>The SSH public keys returned by this operation are used only for authenticating the IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p> <p>Although each user is limited to a small number of keys, you can still paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22904    async fn list_ssh_public_keys(
22905        &self,
22906        input: ListSSHPublicKeysRequest,
22907    ) -> Result<ListSSHPublicKeysResponse, RusotoError<ListSSHPublicKeysError>>;
22908
22909    /// <p><p>Lists the tags that are attached to the specified IAM server certificate. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>For certificates in a Region supported by AWS Certificate Manager (ACM), we recommend that you don&#39;t use IAM server certificates. Instead, use ACM to provision, manage, and deploy your server certificates. For more information about IAM server certificates, <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>.</p> </note></p>
22910    async fn list_server_certificate_tags(
22911        &self,
22912        input: ListServerCertificateTagsRequest,
22913    ) -> Result<ListServerCertificateTagsResponse, RusotoError<ListServerCertificateTagsError>>;
22914
22915    /// <p><p>Lists the server certificates stored in IAM that have the specified path prefix. If none exist, the operation returns an empty list.</p> <p> You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic also includes a list of AWS services that can use the server certificates that you manage with IAM.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a servercertificate, see <a>GetServerCertificate</a>.</p> </note></p>
22916    async fn list_server_certificates(
22917        &self,
22918        input: ListServerCertificatesRequest,
22919    ) -> Result<ListServerCertificatesResponse, RusotoError<ListServerCertificatesError>>;
22920
22921    /// <p>Returns information about the service-specific credentials associated with the specified IAM user. If none exists, the operation returns an empty list. The service-specific credentials returned by this operation are used only for authenticating the IAM user to a specific service. For more information about using service-specific credentials to authenticate to an AWS service, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html">Set up service-specific credentials</a> in the AWS CodeCommit User Guide.</p>
22922    async fn list_service_specific_credentials(
22923        &self,
22924        input: ListServiceSpecificCredentialsRequest,
22925    ) -> Result<
22926        ListServiceSpecificCredentialsResponse,
22927        RusotoError<ListServiceSpecificCredentialsError>,
22928    >;
22929
22930    /// <p>Returns information about the signing certificates associated with the specified IAM user. If none exists, the operation returns an empty list.</p> <p>Although each user is limited to a small number of signing certificates, you can still paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>If the <code>UserName</code> field is not specified, the user name is determined implicitly based on the AWS access key ID used to sign the request for this operation. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p>
22931    async fn list_signing_certificates(
22932        &self,
22933        input: ListSigningCertificatesRequest,
22934    ) -> Result<ListSigningCertificatesResponse, RusotoError<ListSigningCertificatesError>>;
22935
22936    /// <p>Lists the names of the inline policies embedded in the specified IAM user.</p> <p>An IAM user can also have managed policies attached to it. To list the managed policies that are attached to a user, use <a>ListAttachedUserPolicies</a>. For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified user, the operation returns an empty list.</p>
22937    async fn list_user_policies(
22938        &self,
22939        input: ListUserPoliciesRequest,
22940    ) -> Result<ListUserPoliciesResponse, RusotoError<ListUserPoliciesError>>;
22941
22942    /// <p>Lists the tags that are attached to the specified IAM user. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
22943    async fn list_user_tags(
22944        &self,
22945        input: ListUserTagsRequest,
22946    ) -> Result<ListUserTagsResponse, RusotoError<ListUserTagsError>>;
22947
22948    /// <p>Lists the IAM users that have the specified path prefix. If no path prefix is specified, the operation returns all users in the AWS account. If there are none, the operation returns an empty list.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a user, see <a>GetUser</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22949    async fn list_users(
22950        &self,
22951        input: ListUsersRequest,
22952    ) -> Result<ListUsersResponse, RusotoError<ListUsersError>>;
22953
22954    /// <p>Lists the virtual MFA devices defined in the AWS account by assignment status. If you do not specify an assignment status, the operation returns a list of all virtual MFA devices. Assignment status can be <code>Assigned</code>, <code>Unassigned</code>, or <code>Any</code>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a virtual MFA device, see <a>ListVirtualMFADevices</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
22955    async fn list_virtual_mfa_devices(
22956        &self,
22957        input: ListVirtualMFADevicesRequest,
22958    ) -> Result<ListVirtualMFADevicesResponse, RusotoError<ListVirtualMFADevicesError>>;
22959
22960    /// <p><p>Adds or updates an inline policy document that is embedded in the specified IAM group.</p> <p>A user can also have managed policies attached to it. To attach a managed policy to a group, use <a>AttachGroupPolicy</a>. To create a new managed policy, use <a>CreatePolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of inline policies that you can embed in a group, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <note> <p>Because policy documents can be large, you should use POST rather than GET when calling <code>PutGroupPolicy</code>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html">Making query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
22961    async fn put_group_policy(
22962        &self,
22963        input: PutGroupPolicyRequest,
22964    ) -> Result<(), RusotoError<PutGroupPolicyError>>;
22965
22966    /// <p><p>Adds or updates the policy that is specified as the IAM role&#39;s permissions boundary. You can use an AWS managed policy or a customer managed policy to set the boundary for a role. Use the boundary to control the maximum permissions that the role can have. Setting a permissions boundary is an advanced feature that can affect the permissions for the role.</p> <p>You cannot set the boundary for a service-linked role. </p> <important> <p>Policies used as permissions boundaries do not provide permissions. You must also attach a permissions policy to the role. To learn how the effective permissions for a role are evaluated, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html">IAM JSON policy evaluation logic</a> in the IAM User Guide. </p> </important></p>
22967    async fn put_role_permissions_boundary(
22968        &self,
22969        input: PutRolePermissionsBoundaryRequest,
22970    ) -> Result<(), RusotoError<PutRolePermissionsBoundaryError>>;
22971
22972    /// <p><p>Adds or updates an inline policy document that is embedded in the specified IAM role.</p> <p>When you embed an inline policy in a role, the inline policy is used as part of the role&#39;s access (permissions) policy. The role&#39;s trust policy is created at the same time as the role, using <a>CreateRole</a>. You can update a role&#39;s trust policy using <a>UpdateAssumeRolePolicy</a>. For more information about IAM roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html">Using roles to delegate permissions and federate identities</a>.</p> <p>A role can also have a managed policy attached to it. To attach a managed policy to a role, use <a>AttachRolePolicy</a>. To create a new managed policy, use <a>CreatePolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of inline policies that you can embed with a role, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <note> <p>Because policy documents can be large, you should use POST rather than GET when calling <code>PutRolePolicy</code>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html">Making query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
22973    async fn put_role_policy(
22974        &self,
22975        input: PutRolePolicyRequest,
22976    ) -> Result<(), RusotoError<PutRolePolicyError>>;
22977
22978    /// <p><p>Adds or updates the policy that is specified as the IAM user&#39;s permissions boundary. You can use an AWS managed policy or a customer managed policy to set the boundary for a user. Use the boundary to control the maximum permissions that the user can have. Setting a permissions boundary is an advanced feature that can affect the permissions for the user.</p> <important> <p>Policies that are used as permissions boundaries do not provide permissions. You must also attach a permissions policy to the user. To learn how the effective permissions for a user are evaluated, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html">IAM JSON policy evaluation logic</a> in the IAM User Guide. </p> </important></p>
22979    async fn put_user_permissions_boundary(
22980        &self,
22981        input: PutUserPermissionsBoundaryRequest,
22982    ) -> Result<(), RusotoError<PutUserPermissionsBoundaryError>>;
22983
22984    /// <p><p>Adds or updates an inline policy document that is embedded in the specified IAM user.</p> <p>An IAM user can also have a managed policy attached to it. To attach a managed policy to a user, use <a>AttachUserPolicy</a>. To create a new managed policy, use <a>CreatePolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of inline policies that you can embed in a user, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <note> <p>Because policy documents can be large, you should use POST rather than GET when calling <code>PutUserPolicy</code>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html">Making query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
22985    async fn put_user_policy(
22986        &self,
22987        input: PutUserPolicyRequest,
22988    ) -> Result<(), RusotoError<PutUserPolicyError>>;
22989
22990    /// <p>Removes the specified client ID (also known as audience) from the list of client IDs registered for the specified IAM OpenID Connect (OIDC) provider resource object.</p> <p>This operation is idempotent; it does not fail or return an error if you try to remove a client ID that does not exist.</p>
22991    async fn remove_client_id_from_open_id_connect_provider(
22992        &self,
22993        input: RemoveClientIDFromOpenIDConnectProviderRequest,
22994    ) -> Result<(), RusotoError<RemoveClientIDFromOpenIDConnectProviderError>>;
22995
22996    /// <p>Removes the specified IAM role from the specified EC2 instance profile.</p> <important> <p>Make sure that you do not have any Amazon EC2 instances running with the role you are about to remove from the instance profile. Removing a role from an instance profile that is associated with a running instance might break any applications running on the instance.</p> </important> <p> For more information about IAM roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>. For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p>
22997    async fn remove_role_from_instance_profile(
22998        &self,
22999        input: RemoveRoleFromInstanceProfileRequest,
23000    ) -> Result<(), RusotoError<RemoveRoleFromInstanceProfileError>>;
23001
23002    /// <p>Removes the specified user from the specified group.</p>
23003    async fn remove_user_from_group(
23004        &self,
23005        input: RemoveUserFromGroupRequest,
23006    ) -> Result<(), RusotoError<RemoveUserFromGroupError>>;
23007
23008    /// <p>Resets the password for a service-specific credential. The new password is AWS generated and cryptographically strong. It cannot be configured by the user. Resetting the password immediately invalidates the previous password associated with this user.</p>
23009    async fn reset_service_specific_credential(
23010        &self,
23011        input: ResetServiceSpecificCredentialRequest,
23012    ) -> Result<
23013        ResetServiceSpecificCredentialResponse,
23014        RusotoError<ResetServiceSpecificCredentialError>,
23015    >;
23016
23017    /// <p>Synchronizes the specified MFA device with its IAM resource object on the AWS servers.</p> <p>For more information about creating and working with virtual MFA devices, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_VirtualMFA.html">Using a virtual MFA device</a> in the <i>IAM User Guide</i>.</p>
23018    async fn resync_mfa_device(
23019        &self,
23020        input: ResyncMFADeviceRequest,
23021    ) -> Result<(), RusotoError<ResyncMFADeviceError>>;
23022
23023    /// <p>Sets the specified version of the specified policy as the policy's default (operative) version.</p> <p>This operation affects all users, groups, and roles that the policy is attached to. To list the users, groups, and roles that the policy is attached to, use <a>ListEntitiesForPolicy</a>.</p> <p>For information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
23024    async fn set_default_policy_version(
23025        &self,
23026        input: SetDefaultPolicyVersionRequest,
23027    ) -> Result<(), RusotoError<SetDefaultPolicyVersionError>>;
23028
23029    /// <p>Sets the specified version of the global endpoint token as the token version used for the AWS account.</p> <p>By default, AWS Security Token Service (STS) is available as a global service, and all STS requests go to a single endpoint at <code>https://sts.amazonaws.com</code>. AWS recommends using Regional STS endpoints to reduce latency, build in redundancy, and increase session token availability. For information about Regional endpoints for STS, see <a href="https://docs.aws.amazon.com/general/latest/gr/sts.html">AWS AWS Security Token Service endpoints and quotas</a> in the <i>AWS General Reference</i>.</p> <p>If you make an STS call to the global endpoint, the resulting session tokens might be valid in some Regions but not others. It depends on the version that is set in this operation. Version 1 tokens are valid only in AWS Regions that are available by default. These tokens do not work in manually enabled Regions, such as Asia Pacific (Hong Kong). Version 2 tokens are valid in all Regions. However, version 2 tokens are longer and might affect systems where you temporarily store tokens. For information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html">Activating and deactivating STS in an AWS region</a> in the <i>IAM User Guide</i>.</p> <p>To view the current session token version, see the <code>GlobalEndpointTokenVersion</code> entry in the response of the <a>GetAccountSummary</a> operation.</p>
23030    async fn set_security_token_service_preferences(
23031        &self,
23032        input: SetSecurityTokenServicePreferencesRequest,
23033    ) -> Result<(), RusotoError<SetSecurityTokenServicePreferencesError>>;
23034
23035    /// <p>Simulate how a set of IAM policies and optionally a resource-based policy works with a list of API operations and AWS resources to determine the policies' effective permissions. The policies are provided as strings.</p> <p>The simulation does not perform the API operations; it only checks the authorization to determine if the simulated policies allow or deny the operations. You can simulate resources that don't exist in your account.</p> <p>If you want to simulate existing policies that are attached to an IAM user, group, or role, use <a>SimulatePrincipalPolicy</a> instead.</p> <p>Context keys are variables that are maintained by AWS and its services and which provide details about the context of an API query request. You can use the <code>Condition</code> element of an IAM policy to evaluate context keys. To get the list of context keys that the policies require for correct simulation, use <a>GetContextKeysForCustomPolicy</a>.</p> <p>If the output is long, you can use <code>MaxItems</code> and <code>Marker</code> parameters to paginate the results.</p> <p>For more information about using the policy simulator, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html">Testing IAM policies with the IAM policy simulator </a>in the <i>IAM User Guide</i>.</p>
23036    async fn simulate_custom_policy(
23037        &self,
23038        input: SimulateCustomPolicyRequest,
23039    ) -> Result<SimulatePolicyResponse, RusotoError<SimulateCustomPolicyError>>;
23040
23041    /// <p>Simulate how a set of IAM policies attached to an IAM entity works with a list of API operations and AWS resources to determine the policies' effective permissions. The entity can be an IAM user, group, or role. If you specify a user, then the simulation also includes all of the policies that are attached to groups that the user belongs to. You can simulate resources that don't exist in your account.</p> <p>You can optionally include a list of one or more additional policies specified as strings to include in the simulation. If you want to simulate only policies specified as strings, use <a>SimulateCustomPolicy</a> instead.</p> <p>You can also optionally include one resource-based policy to be evaluated with each of the resources included in the simulation.</p> <p>The simulation does not perform the API operations; it only checks the authorization to determine if the simulated policies allow or deny the operations.</p> <p> <b>Note:</b> This operation discloses information about the permissions granted to other users. If you do not want users to see other user's permissions, then consider allowing them to use <a>SimulateCustomPolicy</a> instead.</p> <p>Context keys are variables maintained by AWS and its services that provide details about the context of an API query request. You can use the <code>Condition</code> element of an IAM policy to evaluate context keys. To get the list of context keys that the policies require for correct simulation, use <a>GetContextKeysForPrincipalPolicy</a>.</p> <p>If the output is long, you can use the <code>MaxItems</code> and <code>Marker</code> parameters to paginate the results.</p> <p>For more information about using the policy simulator, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html">Testing IAM policies with the IAM policy simulator </a>in the <i>IAM User Guide</i>.</p>
23042    async fn simulate_principal_policy(
23043        &self,
23044        input: SimulatePrincipalPolicyRequest,
23045    ) -> Result<SimulatePolicyResponse, RusotoError<SimulatePrincipalPolicyError>>;
23046
23047    /// <p><p>Adds one or more tags to an IAM instance profile. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>Each tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM instance profile that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
23048    async fn tag_instance_profile(
23049        &self,
23050        input: TagInstanceProfileRequest,
23051    ) -> Result<(), RusotoError<TagInstanceProfileError>>;
23052
23053    /// <p><p>Adds one or more tags to an IAM virtual multi-factor authentication (MFA) device. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM virtual MFA device that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
23054    async fn tag_mfa_device(
23055        &self,
23056        input: TagMFADeviceRequest,
23057    ) -> Result<(), RusotoError<TagMFADeviceError>>;
23058
23059    /// <p><p>Adds one or more tags to an OpenID Connect (OIDC)-compatible identity provider. For more information about these providers, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html">About web identity federation</a>. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an OIDC provider that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
23060    async fn tag_open_id_connect_provider(
23061        &self,
23062        input: TagOpenIDConnectProviderRequest,
23063    ) -> Result<(), RusotoError<TagOpenIDConnectProviderError>>;
23064
23065    /// <p><p>Adds one or more tags to an IAM customer managed policy. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM customer managed policy that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
23066    async fn tag_policy(&self, input: TagPolicyRequest) -> Result<(), RusotoError<TagPolicyError>>;
23067
23068    /// <p>Adds one or more tags to an IAM role. The role can be a regular role or a service-linked role. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM role that has a specified tag attached. You can also restrict access to only those resources that have a certain tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p> <b>Cost allocation</b> - Use tags to help track which individuals and teams are using which AWS resources.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note> <p>For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM identities</a> in the <i>IAM User Guide</i>.</p>
23069    async fn tag_role(&self, input: TagRoleRequest) -> Result<(), RusotoError<TagRoleError>>;
23070
23071    /// <p><p>Adds one or more tags to a Security Assertion Markup Language (SAML) identity provider. For more information about these providers, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html">About SAML 2.0-based federation </a>. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only a SAML identity provider that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
23072    async fn tag_saml_provider(
23073        &self,
23074        input: TagSAMLProviderRequest,
23075    ) -> Result<(), RusotoError<TagSAMLProviderError>>;
23076
23077    /// <p><p>Adds one or more tags to an IAM server certificate. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <note> <p>For certificates in a Region supported by AWS Certificate Manager (ACM), we recommend that you don&#39;t use IAM server certificates. Instead, use ACM to provision, manage, and deploy your server certificates. For more information about IAM server certificates, <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>.</p> </note> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only a server certificate that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p> <b>Cost allocation</b> - Use tags to help track which individuals and teams are using which AWS resources.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
23078    async fn tag_server_certificate(
23079        &self,
23080        input: TagServerCertificateRequest,
23081    ) -> Result<(), RusotoError<TagServerCertificateError>>;
23082
23083    /// <p>Adds one or more tags to an IAM user. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM requesting user that has a specified tag attached. You can also restrict access to only those resources that have a certain tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p> <b>Cost allocation</b> - Use tags to help track which individuals and teams are using which AWS resources.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note> <p>For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM identities</a> in the <i>IAM User Guide</i>.</p>
23084    async fn tag_user(&self, input: TagUserRequest) -> Result<(), RusotoError<TagUserError>>;
23085
23086    /// <p>Removes the specified tags from the IAM instance profile. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
23087    async fn untag_instance_profile(
23088        &self,
23089        input: UntagInstanceProfileRequest,
23090    ) -> Result<(), RusotoError<UntagInstanceProfileError>>;
23091
23092    /// <p>Removes the specified tags from the IAM virtual multi-factor authentication (MFA) device. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
23093    async fn untag_mfa_device(
23094        &self,
23095        input: UntagMFADeviceRequest,
23096    ) -> Result<(), RusotoError<UntagMFADeviceError>>;
23097
23098    /// <p>Removes the specified tags from the specified OpenID Connect (OIDC)-compatible identity provider in IAM. For more information about OIDC providers, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html">About web identity federation</a>. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
23099    async fn untag_open_id_connect_provider(
23100        &self,
23101        input: UntagOpenIDConnectProviderRequest,
23102    ) -> Result<(), RusotoError<UntagOpenIDConnectProviderError>>;
23103
23104    /// <p>Removes the specified tags from the customer managed policy. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
23105    async fn untag_policy(
23106        &self,
23107        input: UntagPolicyRequest,
23108    ) -> Result<(), RusotoError<UntagPolicyError>>;
23109
23110    /// <p>Removes the specified tags from the role. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
23111    async fn untag_role(&self, input: UntagRoleRequest) -> Result<(), RusotoError<UntagRoleError>>;
23112
23113    /// <p>Removes the specified tags from the specified Security Assertion Markup Language (SAML) identity provider in IAM. For more information about these providers, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html">About web identity federation</a>. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
23114    async fn untag_saml_provider(
23115        &self,
23116        input: UntagSAMLProviderRequest,
23117    ) -> Result<(), RusotoError<UntagSAMLProviderError>>;
23118
23119    /// <p><p>Removes the specified tags from the IAM server certificate. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>For certificates in a Region supported by AWS Certificate Manager (ACM), we recommend that you don&#39;t use IAM server certificates. Instead, use ACM to provision, manage, and deploy your server certificates. For more information about IAM server certificates, <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>.</p> </note></p>
23120    async fn untag_server_certificate(
23121        &self,
23122        input: UntagServerCertificateRequest,
23123    ) -> Result<(), RusotoError<UntagServerCertificateError>>;
23124
23125    /// <p>Removes the specified tags from the user. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
23126    async fn untag_user(&self, input: UntagUserRequest) -> Result<(), RusotoError<UntagUserError>>;
23127
23128    /// <p>Changes the status of the specified access key from Active to Inactive, or vice versa. This operation can be used to disable a user's key as part of a key rotation workflow.</p> <p>If the <code>UserName</code> is not specified, the user name is determined implicitly based on the AWS access key ID used to sign the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p> <p>For information about rotating keys, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html">Managing keys and certificates</a> in the <i>IAM User Guide</i>.</p>
23129    async fn update_access_key(
23130        &self,
23131        input: UpdateAccessKeyRequest,
23132    ) -> Result<(), RusotoError<UpdateAccessKeyError>>;
23133
23134    /// <p>Updates the password policy settings for the AWS account.</p> <note> <ul> <li> <p>This operation does not support partial updates. No parameters are required, but if you do not specify a parameter, that parameter's value reverts to its default value. See the <b>Request Parameters</b> section for each parameter's default value. Also note that some parameters do not allow the default parameter to be explicitly set. Instead, to invoke the default value, do not include that parameter when you invoke the operation.</p> </li> </ul> </note> <p> For more information about using a password policy, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingPasswordPolicies.html">Managing an IAM password policy</a> in the <i>IAM User Guide</i>.</p>
23135    async fn update_account_password_policy(
23136        &self,
23137        input: UpdateAccountPasswordPolicyRequest,
23138    ) -> Result<(), RusotoError<UpdateAccountPasswordPolicyError>>;
23139
23140    /// <p>Updates the policy that grants an IAM entity permission to assume a role. This is typically referred to as the "role trust policy". For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html">Using roles to delegate permissions and federate identities</a>.</p>
23141    async fn update_assume_role_policy(
23142        &self,
23143        input: UpdateAssumeRolePolicyRequest,
23144    ) -> Result<(), RusotoError<UpdateAssumeRolePolicyError>>;
23145
23146    /// <p><p>Updates the name and/or the path of the specified IAM group.</p> <important> <p> You should understand the implications of changing a group&#39;s path or name. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_WorkingWithGroupsAndUsers.html">Renaming users and groups</a> in the <i>IAM User Guide</i>.</p> </important> <note> <p>The person making the request (the principal), must have permission to change the role group with the old name and the new name. For example, to change the group named <code>Managers</code> to <code>MGRs</code>, the principal must have a policy that allows them to update both groups. If the principal has permission to update the <code>Managers</code> group, but not the <code>MGRs</code> group, then the update fails. For more information about permissions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html">Access management</a>. </p> </note></p>
23147    async fn update_group(
23148        &self,
23149        input: UpdateGroupRequest,
23150    ) -> Result<(), RusotoError<UpdateGroupError>>;
23151
23152    /// <p>Changes the password for the specified IAM user. You can use the AWS CLI, the AWS API, or the <b>Users</b> page in the IAM console to change the password for any IAM user. Use <a>ChangePassword</a> to change your own password in the <b>My Security Credentials</b> page in the AWS Management Console.</p> <p>For more information about modifying passwords, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html">Managing passwords</a> in the <i>IAM User Guide</i>.</p>
23153    async fn update_login_profile(
23154        &self,
23155        input: UpdateLoginProfileRequest,
23156    ) -> Result<(), RusotoError<UpdateLoginProfileError>>;
23157
23158    /// <p><p>Replaces the existing list of server certificate thumbprints associated with an OpenID Connect (OIDC) provider resource object with a new list of thumbprints.</p> <p>The list that you pass with this operation completely replaces the existing list of thumbprints. (The lists are not merged.)</p> <p>Typically, you need to update a thumbprint only when the identity provider&#39;s certificate changes, which occurs rarely. However, if the provider&#39;s certificate <i>does</i> change, any attempt to assume an IAM role that specifies the OIDC provider as a principal fails until the certificate thumbprint is updated.</p> <note> <p>Trust for the OIDC provider is derived from the provider&#39;s certificate and is validated by the thumbprint. Therefore, it is best to limit access to the <code>UpdateOpenIDConnectProviderThumbprint</code> operation to highly privileged users.</p> </note></p>
23159    async fn update_open_id_connect_provider_thumbprint(
23160        &self,
23161        input: UpdateOpenIDConnectProviderThumbprintRequest,
23162    ) -> Result<(), RusotoError<UpdateOpenIDConnectProviderThumbprintError>>;
23163
23164    /// <p>Updates the description or maximum session duration setting of a role.</p>
23165    async fn update_role(
23166        &self,
23167        input: UpdateRoleRequest,
23168    ) -> Result<UpdateRoleResponse, RusotoError<UpdateRoleError>>;
23169
23170    /// <p>Use <a>UpdateRole</a> instead.</p> <p>Modifies only the description of a role. This operation performs the same function as the <code>Description</code> parameter in the <code>UpdateRole</code> operation.</p>
23171    async fn update_role_description(
23172        &self,
23173        input: UpdateRoleDescriptionRequest,
23174    ) -> Result<UpdateRoleDescriptionResponse, RusotoError<UpdateRoleDescriptionError>>;
23175
23176    /// <p><p>Updates the metadata document for an existing SAML provider resource object.</p> <note> <p>This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </note></p>
23177    async fn update_saml_provider(
23178        &self,
23179        input: UpdateSAMLProviderRequest,
23180    ) -> Result<UpdateSAMLProviderResponse, RusotoError<UpdateSAMLProviderError>>;
23181
23182    /// <p>Sets the status of an IAM user's SSH public key to active or inactive. SSH public keys that are inactive cannot be used for authentication. This operation can be used to disable a user's SSH public key as part of a key rotation work flow.</p> <p>The SSH public key affected by this operation is used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p>
23183    async fn update_ssh_public_key(
23184        &self,
23185        input: UpdateSSHPublicKeyRequest,
23186    ) -> Result<(), RusotoError<UpdateSSHPublicKeyError>>;
23187
23188    /// <p><p>Updates the name and/or the path of the specified server certificate stored in IAM.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic also includes a list of AWS services that can use the server certificates that you manage with IAM.</p> <important> <p>You should understand the implications of changing a server certificate&#39;s path or name. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs_manage.html#RenamingServerCerts">Renaming a server certificate</a> in the <i>IAM User Guide</i>.</p> </important> <note> <p>The person making the request (the principal), must have permission to change the server certificate with the old name and the new name. For example, to change the certificate named <code>ProductionCert</code> to <code>ProdCert</code>, the principal must have a policy that allows them to update both certificates. If the principal has permission to update the <code>ProductionCert</code> group, but not the <code>ProdCert</code> certificate, then the update fails. For more information about permissions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html">Access management</a> in the <i>IAM User Guide</i>.</p> </note></p>
23189    async fn update_server_certificate(
23190        &self,
23191        input: UpdateServerCertificateRequest,
23192    ) -> Result<(), RusotoError<UpdateServerCertificateError>>;
23193
23194    /// <p>Sets the status of a service-specific credential to <code>Active</code> or <code>Inactive</code>. Service-specific credentials that are inactive cannot be used for authentication to the service. This operation can be used to disable a user's service-specific credential as part of a credential rotation work flow.</p>
23195    async fn update_service_specific_credential(
23196        &self,
23197        input: UpdateServiceSpecificCredentialRequest,
23198    ) -> Result<(), RusotoError<UpdateServiceSpecificCredentialError>>;
23199
23200    /// <p>Changes the status of the specified user signing certificate from active to disabled, or vice versa. This operation can be used to disable an IAM user's signing certificate as part of a certificate rotation work flow.</p> <p>If the <code>UserName</code> field is not specified, the user name is determined implicitly based on the AWS access key ID used to sign the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p>
23201    async fn update_signing_certificate(
23202        &self,
23203        input: UpdateSigningCertificateRequest,
23204    ) -> Result<(), RusotoError<UpdateSigningCertificateError>>;
23205
23206    /// <p><p>Updates the name and/or the path of the specified IAM user.</p> <important> <p> You should understand the implications of changing an IAM user&#39;s path or name. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_renaming">Renaming an IAM user</a> and <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_rename.html">Renaming an IAM group</a> in the <i>IAM User Guide</i>.</p> </important> <note> <p> To change a user name, the requester must have appropriate permissions on both the source object and the target object. For example, to change Bob to Robert, the entity making the request must have permission on Bob and Robert, or must have permission on all (*). For more information about permissions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/PermissionsAndPolicies.html">Permissions and policies</a>. </p> </note></p>
23207    async fn update_user(
23208        &self,
23209        input: UpdateUserRequest,
23210    ) -> Result<(), RusotoError<UpdateUserError>>;
23211
23212    /// <p>Uploads an SSH public key and associates it with the specified IAM user.</p> <p>The SSH public key uploaded by this operation can be used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p>
23213    async fn upload_ssh_public_key(
23214        &self,
23215        input: UploadSSHPublicKeyRequest,
23216    ) -> Result<UploadSSHPublicKeyResponse, RusotoError<UploadSSHPublicKeyError>>;
23217
23218    /// <p><p>Uploads a server certificate entity for the AWS account. The server certificate entity includes a public key certificate, a private key, and an optional certificate chain, which should all be PEM-encoded.</p> <p>We recommend that you use <a href="https://docs.aws.amazon.com/acm/">AWS Certificate Manager</a> to provision, manage, and deploy your server certificates. With ACM you can request a certificate, deploy it to AWS resources, and let ACM handle certificate renewals for you. Certificates provided by ACM are free. For more information about using ACM, see the <a href="https://docs.aws.amazon.com/acm/latest/userguide/">AWS Certificate Manager User Guide</a>.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic includes a list of AWS services that can use the server certificates that you manage with IAM.</p> <p>For information about the number of server certificates you can upload, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <note> <p>Because the body of the public key certificate, private key, and the certificate chain can be large, you should use POST rather than GET when calling <code>UploadServerCertificate</code>. For information about setting up signatures and authorization through the API, see <a href="https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html">Signing AWS API requests</a> in the <i>AWS General Reference</i>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/programming.html">Calling the API by making HTTP query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
23219    async fn upload_server_certificate(
23220        &self,
23221        input: UploadServerCertificateRequest,
23222    ) -> Result<UploadServerCertificateResponse, RusotoError<UploadServerCertificateError>>;
23223
23224    /// <p><p>Uploads an X.509 signing certificate and associates it with the specified IAM user. Some AWS services require you to use certificates to validate requests that are signed with a corresponding private key. When you upload the certificate, its default status is <code>Active</code>.</p> <p>For information about when you would use an X.509 signing certificate, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Managing server certificates in IAM</a> in the <i>IAM User Guide</i>.</p> <p>If the <code>UserName</code> is not specified, the IAM user name is determined implicitly based on the AWS access key ID used to sign the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p> <note> <p>Because the body of an X.509 certificate can be large, you should use POST rather than GET when calling <code>UploadSigningCertificate</code>. For information about setting up signatures and authorization through the API, see <a href="https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html">Signing AWS API requests</a> in the <i>AWS General Reference</i>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html">Making query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
23225    async fn upload_signing_certificate(
23226        &self,
23227        input: UploadSigningCertificateRequest,
23228    ) -> Result<UploadSigningCertificateResponse, RusotoError<UploadSigningCertificateError>>;
23229}
23230/// A client for the IAM API.
23231#[derive(Clone)]
23232pub struct IamClient {
23233    client: Client,
23234    region: region::Region,
23235}
23236
23237impl IamClient {
23238    /// Creates a client backed by the default tokio event loop.
23239    ///
23240    /// The client will use the default credentials provider and tls client.
23241    pub fn new(region: region::Region) -> IamClient {
23242        IamClient {
23243            client: Client::shared(),
23244            region,
23245        }
23246    }
23247
23248    pub fn new_with<P, D>(
23249        request_dispatcher: D,
23250        credentials_provider: P,
23251        region: region::Region,
23252    ) -> IamClient
23253    where
23254        P: ProvideAwsCredentials + Send + Sync + 'static,
23255        D: DispatchSignedRequest + Send + Sync + 'static,
23256    {
23257        IamClient {
23258            client: Client::new_with(credentials_provider, request_dispatcher),
23259            region,
23260        }
23261    }
23262
23263    pub fn new_with_client(client: Client, region: region::Region) -> IamClient {
23264        IamClient { client, region }
23265    }
23266}
23267
23268#[async_trait]
23269impl Iam for IamClient {
23270    /// <p>Adds a new client ID (also known as audience) to the list of client IDs already registered for the specified IAM OpenID Connect (OIDC) provider resource.</p> <p>This operation is idempotent; it does not fail or return an error if you add an existing client ID to the provider.</p>
23271    async fn add_client_id_to_open_id_connect_provider(
23272        &self,
23273        input: AddClientIDToOpenIDConnectProviderRequest,
23274    ) -> Result<(), RusotoError<AddClientIDToOpenIDConnectProviderError>> {
23275        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23276        let params = self.new_params("AddClientIDToOpenIDConnectProvider");
23277        let mut params = params;
23278        AddClientIDToOpenIDConnectProviderRequestSerializer::serialize(&mut params, "", &input);
23279        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23280        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23281
23282        let response = self
23283            .sign_and_dispatch(
23284                request,
23285                AddClientIDToOpenIDConnectProviderError::from_response,
23286            )
23287            .await?;
23288
23289        std::mem::drop(response);
23290        Ok(())
23291    }
23292
23293    /// <p>Adds the specified IAM role to the specified instance profile. An instance profile can contain only one role, and this quota cannot be increased. You can remove the existing role and then add a different role to an instance profile. You must then wait for the change to appear across all of AWS because of <a href="https://en.wikipedia.org/wiki/Eventual_consistency">eventual consistency</a>. To force the change, you must <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html">disassociate the instance profile</a> and then <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html">associate the instance profile</a>, or you can stop your instance and then restart it.</p> <note> <p>The caller of this operation must be granted the <code>PassRole</code> permission on the IAM role by a permissions policy.</p> </note> <p>For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>. For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p>
23294    async fn add_role_to_instance_profile(
23295        &self,
23296        input: AddRoleToInstanceProfileRequest,
23297    ) -> Result<(), RusotoError<AddRoleToInstanceProfileError>> {
23298        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23299        let params = self.new_params("AddRoleToInstanceProfile");
23300        let mut params = params;
23301        AddRoleToInstanceProfileRequestSerializer::serialize(&mut params, "", &input);
23302        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23303        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23304
23305        let response = self
23306            .sign_and_dispatch(request, AddRoleToInstanceProfileError::from_response)
23307            .await?;
23308
23309        std::mem::drop(response);
23310        Ok(())
23311    }
23312
23313    /// <p>Adds the specified user to the specified group.</p>
23314    async fn add_user_to_group(
23315        &self,
23316        input: AddUserToGroupRequest,
23317    ) -> Result<(), RusotoError<AddUserToGroupError>> {
23318        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23319        let params = self.new_params("AddUserToGroup");
23320        let mut params = params;
23321        AddUserToGroupRequestSerializer::serialize(&mut params, "", &input);
23322        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23323        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23324
23325        let response = self
23326            .sign_and_dispatch(request, AddUserToGroupError::from_response)
23327            .await?;
23328
23329        std::mem::drop(response);
23330        Ok(())
23331    }
23332
23333    /// <p>Attaches the specified managed policy to the specified IAM group.</p> <p>You use this operation to attach a managed policy to a group. To embed an inline policy in a group, use <a>PutGroupPolicy</a>.</p> <p>As a best practice, you can validate your IAM policies. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html">Validating IAM policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
23334    async fn attach_group_policy(
23335        &self,
23336        input: AttachGroupPolicyRequest,
23337    ) -> Result<(), RusotoError<AttachGroupPolicyError>> {
23338        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23339        let params = self.new_params("AttachGroupPolicy");
23340        let mut params = params;
23341        AttachGroupPolicyRequestSerializer::serialize(&mut params, "", &input);
23342        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23343        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23344
23345        let response = self
23346            .sign_and_dispatch(request, AttachGroupPolicyError::from_response)
23347            .await?;
23348
23349        std::mem::drop(response);
23350        Ok(())
23351    }
23352
23353    /// <p>Attaches the specified managed policy to the specified IAM role. When you attach a managed policy to a role, the managed policy becomes part of the role's permission (access) policy.</p> <note> <p>You cannot use a managed policy as the role's trust policy. The role's trust policy is created at the same time as the role, using <a>CreateRole</a>. You can update a role's trust policy using <a>UpdateAssumeRolePolicy</a>.</p> </note> <p>Use this operation to attach a <i>managed</i> policy to a role. To embed an inline policy in a role, use <a>PutRolePolicy</a>. For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>As a best practice, you can validate your IAM policies. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html">Validating IAM policies</a> in the <i>IAM User Guide</i>.</p>
23354    async fn attach_role_policy(
23355        &self,
23356        input: AttachRolePolicyRequest,
23357    ) -> Result<(), RusotoError<AttachRolePolicyError>> {
23358        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23359        let params = self.new_params("AttachRolePolicy");
23360        let mut params = params;
23361        AttachRolePolicyRequestSerializer::serialize(&mut params, "", &input);
23362        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23363        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23364
23365        let response = self
23366            .sign_and_dispatch(request, AttachRolePolicyError::from_response)
23367            .await?;
23368
23369        std::mem::drop(response);
23370        Ok(())
23371    }
23372
23373    /// <p>Attaches the specified managed policy to the specified user.</p> <p>You use this operation to attach a <i>managed</i> policy to a user. To embed an inline policy in a user, use <a>PutUserPolicy</a>.</p> <p>As a best practice, you can validate your IAM policies. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html">Validating IAM policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
23374    async fn attach_user_policy(
23375        &self,
23376        input: AttachUserPolicyRequest,
23377    ) -> Result<(), RusotoError<AttachUserPolicyError>> {
23378        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23379        let params = self.new_params("AttachUserPolicy");
23380        let mut params = params;
23381        AttachUserPolicyRequestSerializer::serialize(&mut params, "", &input);
23382        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23383        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23384
23385        let response = self
23386            .sign_and_dispatch(request, AttachUserPolicyError::from_response)
23387            .await?;
23388
23389        std::mem::drop(response);
23390        Ok(())
23391    }
23392
23393    /// <p>Changes the password of the IAM user who is calling this operation. This operation can be performed using the AWS CLI, the AWS API, or the <b>My Security Credentials</b> page in the AWS Management Console. The AWS account root user password is not affected by this operation.</p> <p>Use <a>UpdateLoginProfile</a> to use the AWS CLI, the AWS API, or the <b>Users</b> page in the IAM console to change the password for any IAM user. For more information about modifying passwords, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html">Managing passwords</a> in the <i>IAM User Guide</i>.</p>
23394    async fn change_password(
23395        &self,
23396        input: ChangePasswordRequest,
23397    ) -> Result<(), RusotoError<ChangePasswordError>> {
23398        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23399        let params = self.new_params("ChangePassword");
23400        let mut params = params;
23401        ChangePasswordRequestSerializer::serialize(&mut params, "", &input);
23402        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23403        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23404
23405        let response = self
23406            .sign_and_dispatch(request, ChangePasswordError::from_response)
23407            .await?;
23408
23409        std::mem::drop(response);
23410        Ok(())
23411    }
23412
23413    /// <p><p> Creates a new AWS secret access key and corresponding AWS access key ID for the specified user. The default status for new keys is <code>Active</code>.</p> <p>If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID signing the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials. This is true even if the AWS account has no associated users.</p> <p> For information about quotas on the number of keys you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <important> <p>To ensure the security of your AWS account, the secret access key is accessible only during key and user creation. You must save the key (for example, in a text file) if you want to be able to access it again. If a secret key is lost, you can delete the access keys for the associated user and then create new keys.</p> </important></p>
23414    async fn create_access_key(
23415        &self,
23416        input: CreateAccessKeyRequest,
23417    ) -> Result<CreateAccessKeyResponse, RusotoError<CreateAccessKeyError>> {
23418        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23419        let params = self.new_params("CreateAccessKey");
23420        let mut params = params;
23421        CreateAccessKeyRequestSerializer::serialize(&mut params, "", &input);
23422        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23423        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23424
23425        let response = self
23426            .sign_and_dispatch(request, CreateAccessKeyError::from_response)
23427            .await?;
23428
23429        let mut response = response;
23430        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23431            xml_util::start_element(actual_tag_name, stack)?;
23432            let result =
23433                CreateAccessKeyResponseDeserializer::deserialize("CreateAccessKeyResult", stack)?;
23434            skip_tree(stack);
23435            xml_util::end_element(actual_tag_name, stack)?;
23436            Ok(result)
23437        })
23438        .await?;
23439
23440        drop(response); // parse non-payload
23441        Ok(result)
23442    }
23443
23444    /// <p>Creates an alias for your AWS account. For information about using an AWS account alias, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AccountAlias.html">Using an alias for your AWS account ID</a> in the <i>IAM User Guide</i>.</p>
23445    async fn create_account_alias(
23446        &self,
23447        input: CreateAccountAliasRequest,
23448    ) -> Result<(), RusotoError<CreateAccountAliasError>> {
23449        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23450        let params = self.new_params("CreateAccountAlias");
23451        let mut params = params;
23452        CreateAccountAliasRequestSerializer::serialize(&mut params, "", &input);
23453        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23454        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23455
23456        let response = self
23457            .sign_and_dispatch(request, CreateAccountAliasError::from_response)
23458            .await?;
23459
23460        std::mem::drop(response);
23461        Ok(())
23462    }
23463
23464    /// <p>Creates a new group.</p> <p> For information about the number of groups you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p>
23465    async fn create_group(
23466        &self,
23467        input: CreateGroupRequest,
23468    ) -> Result<CreateGroupResponse, RusotoError<CreateGroupError>> {
23469        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23470        let params = self.new_params("CreateGroup");
23471        let mut params = params;
23472        CreateGroupRequestSerializer::serialize(&mut params, "", &input);
23473        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23474        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23475
23476        let response = self
23477            .sign_and_dispatch(request, CreateGroupError::from_response)
23478            .await?;
23479
23480        let mut response = response;
23481        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23482            xml_util::start_element(actual_tag_name, stack)?;
23483            let result = CreateGroupResponseDeserializer::deserialize("CreateGroupResult", stack)?;
23484            skip_tree(stack);
23485            xml_util::end_element(actual_tag_name, stack)?;
23486            Ok(result)
23487        })
23488        .await?;
23489
23490        drop(response); // parse non-payload
23491        Ok(result)
23492    }
23493
23494    /// <p> Creates a new instance profile. For information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html">Using roles for applications on Amazon EC2</a> in the <i>IAM User Guide</i>, and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#ec2-instance-profile">Instance profiles</a> in the <i>Amazon EC2 User Guide</i>.</p> <p> For information about the number of instance profiles you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM object quotas</a> in the <i>IAM User Guide</i>.</p>
23495    async fn create_instance_profile(
23496        &self,
23497        input: CreateInstanceProfileRequest,
23498    ) -> Result<CreateInstanceProfileResponse, RusotoError<CreateInstanceProfileError>> {
23499        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23500        let params = self.new_params("CreateInstanceProfile");
23501        let mut params = params;
23502        CreateInstanceProfileRequestSerializer::serialize(&mut params, "", &input);
23503        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23504        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23505
23506        let response = self
23507            .sign_and_dispatch(request, CreateInstanceProfileError::from_response)
23508            .await?;
23509
23510        let mut response = response;
23511        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23512            xml_util::start_element(actual_tag_name, stack)?;
23513            let result = CreateInstanceProfileResponseDeserializer::deserialize(
23514                "CreateInstanceProfileResult",
23515                stack,
23516            )?;
23517            skip_tree(stack);
23518            xml_util::end_element(actual_tag_name, stack)?;
23519            Ok(result)
23520        })
23521        .await?;
23522
23523        drop(response); // parse non-payload
23524        Ok(result)
23525    }
23526
23527    /// <p>Creates a password for the specified IAM user. A password allows an IAM user to access AWS services through the AWS Management Console.</p> <p>You can use the AWS CLI, the AWS API, or the <b>Users</b> page in the IAM console to create a password for any IAM user. Use <a>ChangePassword</a> to update your own existing password in the <b>My Security Credentials</b> page in the AWS Management Console.</p> <p>For more information about managing passwords, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html">Managing passwords</a> in the <i>IAM User Guide</i>.</p>
23528    async fn create_login_profile(
23529        &self,
23530        input: CreateLoginProfileRequest,
23531    ) -> Result<CreateLoginProfileResponse, RusotoError<CreateLoginProfileError>> {
23532        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23533        let params = self.new_params("CreateLoginProfile");
23534        let mut params = params;
23535        CreateLoginProfileRequestSerializer::serialize(&mut params, "", &input);
23536        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23537        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23538
23539        let response = self
23540            .sign_and_dispatch(request, CreateLoginProfileError::from_response)
23541            .await?;
23542
23543        let mut response = response;
23544        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23545            xml_util::start_element(actual_tag_name, stack)?;
23546            let result = CreateLoginProfileResponseDeserializer::deserialize(
23547                "CreateLoginProfileResult",
23548                stack,
23549            )?;
23550            skip_tree(stack);
23551            xml_util::end_element(actual_tag_name, stack)?;
23552            Ok(result)
23553        })
23554        .await?;
23555
23556        drop(response); // parse non-payload
23557        Ok(result)
23558    }
23559
23560    /// <p><p>Creates an IAM entity to describe an identity provider (IdP) that supports <a href="http://openid.net/connect/">OpenID Connect (OIDC)</a>.</p> <p>The OIDC provider that you create with this operation can be used as a principal in a role&#39;s trust policy. Such a policy establishes a trust relationship between AWS and the OIDC provider.</p> <p>If you are using an OIDC identity provider from Google, Facebook, or Amazon Cognito, you don&#39;t need to create a separate IAM identity provider. These OIDC identity providers are already built-in to AWS and are available for your use. Instead, you can move directly to creating new roles using your identity provider. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html">Creating a role for web identity or OpenID connect federation</a> in the <i>IAM User Guide</i>.</p> <p>When you create the IAM OIDC provider, you specify the following:</p> <ul> <li> <p>The URL of the OIDC identity provider (IdP) to trust</p> </li> <li> <p>A list of client IDs (also known as audiences) that identify the application or applications that are allowed to authenticate using the OIDC provider</p> </li> <li> <p>A list of thumbprints of one or more server certificates that the IdP uses</p> </li> </ul> <p>You get all of this information from the OIDC IdP that you want to use to access AWS.</p> <note> <p>The trust for the OIDC provider is derived from the IAM provider that this operation creates. Therefore, it is best to limit access to the <a>CreateOpenIDConnectProvider</a> operation to highly privileged users.</p> </note></p>
23561    async fn create_open_id_connect_provider(
23562        &self,
23563        input: CreateOpenIDConnectProviderRequest,
23564    ) -> Result<CreateOpenIDConnectProviderResponse, RusotoError<CreateOpenIDConnectProviderError>>
23565    {
23566        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23567        let params = self.new_params("CreateOpenIDConnectProvider");
23568        let mut params = params;
23569        CreateOpenIDConnectProviderRequestSerializer::serialize(&mut params, "", &input);
23570        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23571        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23572
23573        let response = self
23574            .sign_and_dispatch(request, CreateOpenIDConnectProviderError::from_response)
23575            .await?;
23576
23577        let mut response = response;
23578        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23579            xml_util::start_element(actual_tag_name, stack)?;
23580            let result = CreateOpenIDConnectProviderResponseDeserializer::deserialize(
23581                "CreateOpenIDConnectProviderResult",
23582                stack,
23583            )?;
23584            skip_tree(stack);
23585            xml_util::end_element(actual_tag_name, stack)?;
23586            Ok(result)
23587        })
23588        .await?;
23589
23590        drop(response); // parse non-payload
23591        Ok(result)
23592    }
23593
23594    /// <p>Creates a new managed policy for your AWS account.</p> <p>This operation creates a policy version with a version identifier of <code>v1</code> and sets v1 as the policy's default version. For more information about policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p> <p>As a best practice, you can validate your IAM policies. To learn more, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html">Validating IAM policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about managed policies in general, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
23595    async fn create_policy(
23596        &self,
23597        input: CreatePolicyRequest,
23598    ) -> Result<CreatePolicyResponse, RusotoError<CreatePolicyError>> {
23599        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23600        let params = self.new_params("CreatePolicy");
23601        let mut params = params;
23602        CreatePolicyRequestSerializer::serialize(&mut params, "", &input);
23603        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23604        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23605
23606        let response = self
23607            .sign_and_dispatch(request, CreatePolicyError::from_response)
23608            .await?;
23609
23610        let mut response = response;
23611        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23612            xml_util::start_element(actual_tag_name, stack)?;
23613            let result =
23614                CreatePolicyResponseDeserializer::deserialize("CreatePolicyResult", stack)?;
23615            skip_tree(stack);
23616            xml_util::end_element(actual_tag_name, stack)?;
23617            Ok(result)
23618        })
23619        .await?;
23620
23621        drop(response); // parse non-payload
23622        Ok(result)
23623    }
23624
23625    /// <p>Creates a new version of the specified managed policy. To update a managed policy, you create a new policy version. A managed policy can have up to five versions. If the policy has five versions, you must delete an existing version using <a>DeletePolicyVersion</a> before you create a new version.</p> <p>Optionally, you can set the new version as the policy's default version. The default version is the version that is in effect for the IAM users, groups, and roles to which the policy is attached.</p> <p>For more information about managed policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
23626    async fn create_policy_version(
23627        &self,
23628        input: CreatePolicyVersionRequest,
23629    ) -> Result<CreatePolicyVersionResponse, RusotoError<CreatePolicyVersionError>> {
23630        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23631        let params = self.new_params("CreatePolicyVersion");
23632        let mut params = params;
23633        CreatePolicyVersionRequestSerializer::serialize(&mut params, "", &input);
23634        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23635        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23636
23637        let response = self
23638            .sign_and_dispatch(request, CreatePolicyVersionError::from_response)
23639            .await?;
23640
23641        let mut response = response;
23642        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23643            xml_util::start_element(actual_tag_name, stack)?;
23644            let result = CreatePolicyVersionResponseDeserializer::deserialize(
23645                "CreatePolicyVersionResult",
23646                stack,
23647            )?;
23648            skip_tree(stack);
23649            xml_util::end_element(actual_tag_name, stack)?;
23650            Ok(result)
23651        })
23652        .await?;
23653
23654        drop(response); // parse non-payload
23655        Ok(result)
23656    }
23657
23658    /// <p>Creates a new role for your AWS account. For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">IAM roles</a>. For information about quotas for role names and the number of roles you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p>
23659    async fn create_role(
23660        &self,
23661        input: CreateRoleRequest,
23662    ) -> Result<CreateRoleResponse, RusotoError<CreateRoleError>> {
23663        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23664        let params = self.new_params("CreateRole");
23665        let mut params = params;
23666        CreateRoleRequestSerializer::serialize(&mut params, "", &input);
23667        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23668        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23669
23670        let response = self
23671            .sign_and_dispatch(request, CreateRoleError::from_response)
23672            .await?;
23673
23674        let mut response = response;
23675        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23676            xml_util::start_element(actual_tag_name, stack)?;
23677            let result = CreateRoleResponseDeserializer::deserialize("CreateRoleResult", stack)?;
23678            skip_tree(stack);
23679            xml_util::end_element(actual_tag_name, stack)?;
23680            Ok(result)
23681        })
23682        .await?;
23683
23684        drop(response); // parse non-payload
23685        Ok(result)
23686    }
23687
23688    /// <p>Creates an IAM resource that describes an identity provider (IdP) that supports SAML 2.0.</p> <p>The SAML provider resource that you create with this operation can be used as a principal in an IAM role's trust policy. Such a policy can enable federated users who sign in using the SAML IdP to assume the role. You can create an IAM role that supports Web-based single sign-on (SSO) to the AWS Management Console or one that supports API access to AWS.</p> <p>When you create the SAML provider resource, you upload a SAML metadata document that you get from your IdP. That document includes the issuer's name, expiration information, and keys that can be used to validate the SAML authentication response (assertions) that the IdP sends. You must generate the metadata document using the identity management software that is used as your organization's IdP.</p> <note> <p> This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </note> <p> For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-saml.html">Enabling SAML 2.0 federated users to access the AWS Management Console</a> and <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html">About SAML 2.0-based federation</a> in the <i>IAM User Guide</i>.</p>
23689    async fn create_saml_provider(
23690        &self,
23691        input: CreateSAMLProviderRequest,
23692    ) -> Result<CreateSAMLProviderResponse, RusotoError<CreateSAMLProviderError>> {
23693        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23694        let params = self.new_params("CreateSAMLProvider");
23695        let mut params = params;
23696        CreateSAMLProviderRequestSerializer::serialize(&mut params, "", &input);
23697        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23698        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23699
23700        let response = self
23701            .sign_and_dispatch(request, CreateSAMLProviderError::from_response)
23702            .await?;
23703
23704        let mut response = response;
23705        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23706            xml_util::start_element(actual_tag_name, stack)?;
23707            let result = CreateSAMLProviderResponseDeserializer::deserialize(
23708                "CreateSAMLProviderResult",
23709                stack,
23710            )?;
23711            skip_tree(stack);
23712            xml_util::end_element(actual_tag_name, stack)?;
23713            Ok(result)
23714        })
23715        .await?;
23716
23717        drop(response); // parse non-payload
23718        Ok(result)
23719    }
23720
23721    /// <p>Creates an IAM role that is linked to a specific AWS service. The service controls the attached policies and when the role can be deleted. This helps ensure that the service is not broken by an unexpectedly changed or deleted role, which could put your AWS resources into an unknown state. Allowing the service to control the role helps improve service stability and proper cleanup when a service and its role are no longer needed. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html">Using service-linked roles</a> in the <i>IAM User Guide</i>. </p> <p>To attach a policy to this service-linked role, you must make the request using the AWS service that depends on this role.</p>
23722    async fn create_service_linked_role(
23723        &self,
23724        input: CreateServiceLinkedRoleRequest,
23725    ) -> Result<CreateServiceLinkedRoleResponse, RusotoError<CreateServiceLinkedRoleError>> {
23726        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23727        let params = self.new_params("CreateServiceLinkedRole");
23728        let mut params = params;
23729        CreateServiceLinkedRoleRequestSerializer::serialize(&mut params, "", &input);
23730        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23731        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23732
23733        let response = self
23734            .sign_and_dispatch(request, CreateServiceLinkedRoleError::from_response)
23735            .await?;
23736
23737        let mut response = response;
23738        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23739            xml_util::start_element(actual_tag_name, stack)?;
23740            let result = CreateServiceLinkedRoleResponseDeserializer::deserialize(
23741                "CreateServiceLinkedRoleResult",
23742                stack,
23743            )?;
23744            skip_tree(stack);
23745            xml_util::end_element(actual_tag_name, stack)?;
23746            Ok(result)
23747        })
23748        .await?;
23749
23750        drop(response); // parse non-payload
23751        Ok(result)
23752    }
23753
23754    /// <p>Generates a set of credentials consisting of a user name and password that can be used to access the service specified in the request. These credentials are generated by IAM, and can be used only for the specified service. </p> <p>You can have a maximum of two sets of service-specific credentials for each supported service per user.</p> <p>You can create service-specific credentials for AWS CodeCommit and Amazon Keyspaces (for Apache Cassandra).</p> <p>You can reset the password to a new service-generated value by calling <a>ResetServiceSpecificCredential</a>.</p> <p>For more information about service-specific credentials, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_ssh-keys.html">Using IAM with AWS CodeCommit: Git credentials, SSH keys, and AWS access keys</a> in the <i>IAM User Guide</i>.</p>
23755    async fn create_service_specific_credential(
23756        &self,
23757        input: CreateServiceSpecificCredentialRequest,
23758    ) -> Result<
23759        CreateServiceSpecificCredentialResponse,
23760        RusotoError<CreateServiceSpecificCredentialError>,
23761    > {
23762        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23763        let params = self.new_params("CreateServiceSpecificCredential");
23764        let mut params = params;
23765        CreateServiceSpecificCredentialRequestSerializer::serialize(&mut params, "", &input);
23766        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23767        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23768
23769        let response = self
23770            .sign_and_dispatch(request, CreateServiceSpecificCredentialError::from_response)
23771            .await?;
23772
23773        let mut response = response;
23774        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23775            xml_util::start_element(actual_tag_name, stack)?;
23776            let result = CreateServiceSpecificCredentialResponseDeserializer::deserialize(
23777                "CreateServiceSpecificCredentialResult",
23778                stack,
23779            )?;
23780            skip_tree(stack);
23781            xml_util::end_element(actual_tag_name, stack)?;
23782            Ok(result)
23783        })
23784        .await?;
23785
23786        drop(response); // parse non-payload
23787        Ok(result)
23788    }
23789
23790    /// <p>Creates a new IAM user for your AWS account.</p> <p> For information about quotas for the number of IAM users you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p>
23791    async fn create_user(
23792        &self,
23793        input: CreateUserRequest,
23794    ) -> Result<CreateUserResponse, RusotoError<CreateUserError>> {
23795        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23796        let params = self.new_params("CreateUser");
23797        let mut params = params;
23798        CreateUserRequestSerializer::serialize(&mut params, "", &input);
23799        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23800        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23801
23802        let response = self
23803            .sign_and_dispatch(request, CreateUserError::from_response)
23804            .await?;
23805
23806        let mut response = response;
23807        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23808            xml_util::start_element(actual_tag_name, stack)?;
23809            let result = CreateUserResponseDeserializer::deserialize("CreateUserResult", stack)?;
23810            skip_tree(stack);
23811            xml_util::end_element(actual_tag_name, stack)?;
23812            Ok(result)
23813        })
23814        .await?;
23815
23816        drop(response); // parse non-payload
23817        Ok(result)
23818    }
23819
23820    /// <p><p>Creates a new virtual MFA device for the AWS account. After creating the virtual MFA, use <a>EnableMFADevice</a> to attach the MFA device to an IAM user. For more information about creating and working with virtual MFA devices, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_VirtualMFA.html">Using a virtual MFA device</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of MFA devices you can create, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <important> <p>The seed information contained in the QR code and the Base32 string should be treated like any other secret access information. In other words, protect the seed information as you would your AWS access keys or your passwords. After you provision your virtual device, you should ensure that the information is destroyed following secure procedures.</p> </important></p>
23821    async fn create_virtual_mfa_device(
23822        &self,
23823        input: CreateVirtualMFADeviceRequest,
23824    ) -> Result<CreateVirtualMFADeviceResponse, RusotoError<CreateVirtualMFADeviceError>> {
23825        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23826        let params = self.new_params("CreateVirtualMFADevice");
23827        let mut params = params;
23828        CreateVirtualMFADeviceRequestSerializer::serialize(&mut params, "", &input);
23829        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23830        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23831
23832        let response = self
23833            .sign_and_dispatch(request, CreateVirtualMFADeviceError::from_response)
23834            .await?;
23835
23836        let mut response = response;
23837        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
23838            xml_util::start_element(actual_tag_name, stack)?;
23839            let result = CreateVirtualMFADeviceResponseDeserializer::deserialize(
23840                "CreateVirtualMFADeviceResult",
23841                stack,
23842            )?;
23843            skip_tree(stack);
23844            xml_util::end_element(actual_tag_name, stack)?;
23845            Ok(result)
23846        })
23847        .await?;
23848
23849        drop(response); // parse non-payload
23850        Ok(result)
23851    }
23852
23853    /// <p>Deactivates the specified MFA device and removes it from association with the user name for which it was originally enabled.</p> <p>For more information about creating and working with virtual MFA devices, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_VirtualMFA.html">Enabling a virtual multi-factor authentication (MFA) device</a> in the <i>IAM User Guide</i>.</p>
23854    async fn deactivate_mfa_device(
23855        &self,
23856        input: DeactivateMFADeviceRequest,
23857    ) -> Result<(), RusotoError<DeactivateMFADeviceError>> {
23858        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23859        let params = self.new_params("DeactivateMFADevice");
23860        let mut params = params;
23861        DeactivateMFADeviceRequestSerializer::serialize(&mut params, "", &input);
23862        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23863        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23864
23865        let response = self
23866            .sign_and_dispatch(request, DeactivateMFADeviceError::from_response)
23867            .await?;
23868
23869        std::mem::drop(response);
23870        Ok(())
23871    }
23872
23873    /// <p>Deletes the access key pair associated with the specified IAM user.</p> <p>If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID signing the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p>
23874    async fn delete_access_key(
23875        &self,
23876        input: DeleteAccessKeyRequest,
23877    ) -> Result<(), RusotoError<DeleteAccessKeyError>> {
23878        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23879        let params = self.new_params("DeleteAccessKey");
23880        let mut params = params;
23881        DeleteAccessKeyRequestSerializer::serialize(&mut params, "", &input);
23882        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23883        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23884
23885        let response = self
23886            .sign_and_dispatch(request, DeleteAccessKeyError::from_response)
23887            .await?;
23888
23889        std::mem::drop(response);
23890        Ok(())
23891    }
23892
23893    /// <p> Deletes the specified AWS account alias. For information about using an AWS account alias, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AccountAlias.html">Using an alias for your AWS account ID</a> in the <i>IAM User Guide</i>.</p>
23894    async fn delete_account_alias(
23895        &self,
23896        input: DeleteAccountAliasRequest,
23897    ) -> Result<(), RusotoError<DeleteAccountAliasError>> {
23898        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23899        let params = self.new_params("DeleteAccountAlias");
23900        let mut params = params;
23901        DeleteAccountAliasRequestSerializer::serialize(&mut params, "", &input);
23902        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23903        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23904
23905        let response = self
23906            .sign_and_dispatch(request, DeleteAccountAliasError::from_response)
23907            .await?;
23908
23909        std::mem::drop(response);
23910        Ok(())
23911    }
23912
23913    /// <p>Deletes the password policy for the AWS account. There are no parameters.</p>
23914    async fn delete_account_password_policy(
23915        &self,
23916    ) -> Result<(), RusotoError<DeleteAccountPasswordPolicyError>> {
23917        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23918        let params = self.new_params("DeleteAccountPasswordPolicy");
23919
23920        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23921        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23922
23923        let response = self
23924            .sign_and_dispatch(request, DeleteAccountPasswordPolicyError::from_response)
23925            .await?;
23926
23927        std::mem::drop(response);
23928        Ok(())
23929    }
23930
23931    /// <p>Deletes the specified IAM group. The group must not contain any users or have any attached policies.</p>
23932    async fn delete_group(
23933        &self,
23934        input: DeleteGroupRequest,
23935    ) -> Result<(), RusotoError<DeleteGroupError>> {
23936        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23937        let params = self.new_params("DeleteGroup");
23938        let mut params = params;
23939        DeleteGroupRequestSerializer::serialize(&mut params, "", &input);
23940        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23941        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23942
23943        let response = self
23944            .sign_and_dispatch(request, DeleteGroupError::from_response)
23945            .await?;
23946
23947        std::mem::drop(response);
23948        Ok(())
23949    }
23950
23951    /// <p>Deletes the specified inline policy that is embedded in the specified IAM group.</p> <p>A group can also have managed policies attached to it. To detach a managed policy from a group, use <a>DetachGroupPolicy</a>. For more information about policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
23952    async fn delete_group_policy(
23953        &self,
23954        input: DeleteGroupPolicyRequest,
23955    ) -> Result<(), RusotoError<DeleteGroupPolicyError>> {
23956        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23957        let params = self.new_params("DeleteGroupPolicy");
23958        let mut params = params;
23959        DeleteGroupPolicyRequestSerializer::serialize(&mut params, "", &input);
23960        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23961        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23962
23963        let response = self
23964            .sign_and_dispatch(request, DeleteGroupPolicyError::from_response)
23965            .await?;
23966
23967        std::mem::drop(response);
23968        Ok(())
23969    }
23970
23971    /// <p>Deletes the specified instance profile. The instance profile must not have an associated role.</p> <important> <p>Make sure that you do not have any Amazon EC2 instances running with the instance profile you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance.</p> </important> <p>For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p>
23972    async fn delete_instance_profile(
23973        &self,
23974        input: DeleteInstanceProfileRequest,
23975    ) -> Result<(), RusotoError<DeleteInstanceProfileError>> {
23976        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23977        let params = self.new_params("DeleteInstanceProfile");
23978        let mut params = params;
23979        DeleteInstanceProfileRequestSerializer::serialize(&mut params, "", &input);
23980        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
23981        request.set_content_type("application/x-www-form-urlencoded".to_owned());
23982
23983        let response = self
23984            .sign_and_dispatch(request, DeleteInstanceProfileError::from_response)
23985            .await?;
23986
23987        std::mem::drop(response);
23988        Ok(())
23989    }
23990
23991    /// <p><p>Deletes the password for the specified IAM user, which terminates the user&#39;s ability to access AWS services through the AWS Management Console.</p> <p>You can use the AWS CLI, the AWS API, or the <b>Users</b> page in the IAM console to delete a password for any IAM user. You can use <a>ChangePassword</a> to update, but not delete, your own password in the <b>My Security Credentials</b> page in the AWS Management Console.</p> <important> <p> Deleting a user&#39;s password does not prevent a user from accessing AWS through the command line interface or the API. To prevent all user access, you must also either make any access keys inactive or delete them. For more information about making keys inactive or deleting them, see <a>UpdateAccessKey</a> and <a>DeleteAccessKey</a>. </p> </important></p>
23992    async fn delete_login_profile(
23993        &self,
23994        input: DeleteLoginProfileRequest,
23995    ) -> Result<(), RusotoError<DeleteLoginProfileError>> {
23996        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
23997        let params = self.new_params("DeleteLoginProfile");
23998        let mut params = params;
23999        DeleteLoginProfileRequestSerializer::serialize(&mut params, "", &input);
24000        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24001        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24002
24003        let response = self
24004            .sign_and_dispatch(request, DeleteLoginProfileError::from_response)
24005            .await?;
24006
24007        std::mem::drop(response);
24008        Ok(())
24009    }
24010
24011    /// <p>Deletes an OpenID Connect identity provider (IdP) resource object in IAM.</p> <p>Deleting an IAM OIDC provider resource does not update any roles that reference the provider as a principal in their trust policies. Any attempt to assume a role that references a deleted provider fails.</p> <p>This operation is idempotent; it does not fail or return an error if you call the operation for a provider that does not exist.</p>
24012    async fn delete_open_id_connect_provider(
24013        &self,
24014        input: DeleteOpenIDConnectProviderRequest,
24015    ) -> Result<(), RusotoError<DeleteOpenIDConnectProviderError>> {
24016        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24017        let params = self.new_params("DeleteOpenIDConnectProvider");
24018        let mut params = params;
24019        DeleteOpenIDConnectProviderRequestSerializer::serialize(&mut params, "", &input);
24020        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24021        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24022
24023        let response = self
24024            .sign_and_dispatch(request, DeleteOpenIDConnectProviderError::from_response)
24025            .await?;
24026
24027        std::mem::drop(response);
24028        Ok(())
24029    }
24030
24031    /// <p>Deletes the specified managed policy.</p> <p>Before you can delete a managed policy, you must first detach the policy from all users, groups, and roles that it is attached to. In addition, you must delete all the policy's versions. The following steps describe the process for deleting a managed policy:</p> <ul> <li> <p>Detach the policy from all users, groups, and roles that the policy is attached to, using <a>DetachUserPolicy</a>, <a>DetachGroupPolicy</a>, or <a>DetachRolePolicy</a>. To list all the users, groups, and roles that a policy is attached to, use <a>ListEntitiesForPolicy</a>.</p> </li> <li> <p>Delete all versions of the policy using <a>DeletePolicyVersion</a>. To list the policy's versions, use <a>ListPolicyVersions</a>. You cannot use <a>DeletePolicyVersion</a> to delete the version that is marked as the default version. You delete the policy's default version in the next step of the process.</p> </li> <li> <p>Delete the policy (this automatically deletes the policy's default version) using this operation.</p> </li> </ul> <p>For information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
24032    async fn delete_policy(
24033        &self,
24034        input: DeletePolicyRequest,
24035    ) -> Result<(), RusotoError<DeletePolicyError>> {
24036        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24037        let params = self.new_params("DeletePolicy");
24038        let mut params = params;
24039        DeletePolicyRequestSerializer::serialize(&mut params, "", &input);
24040        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24041        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24042
24043        let response = self
24044            .sign_and_dispatch(request, DeletePolicyError::from_response)
24045            .await?;
24046
24047        std::mem::drop(response);
24048        Ok(())
24049    }
24050
24051    /// <p>Deletes the specified version from the specified managed policy.</p> <p>You cannot delete the default version from a policy using this operation. To delete the default version from a policy, use <a>DeletePolicy</a>. To find out which version of a policy is marked as the default version, use <a>ListPolicyVersions</a>.</p> <p>For information about versions for managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
24052    async fn delete_policy_version(
24053        &self,
24054        input: DeletePolicyVersionRequest,
24055    ) -> Result<(), RusotoError<DeletePolicyVersionError>> {
24056        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24057        let params = self.new_params("DeletePolicyVersion");
24058        let mut params = params;
24059        DeletePolicyVersionRequestSerializer::serialize(&mut params, "", &input);
24060        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24061        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24062
24063        let response = self
24064            .sign_and_dispatch(request, DeletePolicyVersionError::from_response)
24065            .await?;
24066
24067        std::mem::drop(response);
24068        Ok(())
24069    }
24070
24071    /// <p><p>Deletes the specified role. The role must not have any policies attached. For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>.</p> <important> <p>Make sure that you do not have any Amazon EC2 instances running with the role you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance.</p> </important></p>
24072    async fn delete_role(
24073        &self,
24074        input: DeleteRoleRequest,
24075    ) -> Result<(), RusotoError<DeleteRoleError>> {
24076        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24077        let params = self.new_params("DeleteRole");
24078        let mut params = params;
24079        DeleteRoleRequestSerializer::serialize(&mut params, "", &input);
24080        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24081        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24082
24083        let response = self
24084            .sign_and_dispatch(request, DeleteRoleError::from_response)
24085            .await?;
24086
24087        std::mem::drop(response);
24088        Ok(())
24089    }
24090
24091    /// <p><p>Deletes the permissions boundary for the specified IAM role. </p> <important> <p>Deleting the permissions boundary for a role might increase its permissions. For example, it might allow anyone who assumes the role to perform all the actions granted in its permissions policies. </p> </important></p>
24092    async fn delete_role_permissions_boundary(
24093        &self,
24094        input: DeleteRolePermissionsBoundaryRequest,
24095    ) -> Result<(), RusotoError<DeleteRolePermissionsBoundaryError>> {
24096        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24097        let params = self.new_params("DeleteRolePermissionsBoundary");
24098        let mut params = params;
24099        DeleteRolePermissionsBoundaryRequestSerializer::serialize(&mut params, "", &input);
24100        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24101        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24102
24103        let response = self
24104            .sign_and_dispatch(request, DeleteRolePermissionsBoundaryError::from_response)
24105            .await?;
24106
24107        std::mem::drop(response);
24108        Ok(())
24109    }
24110
24111    /// <p>Deletes the specified inline policy that is embedded in the specified IAM role.</p> <p>A role can also have managed policies attached to it. To detach a managed policy from a role, use <a>DetachRolePolicy</a>. For more information about policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
24112    async fn delete_role_policy(
24113        &self,
24114        input: DeleteRolePolicyRequest,
24115    ) -> Result<(), RusotoError<DeleteRolePolicyError>> {
24116        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24117        let params = self.new_params("DeleteRolePolicy");
24118        let mut params = params;
24119        DeleteRolePolicyRequestSerializer::serialize(&mut params, "", &input);
24120        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24121        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24122
24123        let response = self
24124            .sign_and_dispatch(request, DeleteRolePolicyError::from_response)
24125            .await?;
24126
24127        std::mem::drop(response);
24128        Ok(())
24129    }
24130
24131    /// <p><p>Deletes a SAML provider resource in IAM.</p> <p>Deleting the provider resource from IAM does not update any roles that reference the SAML provider resource&#39;s ARN as a principal in their trust policies. Any attempt to assume a role that references a non-existent provider resource ARN fails.</p> <note> <p> This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </note></p>
24132    async fn delete_saml_provider(
24133        &self,
24134        input: DeleteSAMLProviderRequest,
24135    ) -> Result<(), RusotoError<DeleteSAMLProviderError>> {
24136        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24137        let params = self.new_params("DeleteSAMLProvider");
24138        let mut params = params;
24139        DeleteSAMLProviderRequestSerializer::serialize(&mut params, "", &input);
24140        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24141        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24142
24143        let response = self
24144            .sign_and_dispatch(request, DeleteSAMLProviderError::from_response)
24145            .await?;
24146
24147        std::mem::drop(response);
24148        Ok(())
24149    }
24150
24151    /// <p>Deletes the specified SSH public key.</p> <p>The SSH public key deleted by this operation is used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p>
24152    async fn delete_ssh_public_key(
24153        &self,
24154        input: DeleteSSHPublicKeyRequest,
24155    ) -> Result<(), RusotoError<DeleteSSHPublicKeyError>> {
24156        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24157        let params = self.new_params("DeleteSSHPublicKey");
24158        let mut params = params;
24159        DeleteSSHPublicKeyRequestSerializer::serialize(&mut params, "", &input);
24160        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24161        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24162
24163        let response = self
24164            .sign_and_dispatch(request, DeleteSSHPublicKeyError::from_response)
24165            .await?;
24166
24167        std::mem::drop(response);
24168        Ok(())
24169    }
24170
24171    /// <p><p>Deletes the specified server certificate.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic also includes a list of AWS services that can use the server certificates that you manage with IAM.</p> <important> <p> If you are using a server certificate with Elastic Load Balancing, deleting the certificate could have implications for your application. If Elastic Load Balancing doesn&#39;t detect the deletion of bound certificates, it may continue to use the certificates. This could cause Elastic Load Balancing to stop accepting traffic. We recommend that you remove the reference to the certificate from Elastic Load Balancing before using this command to delete the certificate. For more information, see <a href="https://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/API_DeleteLoadBalancerListeners.html">DeleteLoadBalancerListeners</a> in the <i>Elastic Load Balancing API Reference</i>.</p> </important></p>
24172    async fn delete_server_certificate(
24173        &self,
24174        input: DeleteServerCertificateRequest,
24175    ) -> Result<(), RusotoError<DeleteServerCertificateError>> {
24176        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24177        let params = self.new_params("DeleteServerCertificate");
24178        let mut params = params;
24179        DeleteServerCertificateRequestSerializer::serialize(&mut params, "", &input);
24180        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24181        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24182
24183        let response = self
24184            .sign_and_dispatch(request, DeleteServerCertificateError::from_response)
24185            .await?;
24186
24187        std::mem::drop(response);
24188        Ok(())
24189    }
24190
24191    /// <p>Submits a service-linked role deletion request and returns a <code>DeletionTaskId</code>, which you can use to check the status of the deletion. Before you call this operation, confirm that the role has no active sessions and that any resources used by the role in the linked service are deleted. If you call this operation more than once for the same service-linked role and an earlier deletion task is not complete, then the <code>DeletionTaskId</code> of the earlier request is returned.</p> <p>If you submit a deletion request for a service-linked role whose linked service is still accessing a resource, then the deletion task fails. If it fails, the <a>GetServiceLinkedRoleDeletionStatus</a> operation returns the reason for the failure, usually including the resources that must be deleted. To delete the service-linked role, you must first remove those resources from the linked service and then submit the deletion request again. Resources are specific to the service that is linked to the role. For more information about removing resources from a service, see the <a href="http://docs.aws.amazon.com/">AWS documentation</a> for your service.</p> <p>For more information about service-linked roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role">Roles terms and concepts: AWS service-linked role</a> in the <i>IAM User Guide</i>.</p>
24192    async fn delete_service_linked_role(
24193        &self,
24194        input: DeleteServiceLinkedRoleRequest,
24195    ) -> Result<DeleteServiceLinkedRoleResponse, RusotoError<DeleteServiceLinkedRoleError>> {
24196        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24197        let params = self.new_params("DeleteServiceLinkedRole");
24198        let mut params = params;
24199        DeleteServiceLinkedRoleRequestSerializer::serialize(&mut params, "", &input);
24200        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24201        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24202
24203        let response = self
24204            .sign_and_dispatch(request, DeleteServiceLinkedRoleError::from_response)
24205            .await?;
24206
24207        let mut response = response;
24208        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24209            xml_util::start_element(actual_tag_name, stack)?;
24210            let result = DeleteServiceLinkedRoleResponseDeserializer::deserialize(
24211                "DeleteServiceLinkedRoleResult",
24212                stack,
24213            )?;
24214            skip_tree(stack);
24215            xml_util::end_element(actual_tag_name, stack)?;
24216            Ok(result)
24217        })
24218        .await?;
24219
24220        drop(response); // parse non-payload
24221        Ok(result)
24222    }
24223
24224    /// <p>Deletes the specified service-specific credential.</p>
24225    async fn delete_service_specific_credential(
24226        &self,
24227        input: DeleteServiceSpecificCredentialRequest,
24228    ) -> Result<(), RusotoError<DeleteServiceSpecificCredentialError>> {
24229        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24230        let params = self.new_params("DeleteServiceSpecificCredential");
24231        let mut params = params;
24232        DeleteServiceSpecificCredentialRequestSerializer::serialize(&mut params, "", &input);
24233        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24234        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24235
24236        let response = self
24237            .sign_and_dispatch(request, DeleteServiceSpecificCredentialError::from_response)
24238            .await?;
24239
24240        std::mem::drop(response);
24241        Ok(())
24242    }
24243
24244    /// <p>Deletes a signing certificate associated with the specified IAM user.</p> <p>If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID signing the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated IAM users.</p>
24245    async fn delete_signing_certificate(
24246        &self,
24247        input: DeleteSigningCertificateRequest,
24248    ) -> Result<(), RusotoError<DeleteSigningCertificateError>> {
24249        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24250        let params = self.new_params("DeleteSigningCertificate");
24251        let mut params = params;
24252        DeleteSigningCertificateRequestSerializer::serialize(&mut params, "", &input);
24253        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24254        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24255
24256        let response = self
24257            .sign_and_dispatch(request, DeleteSigningCertificateError::from_response)
24258            .await?;
24259
24260        std::mem::drop(response);
24261        Ok(())
24262    }
24263
24264    /// <p><p>Deletes the specified IAM user. Unlike the AWS Management Console, when you delete a user programmatically, you must delete the items attached to the user manually, or the deletion fails. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting_cli">Deleting an IAM user</a>. Before attempting to delete a user, remove the following items:</p> <ul> <li> <p>Password (<a>DeleteLoginProfile</a>)</p> </li> <li> <p>Access keys (<a>DeleteAccessKey</a>)</p> </li> <li> <p>Signing certificate (<a>DeleteSigningCertificate</a>)</p> </li> <li> <p>SSH public key (<a>DeleteSSHPublicKey</a>)</p> </li> <li> <p>Git credentials (<a>DeleteServiceSpecificCredential</a>)</p> </li> <li> <p>Multi-factor authentication (MFA) device (<a>DeactivateMFADevice</a>, <a>DeleteVirtualMFADevice</a>)</p> </li> <li> <p>Inline policies (<a>DeleteUserPolicy</a>)</p> </li> <li> <p>Attached managed policies (<a>DetachUserPolicy</a>)</p> </li> <li> <p>Group memberships (<a>RemoveUserFromGroup</a>)</p> </li> </ul></p>
24265    async fn delete_user(
24266        &self,
24267        input: DeleteUserRequest,
24268    ) -> Result<(), RusotoError<DeleteUserError>> {
24269        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24270        let params = self.new_params("DeleteUser");
24271        let mut params = params;
24272        DeleteUserRequestSerializer::serialize(&mut params, "", &input);
24273        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24274        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24275
24276        let response = self
24277            .sign_and_dispatch(request, DeleteUserError::from_response)
24278            .await?;
24279
24280        std::mem::drop(response);
24281        Ok(())
24282    }
24283
24284    /// <p><p>Deletes the permissions boundary for the specified IAM user.</p> <important> <p>Deleting the permissions boundary for a user might increase its permissions by allowing the user to perform all the actions granted in its permissions policies. </p> </important></p>
24285    async fn delete_user_permissions_boundary(
24286        &self,
24287        input: DeleteUserPermissionsBoundaryRequest,
24288    ) -> Result<(), RusotoError<DeleteUserPermissionsBoundaryError>> {
24289        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24290        let params = self.new_params("DeleteUserPermissionsBoundary");
24291        let mut params = params;
24292        DeleteUserPermissionsBoundaryRequestSerializer::serialize(&mut params, "", &input);
24293        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24294        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24295
24296        let response = self
24297            .sign_and_dispatch(request, DeleteUserPermissionsBoundaryError::from_response)
24298            .await?;
24299
24300        std::mem::drop(response);
24301        Ok(())
24302    }
24303
24304    /// <p>Deletes the specified inline policy that is embedded in the specified IAM user.</p> <p>A user can also have managed policies attached to it. To detach a managed policy from a user, use <a>DetachUserPolicy</a>. For more information about policies, refer to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
24305    async fn delete_user_policy(
24306        &self,
24307        input: DeleteUserPolicyRequest,
24308    ) -> Result<(), RusotoError<DeleteUserPolicyError>> {
24309        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24310        let params = self.new_params("DeleteUserPolicy");
24311        let mut params = params;
24312        DeleteUserPolicyRequestSerializer::serialize(&mut params, "", &input);
24313        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24314        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24315
24316        let response = self
24317            .sign_and_dispatch(request, DeleteUserPolicyError::from_response)
24318            .await?;
24319
24320        std::mem::drop(response);
24321        Ok(())
24322    }
24323
24324    /// <p><p>Deletes a virtual MFA device.</p> <note> <p> You must deactivate a user&#39;s virtual MFA device before you can delete it. For information about deactivating MFA devices, see <a>DeactivateMFADevice</a>. </p> </note></p>
24325    async fn delete_virtual_mfa_device(
24326        &self,
24327        input: DeleteVirtualMFADeviceRequest,
24328    ) -> Result<(), RusotoError<DeleteVirtualMFADeviceError>> {
24329        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24330        let params = self.new_params("DeleteVirtualMFADevice");
24331        let mut params = params;
24332        DeleteVirtualMFADeviceRequestSerializer::serialize(&mut params, "", &input);
24333        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24334        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24335
24336        let response = self
24337            .sign_and_dispatch(request, DeleteVirtualMFADeviceError::from_response)
24338            .await?;
24339
24340        std::mem::drop(response);
24341        Ok(())
24342    }
24343
24344    /// <p>Removes the specified managed policy from the specified IAM group.</p> <p>A group can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteGroupPolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
24345    async fn detach_group_policy(
24346        &self,
24347        input: DetachGroupPolicyRequest,
24348    ) -> Result<(), RusotoError<DetachGroupPolicyError>> {
24349        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24350        let params = self.new_params("DetachGroupPolicy");
24351        let mut params = params;
24352        DetachGroupPolicyRequestSerializer::serialize(&mut params, "", &input);
24353        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24354        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24355
24356        let response = self
24357            .sign_and_dispatch(request, DetachGroupPolicyError::from_response)
24358            .await?;
24359
24360        std::mem::drop(response);
24361        Ok(())
24362    }
24363
24364    /// <p>Removes the specified managed policy from the specified role.</p> <p>A role can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteRolePolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
24365    async fn detach_role_policy(
24366        &self,
24367        input: DetachRolePolicyRequest,
24368    ) -> Result<(), RusotoError<DetachRolePolicyError>> {
24369        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24370        let params = self.new_params("DetachRolePolicy");
24371        let mut params = params;
24372        DetachRolePolicyRequestSerializer::serialize(&mut params, "", &input);
24373        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24374        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24375
24376        let response = self
24377            .sign_and_dispatch(request, DetachRolePolicyError::from_response)
24378            .await?;
24379
24380        std::mem::drop(response);
24381        Ok(())
24382    }
24383
24384    /// <p>Removes the specified managed policy from the specified user.</p> <p>A user can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteUserPolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
24385    async fn detach_user_policy(
24386        &self,
24387        input: DetachUserPolicyRequest,
24388    ) -> Result<(), RusotoError<DetachUserPolicyError>> {
24389        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24390        let params = self.new_params("DetachUserPolicy");
24391        let mut params = params;
24392        DetachUserPolicyRequestSerializer::serialize(&mut params, "", &input);
24393        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24394        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24395
24396        let response = self
24397            .sign_and_dispatch(request, DetachUserPolicyError::from_response)
24398            .await?;
24399
24400        std::mem::drop(response);
24401        Ok(())
24402    }
24403
24404    /// <p>Enables the specified MFA device and associates it with the specified IAM user. When enabled, the MFA device is required for every subsequent login by the IAM user associated with the device.</p>
24405    async fn enable_mfa_device(
24406        &self,
24407        input: EnableMFADeviceRequest,
24408    ) -> Result<(), RusotoError<EnableMFADeviceError>> {
24409        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24410        let params = self.new_params("EnableMFADevice");
24411        let mut params = params;
24412        EnableMFADeviceRequestSerializer::serialize(&mut params, "", &input);
24413        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24414        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24415
24416        let response = self
24417            .sign_and_dispatch(request, EnableMFADeviceError::from_response)
24418            .await?;
24419
24420        std::mem::drop(response);
24421        Ok(())
24422    }
24423
24424    /// <p> Generates a credential report for the AWS account. For more information about the credential report, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html">Getting credential reports</a> in the <i>IAM User Guide</i>.</p>
24425    async fn generate_credential_report(
24426        &self,
24427    ) -> Result<GenerateCredentialReportResponse, RusotoError<GenerateCredentialReportError>> {
24428        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24429        let params = self.new_params("GenerateCredentialReport");
24430
24431        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24432        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24433
24434        let response = self
24435            .sign_and_dispatch(request, GenerateCredentialReportError::from_response)
24436            .await?;
24437
24438        let mut response = response;
24439        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24440            xml_util::start_element(actual_tag_name, stack)?;
24441            let result = GenerateCredentialReportResponseDeserializer::deserialize(
24442                "GenerateCredentialReportResult",
24443                stack,
24444            )?;
24445            skip_tree(stack);
24446            xml_util::end_element(actual_tag_name, stack)?;
24447            Ok(result)
24448        })
24449        .await?;
24450
24451        drop(response); // parse non-payload
24452        Ok(result)
24453    }
24454
24455    /// <p>Generates a report for service last accessed data for AWS Organizations. You can generate a report for any entities (organization root, organizational unit, or account) or policies in your organization.</p> <p>To call this operation, you must be signed in using your AWS Organizations management account credentials. You can use your long-term IAM user or root user credentials, or temporary credentials from assuming an IAM role. SCPs must be enabled for your organization root. You must have the required IAM and AWS Organizations permissions. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Refining permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <p>You can generate a service last accessed data report for entities by specifying only the entity's path. This data includes a list of services that are allowed by any service control policies (SCPs) that apply to the entity.</p> <p>You can generate a service last accessed data report for a policy by specifying an entity's path and an optional AWS Organizations policy ID. This data includes a list of services that are allowed by the specified SCP.</p> <p>For each service in both report types, the data includes the most recent account activity that the policy allows to account principals in the entity or the entity's children. For important information about the data, reporting period, permissions required, troubleshooting, and supported Regions see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <important> <p>The data includes all attempts to access AWS, not just the successful ones. This includes all attempts that were made using the AWS Management Console, the AWS API through any of the SDKs, or any of the command line tools. An unexpected entry in the service last accessed data does not mean that an account has been compromised, because the request might have been denied. Refer to your CloudTrail logs as the authoritative source for information about all API calls and whether they were successful or denied access. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html">Logging IAM events with CloudTrail</a> in the <i>IAM User Guide</i>.</p> </important> <p>This operation returns a <code>JobId</code>. Use this parameter in the <code> <a>GetOrganizationsAccessReport</a> </code> operation to check the status of the report generation. To check the status of this request, use the <code>JobId</code> parameter in the <code> <a>GetOrganizationsAccessReport</a> </code> operation and test the <code>JobStatus</code> response parameter. When the job is complete, you can retrieve the report.</p> <p>To generate a service last accessed data report for entities, specify an entity path without specifying the optional AWS Organizations policy ID. The type of entity that you specify determines the data returned in the report.</p> <ul> <li> <p> <b>Root</b> – When you specify the organizations root as the entity, the resulting report lists all of the services allowed by SCPs that are attached to your root. For each service, the report includes data for all accounts in your organization except the management account, because the management account is not limited by SCPs.</p> </li> <li> <p> <b>OU</b> – When you specify an organizational unit (OU) as the entity, the resulting report lists all of the services allowed by SCPs that are attached to the OU and its parents. For each service, the report includes data for all accounts in the OU or its children. This data excludes the management account, because the management account is not limited by SCPs.</p> </li> <li> <p> <b>management account</b> – When you specify the management account, the resulting report lists all AWS services, because the management account is not limited by SCPs. For each service, the report includes data for only the management account.</p> </li> <li> <p> <b>Account</b> – When you specify another account as the entity, the resulting report lists all of the services allowed by SCPs that are attached to the account and its parents. For each service, the report includes data for only the specified account.</p> </li> </ul> <p>To generate a service last accessed data report for policies, specify an entity path and the optional AWS Organizations policy ID. The type of entity that you specify determines the data returned for each service.</p> <ul> <li> <p> <b>Root</b> – When you specify the root entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for all accounts in your organization to which the SCP applies. This data excludes the management account, because the management account is not limited by SCPs. If the SCP is not attached to any entities in the organization, then the report will return a list of services with no data.</p> </li> <li> <p> <b>OU</b> – When you specify an OU entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for all accounts in the OU or its children to which the SCP applies. This means that other accounts outside the OU that are affected by the SCP might not be included in the data. This data excludes the management account, because the management account is not limited by SCPs. If the SCP is not attached to the OU or one of its children, the report will return a list of services with no data.</p> </li> <li> <p> <b>management account</b> – When you specify the management account, the resulting report lists all AWS services, because the management account is not limited by SCPs. If you specify a policy ID in the CLI or API, the policy is ignored. For each service, the report includes data for only the management account.</p> </li> <li> <p> <b>Account</b> – When you specify another account entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for only the specified account. This means that other accounts in the organization that are affected by the SCP might not be included in the data. If the SCP is not attached to the account, the report will return a list of services with no data.</p> </li> </ul> <note> <p>Service last accessed data does not use other policy types when determining whether a principal could access a service. These other policy types include identity-based policies, resource-based policies, access control lists, IAM permissions boundaries, and STS assume role policies. It only applies SCP logic. For more about the evaluation of policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For more information about service last accessed data, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Reducing policy scope by viewing user activity</a> in the <i>IAM User Guide</i>.</p>
24456    async fn generate_organizations_access_report(
24457        &self,
24458        input: GenerateOrganizationsAccessReportRequest,
24459    ) -> Result<
24460        GenerateOrganizationsAccessReportResponse,
24461        RusotoError<GenerateOrganizationsAccessReportError>,
24462    > {
24463        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24464        let params = self.new_params("GenerateOrganizationsAccessReport");
24465        let mut params = params;
24466        GenerateOrganizationsAccessReportRequestSerializer::serialize(&mut params, "", &input);
24467        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24468        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24469
24470        let response = self
24471            .sign_and_dispatch(
24472                request,
24473                GenerateOrganizationsAccessReportError::from_response,
24474            )
24475            .await?;
24476
24477        let mut response = response;
24478        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24479            xml_util::start_element(actual_tag_name, stack)?;
24480            let result = GenerateOrganizationsAccessReportResponseDeserializer::deserialize(
24481                "GenerateOrganizationsAccessReportResult",
24482                stack,
24483            )?;
24484            skip_tree(stack);
24485            xml_util::end_element(actual_tag_name, stack)?;
24486            Ok(result)
24487        })
24488        .await?;
24489
24490        drop(response); // parse non-payload
24491        Ok(result)
24492    }
24493
24494    /// <p>Generates a report that includes details about when an IAM resource (user, group, role, or policy) was last used in an attempt to access AWS services. Recent activity usually appears within four hours. IAM reports activity for the last 365 days, or less if your Region began supporting this feature within the last year. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period">Regions where data is tracked</a>.</p> <important> <p>The service last accessed data includes all attempts to access an AWS API, not just the successful ones. This includes all attempts that were made using the AWS Management Console, the AWS API through any of the SDKs, or any of the command line tools. An unexpected entry in the service last accessed data does not mean that your account has been compromised, because the request might have been denied. Refer to your CloudTrail logs as the authoritative source for information about all API calls and whether they were successful or denied access. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html">Logging IAM events with CloudTrail</a> in the <i>IAM User Guide</i>.</p> </important> <p>The <code>GenerateServiceLastAccessedDetails</code> operation returns a <code>JobId</code>. Use this parameter in the following operations to retrieve the following details from your report: </p> <ul> <li> <p> <a>GetServiceLastAccessedDetails</a> – Use this operation for users, groups, roles, or policies to list every AWS service that the resource could access using permissions policies. For each service, the response includes information about the most recent access attempt.</p> <p>The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p> </li> <li> <p> <a>GetServiceLastAccessedDetailsWithEntities</a> – Use this operation for groups and policies to list information about the associated entities (users or roles) that attempted to access a specific AWS service. </p> </li> </ul> <p>To check the status of the <code>GenerateServiceLastAccessedDetails</code> request, use the <code>JobId</code> parameter in the same operations and test the <code>JobStatus</code> response parameter.</p> <p>For additional information about the permissions policies that allow an identity (user, group, or role) to access specific services, use the <a>ListPoliciesGrantingServiceAccess</a> operation.</p> <note> <p>Service last accessed data does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, AWS Organizations policies, IAM permissions boundaries, and AWS STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For more information about service and action last accessed data, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p>
24495    async fn generate_service_last_accessed_details(
24496        &self,
24497        input: GenerateServiceLastAccessedDetailsRequest,
24498    ) -> Result<
24499        GenerateServiceLastAccessedDetailsResponse,
24500        RusotoError<GenerateServiceLastAccessedDetailsError>,
24501    > {
24502        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24503        let params = self.new_params("GenerateServiceLastAccessedDetails");
24504        let mut params = params;
24505        GenerateServiceLastAccessedDetailsRequestSerializer::serialize(&mut params, "", &input);
24506        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24507        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24508
24509        let response = self
24510            .sign_and_dispatch(
24511                request,
24512                GenerateServiceLastAccessedDetailsError::from_response,
24513            )
24514            .await?;
24515
24516        let mut response = response;
24517        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24518            xml_util::start_element(actual_tag_name, stack)?;
24519            let result = GenerateServiceLastAccessedDetailsResponseDeserializer::deserialize(
24520                "GenerateServiceLastAccessedDetailsResult",
24521                stack,
24522            )?;
24523            skip_tree(stack);
24524            xml_util::end_element(actual_tag_name, stack)?;
24525            Ok(result)
24526        })
24527        .await?;
24528
24529        drop(response); // parse non-payload
24530        Ok(result)
24531    }
24532
24533    /// <p>Retrieves information about when the specified access key was last used. The information includes the date and time of last use, along with the AWS service and Region that were specified in the last request made with that key.</p>
24534    async fn get_access_key_last_used(
24535        &self,
24536        input: GetAccessKeyLastUsedRequest,
24537    ) -> Result<GetAccessKeyLastUsedResponse, RusotoError<GetAccessKeyLastUsedError>> {
24538        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24539        let params = self.new_params("GetAccessKeyLastUsed");
24540        let mut params = params;
24541        GetAccessKeyLastUsedRequestSerializer::serialize(&mut params, "", &input);
24542        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24543        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24544
24545        let response = self
24546            .sign_and_dispatch(request, GetAccessKeyLastUsedError::from_response)
24547            .await?;
24548
24549        let mut response = response;
24550        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24551            xml_util::start_element(actual_tag_name, stack)?;
24552            let result = GetAccessKeyLastUsedResponseDeserializer::deserialize(
24553                "GetAccessKeyLastUsedResult",
24554                stack,
24555            )?;
24556            skip_tree(stack);
24557            xml_util::end_element(actual_tag_name, stack)?;
24558            Ok(result)
24559        })
24560        .await?;
24561
24562        drop(response); // parse non-payload
24563        Ok(result)
24564    }
24565
24566    /// <p>Retrieves information about all IAM users, groups, roles, and policies in your AWS account, including their relationships to one another. Use this operation to obtain a snapshot of the configuration of IAM permissions (users, groups, roles, and policies) in your account.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>You can optionally filter the results using the <code>Filter</code> parameter. You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
24567    async fn get_account_authorization_details(
24568        &self,
24569        input: GetAccountAuthorizationDetailsRequest,
24570    ) -> Result<
24571        GetAccountAuthorizationDetailsResponse,
24572        RusotoError<GetAccountAuthorizationDetailsError>,
24573    > {
24574        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24575        let params = self.new_params("GetAccountAuthorizationDetails");
24576        let mut params = params;
24577        GetAccountAuthorizationDetailsRequestSerializer::serialize(&mut params, "", &input);
24578        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24579        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24580
24581        let response = self
24582            .sign_and_dispatch(request, GetAccountAuthorizationDetailsError::from_response)
24583            .await?;
24584
24585        let mut response = response;
24586        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24587            xml_util::start_element(actual_tag_name, stack)?;
24588            let result = GetAccountAuthorizationDetailsResponseDeserializer::deserialize(
24589                "GetAccountAuthorizationDetailsResult",
24590                stack,
24591            )?;
24592            skip_tree(stack);
24593            xml_util::end_element(actual_tag_name, stack)?;
24594            Ok(result)
24595        })
24596        .await?;
24597
24598        drop(response); // parse non-payload
24599        Ok(result)
24600    }
24601
24602    /// <p>Retrieves the password policy for the AWS account. This tells you the complexity requirements and mandatory rotation periods for the IAM user passwords in your account. For more information about using a password policy, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingPasswordPolicies.html">Managing an IAM password policy</a>.</p>
24603    async fn get_account_password_policy(
24604        &self,
24605    ) -> Result<GetAccountPasswordPolicyResponse, RusotoError<GetAccountPasswordPolicyError>> {
24606        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24607        let params = self.new_params("GetAccountPasswordPolicy");
24608
24609        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24610        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24611
24612        let response = self
24613            .sign_and_dispatch(request, GetAccountPasswordPolicyError::from_response)
24614            .await?;
24615
24616        let mut response = response;
24617        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24618            xml_util::start_element(actual_tag_name, stack)?;
24619            let result = GetAccountPasswordPolicyResponseDeserializer::deserialize(
24620                "GetAccountPasswordPolicyResult",
24621                stack,
24622            )?;
24623            skip_tree(stack);
24624            xml_util::end_element(actual_tag_name, stack)?;
24625            Ok(result)
24626        })
24627        .await?;
24628
24629        drop(response); // parse non-payload
24630        Ok(result)
24631    }
24632
24633    /// <p>Retrieves information about IAM entity usage and IAM quotas in the AWS account.</p> <p> For information about IAM quotas, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p>
24634    async fn get_account_summary(
24635        &self,
24636    ) -> Result<GetAccountSummaryResponse, RusotoError<GetAccountSummaryError>> {
24637        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24638        let params = self.new_params("GetAccountSummary");
24639
24640        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24641        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24642
24643        let response = self
24644            .sign_and_dispatch(request, GetAccountSummaryError::from_response)
24645            .await?;
24646
24647        let mut response = response;
24648        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24649            xml_util::start_element(actual_tag_name, stack)?;
24650            let result = GetAccountSummaryResponseDeserializer::deserialize(
24651                "GetAccountSummaryResult",
24652                stack,
24653            )?;
24654            skip_tree(stack);
24655            xml_util::end_element(actual_tag_name, stack)?;
24656            Ok(result)
24657        })
24658        .await?;
24659
24660        drop(response); // parse non-payload
24661        Ok(result)
24662    }
24663
24664    /// <p>Gets a list of all of the context keys referenced in the input policies. The policies are supplied as a list of one or more strings. To get the context keys from policies associated with an IAM user, group, or role, use <a>GetContextKeysForPrincipalPolicy</a>.</p> <p>Context keys are variables maintained by AWS and its services that provide details about the context of an API query request. Context keys can be evaluated by testing against a value specified in an IAM policy. Use <code>GetContextKeysForCustomPolicy</code> to understand what key names and values you must supply when you call <a>SimulateCustomPolicy</a>. Note that all parameters are shown in unencoded form here for clarity but must be URL encoded to be included as a part of a real HTML request.</p>
24665    async fn get_context_keys_for_custom_policy(
24666        &self,
24667        input: GetContextKeysForCustomPolicyRequest,
24668    ) -> Result<GetContextKeysForPolicyResponse, RusotoError<GetContextKeysForCustomPolicyError>>
24669    {
24670        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24671        let params = self.new_params("GetContextKeysForCustomPolicy");
24672        let mut params = params;
24673        GetContextKeysForCustomPolicyRequestSerializer::serialize(&mut params, "", &input);
24674        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24675        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24676
24677        let response = self
24678            .sign_and_dispatch(request, GetContextKeysForCustomPolicyError::from_response)
24679            .await?;
24680
24681        let mut response = response;
24682        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24683            xml_util::start_element(actual_tag_name, stack)?;
24684            let result = GetContextKeysForPolicyResponseDeserializer::deserialize(
24685                "GetContextKeysForCustomPolicyResult",
24686                stack,
24687            )?;
24688            skip_tree(stack);
24689            xml_util::end_element(actual_tag_name, stack)?;
24690            Ok(result)
24691        })
24692        .await?;
24693
24694        drop(response); // parse non-payload
24695        Ok(result)
24696    }
24697
24698    /// <p>Gets a list of all of the context keys referenced in all the IAM policies that are attached to the specified IAM entity. The entity can be an IAM user, group, or role. If you specify a user, then the request also includes all of the policies attached to groups that the user is a member of.</p> <p>You can optionally include a list of one or more additional policies, specified as strings. If you want to include <i>only</i> a list of policies by string, use <a>GetContextKeysForCustomPolicy</a> instead.</p> <p> <b>Note:</b> This operation discloses information about the permissions granted to other users. If you do not want users to see other user's permissions, then consider allowing them to use <a>GetContextKeysForCustomPolicy</a> instead.</p> <p>Context keys are variables maintained by AWS and its services that provide details about the context of an API query request. Context keys can be evaluated by testing against a value in an IAM policy. Use <a>GetContextKeysForPrincipalPolicy</a> to understand what key names and values you must supply when you call <a>SimulatePrincipalPolicy</a>.</p>
24699    async fn get_context_keys_for_principal_policy(
24700        &self,
24701        input: GetContextKeysForPrincipalPolicyRequest,
24702    ) -> Result<GetContextKeysForPolicyResponse, RusotoError<GetContextKeysForPrincipalPolicyError>>
24703    {
24704        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24705        let params = self.new_params("GetContextKeysForPrincipalPolicy");
24706        let mut params = params;
24707        GetContextKeysForPrincipalPolicyRequestSerializer::serialize(&mut params, "", &input);
24708        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24709        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24710
24711        let response = self
24712            .sign_and_dispatch(
24713                request,
24714                GetContextKeysForPrincipalPolicyError::from_response,
24715            )
24716            .await?;
24717
24718        let mut response = response;
24719        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24720            xml_util::start_element(actual_tag_name, stack)?;
24721            let result = GetContextKeysForPolicyResponseDeserializer::deserialize(
24722                "GetContextKeysForPrincipalPolicyResult",
24723                stack,
24724            )?;
24725            skip_tree(stack);
24726            xml_util::end_element(actual_tag_name, stack)?;
24727            Ok(result)
24728        })
24729        .await?;
24730
24731        drop(response); // parse non-payload
24732        Ok(result)
24733    }
24734
24735    /// <p> Retrieves a credential report for the AWS account. For more information about the credential report, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html">Getting credential reports</a> in the <i>IAM User Guide</i>.</p>
24736    async fn get_credential_report(
24737        &self,
24738    ) -> Result<GetCredentialReportResponse, RusotoError<GetCredentialReportError>> {
24739        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24740        let params = self.new_params("GetCredentialReport");
24741
24742        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24743        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24744
24745        let response = self
24746            .sign_and_dispatch(request, GetCredentialReportError::from_response)
24747            .await?;
24748
24749        let mut response = response;
24750        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24751            xml_util::start_element(actual_tag_name, stack)?;
24752            let result = GetCredentialReportResponseDeserializer::deserialize(
24753                "GetCredentialReportResult",
24754                stack,
24755            )?;
24756            skip_tree(stack);
24757            xml_util::end_element(actual_tag_name, stack)?;
24758            Ok(result)
24759        })
24760        .await?;
24761
24762        drop(response); // parse non-payload
24763        Ok(result)
24764    }
24765
24766    /// <p> Returns a list of IAM users that are in the specified IAM group. You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
24767    async fn get_group(
24768        &self,
24769        input: GetGroupRequest,
24770    ) -> Result<GetGroupResponse, RusotoError<GetGroupError>> {
24771        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24772        let params = self.new_params("GetGroup");
24773        let mut params = params;
24774        GetGroupRequestSerializer::serialize(&mut params, "", &input);
24775        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24776        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24777
24778        let response = self
24779            .sign_and_dispatch(request, GetGroupError::from_response)
24780            .await?;
24781
24782        let mut response = response;
24783        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24784            xml_util::start_element(actual_tag_name, stack)?;
24785            let result = GetGroupResponseDeserializer::deserialize("GetGroupResult", stack)?;
24786            skip_tree(stack);
24787            xml_util::end_element(actual_tag_name, stack)?;
24788            Ok(result)
24789        })
24790        .await?;
24791
24792        drop(response); // parse non-payload
24793        Ok(result)
24794    }
24795
24796    /// <p>Retrieves the specified inline policy document that is embedded in the specified IAM group.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM group can also have managed policies attached to it. To retrieve a managed policy document that is attached to a group, use <a>GetPolicy</a> to determine the policy's default version, then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
24797    async fn get_group_policy(
24798        &self,
24799        input: GetGroupPolicyRequest,
24800    ) -> Result<GetGroupPolicyResponse, RusotoError<GetGroupPolicyError>> {
24801        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24802        let params = self.new_params("GetGroupPolicy");
24803        let mut params = params;
24804        GetGroupPolicyRequestSerializer::serialize(&mut params, "", &input);
24805        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24806        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24807
24808        let response = self
24809            .sign_and_dispatch(request, GetGroupPolicyError::from_response)
24810            .await?;
24811
24812        let mut response = response;
24813        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24814            xml_util::start_element(actual_tag_name, stack)?;
24815            let result =
24816                GetGroupPolicyResponseDeserializer::deserialize("GetGroupPolicyResult", stack)?;
24817            skip_tree(stack);
24818            xml_util::end_element(actual_tag_name, stack)?;
24819            Ok(result)
24820        })
24821        .await?;
24822
24823        drop(response); // parse non-payload
24824        Ok(result)
24825    }
24826
24827    /// <p> Retrieves information about the specified instance profile, including the instance profile's path, GUID, ARN, and role. For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a> in the <i>IAM User Guide</i>.</p>
24828    async fn get_instance_profile(
24829        &self,
24830        input: GetInstanceProfileRequest,
24831    ) -> Result<GetInstanceProfileResponse, RusotoError<GetInstanceProfileError>> {
24832        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24833        let params = self.new_params("GetInstanceProfile");
24834        let mut params = params;
24835        GetInstanceProfileRequestSerializer::serialize(&mut params, "", &input);
24836        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24837        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24838
24839        let response = self
24840            .sign_and_dispatch(request, GetInstanceProfileError::from_response)
24841            .await?;
24842
24843        let mut response = response;
24844        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24845            xml_util::start_element(actual_tag_name, stack)?;
24846            let result = GetInstanceProfileResponseDeserializer::deserialize(
24847                "GetInstanceProfileResult",
24848                stack,
24849            )?;
24850            skip_tree(stack);
24851            xml_util::end_element(actual_tag_name, stack)?;
24852            Ok(result)
24853        })
24854        .await?;
24855
24856        drop(response); // parse non-payload
24857        Ok(result)
24858    }
24859
24860    /// <p>Retrieves the user name and password creation date for the specified IAM user. If the user has not been assigned a password, the operation returns a 404 (<code>NoSuchEntity</code>) error.</p>
24861    async fn get_login_profile(
24862        &self,
24863        input: GetLoginProfileRequest,
24864    ) -> Result<GetLoginProfileResponse, RusotoError<GetLoginProfileError>> {
24865        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24866        let params = self.new_params("GetLoginProfile");
24867        let mut params = params;
24868        GetLoginProfileRequestSerializer::serialize(&mut params, "", &input);
24869        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24870        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24871
24872        let response = self
24873            .sign_and_dispatch(request, GetLoginProfileError::from_response)
24874            .await?;
24875
24876        let mut response = response;
24877        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24878            xml_util::start_element(actual_tag_name, stack)?;
24879            let result =
24880                GetLoginProfileResponseDeserializer::deserialize("GetLoginProfileResult", stack)?;
24881            skip_tree(stack);
24882            xml_util::end_element(actual_tag_name, stack)?;
24883            Ok(result)
24884        })
24885        .await?;
24886
24887        drop(response); // parse non-payload
24888        Ok(result)
24889    }
24890
24891    /// <p>Returns information about the specified OpenID Connect (OIDC) provider resource object in IAM.</p>
24892    async fn get_open_id_connect_provider(
24893        &self,
24894        input: GetOpenIDConnectProviderRequest,
24895    ) -> Result<GetOpenIDConnectProviderResponse, RusotoError<GetOpenIDConnectProviderError>> {
24896        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24897        let params = self.new_params("GetOpenIDConnectProvider");
24898        let mut params = params;
24899        GetOpenIDConnectProviderRequestSerializer::serialize(&mut params, "", &input);
24900        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24901        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24902
24903        let response = self
24904            .sign_and_dispatch(request, GetOpenIDConnectProviderError::from_response)
24905            .await?;
24906
24907        let mut response = response;
24908        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24909            xml_util::start_element(actual_tag_name, stack)?;
24910            let result = GetOpenIDConnectProviderResponseDeserializer::deserialize(
24911                "GetOpenIDConnectProviderResult",
24912                stack,
24913            )?;
24914            skip_tree(stack);
24915            xml_util::end_element(actual_tag_name, stack)?;
24916            Ok(result)
24917        })
24918        .await?;
24919
24920        drop(response); // parse non-payload
24921        Ok(result)
24922    }
24923
24924    /// <p>Retrieves the service last accessed data report for AWS Organizations that was previously generated using the <code> <a>GenerateOrganizationsAccessReport</a> </code> operation. This operation retrieves the status of your report job and the report contents.</p> <p>Depending on the parameters that you passed when you generated the report, the data returned could include different information. For details, see <a>GenerateOrganizationsAccessReport</a>.</p> <p>To call this operation, you must be signed in to the management account in your organization. SCPs must be enabled for your organization root. You must have permissions to perform this operation. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Refining permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <p>For each service that principals in an account (root users, IAM users, or IAM roles) could access using SCPs, the operation returns details about the most recent access attempt. If there was no attempt, the service is listed without details about the most recent attempt to access the service. If the operation fails, it returns the reason that it failed.</p> <p>By default, the list is sorted by service namespace.</p>
24925    async fn get_organizations_access_report(
24926        &self,
24927        input: GetOrganizationsAccessReportRequest,
24928    ) -> Result<GetOrganizationsAccessReportResponse, RusotoError<GetOrganizationsAccessReportError>>
24929    {
24930        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24931        let params = self.new_params("GetOrganizationsAccessReport");
24932        let mut params = params;
24933        GetOrganizationsAccessReportRequestSerializer::serialize(&mut params, "", &input);
24934        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24935        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24936
24937        let response = self
24938            .sign_and_dispatch(request, GetOrganizationsAccessReportError::from_response)
24939            .await?;
24940
24941        let mut response = response;
24942        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24943            xml_util::start_element(actual_tag_name, stack)?;
24944            let result = GetOrganizationsAccessReportResponseDeserializer::deserialize(
24945                "GetOrganizationsAccessReportResult",
24946                stack,
24947            )?;
24948            skip_tree(stack);
24949            xml_util::end_element(actual_tag_name, stack)?;
24950            Ok(result)
24951        })
24952        .await?;
24953
24954        drop(response); // parse non-payload
24955        Ok(result)
24956    }
24957
24958    /// <p>Retrieves information about the specified managed policy, including the policy's default version and the total number of IAM users, groups, and roles to which the policy is attached. To retrieve the list of the specific users, groups, and roles that the policy is attached to, use <a>ListEntitiesForPolicy</a>. This operation returns metadata about the policy. To retrieve the actual policy document for a specific version of the policy, use <a>GetPolicyVersion</a>.</p> <p>This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded with an IAM user, group, or role, use <a>GetUserPolicy</a>, <a>GetGroupPolicy</a>, or <a>GetRolePolicy</a>.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
24959    async fn get_policy(
24960        &self,
24961        input: GetPolicyRequest,
24962    ) -> Result<GetPolicyResponse, RusotoError<GetPolicyError>> {
24963        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24964        let params = self.new_params("GetPolicy");
24965        let mut params = params;
24966        GetPolicyRequestSerializer::serialize(&mut params, "", &input);
24967        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24968        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24969
24970        let response = self
24971            .sign_and_dispatch(request, GetPolicyError::from_response)
24972            .await?;
24973
24974        let mut response = response;
24975        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
24976            xml_util::start_element(actual_tag_name, stack)?;
24977            let result = GetPolicyResponseDeserializer::deserialize("GetPolicyResult", stack)?;
24978            skip_tree(stack);
24979            xml_util::end_element(actual_tag_name, stack)?;
24980            Ok(result)
24981        })
24982        .await?;
24983
24984        drop(response); // parse non-payload
24985        Ok(result)
24986    }
24987
24988    /// <p>Retrieves information about the specified version of the specified managed policy, including the policy document.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>To list the available versions for a policy, use <a>ListPolicyVersions</a>.</p> <p>This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded in a user, group, or role, use <a>GetUserPolicy</a>, <a>GetGroupPolicy</a>, or <a>GetRolePolicy</a>.</p> <p>For more information about the types of policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about managed policy versions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>
24989    async fn get_policy_version(
24990        &self,
24991        input: GetPolicyVersionRequest,
24992    ) -> Result<GetPolicyVersionResponse, RusotoError<GetPolicyVersionError>> {
24993        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
24994        let params = self.new_params("GetPolicyVersion");
24995        let mut params = params;
24996        GetPolicyVersionRequestSerializer::serialize(&mut params, "", &input);
24997        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
24998        request.set_content_type("application/x-www-form-urlencoded".to_owned());
24999
25000        let response = self
25001            .sign_and_dispatch(request, GetPolicyVersionError::from_response)
25002            .await?;
25003
25004        let mut response = response;
25005        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25006            xml_util::start_element(actual_tag_name, stack)?;
25007            let result =
25008                GetPolicyVersionResponseDeserializer::deserialize("GetPolicyVersionResult", stack)?;
25009            skip_tree(stack);
25010            xml_util::end_element(actual_tag_name, stack)?;
25011            Ok(result)
25012        })
25013        .await?;
25014
25015        drop(response); // parse non-payload
25016        Ok(result)
25017    }
25018
25019    /// <p><p>Retrieves information about the specified role, including the role&#39;s path, GUID, ARN, and the role&#39;s trust policy that grants permission to assume the role. For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note></p>
25020    async fn get_role(
25021        &self,
25022        input: GetRoleRequest,
25023    ) -> Result<GetRoleResponse, RusotoError<GetRoleError>> {
25024        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25025        let params = self.new_params("GetRole");
25026        let mut params = params;
25027        GetRoleRequestSerializer::serialize(&mut params, "", &input);
25028        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25029        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25030
25031        let response = self
25032            .sign_and_dispatch(request, GetRoleError::from_response)
25033            .await?;
25034
25035        let mut response = response;
25036        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25037            xml_util::start_element(actual_tag_name, stack)?;
25038            let result = GetRoleResponseDeserializer::deserialize("GetRoleResult", stack)?;
25039            skip_tree(stack);
25040            xml_util::end_element(actual_tag_name, stack)?;
25041            Ok(result)
25042        })
25043        .await?;
25044
25045        drop(response); // parse non-payload
25046        Ok(result)
25047    }
25048
25049    /// <p>Retrieves the specified inline policy document that is embedded with the specified IAM role.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM role can also have managed policies attached to it. To retrieve a managed policy document that is attached to a role, use <a>GetPolicy</a> to determine the policy's default version, then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html">Using roles to delegate permissions and federate identities</a>.</p>
25050    async fn get_role_policy(
25051        &self,
25052        input: GetRolePolicyRequest,
25053    ) -> Result<GetRolePolicyResponse, RusotoError<GetRolePolicyError>> {
25054        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25055        let params = self.new_params("GetRolePolicy");
25056        let mut params = params;
25057        GetRolePolicyRequestSerializer::serialize(&mut params, "", &input);
25058        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25059        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25060
25061        let response = self
25062            .sign_and_dispatch(request, GetRolePolicyError::from_response)
25063            .await?;
25064
25065        let mut response = response;
25066        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25067            xml_util::start_element(actual_tag_name, stack)?;
25068            let result =
25069                GetRolePolicyResponseDeserializer::deserialize("GetRolePolicyResult", stack)?;
25070            skip_tree(stack);
25071            xml_util::end_element(actual_tag_name, stack)?;
25072            Ok(result)
25073        })
25074        .await?;
25075
25076        drop(response); // parse non-payload
25077        Ok(result)
25078    }
25079
25080    /// <p><p>Returns the SAML provider metadocument that was uploaded when the IAM SAML provider resource object was created or updated.</p> <note> <p>This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </note></p>
25081    async fn get_saml_provider(
25082        &self,
25083        input: GetSAMLProviderRequest,
25084    ) -> Result<GetSAMLProviderResponse, RusotoError<GetSAMLProviderError>> {
25085        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25086        let params = self.new_params("GetSAMLProvider");
25087        let mut params = params;
25088        GetSAMLProviderRequestSerializer::serialize(&mut params, "", &input);
25089        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25090        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25091
25092        let response = self
25093            .sign_and_dispatch(request, GetSAMLProviderError::from_response)
25094            .await?;
25095
25096        let mut response = response;
25097        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25098            xml_util::start_element(actual_tag_name, stack)?;
25099            let result =
25100                GetSAMLProviderResponseDeserializer::deserialize("GetSAMLProviderResult", stack)?;
25101            skip_tree(stack);
25102            xml_util::end_element(actual_tag_name, stack)?;
25103            Ok(result)
25104        })
25105        .await?;
25106
25107        drop(response); // parse non-payload
25108        Ok(result)
25109    }
25110
25111    /// <p>Retrieves the specified SSH public key, including metadata about the key.</p> <p>The SSH public key retrieved by this operation is used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p>
25112    async fn get_ssh_public_key(
25113        &self,
25114        input: GetSSHPublicKeyRequest,
25115    ) -> Result<GetSSHPublicKeyResponse, RusotoError<GetSSHPublicKeyError>> {
25116        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25117        let params = self.new_params("GetSSHPublicKey");
25118        let mut params = params;
25119        GetSSHPublicKeyRequestSerializer::serialize(&mut params, "", &input);
25120        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25121        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25122
25123        let response = self
25124            .sign_and_dispatch(request, GetSSHPublicKeyError::from_response)
25125            .await?;
25126
25127        let mut response = response;
25128        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25129            xml_util::start_element(actual_tag_name, stack)?;
25130            let result =
25131                GetSSHPublicKeyResponseDeserializer::deserialize("GetSSHPublicKeyResult", stack)?;
25132            skip_tree(stack);
25133            xml_util::end_element(actual_tag_name, stack)?;
25134            Ok(result)
25135        })
25136        .await?;
25137
25138        drop(response); // parse non-payload
25139        Ok(result)
25140    }
25141
25142    /// <p>Retrieves information about the specified server certificate stored in IAM.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic includes a list of AWS services that can use the server certificates that you manage with IAM.</p>
25143    async fn get_server_certificate(
25144        &self,
25145        input: GetServerCertificateRequest,
25146    ) -> Result<GetServerCertificateResponse, RusotoError<GetServerCertificateError>> {
25147        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25148        let params = self.new_params("GetServerCertificate");
25149        let mut params = params;
25150        GetServerCertificateRequestSerializer::serialize(&mut params, "", &input);
25151        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25152        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25153
25154        let response = self
25155            .sign_and_dispatch(request, GetServerCertificateError::from_response)
25156            .await?;
25157
25158        let mut response = response;
25159        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25160            xml_util::start_element(actual_tag_name, stack)?;
25161            let result = GetServerCertificateResponseDeserializer::deserialize(
25162                "GetServerCertificateResult",
25163                stack,
25164            )?;
25165            skip_tree(stack);
25166            xml_util::end_element(actual_tag_name, stack)?;
25167            Ok(result)
25168        })
25169        .await?;
25170
25171        drop(response); // parse non-payload
25172        Ok(result)
25173    }
25174
25175    /// <p>Retrieves a service last accessed report that was created using the <code>GenerateServiceLastAccessedDetails</code> operation. You can use the <code>JobId</code> parameter in <code>GetServiceLastAccessedDetails</code> to retrieve the status of your report job. When the report is complete, you can retrieve the generated report. The report includes a list of AWS services that the resource (user, group, role, or managed policy) can access.</p> <note> <p>Service last accessed data does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, AWS Organizations policies, IAM permissions boundaries, and AWS STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For each service that the resource could access using permissions policies, the operation returns details about the most recent access attempt. If there was no attempt, the service is listed without details about the most recent attempt to access the service. If the operation fails, the <code>GetServiceLastAccessedDetails</code> operation returns the reason that it failed.</p> <p>The <code>GetServiceLastAccessedDetails</code> operation returns a list of services. This list includes the number of entities that have attempted to access the service and the date and time of the last attempt. It also returns the ARN of the following entity, depending on the resource ARN that you used to generate the report:</p> <ul> <li> <p> <b>User</b> – Returns the user ARN that you used to generate the report</p> </li> <li> <p> <b>Group</b> – Returns the ARN of the group member (user) that last attempted to access the service</p> </li> <li> <p> <b>Role</b> – Returns the role ARN that you used to generate the report</p> </li> <li> <p> <b>Policy</b> – Returns the ARN of the user or role that last used the policy to attempt to access the service</p> </li> </ul> <p>By default, the list is sorted by service namespace.</p> <p>If you specified <code>ACTION_LEVEL</code> granularity when you generated the report, this operation returns service and action last accessed data. This includes the most recent access attempt for each tracked action within a service. Otherwise, this operation returns only service data.</p> <p>For more information about service and action last accessed data, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p>
25176    async fn get_service_last_accessed_details(
25177        &self,
25178        input: GetServiceLastAccessedDetailsRequest,
25179    ) -> Result<
25180        GetServiceLastAccessedDetailsResponse,
25181        RusotoError<GetServiceLastAccessedDetailsError>,
25182    > {
25183        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25184        let params = self.new_params("GetServiceLastAccessedDetails");
25185        let mut params = params;
25186        GetServiceLastAccessedDetailsRequestSerializer::serialize(&mut params, "", &input);
25187        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25188        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25189
25190        let response = self
25191            .sign_and_dispatch(request, GetServiceLastAccessedDetailsError::from_response)
25192            .await?;
25193
25194        let mut response = response;
25195        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25196            xml_util::start_element(actual_tag_name, stack)?;
25197            let result = GetServiceLastAccessedDetailsResponseDeserializer::deserialize(
25198                "GetServiceLastAccessedDetailsResult",
25199                stack,
25200            )?;
25201            skip_tree(stack);
25202            xml_util::end_element(actual_tag_name, stack)?;
25203            Ok(result)
25204        })
25205        .await?;
25206
25207        drop(response); // parse non-payload
25208        Ok(result)
25209    }
25210
25211    /// <p>After you generate a group or policy report using the <code>GenerateServiceLastAccessedDetails</code> operation, you can use the <code>JobId</code> parameter in <code>GetServiceLastAccessedDetailsWithEntities</code>. This operation retrieves the status of your report job and a list of entities that could have used group or policy permissions to access the specified service.</p> <ul> <li> <p> <b>Group</b> – For a group report, this operation returns a list of users in the group that could have used the group’s policies in an attempt to access the service.</p> </li> <li> <p> <b>Policy</b> – For a policy report, this operation returns a list of entities (users or roles) that could have used the policy in an attempt to access the service.</p> </li> </ul> <p>You can also use this operation for user or role reports to retrieve details about those entities.</p> <p>If the operation fails, the <code>GetServiceLastAccessedDetailsWithEntities</code> operation returns the reason that it failed.</p> <p>By default, the list of associated entities is sorted by date, with the most recent access listed first.</p>
25212    async fn get_service_last_accessed_details_with_entities(
25213        &self,
25214        input: GetServiceLastAccessedDetailsWithEntitiesRequest,
25215    ) -> Result<
25216        GetServiceLastAccessedDetailsWithEntitiesResponse,
25217        RusotoError<GetServiceLastAccessedDetailsWithEntitiesError>,
25218    > {
25219        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25220        let params = self.new_params("GetServiceLastAccessedDetailsWithEntities");
25221        let mut params = params;
25222        GetServiceLastAccessedDetailsWithEntitiesRequestSerializer::serialize(
25223            &mut params,
25224            "",
25225            &input,
25226        );
25227        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25228        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25229
25230        let response = self
25231            .sign_and_dispatch(
25232                request,
25233                GetServiceLastAccessedDetailsWithEntitiesError::from_response,
25234            )
25235            .await?;
25236
25237        let mut response = response;
25238        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25239            xml_util::start_element(actual_tag_name, stack)?;
25240            let result =
25241                GetServiceLastAccessedDetailsWithEntitiesResponseDeserializer::deserialize(
25242                    "GetServiceLastAccessedDetailsWithEntitiesResult",
25243                    stack,
25244                )?;
25245            skip_tree(stack);
25246            xml_util::end_element(actual_tag_name, stack)?;
25247            Ok(result)
25248        })
25249        .await?;
25250
25251        drop(response); // parse non-payload
25252        Ok(result)
25253    }
25254
25255    /// <p>Retrieves the status of your service-linked role deletion. After you use <a>DeleteServiceLinkedRole</a> to submit a service-linked role for deletion, you can use the <code>DeletionTaskId</code> parameter in <code>GetServiceLinkedRoleDeletionStatus</code> to check the status of the deletion. If the deletion fails, this operation returns the reason that it failed, if that information is returned by the service.</p>
25256    async fn get_service_linked_role_deletion_status(
25257        &self,
25258        input: GetServiceLinkedRoleDeletionStatusRequest,
25259    ) -> Result<
25260        GetServiceLinkedRoleDeletionStatusResponse,
25261        RusotoError<GetServiceLinkedRoleDeletionStatusError>,
25262    > {
25263        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25264        let params = self.new_params("GetServiceLinkedRoleDeletionStatus");
25265        let mut params = params;
25266        GetServiceLinkedRoleDeletionStatusRequestSerializer::serialize(&mut params, "", &input);
25267        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25268        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25269
25270        let response = self
25271            .sign_and_dispatch(
25272                request,
25273                GetServiceLinkedRoleDeletionStatusError::from_response,
25274            )
25275            .await?;
25276
25277        let mut response = response;
25278        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25279            xml_util::start_element(actual_tag_name, stack)?;
25280            let result = GetServiceLinkedRoleDeletionStatusResponseDeserializer::deserialize(
25281                "GetServiceLinkedRoleDeletionStatusResult",
25282                stack,
25283            )?;
25284            skip_tree(stack);
25285            xml_util::end_element(actual_tag_name, stack)?;
25286            Ok(result)
25287        })
25288        .await?;
25289
25290        drop(response); // parse non-payload
25291        Ok(result)
25292    }
25293
25294    /// <p>Retrieves information about the specified IAM user, including the user's creation date, path, unique ID, and ARN.</p> <p>If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID used to sign the request to this operation.</p>
25295    async fn get_user(
25296        &self,
25297        input: GetUserRequest,
25298    ) -> Result<GetUserResponse, RusotoError<GetUserError>> {
25299        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25300        let params = self.new_params("GetUser");
25301        let mut params = params;
25302        GetUserRequestSerializer::serialize(&mut params, "", &input);
25303        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25304        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25305
25306        let response = self
25307            .sign_and_dispatch(request, GetUserError::from_response)
25308            .await?;
25309
25310        let mut response = response;
25311        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25312            xml_util::start_element(actual_tag_name, stack)?;
25313            let result = GetUserResponseDeserializer::deserialize("GetUserResult", stack)?;
25314            skip_tree(stack);
25315            xml_util::end_element(actual_tag_name, stack)?;
25316            Ok(result)
25317        })
25318        .await?;
25319
25320        drop(response); // parse non-payload
25321        Ok(result)
25322    }
25323
25324    /// <p>Retrieves the specified inline policy document that is embedded in the specified IAM user.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href="https://tools.ietf.org/html/rfc3986">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM user can also have managed policies attached to it. To retrieve a managed policy document that is attached to a user, use <a>GetPolicy</a> to determine the policy's default version. Then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
25325    async fn get_user_policy(
25326        &self,
25327        input: GetUserPolicyRequest,
25328    ) -> Result<GetUserPolicyResponse, RusotoError<GetUserPolicyError>> {
25329        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25330        let params = self.new_params("GetUserPolicy");
25331        let mut params = params;
25332        GetUserPolicyRequestSerializer::serialize(&mut params, "", &input);
25333        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25334        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25335
25336        let response = self
25337            .sign_and_dispatch(request, GetUserPolicyError::from_response)
25338            .await?;
25339
25340        let mut response = response;
25341        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25342            xml_util::start_element(actual_tag_name, stack)?;
25343            let result =
25344                GetUserPolicyResponseDeserializer::deserialize("GetUserPolicyResult", stack)?;
25345            skip_tree(stack);
25346            xml_util::end_element(actual_tag_name, stack)?;
25347            Ok(result)
25348        })
25349        .await?;
25350
25351        drop(response); // parse non-payload
25352        Ok(result)
25353    }
25354
25355    /// <p><p>Returns information about the access key IDs associated with the specified IAM user. If there is none, the operation returns an empty list.</p> <p>Although each user is limited to a small number of keys, you can still paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>If the <code>UserName</code> field is not specified, the user name is determined implicitly based on the AWS access key ID used to sign the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p> <note> <p>To ensure the security of your AWS account, the secret access key is accessible only during key and user creation.</p> </note></p>
25356    async fn list_access_keys(
25357        &self,
25358        input: ListAccessKeysRequest,
25359    ) -> Result<ListAccessKeysResponse, RusotoError<ListAccessKeysError>> {
25360        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25361        let params = self.new_params("ListAccessKeys");
25362        let mut params = params;
25363        ListAccessKeysRequestSerializer::serialize(&mut params, "", &input);
25364        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25365        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25366
25367        let response = self
25368            .sign_and_dispatch(request, ListAccessKeysError::from_response)
25369            .await?;
25370
25371        let mut response = response;
25372        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25373            xml_util::start_element(actual_tag_name, stack)?;
25374            let result =
25375                ListAccessKeysResponseDeserializer::deserialize("ListAccessKeysResult", stack)?;
25376            skip_tree(stack);
25377            xml_util::end_element(actual_tag_name, stack)?;
25378            Ok(result)
25379        })
25380        .await?;
25381
25382        drop(response); // parse non-payload
25383        Ok(result)
25384    }
25385
25386    /// <p>Lists the account alias associated with the AWS account (Note: you can have only one). For information about using an AWS account alias, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AccountAlias.html">Using an alias for your AWS account ID</a> in the <i>IAM User Guide</i>.</p>
25387    async fn list_account_aliases(
25388        &self,
25389        input: ListAccountAliasesRequest,
25390    ) -> Result<ListAccountAliasesResponse, RusotoError<ListAccountAliasesError>> {
25391        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25392        let params = self.new_params("ListAccountAliases");
25393        let mut params = params;
25394        ListAccountAliasesRequestSerializer::serialize(&mut params, "", &input);
25395        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25396        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25397
25398        let response = self
25399            .sign_and_dispatch(request, ListAccountAliasesError::from_response)
25400            .await?;
25401
25402        let mut response = response;
25403        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25404            xml_util::start_element(actual_tag_name, stack)?;
25405            let result = ListAccountAliasesResponseDeserializer::deserialize(
25406                "ListAccountAliasesResult",
25407                stack,
25408            )?;
25409            skip_tree(stack);
25410            xml_util::end_element(actual_tag_name, stack)?;
25411            Ok(result)
25412        })
25413        .await?;
25414
25415        drop(response); // parse non-payload
25416        Ok(result)
25417    }
25418
25419    /// <p>Lists all managed policies that are attached to the specified IAM group.</p> <p>An IAM group can also have inline policies embedded with it. To list the inline policies for a group, use <a>ListGroupPolicies</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified group (or none that match the specified path prefix), the operation returns an empty list.</p>
25420    async fn list_attached_group_policies(
25421        &self,
25422        input: ListAttachedGroupPoliciesRequest,
25423    ) -> Result<ListAttachedGroupPoliciesResponse, RusotoError<ListAttachedGroupPoliciesError>>
25424    {
25425        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25426        let params = self.new_params("ListAttachedGroupPolicies");
25427        let mut params = params;
25428        ListAttachedGroupPoliciesRequestSerializer::serialize(&mut params, "", &input);
25429        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25430        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25431
25432        let response = self
25433            .sign_and_dispatch(request, ListAttachedGroupPoliciesError::from_response)
25434            .await?;
25435
25436        let mut response = response;
25437        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25438            xml_util::start_element(actual_tag_name, stack)?;
25439            let result = ListAttachedGroupPoliciesResponseDeserializer::deserialize(
25440                "ListAttachedGroupPoliciesResult",
25441                stack,
25442            )?;
25443            skip_tree(stack);
25444            xml_util::end_element(actual_tag_name, stack)?;
25445            Ok(result)
25446        })
25447        .await?;
25448
25449        drop(response); // parse non-payload
25450        Ok(result)
25451    }
25452
25453    /// <p>Lists all managed policies that are attached to the specified IAM role.</p> <p>An IAM role can also have inline policies embedded with it. To list the inline policies for a role, use <a>ListRolePolicies</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified role (or none that match the specified path prefix), the operation returns an empty list.</p>
25454    async fn list_attached_role_policies(
25455        &self,
25456        input: ListAttachedRolePoliciesRequest,
25457    ) -> Result<ListAttachedRolePoliciesResponse, RusotoError<ListAttachedRolePoliciesError>> {
25458        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25459        let params = self.new_params("ListAttachedRolePolicies");
25460        let mut params = params;
25461        ListAttachedRolePoliciesRequestSerializer::serialize(&mut params, "", &input);
25462        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25463        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25464
25465        let response = self
25466            .sign_and_dispatch(request, ListAttachedRolePoliciesError::from_response)
25467            .await?;
25468
25469        let mut response = response;
25470        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25471            xml_util::start_element(actual_tag_name, stack)?;
25472            let result = ListAttachedRolePoliciesResponseDeserializer::deserialize(
25473                "ListAttachedRolePoliciesResult",
25474                stack,
25475            )?;
25476            skip_tree(stack);
25477            xml_util::end_element(actual_tag_name, stack)?;
25478            Ok(result)
25479        })
25480        .await?;
25481
25482        drop(response); // parse non-payload
25483        Ok(result)
25484    }
25485
25486    /// <p>Lists all managed policies that are attached to the specified IAM user.</p> <p>An IAM user can also have inline policies embedded with it. To list the inline policies for a user, use <a>ListUserPolicies</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified group (or none that match the specified path prefix), the operation returns an empty list.</p>
25487    async fn list_attached_user_policies(
25488        &self,
25489        input: ListAttachedUserPoliciesRequest,
25490    ) -> Result<ListAttachedUserPoliciesResponse, RusotoError<ListAttachedUserPoliciesError>> {
25491        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25492        let params = self.new_params("ListAttachedUserPolicies");
25493        let mut params = params;
25494        ListAttachedUserPoliciesRequestSerializer::serialize(&mut params, "", &input);
25495        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25496        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25497
25498        let response = self
25499            .sign_and_dispatch(request, ListAttachedUserPoliciesError::from_response)
25500            .await?;
25501
25502        let mut response = response;
25503        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25504            xml_util::start_element(actual_tag_name, stack)?;
25505            let result = ListAttachedUserPoliciesResponseDeserializer::deserialize(
25506                "ListAttachedUserPoliciesResult",
25507                stack,
25508            )?;
25509            skip_tree(stack);
25510            xml_util::end_element(actual_tag_name, stack)?;
25511            Ok(result)
25512        })
25513        .await?;
25514
25515        drop(response); // parse non-payload
25516        Ok(result)
25517    }
25518
25519    /// <p>Lists all IAM users, groups, and roles that the specified managed policy is attached to.</p> <p>You can use the optional <code>EntityFilter</code> parameter to limit the results to a particular type of entity (users, groups, or roles). For example, to list only the roles that are attached to the specified policy, set <code>EntityFilter</code> to <code>Role</code>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
25520    async fn list_entities_for_policy(
25521        &self,
25522        input: ListEntitiesForPolicyRequest,
25523    ) -> Result<ListEntitiesForPolicyResponse, RusotoError<ListEntitiesForPolicyError>> {
25524        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25525        let params = self.new_params("ListEntitiesForPolicy");
25526        let mut params = params;
25527        ListEntitiesForPolicyRequestSerializer::serialize(&mut params, "", &input);
25528        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25529        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25530
25531        let response = self
25532            .sign_and_dispatch(request, ListEntitiesForPolicyError::from_response)
25533            .await?;
25534
25535        let mut response = response;
25536        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25537            xml_util::start_element(actual_tag_name, stack)?;
25538            let result = ListEntitiesForPolicyResponseDeserializer::deserialize(
25539                "ListEntitiesForPolicyResult",
25540                stack,
25541            )?;
25542            skip_tree(stack);
25543            xml_util::end_element(actual_tag_name, stack)?;
25544            Ok(result)
25545        })
25546        .await?;
25547
25548        drop(response); // parse non-payload
25549        Ok(result)
25550    }
25551
25552    /// <p>Lists the names of the inline policies that are embedded in the specified IAM group.</p> <p>An IAM group can also have managed policies attached to it. To list the managed policies that are attached to a group, use <a>ListAttachedGroupPolicies</a>. For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified group, the operation returns an empty list.</p>
25553    async fn list_group_policies(
25554        &self,
25555        input: ListGroupPoliciesRequest,
25556    ) -> Result<ListGroupPoliciesResponse, RusotoError<ListGroupPoliciesError>> {
25557        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25558        let params = self.new_params("ListGroupPolicies");
25559        let mut params = params;
25560        ListGroupPoliciesRequestSerializer::serialize(&mut params, "", &input);
25561        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25562        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25563
25564        let response = self
25565            .sign_and_dispatch(request, ListGroupPoliciesError::from_response)
25566            .await?;
25567
25568        let mut response = response;
25569        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25570            xml_util::start_element(actual_tag_name, stack)?;
25571            let result = ListGroupPoliciesResponseDeserializer::deserialize(
25572                "ListGroupPoliciesResult",
25573                stack,
25574            )?;
25575            skip_tree(stack);
25576            xml_util::end_element(actual_tag_name, stack)?;
25577            Ok(result)
25578        })
25579        .await?;
25580
25581        drop(response); // parse non-payload
25582        Ok(result)
25583    }
25584
25585    /// <p>Lists the IAM groups that have the specified path prefix.</p> <p> You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
25586    async fn list_groups(
25587        &self,
25588        input: ListGroupsRequest,
25589    ) -> Result<ListGroupsResponse, RusotoError<ListGroupsError>> {
25590        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25591        let params = self.new_params("ListGroups");
25592        let mut params = params;
25593        ListGroupsRequestSerializer::serialize(&mut params, "", &input);
25594        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25595        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25596
25597        let response = self
25598            .sign_and_dispatch(request, ListGroupsError::from_response)
25599            .await?;
25600
25601        let mut response = response;
25602        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25603            xml_util::start_element(actual_tag_name, stack)?;
25604            let result = ListGroupsResponseDeserializer::deserialize("ListGroupsResult", stack)?;
25605            skip_tree(stack);
25606            xml_util::end_element(actual_tag_name, stack)?;
25607            Ok(result)
25608        })
25609        .await?;
25610
25611        drop(response); // parse non-payload
25612        Ok(result)
25613    }
25614
25615    /// <p>Lists the IAM groups that the specified IAM user belongs to.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
25616    async fn list_groups_for_user(
25617        &self,
25618        input: ListGroupsForUserRequest,
25619    ) -> Result<ListGroupsForUserResponse, RusotoError<ListGroupsForUserError>> {
25620        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25621        let params = self.new_params("ListGroupsForUser");
25622        let mut params = params;
25623        ListGroupsForUserRequestSerializer::serialize(&mut params, "", &input);
25624        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25625        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25626
25627        let response = self
25628            .sign_and_dispatch(request, ListGroupsForUserError::from_response)
25629            .await?;
25630
25631        let mut response = response;
25632        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25633            xml_util::start_element(actual_tag_name, stack)?;
25634            let result = ListGroupsForUserResponseDeserializer::deserialize(
25635                "ListGroupsForUserResult",
25636                stack,
25637            )?;
25638            skip_tree(stack);
25639            xml_util::end_element(actual_tag_name, stack)?;
25640            Ok(result)
25641        })
25642        .await?;
25643
25644        drop(response); // parse non-payload
25645        Ok(result)
25646    }
25647
25648    /// <p>Lists the tags that are attached to the specified IAM instance profile. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
25649    async fn list_instance_profile_tags(
25650        &self,
25651        input: ListInstanceProfileTagsRequest,
25652    ) -> Result<ListInstanceProfileTagsResponse, RusotoError<ListInstanceProfileTagsError>> {
25653        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25654        let params = self.new_params("ListInstanceProfileTags");
25655        let mut params = params;
25656        ListInstanceProfileTagsRequestSerializer::serialize(&mut params, "", &input);
25657        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25658        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25659
25660        let response = self
25661            .sign_and_dispatch(request, ListInstanceProfileTagsError::from_response)
25662            .await?;
25663
25664        let mut response = response;
25665        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25666            xml_util::start_element(actual_tag_name, stack)?;
25667            let result = ListInstanceProfileTagsResponseDeserializer::deserialize(
25668                "ListInstanceProfileTagsResult",
25669                stack,
25670            )?;
25671            skip_tree(stack);
25672            xml_util::end_element(actual_tag_name, stack)?;
25673            Ok(result)
25674        })
25675        .await?;
25676
25677        drop(response); // parse non-payload
25678        Ok(result)
25679    }
25680
25681    /// <p>Lists the instance profiles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an instance profile, see <a>GetInstanceProfile</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
25682    async fn list_instance_profiles(
25683        &self,
25684        input: ListInstanceProfilesRequest,
25685    ) -> Result<ListInstanceProfilesResponse, RusotoError<ListInstanceProfilesError>> {
25686        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25687        let params = self.new_params("ListInstanceProfiles");
25688        let mut params = params;
25689        ListInstanceProfilesRequestSerializer::serialize(&mut params, "", &input);
25690        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25691        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25692
25693        let response = self
25694            .sign_and_dispatch(request, ListInstanceProfilesError::from_response)
25695            .await?;
25696
25697        let mut response = response;
25698        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25699            xml_util::start_element(actual_tag_name, stack)?;
25700            let result = ListInstanceProfilesResponseDeserializer::deserialize(
25701                "ListInstanceProfilesResult",
25702                stack,
25703            )?;
25704            skip_tree(stack);
25705            xml_util::end_element(actual_tag_name, stack)?;
25706            Ok(result)
25707        })
25708        .await?;
25709
25710        drop(response); // parse non-payload
25711        Ok(result)
25712    }
25713
25714    /// <p>Lists the instance profiles that have the specified associated IAM role. If there are none, the operation returns an empty list. For more information about instance profiles, go to <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
25715    async fn list_instance_profiles_for_role(
25716        &self,
25717        input: ListInstanceProfilesForRoleRequest,
25718    ) -> Result<ListInstanceProfilesForRoleResponse, RusotoError<ListInstanceProfilesForRoleError>>
25719    {
25720        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25721        let params = self.new_params("ListInstanceProfilesForRole");
25722        let mut params = params;
25723        ListInstanceProfilesForRoleRequestSerializer::serialize(&mut params, "", &input);
25724        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25725        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25726
25727        let response = self
25728            .sign_and_dispatch(request, ListInstanceProfilesForRoleError::from_response)
25729            .await?;
25730
25731        let mut response = response;
25732        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25733            xml_util::start_element(actual_tag_name, stack)?;
25734            let result = ListInstanceProfilesForRoleResponseDeserializer::deserialize(
25735                "ListInstanceProfilesForRoleResult",
25736                stack,
25737            )?;
25738            skip_tree(stack);
25739            xml_util::end_element(actual_tag_name, stack)?;
25740            Ok(result)
25741        })
25742        .await?;
25743
25744        drop(response); // parse non-payload
25745        Ok(result)
25746    }
25747
25748    /// <p>Lists the tags that are attached to the specified IAM virtual multi-factor authentication (MFA) device. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
25749    async fn list_mfa_device_tags(
25750        &self,
25751        input: ListMFADeviceTagsRequest,
25752    ) -> Result<ListMFADeviceTagsResponse, RusotoError<ListMFADeviceTagsError>> {
25753        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25754        let params = self.new_params("ListMFADeviceTags");
25755        let mut params = params;
25756        ListMFADeviceTagsRequestSerializer::serialize(&mut params, "", &input);
25757        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25758        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25759
25760        let response = self
25761            .sign_and_dispatch(request, ListMFADeviceTagsError::from_response)
25762            .await?;
25763
25764        let mut response = response;
25765        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25766            xml_util::start_element(actual_tag_name, stack)?;
25767            let result = ListMFADeviceTagsResponseDeserializer::deserialize(
25768                "ListMFADeviceTagsResult",
25769                stack,
25770            )?;
25771            skip_tree(stack);
25772            xml_util::end_element(actual_tag_name, stack)?;
25773            Ok(result)
25774        })
25775        .await?;
25776
25777        drop(response); // parse non-payload
25778        Ok(result)
25779    }
25780
25781    /// <p>Lists the MFA devices for an IAM user. If the request includes a IAM user name, then this operation lists all the MFA devices associated with the specified user. If you do not specify a user name, IAM determines the user name implicitly based on the AWS access key ID signing the request for this operation.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
25782    async fn list_mfa_devices(
25783        &self,
25784        input: ListMFADevicesRequest,
25785    ) -> Result<ListMFADevicesResponse, RusotoError<ListMFADevicesError>> {
25786        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25787        let params = self.new_params("ListMFADevices");
25788        let mut params = params;
25789        ListMFADevicesRequestSerializer::serialize(&mut params, "", &input);
25790        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25791        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25792
25793        let response = self
25794            .sign_and_dispatch(request, ListMFADevicesError::from_response)
25795            .await?;
25796
25797        let mut response = response;
25798        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25799            xml_util::start_element(actual_tag_name, stack)?;
25800            let result =
25801                ListMFADevicesResponseDeserializer::deserialize("ListMFADevicesResult", stack)?;
25802            skip_tree(stack);
25803            xml_util::end_element(actual_tag_name, stack)?;
25804            Ok(result)
25805        })
25806        .await?;
25807
25808        drop(response); // parse non-payload
25809        Ok(result)
25810    }
25811
25812    /// <p>Lists the tags that are attached to the specified OpenID Connect (OIDC)-compatible identity provider. The returned list of tags is sorted by tag key. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html">About web identity federation</a>.</p> <p>For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
25813    async fn list_open_id_connect_provider_tags(
25814        &self,
25815        input: ListOpenIDConnectProviderTagsRequest,
25816    ) -> Result<
25817        ListOpenIDConnectProviderTagsResponse,
25818        RusotoError<ListOpenIDConnectProviderTagsError>,
25819    > {
25820        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25821        let params = self.new_params("ListOpenIDConnectProviderTags");
25822        let mut params = params;
25823        ListOpenIDConnectProviderTagsRequestSerializer::serialize(&mut params, "", &input);
25824        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25825        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25826
25827        let response = self
25828            .sign_and_dispatch(request, ListOpenIDConnectProviderTagsError::from_response)
25829            .await?;
25830
25831        let mut response = response;
25832        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25833            xml_util::start_element(actual_tag_name, stack)?;
25834            let result = ListOpenIDConnectProviderTagsResponseDeserializer::deserialize(
25835                "ListOpenIDConnectProviderTagsResult",
25836                stack,
25837            )?;
25838            skip_tree(stack);
25839            xml_util::end_element(actual_tag_name, stack)?;
25840            Ok(result)
25841        })
25842        .await?;
25843
25844        drop(response); // parse non-payload
25845        Ok(result)
25846    }
25847
25848    /// <p><p>Lists information about the IAM OpenID Connect (OIDC) provider resource objects defined in the AWS account.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an OIDC provider, see <a>GetOpenIDConnectProvider</a>.</p> </note></p>
25849    async fn list_open_id_connect_providers(
25850        &self,
25851        input: ListOpenIDConnectProvidersRequest,
25852    ) -> Result<ListOpenIDConnectProvidersResponse, RusotoError<ListOpenIDConnectProvidersError>>
25853    {
25854        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25855        let params = self.new_params("ListOpenIDConnectProviders");
25856        let mut params = params;
25857        ListOpenIDConnectProvidersRequestSerializer::serialize(&mut params, "", &input);
25858        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25859        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25860
25861        let response = self
25862            .sign_and_dispatch(request, ListOpenIDConnectProvidersError::from_response)
25863            .await?;
25864
25865        let mut response = response;
25866        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25867            xml_util::start_element(actual_tag_name, stack)?;
25868            let result = ListOpenIDConnectProvidersResponseDeserializer::deserialize(
25869                "ListOpenIDConnectProvidersResult",
25870                stack,
25871            )?;
25872            skip_tree(stack);
25873            xml_util::end_element(actual_tag_name, stack)?;
25874            Ok(result)
25875        })
25876        .await?;
25877
25878        drop(response); // parse non-payload
25879        Ok(result)
25880    }
25881
25882    /// <p><p>Lists all the managed policies that are available in your AWS account, including your own customer-defined managed policies and all AWS managed policies.</p> <p>You can filter the list of policies that is returned using the optional <code>OnlyAttached</code>, <code>Scope</code>, and <code>PathPrefix</code> parameters. For example, to list only the customer managed policies in your AWS account, set <code>Scope</code> to <code>Local</code>. To list only AWS managed policies, set <code>Scope</code> to <code>AWS</code>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>For more information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a customer manged policy, see <a>GetPolicy</a>.</p> </note></p>
25883    async fn list_policies(
25884        &self,
25885        input: ListPoliciesRequest,
25886    ) -> Result<ListPoliciesResponse, RusotoError<ListPoliciesError>> {
25887        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25888        let params = self.new_params("ListPolicies");
25889        let mut params = params;
25890        ListPoliciesRequestSerializer::serialize(&mut params, "", &input);
25891        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25892        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25893
25894        let response = self
25895            .sign_and_dispatch(request, ListPoliciesError::from_response)
25896            .await?;
25897
25898        let mut response = response;
25899        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25900            xml_util::start_element(actual_tag_name, stack)?;
25901            let result =
25902                ListPoliciesResponseDeserializer::deserialize("ListPoliciesResult", stack)?;
25903            skip_tree(stack);
25904            xml_util::end_element(actual_tag_name, stack)?;
25905            Ok(result)
25906        })
25907        .await?;
25908
25909        drop(response); // parse non-payload
25910        Ok(result)
25911    }
25912
25913    /// <p>Retrieves a list of policies that the IAM identity (user, group, or role) can use to access each specified service.</p> <note> <p>This operation does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, AWS Organizations policies, IAM permissions boundaries, and AWS STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>The list of policies returned by the operation depends on the ARN of the identity that you provide.</p> <ul> <li> <p> <b>User</b> – The list of policies includes the managed and inline policies that are attached to the user directly. The list also includes any additional managed and inline policies that are attached to the group to which the user belongs. </p> </li> <li> <p> <b>Group</b> – The list of policies includes only the managed and inline policies that are attached to the group directly. Policies that are attached to the group’s user are not included.</p> </li> <li> <p> <b>Role</b> – The list of policies includes only the managed and inline policies that are attached to the role.</p> </li> </ul> <p>For each managed policy, this operation returns the ARN and policy name. For each inline policy, it returns the policy name and the entity to which it is attached. Inline policies do not have an ARN. For more information about these policy types, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>Policies that are attached to users and roles as permissions boundaries are not returned. To view which managed policy is currently used to set the permissions boundary for a user or role, use the <a>GetUser</a> or <a>GetRole</a> operations.</p>
25914    async fn list_policies_granting_service_access(
25915        &self,
25916        input: ListPoliciesGrantingServiceAccessRequest,
25917    ) -> Result<
25918        ListPoliciesGrantingServiceAccessResponse,
25919        RusotoError<ListPoliciesGrantingServiceAccessError>,
25920    > {
25921        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25922        let params = self.new_params("ListPoliciesGrantingServiceAccess");
25923        let mut params = params;
25924        ListPoliciesGrantingServiceAccessRequestSerializer::serialize(&mut params, "", &input);
25925        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25926        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25927
25928        let response = self
25929            .sign_and_dispatch(
25930                request,
25931                ListPoliciesGrantingServiceAccessError::from_response,
25932            )
25933            .await?;
25934
25935        let mut response = response;
25936        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25937            xml_util::start_element(actual_tag_name, stack)?;
25938            let result = ListPoliciesGrantingServiceAccessResponseDeserializer::deserialize(
25939                "ListPoliciesGrantingServiceAccessResult",
25940                stack,
25941            )?;
25942            skip_tree(stack);
25943            xml_util::end_element(actual_tag_name, stack)?;
25944            Ok(result)
25945        })
25946        .await?;
25947
25948        drop(response); // parse non-payload
25949        Ok(result)
25950    }
25951
25952    /// <p>Lists the tags that are attached to the specified IAM customer managed policy. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
25953    async fn list_policy_tags(
25954        &self,
25955        input: ListPolicyTagsRequest,
25956    ) -> Result<ListPolicyTagsResponse, RusotoError<ListPolicyTagsError>> {
25957        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25958        let params = self.new_params("ListPolicyTags");
25959        let mut params = params;
25960        ListPolicyTagsRequestSerializer::serialize(&mut params, "", &input);
25961        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25962        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25963
25964        let response = self
25965            .sign_and_dispatch(request, ListPolicyTagsError::from_response)
25966            .await?;
25967
25968        let mut response = response;
25969        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
25970            xml_util::start_element(actual_tag_name, stack)?;
25971            let result =
25972                ListPolicyTagsResponseDeserializer::deserialize("ListPolicyTagsResult", stack)?;
25973            skip_tree(stack);
25974            xml_util::end_element(actual_tag_name, stack)?;
25975            Ok(result)
25976        })
25977        .await?;
25978
25979        drop(response); // parse non-payload
25980        Ok(result)
25981    }
25982
25983    /// <p>Lists information about the versions of the specified managed policy, including the version that is currently set as the policy's default version.</p> <p>For more information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
25984    async fn list_policy_versions(
25985        &self,
25986        input: ListPolicyVersionsRequest,
25987    ) -> Result<ListPolicyVersionsResponse, RusotoError<ListPolicyVersionsError>> {
25988        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
25989        let params = self.new_params("ListPolicyVersions");
25990        let mut params = params;
25991        ListPolicyVersionsRequestSerializer::serialize(&mut params, "", &input);
25992        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
25993        request.set_content_type("application/x-www-form-urlencoded".to_owned());
25994
25995        let response = self
25996            .sign_and_dispatch(request, ListPolicyVersionsError::from_response)
25997            .await?;
25998
25999        let mut response = response;
26000        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26001            xml_util::start_element(actual_tag_name, stack)?;
26002            let result = ListPolicyVersionsResponseDeserializer::deserialize(
26003                "ListPolicyVersionsResult",
26004                stack,
26005            )?;
26006            skip_tree(stack);
26007            xml_util::end_element(actual_tag_name, stack)?;
26008            Ok(result)
26009        })
26010        .await?;
26011
26012        drop(response); // parse non-payload
26013        Ok(result)
26014    }
26015
26016    /// <p>Lists the names of the inline policies that are embedded in the specified IAM role.</p> <p>An IAM role can also have managed policies attached to it. To list the managed policies that are attached to a role, use <a>ListAttachedRolePolicies</a>. For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified role, the operation returns an empty list.</p>
26017    async fn list_role_policies(
26018        &self,
26019        input: ListRolePoliciesRequest,
26020    ) -> Result<ListRolePoliciesResponse, RusotoError<ListRolePoliciesError>> {
26021        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26022        let params = self.new_params("ListRolePolicies");
26023        let mut params = params;
26024        ListRolePoliciesRequestSerializer::serialize(&mut params, "", &input);
26025        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26026        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26027
26028        let response = self
26029            .sign_and_dispatch(request, ListRolePoliciesError::from_response)
26030            .await?;
26031
26032        let mut response = response;
26033        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26034            xml_util::start_element(actual_tag_name, stack)?;
26035            let result =
26036                ListRolePoliciesResponseDeserializer::deserialize("ListRolePoliciesResult", stack)?;
26037            skip_tree(stack);
26038            xml_util::end_element(actual_tag_name, stack)?;
26039            Ok(result)
26040        })
26041        .await?;
26042
26043        drop(response); // parse non-payload
26044        Ok(result)
26045    }
26046
26047    /// <p>Lists the tags that are attached to the specified role. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
26048    async fn list_role_tags(
26049        &self,
26050        input: ListRoleTagsRequest,
26051    ) -> Result<ListRoleTagsResponse, RusotoError<ListRoleTagsError>> {
26052        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26053        let params = self.new_params("ListRoleTags");
26054        let mut params = params;
26055        ListRoleTagsRequestSerializer::serialize(&mut params, "", &input);
26056        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26057        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26058
26059        let response = self
26060            .sign_and_dispatch(request, ListRoleTagsError::from_response)
26061            .await?;
26062
26063        let mut response = response;
26064        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26065            xml_util::start_element(actual_tag_name, stack)?;
26066            let result =
26067                ListRoleTagsResponseDeserializer::deserialize("ListRoleTagsResult", stack)?;
26068            skip_tree(stack);
26069            xml_util::end_element(actual_tag_name, stack)?;
26070            Ok(result)
26071        })
26072        .await?;
26073
26074        drop(response); // parse non-payload
26075        Ok(result)
26076    }
26077
26078    /// <p>Lists the IAM roles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a role, see <a>GetRole</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
26079    async fn list_roles(
26080        &self,
26081        input: ListRolesRequest,
26082    ) -> Result<ListRolesResponse, RusotoError<ListRolesError>> {
26083        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26084        let params = self.new_params("ListRoles");
26085        let mut params = params;
26086        ListRolesRequestSerializer::serialize(&mut params, "", &input);
26087        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26088        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26089
26090        let response = self
26091            .sign_and_dispatch(request, ListRolesError::from_response)
26092            .await?;
26093
26094        let mut response = response;
26095        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26096            xml_util::start_element(actual_tag_name, stack)?;
26097            let result = ListRolesResponseDeserializer::deserialize("ListRolesResult", stack)?;
26098            skip_tree(stack);
26099            xml_util::end_element(actual_tag_name, stack)?;
26100            Ok(result)
26101        })
26102        .await?;
26103
26104        drop(response); // parse non-payload
26105        Ok(result)
26106    }
26107
26108    /// <p>Lists the tags that are attached to the specified Security Assertion Markup Language (SAML) identity provider. The returned list of tags is sorted by tag key. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html">About SAML 2.0-based federation</a>.</p> <p>For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
26109    async fn list_saml_provider_tags(
26110        &self,
26111        input: ListSAMLProviderTagsRequest,
26112    ) -> Result<ListSAMLProviderTagsResponse, RusotoError<ListSAMLProviderTagsError>> {
26113        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26114        let params = self.new_params("ListSAMLProviderTags");
26115        let mut params = params;
26116        ListSAMLProviderTagsRequestSerializer::serialize(&mut params, "", &input);
26117        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26118        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26119
26120        let response = self
26121            .sign_and_dispatch(request, ListSAMLProviderTagsError::from_response)
26122            .await?;
26123
26124        let mut response = response;
26125        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26126            xml_util::start_element(actual_tag_name, stack)?;
26127            let result = ListSAMLProviderTagsResponseDeserializer::deserialize(
26128                "ListSAMLProviderTagsResult",
26129                stack,
26130            )?;
26131            skip_tree(stack);
26132            xml_util::end_element(actual_tag_name, stack)?;
26133            Ok(result)
26134        })
26135        .await?;
26136
26137        drop(response); // parse non-payload
26138        Ok(result)
26139    }
26140
26141    /// <p><p>Lists the SAML provider resource objects defined in IAM in the account. IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a SAML provider, see <a>GetSAMLProvider</a>.</p> <important> <p> This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </important></p>
26142    async fn list_saml_providers(
26143        &self,
26144        input: ListSAMLProvidersRequest,
26145    ) -> Result<ListSAMLProvidersResponse, RusotoError<ListSAMLProvidersError>> {
26146        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26147        let params = self.new_params("ListSAMLProviders");
26148        let mut params = params;
26149        ListSAMLProvidersRequestSerializer::serialize(&mut params, "", &input);
26150        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26151        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26152
26153        let response = self
26154            .sign_and_dispatch(request, ListSAMLProvidersError::from_response)
26155            .await?;
26156
26157        let mut response = response;
26158        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26159            xml_util::start_element(actual_tag_name, stack)?;
26160            let result = ListSAMLProvidersResponseDeserializer::deserialize(
26161                "ListSAMLProvidersResult",
26162                stack,
26163            )?;
26164            skip_tree(stack);
26165            xml_util::end_element(actual_tag_name, stack)?;
26166            Ok(result)
26167        })
26168        .await?;
26169
26170        drop(response); // parse non-payload
26171        Ok(result)
26172    }
26173
26174    /// <p>Returns information about the SSH public keys associated with the specified IAM user. If none exists, the operation returns an empty list.</p> <p>The SSH public keys returned by this operation are used only for authenticating the IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p> <p>Although each user is limited to a small number of keys, you can still paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
26175    async fn list_ssh_public_keys(
26176        &self,
26177        input: ListSSHPublicKeysRequest,
26178    ) -> Result<ListSSHPublicKeysResponse, RusotoError<ListSSHPublicKeysError>> {
26179        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26180        let params = self.new_params("ListSSHPublicKeys");
26181        let mut params = params;
26182        ListSSHPublicKeysRequestSerializer::serialize(&mut params, "", &input);
26183        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26184        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26185
26186        let response = self
26187            .sign_and_dispatch(request, ListSSHPublicKeysError::from_response)
26188            .await?;
26189
26190        let mut response = response;
26191        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26192            xml_util::start_element(actual_tag_name, stack)?;
26193            let result = ListSSHPublicKeysResponseDeserializer::deserialize(
26194                "ListSSHPublicKeysResult",
26195                stack,
26196            )?;
26197            skip_tree(stack);
26198            xml_util::end_element(actual_tag_name, stack)?;
26199            Ok(result)
26200        })
26201        .await?;
26202
26203        drop(response); // parse non-payload
26204        Ok(result)
26205    }
26206
26207    /// <p><p>Lists the tags that are attached to the specified IAM server certificate. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>For certificates in a Region supported by AWS Certificate Manager (ACM), we recommend that you don&#39;t use IAM server certificates. Instead, use ACM to provision, manage, and deploy your server certificates. For more information about IAM server certificates, <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>.</p> </note></p>
26208    async fn list_server_certificate_tags(
26209        &self,
26210        input: ListServerCertificateTagsRequest,
26211    ) -> Result<ListServerCertificateTagsResponse, RusotoError<ListServerCertificateTagsError>>
26212    {
26213        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26214        let params = self.new_params("ListServerCertificateTags");
26215        let mut params = params;
26216        ListServerCertificateTagsRequestSerializer::serialize(&mut params, "", &input);
26217        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26218        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26219
26220        let response = self
26221            .sign_and_dispatch(request, ListServerCertificateTagsError::from_response)
26222            .await?;
26223
26224        let mut response = response;
26225        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26226            xml_util::start_element(actual_tag_name, stack)?;
26227            let result = ListServerCertificateTagsResponseDeserializer::deserialize(
26228                "ListServerCertificateTagsResult",
26229                stack,
26230            )?;
26231            skip_tree(stack);
26232            xml_util::end_element(actual_tag_name, stack)?;
26233            Ok(result)
26234        })
26235        .await?;
26236
26237        drop(response); // parse non-payload
26238        Ok(result)
26239    }
26240
26241    /// <p><p>Lists the server certificates stored in IAM that have the specified path prefix. If none exist, the operation returns an empty list.</p> <p> You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic also includes a list of AWS services that can use the server certificates that you manage with IAM.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a servercertificate, see <a>GetServerCertificate</a>.</p> </note></p>
26242    async fn list_server_certificates(
26243        &self,
26244        input: ListServerCertificatesRequest,
26245    ) -> Result<ListServerCertificatesResponse, RusotoError<ListServerCertificatesError>> {
26246        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26247        let params = self.new_params("ListServerCertificates");
26248        let mut params = params;
26249        ListServerCertificatesRequestSerializer::serialize(&mut params, "", &input);
26250        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26251        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26252
26253        let response = self
26254            .sign_and_dispatch(request, ListServerCertificatesError::from_response)
26255            .await?;
26256
26257        let mut response = response;
26258        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26259            xml_util::start_element(actual_tag_name, stack)?;
26260            let result = ListServerCertificatesResponseDeserializer::deserialize(
26261                "ListServerCertificatesResult",
26262                stack,
26263            )?;
26264            skip_tree(stack);
26265            xml_util::end_element(actual_tag_name, stack)?;
26266            Ok(result)
26267        })
26268        .await?;
26269
26270        drop(response); // parse non-payload
26271        Ok(result)
26272    }
26273
26274    /// <p>Returns information about the service-specific credentials associated with the specified IAM user. If none exists, the operation returns an empty list. The service-specific credentials returned by this operation are used only for authenticating the IAM user to a specific service. For more information about using service-specific credentials to authenticate to an AWS service, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html">Set up service-specific credentials</a> in the AWS CodeCommit User Guide.</p>
26275    async fn list_service_specific_credentials(
26276        &self,
26277        input: ListServiceSpecificCredentialsRequest,
26278    ) -> Result<
26279        ListServiceSpecificCredentialsResponse,
26280        RusotoError<ListServiceSpecificCredentialsError>,
26281    > {
26282        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26283        let params = self.new_params("ListServiceSpecificCredentials");
26284        let mut params = params;
26285        ListServiceSpecificCredentialsRequestSerializer::serialize(&mut params, "", &input);
26286        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26287        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26288
26289        let response = self
26290            .sign_and_dispatch(request, ListServiceSpecificCredentialsError::from_response)
26291            .await?;
26292
26293        let mut response = response;
26294        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26295            xml_util::start_element(actual_tag_name, stack)?;
26296            let result = ListServiceSpecificCredentialsResponseDeserializer::deserialize(
26297                "ListServiceSpecificCredentialsResult",
26298                stack,
26299            )?;
26300            skip_tree(stack);
26301            xml_util::end_element(actual_tag_name, stack)?;
26302            Ok(result)
26303        })
26304        .await?;
26305
26306        drop(response); // parse non-payload
26307        Ok(result)
26308    }
26309
26310    /// <p>Returns information about the signing certificates associated with the specified IAM user. If none exists, the operation returns an empty list.</p> <p>Although each user is limited to a small number of signing certificates, you can still paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>If the <code>UserName</code> field is not specified, the user name is determined implicitly based on the AWS access key ID used to sign the request for this operation. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p>
26311    async fn list_signing_certificates(
26312        &self,
26313        input: ListSigningCertificatesRequest,
26314    ) -> Result<ListSigningCertificatesResponse, RusotoError<ListSigningCertificatesError>> {
26315        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26316        let params = self.new_params("ListSigningCertificates");
26317        let mut params = params;
26318        ListSigningCertificatesRequestSerializer::serialize(&mut params, "", &input);
26319        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26320        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26321
26322        let response = self
26323            .sign_and_dispatch(request, ListSigningCertificatesError::from_response)
26324            .await?;
26325
26326        let mut response = response;
26327        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26328            xml_util::start_element(actual_tag_name, stack)?;
26329            let result = ListSigningCertificatesResponseDeserializer::deserialize(
26330                "ListSigningCertificatesResult",
26331                stack,
26332            )?;
26333            skip_tree(stack);
26334            xml_util::end_element(actual_tag_name, stack)?;
26335            Ok(result)
26336        })
26337        .await?;
26338
26339        drop(response); // parse non-payload
26340        Ok(result)
26341    }
26342
26343    /// <p>Lists the names of the inline policies embedded in the specified IAM user.</p> <p>An IAM user can also have managed policies attached to it. To list the managed policies that are attached to a user, use <a>ListAttachedUserPolicies</a>. For more information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified user, the operation returns an empty list.</p>
26344    async fn list_user_policies(
26345        &self,
26346        input: ListUserPoliciesRequest,
26347    ) -> Result<ListUserPoliciesResponse, RusotoError<ListUserPoliciesError>> {
26348        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26349        let params = self.new_params("ListUserPolicies");
26350        let mut params = params;
26351        ListUserPoliciesRequestSerializer::serialize(&mut params, "", &input);
26352        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26353        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26354
26355        let response = self
26356            .sign_and_dispatch(request, ListUserPoliciesError::from_response)
26357            .await?;
26358
26359        let mut response = response;
26360        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26361            xml_util::start_element(actual_tag_name, stack)?;
26362            let result =
26363                ListUserPoliciesResponseDeserializer::deserialize("ListUserPoliciesResult", stack)?;
26364            skip_tree(stack);
26365            xml_util::end_element(actual_tag_name, stack)?;
26366            Ok(result)
26367        })
26368        .await?;
26369
26370        drop(response); // parse non-payload
26371        Ok(result)
26372    }
26373
26374    /// <p>Lists the tags that are attached to the specified IAM user. The returned list of tags is sorted by tag key. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
26375    async fn list_user_tags(
26376        &self,
26377        input: ListUserTagsRequest,
26378    ) -> Result<ListUserTagsResponse, RusotoError<ListUserTagsError>> {
26379        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26380        let params = self.new_params("ListUserTags");
26381        let mut params = params;
26382        ListUserTagsRequestSerializer::serialize(&mut params, "", &input);
26383        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26384        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26385
26386        let response = self
26387            .sign_and_dispatch(request, ListUserTagsError::from_response)
26388            .await?;
26389
26390        let mut response = response;
26391        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26392            xml_util::start_element(actual_tag_name, stack)?;
26393            let result =
26394                ListUserTagsResponseDeserializer::deserialize("ListUserTagsResult", stack)?;
26395            skip_tree(stack);
26396            xml_util::end_element(actual_tag_name, stack)?;
26397            Ok(result)
26398        })
26399        .await?;
26400
26401        drop(response); // parse non-payload
26402        Ok(result)
26403    }
26404
26405    /// <p>Lists the IAM users that have the specified path prefix. If no path prefix is specified, the operation returns all users in the AWS account. If there are none, the operation returns an empty list.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a user, see <a>GetUser</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
26406    async fn list_users(
26407        &self,
26408        input: ListUsersRequest,
26409    ) -> Result<ListUsersResponse, RusotoError<ListUsersError>> {
26410        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26411        let params = self.new_params("ListUsers");
26412        let mut params = params;
26413        ListUsersRequestSerializer::serialize(&mut params, "", &input);
26414        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26415        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26416
26417        let response = self
26418            .sign_and_dispatch(request, ListUsersError::from_response)
26419            .await?;
26420
26421        let mut response = response;
26422        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26423            xml_util::start_element(actual_tag_name, stack)?;
26424            let result = ListUsersResponseDeserializer::deserialize("ListUsersResult", stack)?;
26425            skip_tree(stack);
26426            xml_util::end_element(actual_tag_name, stack)?;
26427            Ok(result)
26428        })
26429        .await?;
26430
26431        drop(response); // parse non-payload
26432        Ok(result)
26433    }
26434
26435    /// <p>Lists the virtual MFA devices defined in the AWS account by assignment status. If you do not specify an assignment status, the operation returns a list of all virtual MFA devices. Assignment status can be <code>Assigned</code>, <code>Unassigned</code>, or <code>Any</code>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a virtual MFA device, see <a>ListVirtualMFADevices</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>
26436    async fn list_virtual_mfa_devices(
26437        &self,
26438        input: ListVirtualMFADevicesRequest,
26439    ) -> Result<ListVirtualMFADevicesResponse, RusotoError<ListVirtualMFADevicesError>> {
26440        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26441        let params = self.new_params("ListVirtualMFADevices");
26442        let mut params = params;
26443        ListVirtualMFADevicesRequestSerializer::serialize(&mut params, "", &input);
26444        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26445        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26446
26447        let response = self
26448            .sign_and_dispatch(request, ListVirtualMFADevicesError::from_response)
26449            .await?;
26450
26451        let mut response = response;
26452        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26453            xml_util::start_element(actual_tag_name, stack)?;
26454            let result = ListVirtualMFADevicesResponseDeserializer::deserialize(
26455                "ListVirtualMFADevicesResult",
26456                stack,
26457            )?;
26458            skip_tree(stack);
26459            xml_util::end_element(actual_tag_name, stack)?;
26460            Ok(result)
26461        })
26462        .await?;
26463
26464        drop(response); // parse non-payload
26465        Ok(result)
26466    }
26467
26468    /// <p><p>Adds or updates an inline policy document that is embedded in the specified IAM group.</p> <p>A user can also have managed policies attached to it. To attach a managed policy to a group, use <a>AttachGroupPolicy</a>. To create a new managed policy, use <a>CreatePolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of inline policies that you can embed in a group, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <note> <p>Because policy documents can be large, you should use POST rather than GET when calling <code>PutGroupPolicy</code>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html">Making query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
26469    async fn put_group_policy(
26470        &self,
26471        input: PutGroupPolicyRequest,
26472    ) -> Result<(), RusotoError<PutGroupPolicyError>> {
26473        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26474        let params = self.new_params("PutGroupPolicy");
26475        let mut params = params;
26476        PutGroupPolicyRequestSerializer::serialize(&mut params, "", &input);
26477        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26478        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26479
26480        let response = self
26481            .sign_and_dispatch(request, PutGroupPolicyError::from_response)
26482            .await?;
26483
26484        std::mem::drop(response);
26485        Ok(())
26486    }
26487
26488    /// <p><p>Adds or updates the policy that is specified as the IAM role&#39;s permissions boundary. You can use an AWS managed policy or a customer managed policy to set the boundary for a role. Use the boundary to control the maximum permissions that the role can have. Setting a permissions boundary is an advanced feature that can affect the permissions for the role.</p> <p>You cannot set the boundary for a service-linked role. </p> <important> <p>Policies used as permissions boundaries do not provide permissions. You must also attach a permissions policy to the role. To learn how the effective permissions for a role are evaluated, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html">IAM JSON policy evaluation logic</a> in the IAM User Guide. </p> </important></p>
26489    async fn put_role_permissions_boundary(
26490        &self,
26491        input: PutRolePermissionsBoundaryRequest,
26492    ) -> Result<(), RusotoError<PutRolePermissionsBoundaryError>> {
26493        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26494        let params = self.new_params("PutRolePermissionsBoundary");
26495        let mut params = params;
26496        PutRolePermissionsBoundaryRequestSerializer::serialize(&mut params, "", &input);
26497        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26498        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26499
26500        let response = self
26501            .sign_and_dispatch(request, PutRolePermissionsBoundaryError::from_response)
26502            .await?;
26503
26504        std::mem::drop(response);
26505        Ok(())
26506    }
26507
26508    /// <p><p>Adds or updates an inline policy document that is embedded in the specified IAM role.</p> <p>When you embed an inline policy in a role, the inline policy is used as part of the role&#39;s access (permissions) policy. The role&#39;s trust policy is created at the same time as the role, using <a>CreateRole</a>. You can update a role&#39;s trust policy using <a>UpdateAssumeRolePolicy</a>. For more information about IAM roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html">Using roles to delegate permissions and federate identities</a>.</p> <p>A role can also have a managed policy attached to it. To attach a managed policy to a role, use <a>AttachRolePolicy</a>. To create a new managed policy, use <a>CreatePolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of inline policies that you can embed with a role, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <note> <p>Because policy documents can be large, you should use POST rather than GET when calling <code>PutRolePolicy</code>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html">Making query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
26509    async fn put_role_policy(
26510        &self,
26511        input: PutRolePolicyRequest,
26512    ) -> Result<(), RusotoError<PutRolePolicyError>> {
26513        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26514        let params = self.new_params("PutRolePolicy");
26515        let mut params = params;
26516        PutRolePolicyRequestSerializer::serialize(&mut params, "", &input);
26517        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26518        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26519
26520        let response = self
26521            .sign_and_dispatch(request, PutRolePolicyError::from_response)
26522            .await?;
26523
26524        std::mem::drop(response);
26525        Ok(())
26526    }
26527
26528    /// <p><p>Adds or updates the policy that is specified as the IAM user&#39;s permissions boundary. You can use an AWS managed policy or a customer managed policy to set the boundary for a user. Use the boundary to control the maximum permissions that the user can have. Setting a permissions boundary is an advanced feature that can affect the permissions for the user.</p> <important> <p>Policies that are used as permissions boundaries do not provide permissions. You must also attach a permissions policy to the user. To learn how the effective permissions for a user are evaluated, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html">IAM JSON policy evaluation logic</a> in the IAM User Guide. </p> </important></p>
26529    async fn put_user_permissions_boundary(
26530        &self,
26531        input: PutUserPermissionsBoundaryRequest,
26532    ) -> Result<(), RusotoError<PutUserPermissionsBoundaryError>> {
26533        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26534        let params = self.new_params("PutUserPermissionsBoundary");
26535        let mut params = params;
26536        PutUserPermissionsBoundaryRequestSerializer::serialize(&mut params, "", &input);
26537        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26538        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26539
26540        let response = self
26541            .sign_and_dispatch(request, PutUserPermissionsBoundaryError::from_response)
26542            .await?;
26543
26544        std::mem::drop(response);
26545        Ok(())
26546    }
26547
26548    /// <p><p>Adds or updates an inline policy document that is embedded in the specified IAM user.</p> <p>An IAM user can also have a managed policy attached to it. To attach a managed policy to a user, use <a>AttachUserPolicy</a>. To create a new managed policy, use <a>CreatePolicy</a>. For information about policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of inline policies that you can embed in a user, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <note> <p>Because policy documents can be large, you should use POST rather than GET when calling <code>PutUserPolicy</code>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html">Making query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
26549    async fn put_user_policy(
26550        &self,
26551        input: PutUserPolicyRequest,
26552    ) -> Result<(), RusotoError<PutUserPolicyError>> {
26553        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26554        let params = self.new_params("PutUserPolicy");
26555        let mut params = params;
26556        PutUserPolicyRequestSerializer::serialize(&mut params, "", &input);
26557        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26558        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26559
26560        let response = self
26561            .sign_and_dispatch(request, PutUserPolicyError::from_response)
26562            .await?;
26563
26564        std::mem::drop(response);
26565        Ok(())
26566    }
26567
26568    /// <p>Removes the specified client ID (also known as audience) from the list of client IDs registered for the specified IAM OpenID Connect (OIDC) provider resource object.</p> <p>This operation is idempotent; it does not fail or return an error if you try to remove a client ID that does not exist.</p>
26569    async fn remove_client_id_from_open_id_connect_provider(
26570        &self,
26571        input: RemoveClientIDFromOpenIDConnectProviderRequest,
26572    ) -> Result<(), RusotoError<RemoveClientIDFromOpenIDConnectProviderError>> {
26573        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26574        let params = self.new_params("RemoveClientIDFromOpenIDConnectProvider");
26575        let mut params = params;
26576        RemoveClientIDFromOpenIDConnectProviderRequestSerializer::serialize(
26577            &mut params,
26578            "",
26579            &input,
26580        );
26581        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26582        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26583
26584        let response = self
26585            .sign_and_dispatch(
26586                request,
26587                RemoveClientIDFromOpenIDConnectProviderError::from_response,
26588            )
26589            .await?;
26590
26591        std::mem::drop(response);
26592        Ok(())
26593    }
26594
26595    /// <p>Removes the specified IAM role from the specified EC2 instance profile.</p> <important> <p>Make sure that you do not have any Amazon EC2 instances running with the role you are about to remove from the instance profile. Removing a role from an instance profile that is associated with a running instance might break any applications running on the instance.</p> </important> <p> For more information about IAM roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html">Working with roles</a>. For more information about instance profiles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html">About instance profiles</a>.</p>
26596    async fn remove_role_from_instance_profile(
26597        &self,
26598        input: RemoveRoleFromInstanceProfileRequest,
26599    ) -> Result<(), RusotoError<RemoveRoleFromInstanceProfileError>> {
26600        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26601        let params = self.new_params("RemoveRoleFromInstanceProfile");
26602        let mut params = params;
26603        RemoveRoleFromInstanceProfileRequestSerializer::serialize(&mut params, "", &input);
26604        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26605        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26606
26607        let response = self
26608            .sign_and_dispatch(request, RemoveRoleFromInstanceProfileError::from_response)
26609            .await?;
26610
26611        std::mem::drop(response);
26612        Ok(())
26613    }
26614
26615    /// <p>Removes the specified user from the specified group.</p>
26616    async fn remove_user_from_group(
26617        &self,
26618        input: RemoveUserFromGroupRequest,
26619    ) -> Result<(), RusotoError<RemoveUserFromGroupError>> {
26620        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26621        let params = self.new_params("RemoveUserFromGroup");
26622        let mut params = params;
26623        RemoveUserFromGroupRequestSerializer::serialize(&mut params, "", &input);
26624        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26625        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26626
26627        let response = self
26628            .sign_and_dispatch(request, RemoveUserFromGroupError::from_response)
26629            .await?;
26630
26631        std::mem::drop(response);
26632        Ok(())
26633    }
26634
26635    /// <p>Resets the password for a service-specific credential. The new password is AWS generated and cryptographically strong. It cannot be configured by the user. Resetting the password immediately invalidates the previous password associated with this user.</p>
26636    async fn reset_service_specific_credential(
26637        &self,
26638        input: ResetServiceSpecificCredentialRequest,
26639    ) -> Result<
26640        ResetServiceSpecificCredentialResponse,
26641        RusotoError<ResetServiceSpecificCredentialError>,
26642    > {
26643        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26644        let params = self.new_params("ResetServiceSpecificCredential");
26645        let mut params = params;
26646        ResetServiceSpecificCredentialRequestSerializer::serialize(&mut params, "", &input);
26647        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26648        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26649
26650        let response = self
26651            .sign_and_dispatch(request, ResetServiceSpecificCredentialError::from_response)
26652            .await?;
26653
26654        let mut response = response;
26655        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26656            xml_util::start_element(actual_tag_name, stack)?;
26657            let result = ResetServiceSpecificCredentialResponseDeserializer::deserialize(
26658                "ResetServiceSpecificCredentialResult",
26659                stack,
26660            )?;
26661            skip_tree(stack);
26662            xml_util::end_element(actual_tag_name, stack)?;
26663            Ok(result)
26664        })
26665        .await?;
26666
26667        drop(response); // parse non-payload
26668        Ok(result)
26669    }
26670
26671    /// <p>Synchronizes the specified MFA device with its IAM resource object on the AWS servers.</p> <p>For more information about creating and working with virtual MFA devices, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_VirtualMFA.html">Using a virtual MFA device</a> in the <i>IAM User Guide</i>.</p>
26672    async fn resync_mfa_device(
26673        &self,
26674        input: ResyncMFADeviceRequest,
26675    ) -> Result<(), RusotoError<ResyncMFADeviceError>> {
26676        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26677        let params = self.new_params("ResyncMFADevice");
26678        let mut params = params;
26679        ResyncMFADeviceRequestSerializer::serialize(&mut params, "", &input);
26680        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26681        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26682
26683        let response = self
26684            .sign_and_dispatch(request, ResyncMFADeviceError::from_response)
26685            .await?;
26686
26687        std::mem::drop(response);
26688        Ok(())
26689    }
26690
26691    /// <p>Sets the specified version of the specified policy as the policy's default (operative) version.</p> <p>This operation affects all users, groups, and roles that the policy is attached to. To list the users, groups, and roles that the policy is attached to, use <a>ListEntitiesForPolicy</a>.</p> <p>For information about managed policies, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>
26692    async fn set_default_policy_version(
26693        &self,
26694        input: SetDefaultPolicyVersionRequest,
26695    ) -> Result<(), RusotoError<SetDefaultPolicyVersionError>> {
26696        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26697        let params = self.new_params("SetDefaultPolicyVersion");
26698        let mut params = params;
26699        SetDefaultPolicyVersionRequestSerializer::serialize(&mut params, "", &input);
26700        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26701        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26702
26703        let response = self
26704            .sign_and_dispatch(request, SetDefaultPolicyVersionError::from_response)
26705            .await?;
26706
26707        std::mem::drop(response);
26708        Ok(())
26709    }
26710
26711    /// <p>Sets the specified version of the global endpoint token as the token version used for the AWS account.</p> <p>By default, AWS Security Token Service (STS) is available as a global service, and all STS requests go to a single endpoint at <code>https://sts.amazonaws.com</code>. AWS recommends using Regional STS endpoints to reduce latency, build in redundancy, and increase session token availability. For information about Regional endpoints for STS, see <a href="https://docs.aws.amazon.com/general/latest/gr/sts.html">AWS AWS Security Token Service endpoints and quotas</a> in the <i>AWS General Reference</i>.</p> <p>If you make an STS call to the global endpoint, the resulting session tokens might be valid in some Regions but not others. It depends on the version that is set in this operation. Version 1 tokens are valid only in AWS Regions that are available by default. These tokens do not work in manually enabled Regions, such as Asia Pacific (Hong Kong). Version 2 tokens are valid in all Regions. However, version 2 tokens are longer and might affect systems where you temporarily store tokens. For information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html">Activating and deactivating STS in an AWS region</a> in the <i>IAM User Guide</i>.</p> <p>To view the current session token version, see the <code>GlobalEndpointTokenVersion</code> entry in the response of the <a>GetAccountSummary</a> operation.</p>
26712    async fn set_security_token_service_preferences(
26713        &self,
26714        input: SetSecurityTokenServicePreferencesRequest,
26715    ) -> Result<(), RusotoError<SetSecurityTokenServicePreferencesError>> {
26716        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26717        let params = self.new_params("SetSecurityTokenServicePreferences");
26718        let mut params = params;
26719        SetSecurityTokenServicePreferencesRequestSerializer::serialize(&mut params, "", &input);
26720        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26721        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26722
26723        let response = self
26724            .sign_and_dispatch(
26725                request,
26726                SetSecurityTokenServicePreferencesError::from_response,
26727            )
26728            .await?;
26729
26730        std::mem::drop(response);
26731        Ok(())
26732    }
26733
26734    /// <p>Simulate how a set of IAM policies and optionally a resource-based policy works with a list of API operations and AWS resources to determine the policies' effective permissions. The policies are provided as strings.</p> <p>The simulation does not perform the API operations; it only checks the authorization to determine if the simulated policies allow or deny the operations. You can simulate resources that don't exist in your account.</p> <p>If you want to simulate existing policies that are attached to an IAM user, group, or role, use <a>SimulatePrincipalPolicy</a> instead.</p> <p>Context keys are variables that are maintained by AWS and its services and which provide details about the context of an API query request. You can use the <code>Condition</code> element of an IAM policy to evaluate context keys. To get the list of context keys that the policies require for correct simulation, use <a>GetContextKeysForCustomPolicy</a>.</p> <p>If the output is long, you can use <code>MaxItems</code> and <code>Marker</code> parameters to paginate the results.</p> <p>For more information about using the policy simulator, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html">Testing IAM policies with the IAM policy simulator </a>in the <i>IAM User Guide</i>.</p>
26735    async fn simulate_custom_policy(
26736        &self,
26737        input: SimulateCustomPolicyRequest,
26738    ) -> Result<SimulatePolicyResponse, RusotoError<SimulateCustomPolicyError>> {
26739        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26740        let params = self.new_params("SimulateCustomPolicy");
26741        let mut params = params;
26742        SimulateCustomPolicyRequestSerializer::serialize(&mut params, "", &input);
26743        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26744        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26745
26746        let response = self
26747            .sign_and_dispatch(request, SimulateCustomPolicyError::from_response)
26748            .await?;
26749
26750        let mut response = response;
26751        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26752            xml_util::start_element(actual_tag_name, stack)?;
26753            let result = SimulatePolicyResponseDeserializer::deserialize(
26754                "SimulateCustomPolicyResult",
26755                stack,
26756            )?;
26757            skip_tree(stack);
26758            xml_util::end_element(actual_tag_name, stack)?;
26759            Ok(result)
26760        })
26761        .await?;
26762
26763        drop(response); // parse non-payload
26764        Ok(result)
26765    }
26766
26767    /// <p>Simulate how a set of IAM policies attached to an IAM entity works with a list of API operations and AWS resources to determine the policies' effective permissions. The entity can be an IAM user, group, or role. If you specify a user, then the simulation also includes all of the policies that are attached to groups that the user belongs to. You can simulate resources that don't exist in your account.</p> <p>You can optionally include a list of one or more additional policies specified as strings to include in the simulation. If you want to simulate only policies specified as strings, use <a>SimulateCustomPolicy</a> instead.</p> <p>You can also optionally include one resource-based policy to be evaluated with each of the resources included in the simulation.</p> <p>The simulation does not perform the API operations; it only checks the authorization to determine if the simulated policies allow or deny the operations.</p> <p> <b>Note:</b> This operation discloses information about the permissions granted to other users. If you do not want users to see other user's permissions, then consider allowing them to use <a>SimulateCustomPolicy</a> instead.</p> <p>Context keys are variables maintained by AWS and its services that provide details about the context of an API query request. You can use the <code>Condition</code> element of an IAM policy to evaluate context keys. To get the list of context keys that the policies require for correct simulation, use <a>GetContextKeysForPrincipalPolicy</a>.</p> <p>If the output is long, you can use the <code>MaxItems</code> and <code>Marker</code> parameters to paginate the results.</p> <p>For more information about using the policy simulator, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html">Testing IAM policies with the IAM policy simulator </a>in the <i>IAM User Guide</i>.</p>
26768    async fn simulate_principal_policy(
26769        &self,
26770        input: SimulatePrincipalPolicyRequest,
26771    ) -> Result<SimulatePolicyResponse, RusotoError<SimulatePrincipalPolicyError>> {
26772        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26773        let params = self.new_params("SimulatePrincipalPolicy");
26774        let mut params = params;
26775        SimulatePrincipalPolicyRequestSerializer::serialize(&mut params, "", &input);
26776        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26777        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26778
26779        let response = self
26780            .sign_and_dispatch(request, SimulatePrincipalPolicyError::from_response)
26781            .await?;
26782
26783        let mut response = response;
26784        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
26785            xml_util::start_element(actual_tag_name, stack)?;
26786            let result = SimulatePolicyResponseDeserializer::deserialize(
26787                "SimulatePrincipalPolicyResult",
26788                stack,
26789            )?;
26790            skip_tree(stack);
26791            xml_util::end_element(actual_tag_name, stack)?;
26792            Ok(result)
26793        })
26794        .await?;
26795
26796        drop(response); // parse non-payload
26797        Ok(result)
26798    }
26799
26800    /// <p><p>Adds one or more tags to an IAM instance profile. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>Each tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM instance profile that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
26801    async fn tag_instance_profile(
26802        &self,
26803        input: TagInstanceProfileRequest,
26804    ) -> Result<(), RusotoError<TagInstanceProfileError>> {
26805        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26806        let params = self.new_params("TagInstanceProfile");
26807        let mut params = params;
26808        TagInstanceProfileRequestSerializer::serialize(&mut params, "", &input);
26809        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26810        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26811
26812        let response = self
26813            .sign_and_dispatch(request, TagInstanceProfileError::from_response)
26814            .await?;
26815
26816        std::mem::drop(response);
26817        Ok(())
26818    }
26819
26820    /// <p><p>Adds one or more tags to an IAM virtual multi-factor authentication (MFA) device. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM virtual MFA device that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
26821    async fn tag_mfa_device(
26822        &self,
26823        input: TagMFADeviceRequest,
26824    ) -> Result<(), RusotoError<TagMFADeviceError>> {
26825        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26826        let params = self.new_params("TagMFADevice");
26827        let mut params = params;
26828        TagMFADeviceRequestSerializer::serialize(&mut params, "", &input);
26829        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26830        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26831
26832        let response = self
26833            .sign_and_dispatch(request, TagMFADeviceError::from_response)
26834            .await?;
26835
26836        std::mem::drop(response);
26837        Ok(())
26838    }
26839
26840    /// <p><p>Adds one or more tags to an OpenID Connect (OIDC)-compatible identity provider. For more information about these providers, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html">About web identity federation</a>. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an OIDC provider that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
26841    async fn tag_open_id_connect_provider(
26842        &self,
26843        input: TagOpenIDConnectProviderRequest,
26844    ) -> Result<(), RusotoError<TagOpenIDConnectProviderError>> {
26845        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26846        let params = self.new_params("TagOpenIDConnectProvider");
26847        let mut params = params;
26848        TagOpenIDConnectProviderRequestSerializer::serialize(&mut params, "", &input);
26849        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26850        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26851
26852        let response = self
26853            .sign_and_dispatch(request, TagOpenIDConnectProviderError::from_response)
26854            .await?;
26855
26856        std::mem::drop(response);
26857        Ok(())
26858    }
26859
26860    /// <p><p>Adds one or more tags to an IAM customer managed policy. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM customer managed policy that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
26861    async fn tag_policy(&self, input: TagPolicyRequest) -> Result<(), RusotoError<TagPolicyError>> {
26862        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26863        let params = self.new_params("TagPolicy");
26864        let mut params = params;
26865        TagPolicyRequestSerializer::serialize(&mut params, "", &input);
26866        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26867        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26868
26869        let response = self
26870            .sign_and_dispatch(request, TagPolicyError::from_response)
26871            .await?;
26872
26873        std::mem::drop(response);
26874        Ok(())
26875    }
26876
26877    /// <p>Adds one or more tags to an IAM role. The role can be a regular role or a service-linked role. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM role that has a specified tag attached. You can also restrict access to only those resources that have a certain tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p> <b>Cost allocation</b> - Use tags to help track which individuals and teams are using which AWS resources.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note> <p>For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM identities</a> in the <i>IAM User Guide</i>.</p>
26878    async fn tag_role(&self, input: TagRoleRequest) -> Result<(), RusotoError<TagRoleError>> {
26879        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26880        let params = self.new_params("TagRole");
26881        let mut params = params;
26882        TagRoleRequestSerializer::serialize(&mut params, "", &input);
26883        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26884        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26885
26886        let response = self
26887            .sign_and_dispatch(request, TagRoleError::from_response)
26888            .await?;
26889
26890        std::mem::drop(response);
26891        Ok(())
26892    }
26893
26894    /// <p><p>Adds one or more tags to a Security Assertion Markup Language (SAML) identity provider. For more information about these providers, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html">About SAML 2.0-based federation </a>. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only a SAML identity provider that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
26895    async fn tag_saml_provider(
26896        &self,
26897        input: TagSAMLProviderRequest,
26898    ) -> Result<(), RusotoError<TagSAMLProviderError>> {
26899        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26900        let params = self.new_params("TagSAMLProvider");
26901        let mut params = params;
26902        TagSAMLProviderRequestSerializer::serialize(&mut params, "", &input);
26903        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26904        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26905
26906        let response = self
26907            .sign_and_dispatch(request, TagSAMLProviderError::from_response)
26908            .await?;
26909
26910        std::mem::drop(response);
26911        Ok(())
26912    }
26913
26914    /// <p><p>Adds one or more tags to an IAM server certificate. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <note> <p>For certificates in a Region supported by AWS Certificate Manager (ACM), we recommend that you don&#39;t use IAM server certificates. Instead, use ACM to provision, manage, and deploy your server certificates. For more information about IAM server certificates, <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>.</p> </note> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only a server certificate that has a specified tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p> <b>Cost allocation</b> - Use tags to help track which individuals and teams are using which AWS resources.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note></p>
26915    async fn tag_server_certificate(
26916        &self,
26917        input: TagServerCertificateRequest,
26918    ) -> Result<(), RusotoError<TagServerCertificateError>> {
26919        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26920        let params = self.new_params("TagServerCertificate");
26921        let mut params = params;
26922        TagServerCertificateRequestSerializer::serialize(&mut params, "", &input);
26923        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26924        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26925
26926        let response = self
26927            .sign_and_dispatch(request, TagServerCertificateError::from_response)
26928            .await?;
26929
26930        std::mem::drop(response);
26931        Ok(())
26932    }
26933
26934    /// <p>Adds one or more tags to an IAM user. If a tag with the same key name already exists, then that tag is overwritten with the new value.</p> <p>A tag consists of a key name and an associated value. By assigning tags to your resources, you can do the following:</p> <ul> <li> <p> <b>Administrative grouping and discovery</b> - Attach tags to resources to aid in organization and search. For example, you could search for all resources with the key name <i>Project</i> and the value <i>MyImportantProject</i>. Or search for all resources with the key name <i>Cost Center</i> and the value <i>41200</i>. </p> </li> <li> <p> <b>Access control</b> - Include tags in IAM user-based and resource-based policies. You can use tags to restrict access to only an IAM requesting user that has a specified tag attached. You can also restrict access to only those resources that have a certain tag attached. For examples of policies that show how to use tags to control access, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html">Control access using IAM tags</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p> <b>Cost allocation</b> - Use tags to help track which individuals and teams are using which AWS resources.</p> </li> </ul> <note> <ul> <li> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> </li> <li> <p>AWS always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </li> </ul> </note> <p>For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM identities</a> in the <i>IAM User Guide</i>.</p>
26935    async fn tag_user(&self, input: TagUserRequest) -> Result<(), RusotoError<TagUserError>> {
26936        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26937        let params = self.new_params("TagUser");
26938        let mut params = params;
26939        TagUserRequestSerializer::serialize(&mut params, "", &input);
26940        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26941        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26942
26943        let response = self
26944            .sign_and_dispatch(request, TagUserError::from_response)
26945            .await?;
26946
26947        std::mem::drop(response);
26948        Ok(())
26949    }
26950
26951    /// <p>Removes the specified tags from the IAM instance profile. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
26952    async fn untag_instance_profile(
26953        &self,
26954        input: UntagInstanceProfileRequest,
26955    ) -> Result<(), RusotoError<UntagInstanceProfileError>> {
26956        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26957        let params = self.new_params("UntagInstanceProfile");
26958        let mut params = params;
26959        UntagInstanceProfileRequestSerializer::serialize(&mut params, "", &input);
26960        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26961        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26962
26963        let response = self
26964            .sign_and_dispatch(request, UntagInstanceProfileError::from_response)
26965            .await?;
26966
26967        std::mem::drop(response);
26968        Ok(())
26969    }
26970
26971    /// <p>Removes the specified tags from the IAM virtual multi-factor authentication (MFA) device. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
26972    async fn untag_mfa_device(
26973        &self,
26974        input: UntagMFADeviceRequest,
26975    ) -> Result<(), RusotoError<UntagMFADeviceError>> {
26976        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26977        let params = self.new_params("UntagMFADevice");
26978        let mut params = params;
26979        UntagMFADeviceRequestSerializer::serialize(&mut params, "", &input);
26980        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
26981        request.set_content_type("application/x-www-form-urlencoded".to_owned());
26982
26983        let response = self
26984            .sign_and_dispatch(request, UntagMFADeviceError::from_response)
26985            .await?;
26986
26987        std::mem::drop(response);
26988        Ok(())
26989    }
26990
26991    /// <p>Removes the specified tags from the specified OpenID Connect (OIDC)-compatible identity provider in IAM. For more information about OIDC providers, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html">About web identity federation</a>. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
26992    async fn untag_open_id_connect_provider(
26993        &self,
26994        input: UntagOpenIDConnectProviderRequest,
26995    ) -> Result<(), RusotoError<UntagOpenIDConnectProviderError>> {
26996        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
26997        let params = self.new_params("UntagOpenIDConnectProvider");
26998        let mut params = params;
26999        UntagOpenIDConnectProviderRequestSerializer::serialize(&mut params, "", &input);
27000        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27001        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27002
27003        let response = self
27004            .sign_and_dispatch(request, UntagOpenIDConnectProviderError::from_response)
27005            .await?;
27006
27007        std::mem::drop(response);
27008        Ok(())
27009    }
27010
27011    /// <p>Removes the specified tags from the customer managed policy. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
27012    async fn untag_policy(
27013        &self,
27014        input: UntagPolicyRequest,
27015    ) -> Result<(), RusotoError<UntagPolicyError>> {
27016        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27017        let params = self.new_params("UntagPolicy");
27018        let mut params = params;
27019        UntagPolicyRequestSerializer::serialize(&mut params, "", &input);
27020        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27021        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27022
27023        let response = self
27024            .sign_and_dispatch(request, UntagPolicyError::from_response)
27025            .await?;
27026
27027        std::mem::drop(response);
27028        Ok(())
27029    }
27030
27031    /// <p>Removes the specified tags from the role. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
27032    async fn untag_role(&self, input: UntagRoleRequest) -> Result<(), RusotoError<UntagRoleError>> {
27033        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27034        let params = self.new_params("UntagRole");
27035        let mut params = params;
27036        UntagRoleRequestSerializer::serialize(&mut params, "", &input);
27037        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27038        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27039
27040        let response = self
27041            .sign_and_dispatch(request, UntagRoleError::from_response)
27042            .await?;
27043
27044        std::mem::drop(response);
27045        Ok(())
27046    }
27047
27048    /// <p>Removes the specified tags from the specified Security Assertion Markup Language (SAML) identity provider in IAM. For more information about these providers, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html">About web identity federation</a>. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
27049    async fn untag_saml_provider(
27050        &self,
27051        input: UntagSAMLProviderRequest,
27052    ) -> Result<(), RusotoError<UntagSAMLProviderError>> {
27053        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27054        let params = self.new_params("UntagSAMLProvider");
27055        let mut params = params;
27056        UntagSAMLProviderRequestSerializer::serialize(&mut params, "", &input);
27057        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27058        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27059
27060        let response = self
27061            .sign_and_dispatch(request, UntagSAMLProviderError::from_response)
27062            .await?;
27063
27064        std::mem::drop(response);
27065        Ok(())
27066    }
27067
27068    /// <p><p>Removes the specified tags from the IAM server certificate. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>For certificates in a Region supported by AWS Certificate Manager (ACM), we recommend that you don&#39;t use IAM server certificates. Instead, use ACM to provision, manage, and deploy your server certificates. For more information about IAM server certificates, <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>.</p> </note></p>
27069    async fn untag_server_certificate(
27070        &self,
27071        input: UntagServerCertificateRequest,
27072    ) -> Result<(), RusotoError<UntagServerCertificateError>> {
27073        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27074        let params = self.new_params("UntagServerCertificate");
27075        let mut params = params;
27076        UntagServerCertificateRequestSerializer::serialize(&mut params, "", &input);
27077        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27078        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27079
27080        let response = self
27081            .sign_and_dispatch(request, UntagServerCertificateError::from_response)
27082            .await?;
27083
27084        std::mem::drop(response);
27085        Ok(())
27086    }
27087
27088    /// <p>Removes the specified tags from the user. For more information about tagging, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>
27089    async fn untag_user(&self, input: UntagUserRequest) -> Result<(), RusotoError<UntagUserError>> {
27090        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27091        let params = self.new_params("UntagUser");
27092        let mut params = params;
27093        UntagUserRequestSerializer::serialize(&mut params, "", &input);
27094        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27095        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27096
27097        let response = self
27098            .sign_and_dispatch(request, UntagUserError::from_response)
27099            .await?;
27100
27101        std::mem::drop(response);
27102        Ok(())
27103    }
27104
27105    /// <p>Changes the status of the specified access key from Active to Inactive, or vice versa. This operation can be used to disable a user's key as part of a key rotation workflow.</p> <p>If the <code>UserName</code> is not specified, the user name is determined implicitly based on the AWS access key ID used to sign the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p> <p>For information about rotating keys, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html">Managing keys and certificates</a> in the <i>IAM User Guide</i>.</p>
27106    async fn update_access_key(
27107        &self,
27108        input: UpdateAccessKeyRequest,
27109    ) -> Result<(), RusotoError<UpdateAccessKeyError>> {
27110        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27111        let params = self.new_params("UpdateAccessKey");
27112        let mut params = params;
27113        UpdateAccessKeyRequestSerializer::serialize(&mut params, "", &input);
27114        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27115        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27116
27117        let response = self
27118            .sign_and_dispatch(request, UpdateAccessKeyError::from_response)
27119            .await?;
27120
27121        std::mem::drop(response);
27122        Ok(())
27123    }
27124
27125    /// <p>Updates the password policy settings for the AWS account.</p> <note> <ul> <li> <p>This operation does not support partial updates. No parameters are required, but if you do not specify a parameter, that parameter's value reverts to its default value. See the <b>Request Parameters</b> section for each parameter's default value. Also note that some parameters do not allow the default parameter to be explicitly set. Instead, to invoke the default value, do not include that parameter when you invoke the operation.</p> </li> </ul> </note> <p> For more information about using a password policy, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingPasswordPolicies.html">Managing an IAM password policy</a> in the <i>IAM User Guide</i>.</p>
27126    async fn update_account_password_policy(
27127        &self,
27128        input: UpdateAccountPasswordPolicyRequest,
27129    ) -> Result<(), RusotoError<UpdateAccountPasswordPolicyError>> {
27130        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27131        let params = self.new_params("UpdateAccountPasswordPolicy");
27132        let mut params = params;
27133        UpdateAccountPasswordPolicyRequestSerializer::serialize(&mut params, "", &input);
27134        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27135        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27136
27137        let response = self
27138            .sign_and_dispatch(request, UpdateAccountPasswordPolicyError::from_response)
27139            .await?;
27140
27141        std::mem::drop(response);
27142        Ok(())
27143    }
27144
27145    /// <p>Updates the policy that grants an IAM entity permission to assume a role. This is typically referred to as the "role trust policy". For more information about roles, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html">Using roles to delegate permissions and federate identities</a>.</p>
27146    async fn update_assume_role_policy(
27147        &self,
27148        input: UpdateAssumeRolePolicyRequest,
27149    ) -> Result<(), RusotoError<UpdateAssumeRolePolicyError>> {
27150        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27151        let params = self.new_params("UpdateAssumeRolePolicy");
27152        let mut params = params;
27153        UpdateAssumeRolePolicyRequestSerializer::serialize(&mut params, "", &input);
27154        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27155        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27156
27157        let response = self
27158            .sign_and_dispatch(request, UpdateAssumeRolePolicyError::from_response)
27159            .await?;
27160
27161        std::mem::drop(response);
27162        Ok(())
27163    }
27164
27165    /// <p><p>Updates the name and/or the path of the specified IAM group.</p> <important> <p> You should understand the implications of changing a group&#39;s path or name. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_WorkingWithGroupsAndUsers.html">Renaming users and groups</a> in the <i>IAM User Guide</i>.</p> </important> <note> <p>The person making the request (the principal), must have permission to change the role group with the old name and the new name. For example, to change the group named <code>Managers</code> to <code>MGRs</code>, the principal must have a policy that allows them to update both groups. If the principal has permission to update the <code>Managers</code> group, but not the <code>MGRs</code> group, then the update fails. For more information about permissions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html">Access management</a>. </p> </note></p>
27166    async fn update_group(
27167        &self,
27168        input: UpdateGroupRequest,
27169    ) -> Result<(), RusotoError<UpdateGroupError>> {
27170        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27171        let params = self.new_params("UpdateGroup");
27172        let mut params = params;
27173        UpdateGroupRequestSerializer::serialize(&mut params, "", &input);
27174        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27175        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27176
27177        let response = self
27178            .sign_and_dispatch(request, UpdateGroupError::from_response)
27179            .await?;
27180
27181        std::mem::drop(response);
27182        Ok(())
27183    }
27184
27185    /// <p>Changes the password for the specified IAM user. You can use the AWS CLI, the AWS API, or the <b>Users</b> page in the IAM console to change the password for any IAM user. Use <a>ChangePassword</a> to change your own password in the <b>My Security Credentials</b> page in the AWS Management Console.</p> <p>For more information about modifying passwords, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html">Managing passwords</a> in the <i>IAM User Guide</i>.</p>
27186    async fn update_login_profile(
27187        &self,
27188        input: UpdateLoginProfileRequest,
27189    ) -> Result<(), RusotoError<UpdateLoginProfileError>> {
27190        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27191        let params = self.new_params("UpdateLoginProfile");
27192        let mut params = params;
27193        UpdateLoginProfileRequestSerializer::serialize(&mut params, "", &input);
27194        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27195        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27196
27197        let response = self
27198            .sign_and_dispatch(request, UpdateLoginProfileError::from_response)
27199            .await?;
27200
27201        std::mem::drop(response);
27202        Ok(())
27203    }
27204
27205    /// <p><p>Replaces the existing list of server certificate thumbprints associated with an OpenID Connect (OIDC) provider resource object with a new list of thumbprints.</p> <p>The list that you pass with this operation completely replaces the existing list of thumbprints. (The lists are not merged.)</p> <p>Typically, you need to update a thumbprint only when the identity provider&#39;s certificate changes, which occurs rarely. However, if the provider&#39;s certificate <i>does</i> change, any attempt to assume an IAM role that specifies the OIDC provider as a principal fails until the certificate thumbprint is updated.</p> <note> <p>Trust for the OIDC provider is derived from the provider&#39;s certificate and is validated by the thumbprint. Therefore, it is best to limit access to the <code>UpdateOpenIDConnectProviderThumbprint</code> operation to highly privileged users.</p> </note></p>
27206    async fn update_open_id_connect_provider_thumbprint(
27207        &self,
27208        input: UpdateOpenIDConnectProviderThumbprintRequest,
27209    ) -> Result<(), RusotoError<UpdateOpenIDConnectProviderThumbprintError>> {
27210        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27211        let params = self.new_params("UpdateOpenIDConnectProviderThumbprint");
27212        let mut params = params;
27213        UpdateOpenIDConnectProviderThumbprintRequestSerializer::serialize(&mut params, "", &input);
27214        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27215        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27216
27217        let response = self
27218            .sign_and_dispatch(
27219                request,
27220                UpdateOpenIDConnectProviderThumbprintError::from_response,
27221            )
27222            .await?;
27223
27224        std::mem::drop(response);
27225        Ok(())
27226    }
27227
27228    /// <p>Updates the description or maximum session duration setting of a role.</p>
27229    async fn update_role(
27230        &self,
27231        input: UpdateRoleRequest,
27232    ) -> Result<UpdateRoleResponse, RusotoError<UpdateRoleError>> {
27233        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27234        let params = self.new_params("UpdateRole");
27235        let mut params = params;
27236        UpdateRoleRequestSerializer::serialize(&mut params, "", &input);
27237        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27238        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27239
27240        let response = self
27241            .sign_and_dispatch(request, UpdateRoleError::from_response)
27242            .await?;
27243
27244        let result = UpdateRoleResponse::default();
27245
27246        drop(response); // parse non-payload
27247        Ok(result)
27248    }
27249
27250    /// <p>Use <a>UpdateRole</a> instead.</p> <p>Modifies only the description of a role. This operation performs the same function as the <code>Description</code> parameter in the <code>UpdateRole</code> operation.</p>
27251    async fn update_role_description(
27252        &self,
27253        input: UpdateRoleDescriptionRequest,
27254    ) -> Result<UpdateRoleDescriptionResponse, RusotoError<UpdateRoleDescriptionError>> {
27255        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27256        let params = self.new_params("UpdateRoleDescription");
27257        let mut params = params;
27258        UpdateRoleDescriptionRequestSerializer::serialize(&mut params, "", &input);
27259        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27260        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27261
27262        let response = self
27263            .sign_and_dispatch(request, UpdateRoleDescriptionError::from_response)
27264            .await?;
27265
27266        let mut response = response;
27267        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
27268            xml_util::start_element(actual_tag_name, stack)?;
27269            let result = UpdateRoleDescriptionResponseDeserializer::deserialize(
27270                "UpdateRoleDescriptionResult",
27271                stack,
27272            )?;
27273            skip_tree(stack);
27274            xml_util::end_element(actual_tag_name, stack)?;
27275            Ok(result)
27276        })
27277        .await?;
27278
27279        drop(response); // parse non-payload
27280        Ok(result)
27281    }
27282
27283    /// <p><p>Updates the metadata document for an existing SAML provider resource object.</p> <note> <p>This operation requires <a href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature Version 4</a>.</p> </note></p>
27284    async fn update_saml_provider(
27285        &self,
27286        input: UpdateSAMLProviderRequest,
27287    ) -> Result<UpdateSAMLProviderResponse, RusotoError<UpdateSAMLProviderError>> {
27288        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27289        let params = self.new_params("UpdateSAMLProvider");
27290        let mut params = params;
27291        UpdateSAMLProviderRequestSerializer::serialize(&mut params, "", &input);
27292        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27293        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27294
27295        let response = self
27296            .sign_and_dispatch(request, UpdateSAMLProviderError::from_response)
27297            .await?;
27298
27299        let mut response = response;
27300        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
27301            xml_util::start_element(actual_tag_name, stack)?;
27302            let result = UpdateSAMLProviderResponseDeserializer::deserialize(
27303                "UpdateSAMLProviderResult",
27304                stack,
27305            )?;
27306            skip_tree(stack);
27307            xml_util::end_element(actual_tag_name, stack)?;
27308            Ok(result)
27309        })
27310        .await?;
27311
27312        drop(response); // parse non-payload
27313        Ok(result)
27314    }
27315
27316    /// <p>Sets the status of an IAM user's SSH public key to active or inactive. SSH public keys that are inactive cannot be used for authentication. This operation can be used to disable a user's SSH public key as part of a key rotation work flow.</p> <p>The SSH public key affected by this operation is used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p>
27317    async fn update_ssh_public_key(
27318        &self,
27319        input: UpdateSSHPublicKeyRequest,
27320    ) -> Result<(), RusotoError<UpdateSSHPublicKeyError>> {
27321        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27322        let params = self.new_params("UpdateSSHPublicKey");
27323        let mut params = params;
27324        UpdateSSHPublicKeyRequestSerializer::serialize(&mut params, "", &input);
27325        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27326        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27327
27328        let response = self
27329            .sign_and_dispatch(request, UpdateSSHPublicKeyError::from_response)
27330            .await?;
27331
27332        std::mem::drop(response);
27333        Ok(())
27334    }
27335
27336    /// <p><p>Updates the name and/or the path of the specified server certificate stored in IAM.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic also includes a list of AWS services that can use the server certificates that you manage with IAM.</p> <important> <p>You should understand the implications of changing a server certificate&#39;s path or name. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs_manage.html#RenamingServerCerts">Renaming a server certificate</a> in the <i>IAM User Guide</i>.</p> </important> <note> <p>The person making the request (the principal), must have permission to change the server certificate with the old name and the new name. For example, to change the certificate named <code>ProductionCert</code> to <code>ProdCert</code>, the principal must have a policy that allows them to update both certificates. If the principal has permission to update the <code>ProductionCert</code> group, but not the <code>ProdCert</code> certificate, then the update fails. For more information about permissions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html">Access management</a> in the <i>IAM User Guide</i>.</p> </note></p>
27337    async fn update_server_certificate(
27338        &self,
27339        input: UpdateServerCertificateRequest,
27340    ) -> Result<(), RusotoError<UpdateServerCertificateError>> {
27341        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27342        let params = self.new_params("UpdateServerCertificate");
27343        let mut params = params;
27344        UpdateServerCertificateRequestSerializer::serialize(&mut params, "", &input);
27345        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27346        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27347
27348        let response = self
27349            .sign_and_dispatch(request, UpdateServerCertificateError::from_response)
27350            .await?;
27351
27352        std::mem::drop(response);
27353        Ok(())
27354    }
27355
27356    /// <p>Sets the status of a service-specific credential to <code>Active</code> or <code>Inactive</code>. Service-specific credentials that are inactive cannot be used for authentication to the service. This operation can be used to disable a user's service-specific credential as part of a credential rotation work flow.</p>
27357    async fn update_service_specific_credential(
27358        &self,
27359        input: UpdateServiceSpecificCredentialRequest,
27360    ) -> Result<(), RusotoError<UpdateServiceSpecificCredentialError>> {
27361        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27362        let params = self.new_params("UpdateServiceSpecificCredential");
27363        let mut params = params;
27364        UpdateServiceSpecificCredentialRequestSerializer::serialize(&mut params, "", &input);
27365        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27366        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27367
27368        let response = self
27369            .sign_and_dispatch(request, UpdateServiceSpecificCredentialError::from_response)
27370            .await?;
27371
27372        std::mem::drop(response);
27373        Ok(())
27374    }
27375
27376    /// <p>Changes the status of the specified user signing certificate from active to disabled, or vice versa. This operation can be used to disable an IAM user's signing certificate as part of a certificate rotation work flow.</p> <p>If the <code>UserName</code> field is not specified, the user name is determined implicitly based on the AWS access key ID used to sign the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p>
27377    async fn update_signing_certificate(
27378        &self,
27379        input: UpdateSigningCertificateRequest,
27380    ) -> Result<(), RusotoError<UpdateSigningCertificateError>> {
27381        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27382        let params = self.new_params("UpdateSigningCertificate");
27383        let mut params = params;
27384        UpdateSigningCertificateRequestSerializer::serialize(&mut params, "", &input);
27385        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27386        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27387
27388        let response = self
27389            .sign_and_dispatch(request, UpdateSigningCertificateError::from_response)
27390            .await?;
27391
27392        std::mem::drop(response);
27393        Ok(())
27394    }
27395
27396    /// <p><p>Updates the name and/or the path of the specified IAM user.</p> <important> <p> You should understand the implications of changing an IAM user&#39;s path or name. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_renaming">Renaming an IAM user</a> and <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_rename.html">Renaming an IAM group</a> in the <i>IAM User Guide</i>.</p> </important> <note> <p> To change a user name, the requester must have appropriate permissions on both the source object and the target object. For example, to change Bob to Robert, the entity making the request must have permission on Bob and Robert, or must have permission on all (*). For more information about permissions, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/PermissionsAndPolicies.html">Permissions and policies</a>. </p> </note></p>
27397    async fn update_user(
27398        &self,
27399        input: UpdateUserRequest,
27400    ) -> Result<(), RusotoError<UpdateUserError>> {
27401        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27402        let params = self.new_params("UpdateUser");
27403        let mut params = params;
27404        UpdateUserRequestSerializer::serialize(&mut params, "", &input);
27405        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27406        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27407
27408        let response = self
27409            .sign_and_dispatch(request, UpdateUserError::from_response)
27410            .await?;
27411
27412        std::mem::drop(response);
27413        Ok(())
27414    }
27415
27416    /// <p>Uploads an SSH public key and associates it with the specified IAM user.</p> <p>The SSH public key uploaded by this operation can be used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html">Set up AWS CodeCommit for SSH connections</a> in the <i>AWS CodeCommit User Guide</i>.</p>
27417    async fn upload_ssh_public_key(
27418        &self,
27419        input: UploadSSHPublicKeyRequest,
27420    ) -> Result<UploadSSHPublicKeyResponse, RusotoError<UploadSSHPublicKeyError>> {
27421        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27422        let params = self.new_params("UploadSSHPublicKey");
27423        let mut params = params;
27424        UploadSSHPublicKeyRequestSerializer::serialize(&mut params, "", &input);
27425        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27426        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27427
27428        let response = self
27429            .sign_and_dispatch(request, UploadSSHPublicKeyError::from_response)
27430            .await?;
27431
27432        let mut response = response;
27433        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
27434            xml_util::start_element(actual_tag_name, stack)?;
27435            let result = UploadSSHPublicKeyResponseDeserializer::deserialize(
27436                "UploadSSHPublicKeyResult",
27437                stack,
27438            )?;
27439            skip_tree(stack);
27440            xml_util::end_element(actual_tag_name, stack)?;
27441            Ok(result)
27442        })
27443        .await?;
27444
27445        drop(response); // parse non-payload
27446        Ok(result)
27447    }
27448
27449    /// <p><p>Uploads a server certificate entity for the AWS account. The server certificate entity includes a public key certificate, a private key, and an optional certificate chain, which should all be PEM-encoded.</p> <p>We recommend that you use <a href="https://docs.aws.amazon.com/acm/">AWS Certificate Manager</a> to provision, manage, and deploy your server certificates. With ACM you can request a certificate, deploy it to AWS resources, and let ACM handle certificate renewals for you. Certificates provided by ACM are free. For more information about using ACM, see the <a href="https://docs.aws.amazon.com/acm/latest/userguide/">AWS Certificate Manager User Guide</a>.</p> <p>For more information about working with server certificates, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic includes a list of AWS services that can use the server certificates that you manage with IAM.</p> <p>For information about the number of server certificates you can upload, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <note> <p>Because the body of the public key certificate, private key, and the certificate chain can be large, you should use POST rather than GET when calling <code>UploadServerCertificate</code>. For information about setting up signatures and authorization through the API, see <a href="https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html">Signing AWS API requests</a> in the <i>AWS General Reference</i>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/programming.html">Calling the API by making HTTP query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
27450    async fn upload_server_certificate(
27451        &self,
27452        input: UploadServerCertificateRequest,
27453    ) -> Result<UploadServerCertificateResponse, RusotoError<UploadServerCertificateError>> {
27454        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27455        let params = self.new_params("UploadServerCertificate");
27456        let mut params = params;
27457        UploadServerCertificateRequestSerializer::serialize(&mut params, "", &input);
27458        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27459        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27460
27461        let response = self
27462            .sign_and_dispatch(request, UploadServerCertificateError::from_response)
27463            .await?;
27464
27465        let mut response = response;
27466        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
27467            xml_util::start_element(actual_tag_name, stack)?;
27468            let result = UploadServerCertificateResponseDeserializer::deserialize(
27469                "UploadServerCertificateResult",
27470                stack,
27471            )?;
27472            skip_tree(stack);
27473            xml_util::end_element(actual_tag_name, stack)?;
27474            Ok(result)
27475        })
27476        .await?;
27477
27478        drop(response); // parse non-payload
27479        Ok(result)
27480    }
27481
27482    /// <p><p>Uploads an X.509 signing certificate and associates it with the specified IAM user. Some AWS services require you to use certificates to validate requests that are signed with a corresponding private key. When you upload the certificate, its default status is <code>Active</code>.</p> <p>For information about when you would use an X.509 signing certificate, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html">Managing server certificates in IAM</a> in the <i>IAM User Guide</i>.</p> <p>If the <code>UserName</code> is not specified, the IAM user name is determined implicitly based on the AWS access key ID used to sign the request. This operation works for access keys under the AWS account. Consequently, you can use this operation to manage AWS account root user credentials even if the AWS account has no associated users.</p> <note> <p>Because the body of an X.509 certificate can be large, you should use POST rather than GET when calling <code>UploadSigningCertificate</code>. For information about setting up signatures and authorization through the API, see <a href="https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html">Signing AWS API requests</a> in the <i>AWS General Reference</i>. For general information about using the Query API with IAM, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html">Making query requests</a> in the <i>IAM User Guide</i>.</p> </note></p>
27483    async fn upload_signing_certificate(
27484        &self,
27485        input: UploadSigningCertificateRequest,
27486    ) -> Result<UploadSigningCertificateResponse, RusotoError<UploadSigningCertificateError>> {
27487        let mut request = SignedRequest::new("POST", "iam", &self.region, "/");
27488        let params = self.new_params("UploadSigningCertificate");
27489        let mut params = params;
27490        UploadSigningCertificateRequestSerializer::serialize(&mut params, "", &input);
27491        request.set_payload(Some(serde_urlencoded::to_string(&params).unwrap()));
27492        request.set_content_type("application/x-www-form-urlencoded".to_owned());
27493
27494        let response = self
27495            .sign_and_dispatch(request, UploadSigningCertificateError::from_response)
27496            .await?;
27497
27498        let mut response = response;
27499        let result = xml_util::parse_response(&mut response, |actual_tag_name, stack| {
27500            xml_util::start_element(actual_tag_name, stack)?;
27501            let result = UploadSigningCertificateResponseDeserializer::deserialize(
27502                "UploadSigningCertificateResult",
27503                stack,
27504            )?;
27505            skip_tree(stack);
27506            xml_util::end_element(actual_tag_name, stack)?;
27507            Ok(result)
27508        })
27509        .await?;
27510
27511        drop(response); // parse non-payload
27512        Ok(result)
27513    }
27514}
27515
27516#[cfg(test)]
27517mod protocol_tests {
27518
27519    extern crate rusoto_mock;
27520
27521    use self::rusoto_mock::*;
27522    use super::*;
27523    use rusoto_core::Region as rusoto_region;
27524
27525    #[tokio::test]
27526    async fn test_parse_error_iam_get_user() {
27527        let mock_response =
27528            MockResponseReader::read_response("test_resources/generated/error", "iam-get-user.xml");
27529        let mock = MockRequestDispatcher::with_status(400).with_body(&mock_response);
27530        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27531        let request = GetUserRequest::default();
27532        let result = client.get_user(request).await;
27533        assert!(!result.is_ok(), "parse error: {:?}", result);
27534    }
27535
27536    #[tokio::test]
27537    async fn test_parse_valid_iam_create_virtual_mfa_device() {
27538        let mock_response = MockResponseReader::read_response(
27539            "test_resources/generated/valid",
27540            "iam-create-virtual-mfa-device.xml",
27541        );
27542        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27543        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27544        let request = CreateVirtualMFADeviceRequest::default();
27545        let result = client.create_virtual_mfa_device(request).await;
27546        assert!(result.is_ok(), "parse error: {:?}", result);
27547    }
27548
27549    #[tokio::test]
27550    async fn test_parse_valid_iam_get_account_summary() {
27551        let mock_response = MockResponseReader::read_response(
27552            "test_resources/generated/valid",
27553            "iam-get-account-summary.xml",
27554        );
27555        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27556        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27557
27558        let result = client.get_account_summary().await;
27559        assert!(result.is_ok(), "parse error: {:?}", result);
27560    }
27561
27562    #[tokio::test]
27563    async fn test_parse_valid_iam_get_group() {
27564        let mock_response = MockResponseReader::read_response(
27565            "test_resources/generated/valid",
27566            "iam-get-group.xml",
27567        );
27568        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27569        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27570        let request = GetGroupRequest::default();
27571        let result = client.get_group(request).await;
27572        assert!(result.is_ok(), "parse error: {:?}", result);
27573    }
27574
27575    #[tokio::test]
27576    async fn test_parse_valid_iam_get_user_policy() {
27577        let mock_response = MockResponseReader::read_response(
27578            "test_resources/generated/valid",
27579            "iam-get-user-policy.xml",
27580        );
27581        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27582        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27583        let request = GetUserPolicyRequest::default();
27584        let result = client.get_user_policy(request).await;
27585        assert!(result.is_ok(), "parse error: {:?}", result);
27586    }
27587
27588    #[tokio::test]
27589    async fn test_parse_valid_iam_get_user() {
27590        let mock_response =
27591            MockResponseReader::read_response("test_resources/generated/valid", "iam-get-user.xml");
27592        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27593        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27594        let request = GetUserRequest::default();
27595        let result = client.get_user(request).await;
27596        assert!(result.is_ok(), "parse error: {:?}", result);
27597    }
27598
27599    #[tokio::test]
27600    async fn test_parse_valid_iam_list_access_keys() {
27601        let mock_response = MockResponseReader::read_response(
27602            "test_resources/generated/valid",
27603            "iam-list-access-keys.xml",
27604        );
27605        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27606        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27607        let request = ListAccessKeysRequest::default();
27608        let result = client.list_access_keys(request).await;
27609        assert!(result.is_ok(), "parse error: {:?}", result);
27610    }
27611
27612    #[tokio::test]
27613    async fn test_parse_valid_iam_list_account_aliases() {
27614        let mock_response = MockResponseReader::read_response(
27615            "test_resources/generated/valid",
27616            "iam-list-account-aliases.xml",
27617        );
27618        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27619        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27620        let request = ListAccountAliasesRequest::default();
27621        let result = client.list_account_aliases(request).await;
27622        assert!(result.is_ok(), "parse error: {:?}", result);
27623    }
27624
27625    #[tokio::test]
27626    async fn test_parse_valid_iam_list_groups() {
27627        let mock_response = MockResponseReader::read_response(
27628            "test_resources/generated/valid",
27629            "iam-list-groups.xml",
27630        );
27631        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27632        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27633        let request = ListGroupsRequest::default();
27634        let result = client.list_groups(request).await;
27635        assert!(result.is_ok(), "parse error: {:?}", result);
27636    }
27637
27638    #[tokio::test]
27639    async fn test_parse_valid_iam_list_instance_profiles() {
27640        let mock_response = MockResponseReader::read_response(
27641            "test_resources/generated/valid",
27642            "iam-list-instance-profiles.xml",
27643        );
27644        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27645        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27646        let request = ListInstanceProfilesRequest::default();
27647        let result = client.list_instance_profiles(request).await;
27648        assert!(result.is_ok(), "parse error: {:?}", result);
27649    }
27650
27651    #[tokio::test]
27652    async fn test_parse_valid_iam_list_mfa_devices() {
27653        let mock_response = MockResponseReader::read_response(
27654            "test_resources/generated/valid",
27655            "iam-list-mfa-devices.xml",
27656        );
27657        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27658        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27659        let request = ListMFADevicesRequest::default();
27660        let result = client.list_mfa_devices(request).await;
27661        assert!(result.is_ok(), "parse error: {:?}", result);
27662    }
27663
27664    #[tokio::test]
27665    async fn test_parse_valid_iam_list_roles() {
27666        let mock_response = MockResponseReader::read_response(
27667            "test_resources/generated/valid",
27668            "iam-list-roles.xml",
27669        );
27670        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27671        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27672        let request = ListRolesRequest::default();
27673        let result = client.list_roles(request).await;
27674        assert!(result.is_ok(), "parse error: {:?}", result);
27675    }
27676
27677    #[tokio::test]
27678    async fn test_parse_valid_iam_list_server_certificates() {
27679        let mock_response = MockResponseReader::read_response(
27680            "test_resources/generated/valid",
27681            "iam-list-server-certificates.xml",
27682        );
27683        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27684        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27685        let request = ListServerCertificatesRequest::default();
27686        let result = client.list_server_certificates(request).await;
27687        assert!(result.is_ok(), "parse error: {:?}", result);
27688    }
27689
27690    #[tokio::test]
27691    async fn test_parse_valid_iam_list_signing_certificates() {
27692        let mock_response = MockResponseReader::read_response(
27693            "test_resources/generated/valid",
27694            "iam-list-signing-certificates.xml",
27695        );
27696        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27697        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27698        let request = ListSigningCertificatesRequest::default();
27699        let result = client.list_signing_certificates(request).await;
27700        assert!(result.is_ok(), "parse error: {:?}", result);
27701    }
27702
27703    #[tokio::test]
27704    async fn test_parse_valid_iam_list_users() {
27705        let mock_response = MockResponseReader::read_response(
27706            "test_resources/generated/valid",
27707            "iam-list-users.xml",
27708        );
27709        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27710        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27711        let request = ListUsersRequest::default();
27712        let result = client.list_users(request).await;
27713        assert!(result.is_ok(), "parse error: {:?}", result);
27714    }
27715
27716    #[tokio::test]
27717    async fn test_parse_valid_iam_list_virtual_mfa_devices() {
27718        let mock_response = MockResponseReader::read_response(
27719            "test_resources/generated/valid",
27720            "iam-list-virtual-mfa-devices.xml",
27721        );
27722        let mock = MockRequestDispatcher::with_status(200).with_body(&mock_response);
27723        let client = IamClient::new_with(mock, MockCredentialsProvider, rusoto_region::UsEast1);
27724        let request = ListVirtualMFADevicesRequest::default();
27725        let result = client.list_virtual_mfa_devices(request).await;
27726        assert!(result.is_ok(), "parse error: {:?}", result);
27727    }
27728}