rusoto_securityhub/
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;
24use rusoto_core::signature::SignedRequest;
25#[allow(unused_imports)]
26use serde::{Deserialize, Serialize};
27use serde_json;
28#[derive(Clone, Debug, Default, PartialEq, Serialize)]
29#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
30pub struct AcceptInvitationRequest {
31    /// <p>The ID of the invitation sent from the Security Hub master account.</p>
32    #[serde(rename = "InvitationId")]
33    pub invitation_id: String,
34    /// <p>The account ID of the Security Hub master account that sent the invitation.</p>
35    #[serde(rename = "MasterId")]
36    pub master_id: String,
37}
38
39#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
40#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
41pub struct AcceptInvitationResponse {}
42
43/// <p>The details of an AWS account.</p>
44#[derive(Clone, Debug, Default, PartialEq, Serialize)]
45#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
46pub struct AccountDetails {
47    /// <p>The ID of an AWS account.</p>
48    #[serde(rename = "AccountId")]
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub account_id: Option<String>,
51    /// <p>The email of an AWS account.</p>
52    #[serde(rename = "Email")]
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub email: Option<String>,
55}
56
57/// <p>An <code>ActionTarget</code> object.</p>
58#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
59#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
60pub struct ActionTarget {
61    /// <p>The ARN for the target action.</p>
62    #[serde(rename = "ActionTargetArn")]
63    pub action_target_arn: String,
64    /// <p>The description of the target action.</p>
65    #[serde(rename = "Description")]
66    pub description: String,
67    /// <p>The name of the action target.</p>
68    #[serde(rename = "Name")]
69    pub name: String,
70}
71
72/// <p>Information about an Availability Zone.</p>
73#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
74pub struct AvailabilityZone {
75    /// <p>The ID of the subnet. You can specify one subnet per Availability Zone.</p>
76    #[serde(rename = "SubnetId")]
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub subnet_id: Option<String>,
79    /// <p>The name of the Availability Zone.</p>
80    #[serde(rename = "ZoneName")]
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub zone_name: Option<String>,
83}
84
85/// <p>Provides details about an auto scaling group.</p>
86#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
87pub struct AwsAutoScalingAutoScalingGroupDetails {
88    /// <p>The datetime when the auto scaling group was created.</p>
89    #[serde(rename = "CreatedTime")]
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub created_time: Option<String>,
92    /// <p>The amount of time, in seconds, that Amazon EC2 Auto Scaling waits before it checks the health status of an EC2 instance that has come into service.</p>
93    #[serde(rename = "HealthCheckGracePeriod")]
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub health_check_grace_period: Option<i64>,
96    /// <p>The service to use for the health checks.</p>
97    #[serde(rename = "HealthCheckType")]
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub health_check_type: Option<String>,
100    /// <p>The name of the launch configuration.</p>
101    #[serde(rename = "LaunchConfigurationName")]
102    #[serde(skip_serializing_if = "Option::is_none")]
103    pub launch_configuration_name: Option<String>,
104    /// <p>The list of load balancers associated with the group.</p>
105    #[serde(rename = "LoadBalancerNames")]
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub load_balancer_names: Option<Vec<String>>,
108}
109
110/// <p>A distribution configuration.</p>
111#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
112pub struct AwsCloudFrontDistributionDetails {
113    /// <p>The domain name corresponding to the distribution.</p>
114    #[serde(rename = "DomainName")]
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub domain_name: Option<String>,
117    /// <p>The entity tag is a hash of the object.</p>
118    #[serde(rename = "ETag")]
119    #[serde(skip_serializing_if = "Option::is_none")]
120    pub e_tag: Option<String>,
121    /// <p>The date and time that the distribution was last modified.</p>
122    #[serde(rename = "LastModifiedTime")]
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub last_modified_time: Option<String>,
125    /// <p>A complex type that controls whether access logs are written for the distribution.</p>
126    #[serde(rename = "Logging")]
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub logging: Option<AwsCloudFrontDistributionLogging>,
129    /// <p>A complex type that contains information about origins for this distribution.</p>
130    #[serde(rename = "Origins")]
131    #[serde(skip_serializing_if = "Option::is_none")]
132    pub origins: Option<AwsCloudFrontDistributionOrigins>,
133    /// <p>Indicates the current status of the distribution.</p>
134    #[serde(rename = "Status")]
135    #[serde(skip_serializing_if = "Option::is_none")]
136    pub status: Option<String>,
137    /// <p>A unique identifier that specifies the AWS WAF web ACL, if any, to associate with this distribution.</p>
138    #[serde(rename = "WebAclId")]
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub web_acl_id: Option<String>,
141}
142
143/// <p>A complex type that controls whether access logs are written for the distribution.</p>
144#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
145pub struct AwsCloudFrontDistributionLogging {
146    /// <p>The Amazon S3 bucket to store the access logs in.</p>
147    #[serde(rename = "Bucket")]
148    #[serde(skip_serializing_if = "Option::is_none")]
149    pub bucket: Option<String>,
150    /// <p>With this field, you can enable or disable the selected distribution.</p>
151    #[serde(rename = "Enabled")]
152    #[serde(skip_serializing_if = "Option::is_none")]
153    pub enabled: Option<bool>,
154    /// <p>Specifies whether you want CloudFront to include cookies in access logs.</p>
155    #[serde(rename = "IncludeCookies")]
156    #[serde(skip_serializing_if = "Option::is_none")]
157    pub include_cookies: Option<bool>,
158    /// <p>An optional string that you want CloudFront to use as a prefix to the access log filenames for this distribution.</p>
159    #[serde(rename = "Prefix")]
160    #[serde(skip_serializing_if = "Option::is_none")]
161    pub prefix: Option<String>,
162}
163
164/// <p>A complex type that describes the Amazon S3 bucket, HTTP server (for example, a web server), Amazon Elemental MediaStore, or other server from which CloudFront gets your files.</p>
165#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
166pub struct AwsCloudFrontDistributionOriginItem {
167    /// <p>Amazon S3 origins: The DNS name of the Amazon S3 bucket from which you want CloudFront to get objects for this origin.</p>
168    #[serde(rename = "DomainName")]
169    #[serde(skip_serializing_if = "Option::is_none")]
170    pub domain_name: Option<String>,
171    /// <p>A unique identifier for the origin or origin group.</p>
172    #[serde(rename = "Id")]
173    #[serde(skip_serializing_if = "Option::is_none")]
174    pub id: Option<String>,
175    /// <p>An optional element that causes CloudFront to request your content from a directory in your Amazon S3 bucket or your custom origin.</p>
176    #[serde(rename = "OriginPath")]
177    #[serde(skip_serializing_if = "Option::is_none")]
178    pub origin_path: Option<String>,
179}
180
181/// <p>A complex type that contains information about origins and origin groups for this distribution.</p>
182#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
183pub struct AwsCloudFrontDistributionOrigins {
184    /// <p>A complex type that contains origins or origin groups for this distribution.</p>
185    #[serde(rename = "Items")]
186    #[serde(skip_serializing_if = "Option::is_none")]
187    pub items: Option<Vec<AwsCloudFrontDistributionOriginItem>>,
188}
189
190/// <p>Information about an AWS CodeBuild project.</p>
191#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
192pub struct AwsCodeBuildProjectDetails {
193    /// <p>The AWS Key Management Service (AWS KMS) customer master key (CMK) used to encrypt the build output artifacts.</p> <p>You can specify either the Amazon Resource Name (ARN) of the CMK or, if available, the CMK alias (using the format alias/alias-name). </p>
194    #[serde(rename = "EncryptionKey")]
195    #[serde(skip_serializing_if = "Option::is_none")]
196    pub encryption_key: Option<String>,
197    /// <p>Information about the build environment for this build project.</p>
198    #[serde(rename = "Environment")]
199    #[serde(skip_serializing_if = "Option::is_none")]
200    pub environment: Option<AwsCodeBuildProjectEnvironment>,
201    /// <p>The name of the build project.</p>
202    #[serde(rename = "Name")]
203    #[serde(skip_serializing_if = "Option::is_none")]
204    pub name: Option<String>,
205    /// <p>The ARN of the IAM role that enables AWS CodeBuild to interact with dependent AWS services on behalf of the AWS account.</p>
206    #[serde(rename = "ServiceRole")]
207    #[serde(skip_serializing_if = "Option::is_none")]
208    pub service_role: Option<String>,
209    /// <p>Information about the build input source code for this build project.</p>
210    #[serde(rename = "Source")]
211    #[serde(skip_serializing_if = "Option::is_none")]
212    pub source: Option<AwsCodeBuildProjectSource>,
213    /// <p>Information about the VPC configuration that AWS CodeBuild accesses.</p>
214    #[serde(rename = "VpcConfig")]
215    #[serde(skip_serializing_if = "Option::is_none")]
216    pub vpc_config: Option<AwsCodeBuildProjectVpcConfig>,
217}
218
219/// <p>Information about the build environment for this build project.</p>
220#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
221pub struct AwsCodeBuildProjectEnvironment {
222    /// <p>The certificate to use with this build project.</p>
223    #[serde(rename = "Certificate")]
224    #[serde(skip_serializing_if = "Option::is_none")]
225    pub certificate: Option<String>,
226    /// <p>The type of credentials AWS CodeBuild uses to pull images in your build.</p> <p>Valid values:</p> <ul> <li> <p> <code>CODEBUILD</code> specifies that AWS CodeBuild uses its own credentials. This requires that you modify your ECR repository policy to trust the AWS CodeBuild service principal.</p> </li> <li> <p> <code>SERVICE_ROLE</code> specifies that AWS CodeBuild uses your build project's service role.</p> </li> </ul> <p>When you use a cross-account or private registry image, you must use <code>SERVICE_ROLE</code> credentials. When you use an AWS CodeBuild curated image, you must use <code>CODEBUILD</code> credentials.</p>
227    #[serde(rename = "ImagePullCredentialsType")]
228    #[serde(skip_serializing_if = "Option::is_none")]
229    pub image_pull_credentials_type: Option<String>,
230    /// <p>The credentials for access to a private registry.</p>
231    #[serde(rename = "RegistryCredential")]
232    #[serde(skip_serializing_if = "Option::is_none")]
233    pub registry_credential: Option<AwsCodeBuildProjectEnvironmentRegistryCredential>,
234    /// <p>The type of build environment to use for related builds.</p> <p>The environment type <code>ARM_CONTAINER</code> is available only in Regions US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), Asia Pacific (Mumbai), Asia Pacific (Tokyo), Asia Pacific (Sydney), and Europe (Frankfurt).</p> <p>The environment type <code>LINUX_CONTAINER</code> with compute type build.general1.2xlarge is available only in Regions US East (N. Virginia), US East (N. Virginia), US West (Oregon), Canada (Central), Europe (Ireland), Europe (London), Europe (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), China (Beijing), and China (Ningxia).</p> <p>The environment type <code>LINUX_GPU_CONTAINER</code> is available only in Regions US East (N. Virginia), US East (N. Virginia), US West (Oregon), Canada (Central), Europe (Ireland), Europe (London), Europe (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), China (Beijing), and China (Ningxia).</p> <p>Valid values: <code>WINDOWS_CONTAINER</code> | <code>LINUX_CONTAINER</code> | <code>LINUX_GPU_CONTAINER</code> | <code>ARM_CONTAINER</code> </p>
235    #[serde(rename = "Type")]
236    #[serde(skip_serializing_if = "Option::is_none")]
237    pub type_: Option<String>,
238}
239
240/// <p>The credentials for access to a private registry.</p>
241#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
242pub struct AwsCodeBuildProjectEnvironmentRegistryCredential {
243    /// <p><p>The Amazon Resource Name (ARN) or name of credentials created using AWS Secrets Manager.</p> <note> <p>The credential can use the name of the credentials only if they exist in your current AWS Region. </p> </note></p>
244    #[serde(rename = "Credential")]
245    #[serde(skip_serializing_if = "Option::is_none")]
246    pub credential: Option<String>,
247    /// <p>The service that created the credentials to access a private Docker registry.</p> <p>The valid value,<code> SECRETS_MANAGER</code>, is for AWS Secrets Manager.</p>
248    #[serde(rename = "CredentialProvider")]
249    #[serde(skip_serializing_if = "Option::is_none")]
250    pub credential_provider: Option<String>,
251}
252
253/// <p>Information about the build input source code for this build project.</p>
254#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
255pub struct AwsCodeBuildProjectSource {
256    /// <p>Information about the Git clone depth for the build project.</p>
257    #[serde(rename = "GitCloneDepth")]
258    #[serde(skip_serializing_if = "Option::is_none")]
259    pub git_clone_depth: Option<i64>,
260    /// <p>Whether to ignore SSL warnings while connecting to the project source code.</p>
261    #[serde(rename = "InsecureSsl")]
262    #[serde(skip_serializing_if = "Option::is_none")]
263    pub insecure_ssl: Option<bool>,
264    /// <p><p>Information about the location of the source code to be built.</p> <p>Valid values include:</p> <ul> <li> <p>For source code settings that are specified in the source action of a pipeline in AWS CodePipeline, location should not be specified. If it is specified, AWS CodePipeline ignores it. This is because AWS CodePipeline uses the settings in a pipeline&#39;s source action instead of this value.</p> </li> <li> <p>For source code in an AWS CodeCommit repository, the HTTPS clone URL to the repository that contains the source code and the build spec file (for example, <code>https://git-codecommit.region-ID.amazonaws.com/v1/repos/repo-name</code> ).</p> </li> <li> <p>For source code in an S3 input bucket, one of the following.</p> <ul> <li> <p>The path to the ZIP file that contains the source code (for example, <code>bucket-name/path/to/object-name.zip</code>).</p> </li> <li> <p> The path to the folder that contains the source code (for example, <code>bucket-name/path/to/source-code/folder/</code>).</p> </li> </ul> </li> <li> <p>For source code in a GitHub repository, the HTTPS clone URL to the repository that contains the source and the build spec file.</p> </li> <li> <p>For source code in a Bitbucket repository, the HTTPS clone URL to the repository that contains the source and the build spec file. </p> </li> </ul></p>
265    #[serde(rename = "Location")]
266    #[serde(skip_serializing_if = "Option::is_none")]
267    pub location: Option<String>,
268    /// <p><p>The type of repository that contains the source code to be built. Valid values are:</p> <ul> <li> <p> <code>BITBUCKET</code> - The source code is in a Bitbucket repository.</p> </li> <li> <p> <code>CODECOMMIT</code> - The source code is in an AWS CodeCommit repository.</p> </li> <li> <p> <code>CODEPIPELINE</code> - The source code settings are specified in the source action of a pipeline in AWS CodePipeline.</p> </li> <li> <p> <code>GITHUB</code> - The source code is in a GitHub repository.</p> </li> <li> <p> <code>GITHUB<em>ENTERPRISE</code> - The source code is in a GitHub Enterprise repository.</p> </li> <li> <p> <code>NO</em>SOURCE</code> - The project does not have input source code.</p> </li> <li> <p> <code>S3</code> - The source code is in an S3 input bucket. </p> </li> </ul></p>
269    #[serde(rename = "Type")]
270    #[serde(skip_serializing_if = "Option::is_none")]
271    pub type_: Option<String>,
272}
273
274/// <p>Information about the VPC configuration that AWS CodeBuild accesses.</p>
275#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
276pub struct AwsCodeBuildProjectVpcConfig {
277    /// <p>A list of one or more security group IDs in your Amazon VPC.</p>
278    #[serde(rename = "SecurityGroupIds")]
279    #[serde(skip_serializing_if = "Option::is_none")]
280    pub security_group_ids: Option<Vec<String>>,
281    /// <p>A list of one or more subnet IDs in your Amazon VPC.</p>
282    #[serde(rename = "Subnets")]
283    #[serde(skip_serializing_if = "Option::is_none")]
284    pub subnets: Option<Vec<String>>,
285    /// <p>The ID of the VPC.</p>
286    #[serde(rename = "VpcId")]
287    #[serde(skip_serializing_if = "Option::is_none")]
288    pub vpc_id: Option<String>,
289}
290
291/// <p>The details of an Amazon EC2 instance.</p>
292#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
293pub struct AwsEc2InstanceDetails {
294    /// <p>The IAM profile ARN of the instance.</p>
295    #[serde(rename = "IamInstanceProfileArn")]
296    #[serde(skip_serializing_if = "Option::is_none")]
297    pub iam_instance_profile_arn: Option<String>,
298    /// <p>The Amazon Machine Image (AMI) ID of the instance.</p>
299    #[serde(rename = "ImageId")]
300    #[serde(skip_serializing_if = "Option::is_none")]
301    pub image_id: Option<String>,
302    /// <p>The IPv4 addresses associated with the instance.</p>
303    #[serde(rename = "IpV4Addresses")]
304    #[serde(skip_serializing_if = "Option::is_none")]
305    pub ip_v4_addresses: Option<Vec<String>>,
306    /// <p>The IPv6 addresses associated with the instance.</p>
307    #[serde(rename = "IpV6Addresses")]
308    #[serde(skip_serializing_if = "Option::is_none")]
309    pub ip_v6_addresses: Option<Vec<String>>,
310    /// <p>The key name associated with the instance.</p>
311    #[serde(rename = "KeyName")]
312    #[serde(skip_serializing_if = "Option::is_none")]
313    pub key_name: Option<String>,
314    /// <p>The date/time the instance was launched.</p>
315    #[serde(rename = "LaunchedAt")]
316    #[serde(skip_serializing_if = "Option::is_none")]
317    pub launched_at: Option<String>,
318    /// <p>The identifier of the subnet that the instance was launched in.</p>
319    #[serde(rename = "SubnetId")]
320    #[serde(skip_serializing_if = "Option::is_none")]
321    pub subnet_id: Option<String>,
322    /// <p>The instance type of the instance. </p>
323    #[serde(rename = "Type")]
324    #[serde(skip_serializing_if = "Option::is_none")]
325    pub type_: Option<String>,
326    /// <p>The identifier of the VPC that the instance was launched in.</p>
327    #[serde(rename = "VpcId")]
328    #[serde(skip_serializing_if = "Option::is_none")]
329    pub vpc_id: Option<String>,
330}
331
332/// <p>Information about the network interface attachment.</p>
333#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
334pub struct AwsEc2NetworkInterfaceAttachment {
335    /// <p>The timestamp indicating when the attachment initiated.</p>
336    #[serde(rename = "AttachTime")]
337    #[serde(skip_serializing_if = "Option::is_none")]
338    pub attach_time: Option<String>,
339    /// <p>The identifier of the network interface attachment</p>
340    #[serde(rename = "AttachmentId")]
341    #[serde(skip_serializing_if = "Option::is_none")]
342    pub attachment_id: Option<String>,
343    /// <p>Indicates whether the network interface is deleted when the instance is terminated.</p>
344    #[serde(rename = "DeleteOnTermination")]
345    #[serde(skip_serializing_if = "Option::is_none")]
346    pub delete_on_termination: Option<bool>,
347    /// <p>The device index of the network interface attachment on the instance.</p>
348    #[serde(rename = "DeviceIndex")]
349    #[serde(skip_serializing_if = "Option::is_none")]
350    pub device_index: Option<i64>,
351    /// <p>The ID of the instance.</p>
352    #[serde(rename = "InstanceId")]
353    #[serde(skip_serializing_if = "Option::is_none")]
354    pub instance_id: Option<String>,
355    /// <p>The AWS account ID of the owner of the instance.</p>
356    #[serde(rename = "InstanceOwnerId")]
357    #[serde(skip_serializing_if = "Option::is_none")]
358    pub instance_owner_id: Option<String>,
359    /// <p>The attachment state.</p> <p>Valid values: <code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code> </p>
360    #[serde(rename = "Status")]
361    #[serde(skip_serializing_if = "Option::is_none")]
362    pub status: Option<String>,
363}
364
365/// <p>Details about the network interface</p>
366#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
367pub struct AwsEc2NetworkInterfaceDetails {
368    /// <p>The network interface attachment.</p>
369    #[serde(rename = "Attachment")]
370    #[serde(skip_serializing_if = "Option::is_none")]
371    pub attachment: Option<AwsEc2NetworkInterfaceAttachment>,
372    /// <p>The ID of the network interface.</p>
373    #[serde(rename = "NetworkInterfaceId")]
374    #[serde(skip_serializing_if = "Option::is_none")]
375    pub network_interface_id: Option<String>,
376    /// <p>Security groups for the network interface.</p>
377    #[serde(rename = "SecurityGroups")]
378    #[serde(skip_serializing_if = "Option::is_none")]
379    pub security_groups: Option<Vec<AwsEc2NetworkInterfaceSecurityGroup>>,
380    /// <p>Indicates whether traffic to or from the instance is validated.</p>
381    #[serde(rename = "SourceDestCheck")]
382    #[serde(skip_serializing_if = "Option::is_none")]
383    pub source_dest_check: Option<bool>,
384}
385
386/// <p>A security group associated with the network interface.</p>
387#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
388pub struct AwsEc2NetworkInterfaceSecurityGroup {
389    /// <p>The ID of the security group.</p>
390    #[serde(rename = "GroupId")]
391    #[serde(skip_serializing_if = "Option::is_none")]
392    pub group_id: Option<String>,
393    /// <p>The name of the security group.</p>
394    #[serde(rename = "GroupName")]
395    #[serde(skip_serializing_if = "Option::is_none")]
396    pub group_name: Option<String>,
397}
398
399/// <p>Details about an EC2 security group.</p>
400#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
401pub struct AwsEc2SecurityGroupDetails {
402    /// <p>The ID of the security group.</p>
403    #[serde(rename = "GroupId")]
404    #[serde(skip_serializing_if = "Option::is_none")]
405    pub group_id: Option<String>,
406    /// <p>The name of the security group.</p>
407    #[serde(rename = "GroupName")]
408    #[serde(skip_serializing_if = "Option::is_none")]
409    pub group_name: Option<String>,
410    /// <p>The inbound rules associated with the security group.</p>
411    #[serde(rename = "IpPermissions")]
412    #[serde(skip_serializing_if = "Option::is_none")]
413    pub ip_permissions: Option<Vec<AwsEc2SecurityGroupIpPermission>>,
414    /// <p>[VPC only] The outbound rules associated with the security group.</p>
415    #[serde(rename = "IpPermissionsEgress")]
416    #[serde(skip_serializing_if = "Option::is_none")]
417    pub ip_permissions_egress: Option<Vec<AwsEc2SecurityGroupIpPermission>>,
418    /// <p>The AWS account ID of the owner of the security group.</p>
419    #[serde(rename = "OwnerId")]
420    #[serde(skip_serializing_if = "Option::is_none")]
421    pub owner_id: Option<String>,
422    /// <p>[VPC only] The ID of the VPC for the security group.</p>
423    #[serde(rename = "VpcId")]
424    #[serde(skip_serializing_if = "Option::is_none")]
425    pub vpc_id: Option<String>,
426}
427
428/// <p>An IP permission for an EC2 security group.</p>
429#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
430pub struct AwsEc2SecurityGroupIpPermission {
431    /// <p>The start of the port range for the TCP and UDP protocols, or an ICMP/ICMPv6 type number.</p> <p>A value of -1 indicates all ICMP/ICMPv6 types. If you specify all ICMP/ICMPv6 types, you must specify all codes. </p>
432    #[serde(rename = "FromPort")]
433    #[serde(skip_serializing_if = "Option::is_none")]
434    pub from_port: Option<i64>,
435    /// <p>The IP protocol name (<code>tcp</code>, <code>udp</code>, <code>icmp</code>, <code>icmpv6</code>) or number.</p> <p>[VPC only] Use <code>-1</code> to specify all protocols.</p> <p>When authorizing security group rules, specifying -1 or a protocol number other than <code>tcp</code>, <code>udp</code>, <code>icmp</code>, or <code>icmpv6</code> allows traffic on all ports, regardless of any port range you specify.</p> <p>For <code>tcp</code>, <code>udp</code>, and <code>icmp</code>, you must specify a port range.</p> <p>For <code>icmpv6</code>, the port range is optional. If you omit the port range, traffic for all types and codes is allowed. </p>
436    #[serde(rename = "IpProtocol")]
437    #[serde(skip_serializing_if = "Option::is_none")]
438    pub ip_protocol: Option<String>,
439    /// <p>The IPv4 ranges.</p>
440    #[serde(rename = "IpRanges")]
441    #[serde(skip_serializing_if = "Option::is_none")]
442    pub ip_ranges: Option<Vec<AwsEc2SecurityGroupIpRange>>,
443    /// <p>The IPv6 ranges.</p>
444    #[serde(rename = "Ipv6Ranges")]
445    #[serde(skip_serializing_if = "Option::is_none")]
446    pub ipv_6_ranges: Option<Vec<AwsEc2SecurityGroupIpv6Range>>,
447    /// <p>[VPC only] The prefix list IDs for an AWS service. With outbound rules, this is the AWS service to access through a VPC endpoint from instances associated with the security group.</p>
448    #[serde(rename = "PrefixListIds")]
449    #[serde(skip_serializing_if = "Option::is_none")]
450    pub prefix_list_ids: Option<Vec<AwsEc2SecurityGroupPrefixListId>>,
451    /// <p>The end of the port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code.</p> <p>A value of -1 indicates all ICMP/ICMPv6 codes. If you specify all ICMP/ICMPv6 types, you must specify all codes.</p>
452    #[serde(rename = "ToPort")]
453    #[serde(skip_serializing_if = "Option::is_none")]
454    pub to_port: Option<i64>,
455    /// <p>The security group and AWS account ID pairs.</p>
456    #[serde(rename = "UserIdGroupPairs")]
457    #[serde(skip_serializing_if = "Option::is_none")]
458    pub user_id_group_pairs: Option<Vec<AwsEc2SecurityGroupUserIdGroupPair>>,
459}
460
461/// <p>A range of IPv4 addresses.</p>
462#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
463pub struct AwsEc2SecurityGroupIpRange {
464    /// <p>The IPv4 CIDR range. You can specify either a CIDR range or a source security group, but not both. To specify a single IPv4 address, use the /32 prefix length.</p>
465    #[serde(rename = "CidrIp")]
466    #[serde(skip_serializing_if = "Option::is_none")]
467    pub cidr_ip: Option<String>,
468}
469
470/// <p>A range of IPv6 addresses.</p>
471#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
472pub struct AwsEc2SecurityGroupIpv6Range {
473    /// <p>The IPv6 CIDR range. You can specify either a CIDR range or a source security group, but not both. To specify a single IPv6 address, use the /128 prefix length.</p>
474    #[serde(rename = "CidrIpv6")]
475    #[serde(skip_serializing_if = "Option::is_none")]
476    pub cidr_ipv_6: Option<String>,
477}
478
479/// <p>A prefix list ID.</p>
480#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
481pub struct AwsEc2SecurityGroupPrefixListId {
482    /// <p>The ID of the prefix.</p>
483    #[serde(rename = "PrefixListId")]
484    #[serde(skip_serializing_if = "Option::is_none")]
485    pub prefix_list_id: Option<String>,
486}
487
488/// <p>A relationship between a security group and a user.</p>
489#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
490pub struct AwsEc2SecurityGroupUserIdGroupPair {
491    /// <p>The ID of the security group.</p>
492    #[serde(rename = "GroupId")]
493    #[serde(skip_serializing_if = "Option::is_none")]
494    pub group_id: Option<String>,
495    /// <p>The name of the security group.</p>
496    #[serde(rename = "GroupName")]
497    #[serde(skip_serializing_if = "Option::is_none")]
498    pub group_name: Option<String>,
499    /// <p>The status of a VPC peering connection, if applicable.</p>
500    #[serde(rename = "PeeringStatus")]
501    #[serde(skip_serializing_if = "Option::is_none")]
502    pub peering_status: Option<String>,
503    /// <p>The ID of an AWS account.</p> <p>For a referenced security group in another VPC, the account ID of the referenced security group is returned in the response. If the referenced security group is deleted, this value is not returned.</p> <p>[EC2-Classic] Required when adding or removing rules that reference a security group in another AWS. </p>
504    #[serde(rename = "UserId")]
505    #[serde(skip_serializing_if = "Option::is_none")]
506    pub user_id: Option<String>,
507    /// <p>The ID of the VPC for the referenced security group, if applicable.</p>
508    #[serde(rename = "VpcId")]
509    #[serde(skip_serializing_if = "Option::is_none")]
510    pub vpc_id: Option<String>,
511    /// <p>The ID of the VPC peering connection, if applicable.</p>
512    #[serde(rename = "VpcPeeringConnectionId")]
513    #[serde(skip_serializing_if = "Option::is_none")]
514    pub vpc_peering_connection_id: Option<String>,
515}
516
517/// <p>An attachment to an AWS EC2 volume.</p>
518#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
519pub struct AwsEc2VolumeAttachment {
520    /// <p>The datetime when the attachment initiated.</p>
521    #[serde(rename = "AttachTime")]
522    #[serde(skip_serializing_if = "Option::is_none")]
523    pub attach_time: Option<String>,
524    /// <p>Whether the EBS volume is deleted when the EC2 instance is terminated.</p>
525    #[serde(rename = "DeleteOnTermination")]
526    #[serde(skip_serializing_if = "Option::is_none")]
527    pub delete_on_termination: Option<bool>,
528    /// <p>The identifier of the EC2 instance.</p>
529    #[serde(rename = "InstanceId")]
530    #[serde(skip_serializing_if = "Option::is_none")]
531    pub instance_id: Option<String>,
532    /// <p>The attachment state of the volume.</p>
533    #[serde(rename = "Status")]
534    #[serde(skip_serializing_if = "Option::is_none")]
535    pub status: Option<String>,
536}
537
538/// <p>Details about an EC2 volume.</p>
539#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
540pub struct AwsEc2VolumeDetails {
541    /// <p>The volume attachments.</p>
542    #[serde(rename = "Attachments")]
543    #[serde(skip_serializing_if = "Option::is_none")]
544    pub attachments: Option<Vec<AwsEc2VolumeAttachment>>,
545    /// <p>The datetime when the volume was created.</p>
546    #[serde(rename = "CreateTime")]
547    #[serde(skip_serializing_if = "Option::is_none")]
548    pub create_time: Option<String>,
549    /// <p>Whether the volume is encrypted.</p>
550    #[serde(rename = "Encrypted")]
551    #[serde(skip_serializing_if = "Option::is_none")]
552    pub encrypted: Option<bool>,
553    /// <p>The ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) that was used to protect the volume encryption key for the volume.</p>
554    #[serde(rename = "KmsKeyId")]
555    #[serde(skip_serializing_if = "Option::is_none")]
556    pub kms_key_id: Option<String>,
557    /// <p>The size of the volume, in GiBs.</p>
558    #[serde(rename = "Size")]
559    #[serde(skip_serializing_if = "Option::is_none")]
560    pub size: Option<i64>,
561    /// <p>The snapshot from which the volume was created.</p>
562    #[serde(rename = "SnapshotId")]
563    #[serde(skip_serializing_if = "Option::is_none")]
564    pub snapshot_id: Option<String>,
565    /// <p>The volume state.</p>
566    #[serde(rename = "Status")]
567    #[serde(skip_serializing_if = "Option::is_none")]
568    pub status: Option<String>,
569}
570
571/// <p>Details about an EC2 VPC.</p>
572#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
573pub struct AwsEc2VpcDetails {
574    /// <p>Information about the IPv4 CIDR blocks associated with the VPC.</p>
575    #[serde(rename = "CidrBlockAssociationSet")]
576    #[serde(skip_serializing_if = "Option::is_none")]
577    pub cidr_block_association_set: Option<Vec<CidrBlockAssociation>>,
578    /// <p>The identifier of the set of Dynamic Host Configuration Protocol (DHCP) options that are associated with the VPC. If the default options are associated with the VPC, then this is default.</p>
579    #[serde(rename = "DhcpOptionsId")]
580    #[serde(skip_serializing_if = "Option::is_none")]
581    pub dhcp_options_id: Option<String>,
582    /// <p>Information about the IPv6 CIDR blocks associated with the VPC.</p>
583    #[serde(rename = "Ipv6CidrBlockAssociationSet")]
584    #[serde(skip_serializing_if = "Option::is_none")]
585    pub ipv_6_cidr_block_association_set: Option<Vec<Ipv6CidrBlockAssociation>>,
586    /// <p>The current state of the VPC.</p>
587    #[serde(rename = "State")]
588    #[serde(skip_serializing_if = "Option::is_none")]
589    pub state: Option<String>,
590}
591
592/// <p>Information about an Elasticsearch domain.</p>
593#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
594pub struct AwsElasticsearchDomainDetails {
595    /// <p>IAM policy document specifying the access policies for the new Amazon ES domain.</p>
596    #[serde(rename = "AccessPolicies")]
597    #[serde(skip_serializing_if = "Option::is_none")]
598    pub access_policies: Option<String>,
599    /// <p>Additional options for the domain endpoint.</p>
600    #[serde(rename = "DomainEndpointOptions")]
601    #[serde(skip_serializing_if = "Option::is_none")]
602    pub domain_endpoint_options: Option<AwsElasticsearchDomainDomainEndpointOptions>,
603    /// <p>Unique identifier for an Amazon ES domain.</p>
604    #[serde(rename = "DomainId")]
605    #[serde(skip_serializing_if = "Option::is_none")]
606    pub domain_id: Option<String>,
607    /// <p>Name of an Amazon ES domain.</p> <p>Domain names are unique across all domains owned by the same account within an AWS Region.</p> <p>Domain names must start with a lowercase letter and must be between 3 and 28 characters.</p> <p>Valid characters are a-z (lowercase only), 0-9, and – (hyphen). </p>
608    #[serde(rename = "DomainName")]
609    #[serde(skip_serializing_if = "Option::is_none")]
610    pub domain_name: Option<String>,
611    /// <p>Elasticsearch version.</p>
612    #[serde(rename = "ElasticsearchVersion")]
613    #[serde(skip_serializing_if = "Option::is_none")]
614    pub elasticsearch_version: Option<String>,
615    /// <p>Details about the configuration for encryption at rest.</p>
616    #[serde(rename = "EncryptionAtRestOptions")]
617    #[serde(skip_serializing_if = "Option::is_none")]
618    pub encryption_at_rest_options: Option<AwsElasticsearchDomainEncryptionAtRestOptions>,
619    /// <p>Domain-specific endpoint used to submit index, search, and data upload requests to an Amazon ES domain.</p> <p>The endpoint is a service URL. </p>
620    #[serde(rename = "Endpoint")]
621    #[serde(skip_serializing_if = "Option::is_none")]
622    pub endpoint: Option<String>,
623    /// <p>The key-value pair that exists if the Amazon ES domain uses VPC endpoints.</p>
624    #[serde(rename = "Endpoints")]
625    #[serde(skip_serializing_if = "Option::is_none")]
626    pub endpoints: Option<::std::collections::HashMap<String, String>>,
627    /// <p>Details about the configuration for node-to-node encryption.</p>
628    #[serde(rename = "NodeToNodeEncryptionOptions")]
629    #[serde(skip_serializing_if = "Option::is_none")]
630    pub node_to_node_encryption_options: Option<AwsElasticsearchDomainNodeToNodeEncryptionOptions>,
631    /// <p>Information that Amazon ES derives based on <code>VPCOptions</code> for the domain.</p>
632    #[serde(rename = "VPCOptions")]
633    #[serde(skip_serializing_if = "Option::is_none")]
634    pub vpc_options: Option<AwsElasticsearchDomainVPCOptions>,
635}
636
637/// <p>Additional options for the domain endpoint, such as whether to require HTTPS for all traffic.</p>
638#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
639pub struct AwsElasticsearchDomainDomainEndpointOptions {
640    /// <p>Whether to require that all traffic to the domain arrive over HTTPS.</p>
641    #[serde(rename = "EnforceHTTPS")]
642    #[serde(skip_serializing_if = "Option::is_none")]
643    pub enforce_https: Option<bool>,
644    /// <p><p>The TLS security policy to apply to the HTTPS endpoint of the Elasticsearch domain.</p> <p>Valid values:</p> <ul> <li> <p> <code>Policy-Min-TLS-1-0-2019-07</code>, which supports TLSv1.0 and higher</p> </li> <li> <p> <code>Policy-Min-TLS-1-2-2019-07</code>, which only supports TLSv1.2</p> </li> </ul></p>
645    #[serde(rename = "TLSSecurityPolicy")]
646    #[serde(skip_serializing_if = "Option::is_none")]
647    pub tls_security_policy: Option<String>,
648}
649
650/// <p>Details about the configuration for encryption at rest.</p>
651#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
652pub struct AwsElasticsearchDomainEncryptionAtRestOptions {
653    /// <p>Whether encryption at rest is enabled.</p>
654    #[serde(rename = "Enabled")]
655    #[serde(skip_serializing_if = "Option::is_none")]
656    pub enabled: Option<bool>,
657    /// <p>The KMS key ID. Takes the form 1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a.</p>
658    #[serde(rename = "KmsKeyId")]
659    #[serde(skip_serializing_if = "Option::is_none")]
660    pub kms_key_id: Option<String>,
661}
662
663/// <p>Details about the configuration for node-to-node encryption.</p>
664#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
665pub struct AwsElasticsearchDomainNodeToNodeEncryptionOptions {
666    /// <p>Whether node-to-node encryption is enabled.</p>
667    #[serde(rename = "Enabled")]
668    #[serde(skip_serializing_if = "Option::is_none")]
669    pub enabled: Option<bool>,
670}
671
672/// <p>Information that Amazon ES derives based on <code>VPCOptions</code> for the domain.</p>
673#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
674pub struct AwsElasticsearchDomainVPCOptions {
675    /// <p>The list of Availability Zones associated with the VPC subnets.</p>
676    #[serde(rename = "AvailabilityZones")]
677    #[serde(skip_serializing_if = "Option::is_none")]
678    pub availability_zones: Option<Vec<String>>,
679    /// <p>The list of security group IDs associated with the VPC endpoints for the domain.</p>
680    #[serde(rename = "SecurityGroupIds")]
681    #[serde(skip_serializing_if = "Option::is_none")]
682    pub security_group_ids: Option<Vec<String>>,
683    /// <p>A list of subnet IDs associated with the VPC endpoints for the domain.</p>
684    #[serde(rename = "SubnetIds")]
685    #[serde(skip_serializing_if = "Option::is_none")]
686    pub subnet_ids: Option<Vec<String>>,
687    /// <p>ID for the VPC.</p>
688    #[serde(rename = "VPCId")]
689    #[serde(skip_serializing_if = "Option::is_none")]
690    pub vpc_id: Option<String>,
691}
692
693/// <p>Information about a load balancer.</p>
694#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
695pub struct AwsElbv2LoadBalancerDetails {
696    /// <p>The Availability Zones for the load balancer.</p>
697    #[serde(rename = "AvailabilityZones")]
698    #[serde(skip_serializing_if = "Option::is_none")]
699    pub availability_zones: Option<Vec<AvailabilityZone>>,
700    /// <p>The ID of the Amazon Route 53 hosted zone associated with the load balancer.</p>
701    #[serde(rename = "CanonicalHostedZoneId")]
702    #[serde(skip_serializing_if = "Option::is_none")]
703    pub canonical_hosted_zone_id: Option<String>,
704    /// <p>The date and time the load balancer was created.</p>
705    #[serde(rename = "CreatedTime")]
706    #[serde(skip_serializing_if = "Option::is_none")]
707    pub created_time: Option<String>,
708    /// <p>The public DNS name of the load balancer.</p>
709    #[serde(rename = "DNSName")]
710    #[serde(skip_serializing_if = "Option::is_none")]
711    pub dns_name: Option<String>,
712    /// <p>The type of IP addresses used by the subnets for your load balancer. The possible values are <code>ipv4</code> (for IPv4 addresses) and <code>dualstack</code> (for IPv4 and IPv6 addresses).</p>
713    #[serde(rename = "IpAddressType")]
714    #[serde(skip_serializing_if = "Option::is_none")]
715    pub ip_address_type: Option<String>,
716    /// <p>The nodes of an Internet-facing load balancer have public IP addresses.</p>
717    #[serde(rename = "Scheme")]
718    #[serde(skip_serializing_if = "Option::is_none")]
719    pub scheme: Option<String>,
720    /// <p>The IDs of the security groups for the load balancer.</p>
721    #[serde(rename = "SecurityGroups")]
722    #[serde(skip_serializing_if = "Option::is_none")]
723    pub security_groups: Option<Vec<String>>,
724    /// <p>The state of the load balancer.</p>
725    #[serde(rename = "State")]
726    #[serde(skip_serializing_if = "Option::is_none")]
727    pub state: Option<LoadBalancerState>,
728    /// <p>The type of load balancer.</p>
729    #[serde(rename = "Type")]
730    #[serde(skip_serializing_if = "Option::is_none")]
731    pub type_: Option<String>,
732    /// <p>The ID of the VPC for the load balancer.</p>
733    #[serde(rename = "VpcId")]
734    #[serde(skip_serializing_if = "Option::is_none")]
735    pub vpc_id: Option<String>,
736}
737
738/// <p>IAM access key details related to a finding.</p>
739#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
740pub struct AwsIamAccessKeyDetails {
741    /// <p>The creation date/time of the IAM access key related to a finding.</p>
742    #[serde(rename = "CreatedAt")]
743    #[serde(skip_serializing_if = "Option::is_none")]
744    pub created_at: Option<String>,
745    /// <p>The ID of the principal associated with an access key.</p>
746    #[serde(rename = "PrincipalId")]
747    #[serde(skip_serializing_if = "Option::is_none")]
748    pub principal_id: Option<String>,
749    /// <p>The name of the principal.</p>
750    #[serde(rename = "PrincipalName")]
751    #[serde(skip_serializing_if = "Option::is_none")]
752    pub principal_name: Option<String>,
753    /// <p>The type of principal associated with an access key.</p>
754    #[serde(rename = "PrincipalType")]
755    #[serde(skip_serializing_if = "Option::is_none")]
756    pub principal_type: Option<String>,
757    /// <p>The status of the IAM access key related to a finding.</p>
758    #[serde(rename = "Status")]
759    #[serde(skip_serializing_if = "Option::is_none")]
760    pub status: Option<String>,
761}
762
763/// <p>Contains information about an IAM role, including all of the role's policies.</p>
764#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
765pub struct AwsIamRoleDetails {
766    /// <p>The trust policy that grants permission to assume the role.</p>
767    #[serde(rename = "AssumeRolePolicyDocument")]
768    #[serde(skip_serializing_if = "Option::is_none")]
769    pub assume_role_policy_document: Option<String>,
770    /// <p>The date and time, in ISO 8601 date-time format, when the role was created.</p>
771    #[serde(rename = "CreateDate")]
772    #[serde(skip_serializing_if = "Option::is_none")]
773    pub create_date: Option<String>,
774    /// <p>The maximum session duration (in seconds) that you want to set for the specified role.</p>
775    #[serde(rename = "MaxSessionDuration")]
776    #[serde(skip_serializing_if = "Option::is_none")]
777    pub max_session_duration: Option<i64>,
778    /// <p>The path to the role.</p>
779    #[serde(rename = "Path")]
780    #[serde(skip_serializing_if = "Option::is_none")]
781    pub path: Option<String>,
782    /// <p>The stable and unique string identifying the role.</p>
783    #[serde(rename = "RoleId")]
784    #[serde(skip_serializing_if = "Option::is_none")]
785    pub role_id: Option<String>,
786    /// <p>The friendly name that identifies the role.</p>
787    #[serde(rename = "RoleName")]
788    #[serde(skip_serializing_if = "Option::is_none")]
789    pub role_name: Option<String>,
790}
791
792/// <p>Contains metadata about a customer master key (CMK).</p>
793#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
794pub struct AwsKmsKeyDetails {
795    /// <p>The twelve-digit account ID of the AWS account that owns the CMK.</p>
796    #[serde(rename = "AWSAccountId")]
797    #[serde(skip_serializing_if = "Option::is_none")]
798    pub aws_account_id: Option<String>,
799    /// <p>The date and time when the CMK was created.</p>
800    #[serde(rename = "CreationDate")]
801    #[serde(skip_serializing_if = "Option::is_none")]
802    pub creation_date: Option<f64>,
803    /// <p>The globally unique identifier for the CMK.</p>
804    #[serde(rename = "KeyId")]
805    #[serde(skip_serializing_if = "Option::is_none")]
806    pub key_id: Option<String>,
807    /// <p>The manager of the CMK. CMKs in your AWS account are either customer managed or AWS managed.</p>
808    #[serde(rename = "KeyManager")]
809    #[serde(skip_serializing_if = "Option::is_none")]
810    pub key_manager: Option<String>,
811    /// <p>The state of the CMK.</p>
812    #[serde(rename = "KeyState")]
813    #[serde(skip_serializing_if = "Option::is_none")]
814    pub key_state: Option<String>,
815    /// <p>The source of the CMK's key material.</p> <p>When this value is <code>AWS_KMS</code>, AWS KMS created the key material.</p> <p>When this value is <code>EXTERNAL</code>, the key material was imported from your existing key management infrastructure or the CMK lacks key material.</p> <p>When this value is <code>AWS_CLOUDHSM</code>, the key material was created in the AWS CloudHSM cluster associated with a custom key store.</p>
816    #[serde(rename = "Origin")]
817    #[serde(skip_serializing_if = "Option::is_none")]
818    pub origin: Option<String>,
819}
820
821/// <p>The code for the Lambda function. You can specify either an object in Amazon S3, or upload a deployment package directly.</p>
822#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
823pub struct AwsLambdaFunctionCode {
824    /// <p>An Amazon S3 bucket in the same AWS Region as your function. The bucket can be in a different AWS account.</p>
825    #[serde(rename = "S3Bucket")]
826    #[serde(skip_serializing_if = "Option::is_none")]
827    pub s3_bucket: Option<String>,
828    /// <p>The Amazon S3 key of the deployment package.</p>
829    #[serde(rename = "S3Key")]
830    #[serde(skip_serializing_if = "Option::is_none")]
831    pub s3_key: Option<String>,
832    /// <p>For versioned objects, the version of the deployment package object to use.</p>
833    #[serde(rename = "S3ObjectVersion")]
834    #[serde(skip_serializing_if = "Option::is_none")]
835    pub s3_object_version: Option<String>,
836    /// <p>The base64-encoded contents of the deployment package. AWS SDK and AWS CLI clients handle the encoding for you.</p>
837    #[serde(rename = "ZipFile")]
838    #[serde(skip_serializing_if = "Option::is_none")]
839    pub zip_file: Option<String>,
840}
841
842/// <p>The dead-letter queue for failed asynchronous invocations.</p>
843#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
844pub struct AwsLambdaFunctionDeadLetterConfig {
845    /// <p>The Amazon Resource Name (ARN) of an Amazon SQS queue or Amazon SNS topic.</p>
846    #[serde(rename = "TargetArn")]
847    #[serde(skip_serializing_if = "Option::is_none")]
848    pub target_arn: Option<String>,
849}
850
851/// <p>Details about a function's configuration.</p>
852#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
853pub struct AwsLambdaFunctionDetails {
854    /// <p>An <code>AwsLambdaFunctionCode</code> object.</p>
855    #[serde(rename = "Code")]
856    #[serde(skip_serializing_if = "Option::is_none")]
857    pub code: Option<AwsLambdaFunctionCode>,
858    /// <p>The SHA256 hash of the function's deployment package.</p>
859    #[serde(rename = "CodeSha256")]
860    #[serde(skip_serializing_if = "Option::is_none")]
861    pub code_sha_256: Option<String>,
862    /// <p>The function's dead letter queue.</p>
863    #[serde(rename = "DeadLetterConfig")]
864    #[serde(skip_serializing_if = "Option::is_none")]
865    pub dead_letter_config: Option<AwsLambdaFunctionDeadLetterConfig>,
866    /// <p>The function's environment variables.</p>
867    #[serde(rename = "Environment")]
868    #[serde(skip_serializing_if = "Option::is_none")]
869    pub environment: Option<AwsLambdaFunctionEnvironment>,
870    /// <p>The name of the function.</p>
871    #[serde(rename = "FunctionName")]
872    #[serde(skip_serializing_if = "Option::is_none")]
873    pub function_name: Option<String>,
874    /// <p>The function that Lambda calls to begin executing your function.</p>
875    #[serde(rename = "Handler")]
876    #[serde(skip_serializing_if = "Option::is_none")]
877    pub handler: Option<String>,
878    /// <p>The KMS key that's used to encrypt the function's environment variables. This key is only returned if you've configured a customer managed CMK.</p>
879    #[serde(rename = "KmsKeyArn")]
880    #[serde(skip_serializing_if = "Option::is_none")]
881    pub kms_key_arn: Option<String>,
882    /// <p>The date and time that the function was last updated, in ISO-8601 format (YYYY-MM-DDThh:mm:ss.sTZD).</p>
883    #[serde(rename = "LastModified")]
884    #[serde(skip_serializing_if = "Option::is_none")]
885    pub last_modified: Option<String>,
886    /// <p>The function's layers.</p>
887    #[serde(rename = "Layers")]
888    #[serde(skip_serializing_if = "Option::is_none")]
889    pub layers: Option<Vec<AwsLambdaFunctionLayer>>,
890    /// <p>For Lambda@Edge functions, the ARN of the master function.</p>
891    #[serde(rename = "MasterArn")]
892    #[serde(skip_serializing_if = "Option::is_none")]
893    pub master_arn: Option<String>,
894    /// <p>The memory that's allocated to the function.</p>
895    #[serde(rename = "MemorySize")]
896    #[serde(skip_serializing_if = "Option::is_none")]
897    pub memory_size: Option<i64>,
898    /// <p>The latest updated revision of the function or alias.</p>
899    #[serde(rename = "RevisionId")]
900    #[serde(skip_serializing_if = "Option::is_none")]
901    pub revision_id: Option<String>,
902    /// <p>The function's execution role.</p>
903    #[serde(rename = "Role")]
904    #[serde(skip_serializing_if = "Option::is_none")]
905    pub role: Option<String>,
906    /// <p>The runtime environment for the Lambda function.</p>
907    #[serde(rename = "Runtime")]
908    #[serde(skip_serializing_if = "Option::is_none")]
909    pub runtime: Option<String>,
910    /// <p>The amount of time that Lambda allows a function to run before stopping it.</p>
911    #[serde(rename = "Timeout")]
912    #[serde(skip_serializing_if = "Option::is_none")]
913    pub timeout: Option<i64>,
914    /// <p>The function's AWS X-Ray tracing configuration.</p>
915    #[serde(rename = "TracingConfig")]
916    #[serde(skip_serializing_if = "Option::is_none")]
917    pub tracing_config: Option<AwsLambdaFunctionTracingConfig>,
918    /// <p>The version of the Lambda function.</p>
919    #[serde(rename = "Version")]
920    #[serde(skip_serializing_if = "Option::is_none")]
921    pub version: Option<String>,
922    /// <p>The function's networking configuration.</p>
923    #[serde(rename = "VpcConfig")]
924    #[serde(skip_serializing_if = "Option::is_none")]
925    pub vpc_config: Option<AwsLambdaFunctionVpcConfig>,
926}
927
928/// <p>A function's environment variable settings.</p>
929#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
930pub struct AwsLambdaFunctionEnvironment {
931    /// <p>An <code>AwsLambdaFunctionEnvironmentError</code> object.</p>
932    #[serde(rename = "Error")]
933    #[serde(skip_serializing_if = "Option::is_none")]
934    pub error: Option<AwsLambdaFunctionEnvironmentError>,
935    /// <p>Environment variable key-value pairs.</p>
936    #[serde(rename = "Variables")]
937    #[serde(skip_serializing_if = "Option::is_none")]
938    pub variables: Option<::std::collections::HashMap<String, String>>,
939}
940
941/// <p>Error messages for environment variables that couldn't be applied.</p>
942#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
943pub struct AwsLambdaFunctionEnvironmentError {
944    /// <p>The error code.</p>
945    #[serde(rename = "ErrorCode")]
946    #[serde(skip_serializing_if = "Option::is_none")]
947    pub error_code: Option<String>,
948    /// <p>The error message.</p>
949    #[serde(rename = "Message")]
950    #[serde(skip_serializing_if = "Option::is_none")]
951    pub message: Option<String>,
952}
953
954/// <p>An AWS Lambda layer.</p>
955#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
956pub struct AwsLambdaFunctionLayer {
957    /// <p>The Amazon Resource Name (ARN) of the function layer.</p>
958    #[serde(rename = "Arn")]
959    #[serde(skip_serializing_if = "Option::is_none")]
960    pub arn: Option<String>,
961    /// <p>The size of the layer archive in bytes.</p>
962    #[serde(rename = "CodeSize")]
963    #[serde(skip_serializing_if = "Option::is_none")]
964    pub code_size: Option<i64>,
965}
966
967/// <p>The function's AWS X-Ray tracing configuration.</p>
968#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
969pub struct AwsLambdaFunctionTracingConfig {
970    /// <p>The tracing mode.</p>
971    #[serde(rename = "Mode")]
972    #[serde(skip_serializing_if = "Option::is_none")]
973    pub mode: Option<String>,
974}
975
976/// <p>The VPC security groups and subnets that are attached to a Lambda function. For more information, see VPC Settings.</p>
977#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
978pub struct AwsLambdaFunctionVpcConfig {
979    /// <p>A list of VPC security groups IDs.</p>
980    #[serde(rename = "SecurityGroupIds")]
981    #[serde(skip_serializing_if = "Option::is_none")]
982    pub security_group_ids: Option<Vec<String>>,
983    /// <p>A list of VPC subnet IDs.</p>
984    #[serde(rename = "SubnetIds")]
985    #[serde(skip_serializing_if = "Option::is_none")]
986    pub subnet_ids: Option<Vec<String>>,
987    /// <p>The ID of the VPC.</p>
988    #[serde(rename = "VpcId")]
989    #[serde(skip_serializing_if = "Option::is_none")]
990    pub vpc_id: Option<String>,
991}
992
993/// <p>Details about a Lambda layer version.</p>
994#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
995pub struct AwsLambdaLayerVersionDetails {
996    /// <p>The layer's compatible runtimes. Maximum number of five items.</p> <p>Valid values: <code>nodejs10.x</code> | <code>nodejs12.x</code> | <code>java8</code> | <code>java11</code> | <code>python2.7</code> | <code>python3.6</code> | <code>python3.7</code> | <code>python3.8</code> | <code>dotnetcore1.0</code> | <code>dotnetcore2.1</code> | <code>go1.x</code> | <code>ruby2.5</code> | <code>provided</code> </p>
997    #[serde(rename = "CompatibleRuntimes")]
998    #[serde(skip_serializing_if = "Option::is_none")]
999    pub compatible_runtimes: Option<Vec<String>>,
1000    /// <p>The date that the version was created, in ISO 8601 format. For example, 2018-11-27T15:10:45.123+0000. </p>
1001    #[serde(rename = "CreatedDate")]
1002    #[serde(skip_serializing_if = "Option::is_none")]
1003    pub created_date: Option<String>,
1004    /// <p>The version number.</p>
1005    #[serde(rename = "Version")]
1006    #[serde(skip_serializing_if = "Option::is_none")]
1007    pub version: Option<i64>,
1008}
1009
1010/// <p>An AWS Identity and Access Management (IAM) role associated with the DB instance.</p>
1011#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1012pub struct AwsRdsDbInstanceAssociatedRole {
1013    /// <p>The name of the feature associated with the IAM)role.</p>
1014    #[serde(rename = "FeatureName")]
1015    #[serde(skip_serializing_if = "Option::is_none")]
1016    pub feature_name: Option<String>,
1017    /// <p>The Amazon Resource Name (ARN) of the IAM role that is associated with the DB instance.</p>
1018    #[serde(rename = "RoleArn")]
1019    #[serde(skip_serializing_if = "Option::is_none")]
1020    pub role_arn: Option<String>,
1021    /// <p><p>Describes the state of the association between the IAM role and the DB instance. The <code>Status</code> property returns one of the following values:</p> <ul> <li> <p> <code>ACTIVE</code> - The IAM role ARN is associated with the DB instance and can be used to access other AWS services on your behalf.</p> </li> <li> <p> <code>PENDING</code> - The IAM role ARN is being associated with the DB instance.</p> </li> <li> <p> <code>INVALID</code> - The IAM role ARN is associated with the DB instance. But the DB instance is unable to assume the IAM role in order to access other AWS services on your behalf. </p> </li> </ul></p>
1022    #[serde(rename = "Status")]
1023    #[serde(skip_serializing_if = "Option::is_none")]
1024    pub status: Option<String>,
1025}
1026
1027/// <p>Contains the details of an Amazon RDS DB instance.</p>
1028#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1029pub struct AwsRdsDbInstanceDetails {
1030    /// <p>The AWS Identity and Access Management (IAM) roles associated with the DB instance.</p>
1031    #[serde(rename = "AssociatedRoles")]
1032    #[serde(skip_serializing_if = "Option::is_none")]
1033    pub associated_roles: Option<Vec<AwsRdsDbInstanceAssociatedRole>>,
1034    /// <p>The identifier of the CA certificate for this DB instance.</p>
1035    #[serde(rename = "CACertificateIdentifier")]
1036    #[serde(skip_serializing_if = "Option::is_none")]
1037    pub ca_certificate_identifier: Option<String>,
1038    /// <p>If the DB instance is a member of a DB cluster, contains the name of the DB cluster that the DB instance is a member of.</p>
1039    #[serde(rename = "DBClusterIdentifier")]
1040    #[serde(skip_serializing_if = "Option::is_none")]
1041    pub db_cluster_identifier: Option<String>,
1042    /// <p>Contains the name of the compute and memory capacity class of the DB instance.</p>
1043    #[serde(rename = "DBInstanceClass")]
1044    #[serde(skip_serializing_if = "Option::is_none")]
1045    pub db_instance_class: Option<String>,
1046    /// <p>Contains a user-supplied database identifier. This identifier is the unique key that identifies a DB instance.</p>
1047    #[serde(rename = "DBInstanceIdentifier")]
1048    #[serde(skip_serializing_if = "Option::is_none")]
1049    pub db_instance_identifier: Option<String>,
1050    /// <p>The meaning of this parameter differs according to the database engine you use.</p> <p> <b>MySQL, MariaDB, SQL Server, PostgreSQL</b> </p> <p>Contains the name of the initial database of this instance that was provided at create time, if one was specified when the DB instance was created. This same name is returned for the life of the DB instance.</p> <p> <b>Oracle</b> </p> <p>Contains the Oracle System ID (SID) of the created DB instance. Not shown when the returned parameters do not apply to an Oracle DB instance. </p>
1051    #[serde(rename = "DBName")]
1052    #[serde(skip_serializing_if = "Option::is_none")]
1053    pub db_name: Option<String>,
1054    /// <p>Specifies the port that the DB instance listens on. If the DB instance is part of a DB cluster, this can be a different port than the DB cluster port.</p>
1055    #[serde(rename = "DbInstancePort")]
1056    #[serde(skip_serializing_if = "Option::is_none")]
1057    pub db_instance_port: Option<i64>,
1058    /// <p>The AWS Region-unique, immutable identifier for the DB instance. This identifier is found in AWS CloudTrail log entries whenever the AWS KMS key for the DB instance is accessed. </p>
1059    #[serde(rename = "DbiResourceId")]
1060    #[serde(skip_serializing_if = "Option::is_none")]
1061    pub dbi_resource_id: Option<String>,
1062    /// <p>Indicates whether the DB instance has deletion protection enabled.</p> <p>When deletion protection is enabled, the database cannot be deleted.</p>
1063    #[serde(rename = "DeletionProtection")]
1064    #[serde(skip_serializing_if = "Option::is_none")]
1065    pub deletion_protection: Option<bool>,
1066    /// <p>Specifies the connection endpoint.</p>
1067    #[serde(rename = "Endpoint")]
1068    #[serde(skip_serializing_if = "Option::is_none")]
1069    pub endpoint: Option<AwsRdsDbInstanceEndpoint>,
1070    /// <p>Provides the name of the database engine to use for this DB instance.</p>
1071    #[serde(rename = "Engine")]
1072    #[serde(skip_serializing_if = "Option::is_none")]
1073    pub engine: Option<String>,
1074    /// <p>Indicates the database engine version.</p>
1075    #[serde(rename = "EngineVersion")]
1076    #[serde(skip_serializing_if = "Option::is_none")]
1077    pub engine_version: Option<String>,
1078    /// <p><p>True if mapping of AWS Identity and Access Management (IAM) accounts to database accounts is enabled, and otherwise false.</p> <p>IAM database authentication can be enabled for the following database engines.</p> <ul> <li> <p>For MySQL 5.6, minor version 5.6.34 or higher</p> </li> <li> <p>For MySQL 5.7, minor version 5.7.16 or higher</p> </li> <li> <p>Aurora 5.6 or higher</p> </li> </ul></p>
1079    #[serde(rename = "IAMDatabaseAuthenticationEnabled")]
1080    #[serde(skip_serializing_if = "Option::is_none")]
1081    pub iam_database_authentication_enabled: Option<bool>,
1082    /// <p>Provides the date and time the DB instance was created.</p>
1083    #[serde(rename = "InstanceCreateTime")]
1084    #[serde(skip_serializing_if = "Option::is_none")]
1085    pub instance_create_time: Option<String>,
1086    /// <p>If <code>StorageEncrypted</code> is true, the AWS KMS key identifier for the encrypted DB instance.</p>
1087    #[serde(rename = "KmsKeyId")]
1088    #[serde(skip_serializing_if = "Option::is_none")]
1089    pub kms_key_id: Option<String>,
1090    /// <p>Specifies the accessibility options for the DB instance.</p> <p>A value of true specifies an Internet-facing instance with a publicly resolvable DNS name, which resolves to a public IP address.</p> <p>A value of false specifies an internal instance with a DNS name that resolves to a private IP address. </p>
1091    #[serde(rename = "PubliclyAccessible")]
1092    #[serde(skip_serializing_if = "Option::is_none")]
1093    pub publicly_accessible: Option<bool>,
1094    /// <p>Specifies whether the DB instance is encrypted.</p>
1095    #[serde(rename = "StorageEncrypted")]
1096    #[serde(skip_serializing_if = "Option::is_none")]
1097    pub storage_encrypted: Option<bool>,
1098    /// <p>The ARN from the key store with which the instance is associated for TDE encryption.</p>
1099    #[serde(rename = "TdeCredentialArn")]
1100    #[serde(skip_serializing_if = "Option::is_none")]
1101    pub tde_credential_arn: Option<String>,
1102    /// <p>A list of VPC security groups that the DB instance belongs to.</p>
1103    #[serde(rename = "VpcSecurityGroups")]
1104    #[serde(skip_serializing_if = "Option::is_none")]
1105    pub vpc_security_groups: Option<Vec<AwsRdsDbInstanceVpcSecurityGroup>>,
1106}
1107
1108/// <p>Specifies the connection endpoint.</p>
1109#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1110pub struct AwsRdsDbInstanceEndpoint {
1111    /// <p>Specifies the DNS address of the DB instance.</p>
1112    #[serde(rename = "Address")]
1113    #[serde(skip_serializing_if = "Option::is_none")]
1114    pub address: Option<String>,
1115    /// <p>Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.</p>
1116    #[serde(rename = "HostedZoneId")]
1117    #[serde(skip_serializing_if = "Option::is_none")]
1118    pub hosted_zone_id: Option<String>,
1119    /// <p>Specifies the port that the database engine is listening on.</p>
1120    #[serde(rename = "Port")]
1121    #[serde(skip_serializing_if = "Option::is_none")]
1122    pub port: Option<i64>,
1123}
1124
1125/// <p>A VPC security groups that the DB instance belongs to.</p>
1126#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1127pub struct AwsRdsDbInstanceVpcSecurityGroup {
1128    /// <p>The status of the VPC security group.</p>
1129    #[serde(rename = "Status")]
1130    #[serde(skip_serializing_if = "Option::is_none")]
1131    pub status: Option<String>,
1132    /// <p>The name of the VPC security group.</p>
1133    #[serde(rename = "VpcSecurityGroupId")]
1134    #[serde(skip_serializing_if = "Option::is_none")]
1135    pub vpc_security_group_id: Option<String>,
1136}
1137
1138/// <p>The details of an Amazon S3 bucket.</p>
1139#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1140pub struct AwsS3BucketDetails {
1141    /// <p>The date and time when the S3 bucket was created.</p>
1142    #[serde(rename = "CreatedAt")]
1143    #[serde(skip_serializing_if = "Option::is_none")]
1144    pub created_at: Option<String>,
1145    /// <p>The canonical user ID of the owner of the S3 bucket.</p>
1146    #[serde(rename = "OwnerId")]
1147    #[serde(skip_serializing_if = "Option::is_none")]
1148    pub owner_id: Option<String>,
1149    /// <p>The display name of the owner of the S3 bucket.</p>
1150    #[serde(rename = "OwnerName")]
1151    #[serde(skip_serializing_if = "Option::is_none")]
1152    pub owner_name: Option<String>,
1153    /// <p>The encryption rules that are applied to the S3 bucket.</p>
1154    #[serde(rename = "ServerSideEncryptionConfiguration")]
1155    #[serde(skip_serializing_if = "Option::is_none")]
1156    pub server_side_encryption_configuration: Option<AwsS3BucketServerSideEncryptionConfiguration>,
1157}
1158
1159/// <p>Specifies the default server-side encryption to apply to new objects in the bucket.</p>
1160#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1161pub struct AwsS3BucketServerSideEncryptionByDefault {
1162    /// <p>AWS KMS customer master key (CMK) ID to use for the default encryption.</p>
1163    #[serde(rename = "KMSMasterKeyID")]
1164    #[serde(skip_serializing_if = "Option::is_none")]
1165    pub kms_master_key_id: Option<String>,
1166    /// <p>Server-side encryption algorithm to use for the default encryption.</p>
1167    #[serde(rename = "SSEAlgorithm")]
1168    #[serde(skip_serializing_if = "Option::is_none")]
1169    pub sse_algorithm: Option<String>,
1170}
1171
1172/// <p>The encryption configuration for the S3 bucket.</p>
1173#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1174pub struct AwsS3BucketServerSideEncryptionConfiguration {
1175    /// <p>The encryption rules that are applied to the S3 bucket.</p>
1176    #[serde(rename = "Rules")]
1177    #[serde(skip_serializing_if = "Option::is_none")]
1178    pub rules: Option<Vec<AwsS3BucketServerSideEncryptionRule>>,
1179}
1180
1181/// <p>An encryption rule to apply to the S3 bucket.</p>
1182#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1183pub struct AwsS3BucketServerSideEncryptionRule {
1184    /// <p>Specifies the default server-side encryption to apply to new objects in the bucket. If a <code>PUT</code> object request doesn't specify any server-side encryption, this default encryption is applied.</p>
1185    #[serde(rename = "ApplyServerSideEncryptionByDefault")]
1186    #[serde(skip_serializing_if = "Option::is_none")]
1187    pub apply_server_side_encryption_by_default: Option<AwsS3BucketServerSideEncryptionByDefault>,
1188}
1189
1190/// <p>Details about an Amazon S3 object.</p>
1191#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1192pub struct AwsS3ObjectDetails {
1193    /// <p>A standard MIME type describing the format of the object data.</p>
1194    #[serde(rename = "ContentType")]
1195    #[serde(skip_serializing_if = "Option::is_none")]
1196    pub content_type: Option<String>,
1197    /// <p>The opaque identifier assigned by a web server to a specific version of a resource found at a URL.</p>
1198    #[serde(rename = "ETag")]
1199    #[serde(skip_serializing_if = "Option::is_none")]
1200    pub e_tag: Option<String>,
1201    /// <p>The date and time when the object was last modified.</p>
1202    #[serde(rename = "LastModified")]
1203    #[serde(skip_serializing_if = "Option::is_none")]
1204    pub last_modified: Option<String>,
1205    /// <p>The identifier of the AWS Key Management Service (AWS KMS) symmetric customer managed customer master key (CMK) that was used for the object.</p>
1206    #[serde(rename = "SSEKMSKeyId")]
1207    #[serde(skip_serializing_if = "Option::is_none")]
1208    pub ssekms_key_id: Option<String>,
1209    /// <p>If the object is stored using server-side encryption, the value of the server-side encryption algorithm used when storing this object in Amazon S3.</p>
1210    #[serde(rename = "ServerSideEncryption")]
1211    #[serde(skip_serializing_if = "Option::is_none")]
1212    pub server_side_encryption: Option<String>,
1213    /// <p>The version of the object.</p>
1214    #[serde(rename = "VersionId")]
1215    #[serde(skip_serializing_if = "Option::is_none")]
1216    pub version_id: Option<String>,
1217}
1218
1219/// <p><p>Provides consistent format for the contents of the Security Hub-aggregated findings. <code>AwsSecurityFinding</code> format enables you to share findings between AWS security services and third-party solutions, and security standards checks.</p> <note> <p>A finding is a potential security issue generated either by AWS services (Amazon GuardDuty, Amazon Inspector, and Amazon Macie) or by the integrated third-party solutions and standards checks.</p> </note></p>
1220#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1221pub struct AwsSecurityFinding {
1222    /// <p>The AWS account ID that a finding is generated in.</p>
1223    #[serde(rename = "AwsAccountId")]
1224    pub aws_account_id: String,
1225    /// <p>This data type is exclusive to findings that are generated as the result of a check run against a specific rule in a supported security standard, such as CIS AWS Foundations. Contains security standard-related finding details.</p>
1226    #[serde(rename = "Compliance")]
1227    #[serde(skip_serializing_if = "Option::is_none")]
1228    pub compliance: Option<Compliance>,
1229    /// <p>A finding's confidence. Confidence is defined as the likelihood that a finding accurately identifies the behavior or issue that it was intended to identify.</p> <p>Confidence is scored on a 0-100 basis using a ratio scale, where 0 means zero percent confidence and 100 means 100 percent confidence.</p>
1230    #[serde(rename = "Confidence")]
1231    #[serde(skip_serializing_if = "Option::is_none")]
1232    pub confidence: Option<i64>,
1233    /// <p>An ISO8601-formatted timestamp that indicates when the security-findings provider created the potential security issue that a finding captured.</p>
1234    #[serde(rename = "CreatedAt")]
1235    pub created_at: String,
1236    /// <p>The level of importance assigned to the resources associated with the finding.</p> <p>A score of 0 means that the underlying resources have no criticality, and a score of 100 is reserved for the most critical resources.</p>
1237    #[serde(rename = "Criticality")]
1238    #[serde(skip_serializing_if = "Option::is_none")]
1239    pub criticality: Option<i64>,
1240    /// <p><p>A finding&#39;s description.</p> <note> <p>In this release, <code>Description</code> is a required property.</p> </note></p>
1241    #[serde(rename = "Description")]
1242    pub description: String,
1243    /// <p>An ISO8601-formatted timestamp that indicates when the security-findings provider first observed the potential security issue that a finding captured.</p>
1244    #[serde(rename = "FirstObservedAt")]
1245    #[serde(skip_serializing_if = "Option::is_none")]
1246    pub first_observed_at: Option<String>,
1247    /// <p>The identifier for the solution-specific component (a discrete unit of logic) that generated a finding. In various security-findings providers' solutions, this generator can be called a rule, a check, a detector, a plugin, etc. </p>
1248    #[serde(rename = "GeneratorId")]
1249    pub generator_id: String,
1250    /// <p>The security findings provider-specific identifier for a finding.</p>
1251    #[serde(rename = "Id")]
1252    pub id: String,
1253    /// <p>An ISO8601-formatted timestamp that indicates when the security-findings provider most recently observed the potential security issue that a finding captured.</p>
1254    #[serde(rename = "LastObservedAt")]
1255    #[serde(skip_serializing_if = "Option::is_none")]
1256    pub last_observed_at: Option<String>,
1257    /// <p>A list of malware related to a finding.</p>
1258    #[serde(rename = "Malware")]
1259    #[serde(skip_serializing_if = "Option::is_none")]
1260    pub malware: Option<Vec<Malware>>,
1261    /// <p>The details of network-related information about a finding.</p>
1262    #[serde(rename = "Network")]
1263    #[serde(skip_serializing_if = "Option::is_none")]
1264    pub network: Option<Network>,
1265    /// <p>Provides information about a network path that is relevant to a finding. Each entry under <code>NetworkPath</code> represents a component of that path.</p>
1266    #[serde(rename = "NetworkPath")]
1267    #[serde(skip_serializing_if = "Option::is_none")]
1268    pub network_path: Option<Vec<NetworkPathComponent>>,
1269    /// <p>A user-defined note added to a finding.</p>
1270    #[serde(rename = "Note")]
1271    #[serde(skip_serializing_if = "Option::is_none")]
1272    pub note: Option<Note>,
1273    /// <p>The details of process-related information about a finding.</p>
1274    #[serde(rename = "Process")]
1275    #[serde(skip_serializing_if = "Option::is_none")]
1276    pub process: Option<ProcessDetails>,
1277    /// <p>The ARN generated by Security Hub that uniquely identifies a product that generates findings. This can be the ARN for a third-party product that is integrated with Security Hub, or the ARN for a custom integration.</p>
1278    #[serde(rename = "ProductArn")]
1279    pub product_arn: String,
1280    /// <p>A data type where security-findings providers can include additional solution-specific details that aren't part of the defined <code>AwsSecurityFinding</code> format.</p>
1281    #[serde(rename = "ProductFields")]
1282    #[serde(skip_serializing_if = "Option::is_none")]
1283    pub product_fields: Option<::std::collections::HashMap<String, String>>,
1284    /// <p>The record state of a finding.</p>
1285    #[serde(rename = "RecordState")]
1286    #[serde(skip_serializing_if = "Option::is_none")]
1287    pub record_state: Option<String>,
1288    /// <p>A list of related findings.</p>
1289    #[serde(rename = "RelatedFindings")]
1290    #[serde(skip_serializing_if = "Option::is_none")]
1291    pub related_findings: Option<Vec<RelatedFinding>>,
1292    /// <p>A data type that describes the remediation options for a finding.</p>
1293    #[serde(rename = "Remediation")]
1294    #[serde(skip_serializing_if = "Option::is_none")]
1295    pub remediation: Option<Remediation>,
1296    /// <p>A set of resource data types that describe the resources that the finding refers to.</p>
1297    #[serde(rename = "Resources")]
1298    pub resources: Vec<Resource>,
1299    /// <p>The schema version that a finding is formatted for.</p>
1300    #[serde(rename = "SchemaVersion")]
1301    pub schema_version: String,
1302    /// <p>A finding's severity.</p>
1303    #[serde(rename = "Severity")]
1304    pub severity: Severity,
1305    /// <p>A URL that links to a page about the current finding in the security-findings provider's solution.</p>
1306    #[serde(rename = "SourceUrl")]
1307    #[serde(skip_serializing_if = "Option::is_none")]
1308    pub source_url: Option<String>,
1309    /// <p>Threat intelligence details related to a finding.</p>
1310    #[serde(rename = "ThreatIntelIndicators")]
1311    #[serde(skip_serializing_if = "Option::is_none")]
1312    pub threat_intel_indicators: Option<Vec<ThreatIntelIndicator>>,
1313    /// <p><p>A finding&#39;s title.</p> <note> <p>In this release, <code>Title</code> is a required property.</p> </note></p>
1314    #[serde(rename = "Title")]
1315    pub title: String,
1316    /// <p>One or more finding types in the format of <code>namespace/category/classifier</code> that classify a finding.</p> <p>Valid namespace values are: Software and Configuration Checks | TTPs | Effects | Unusual Behaviors | Sensitive Data Identifications</p>
1317    #[serde(rename = "Types")]
1318    pub types: Vec<String>,
1319    /// <p>An ISO8601-formatted timestamp that indicates when the security-findings provider last updated the finding record. </p>
1320    #[serde(rename = "UpdatedAt")]
1321    pub updated_at: String,
1322    /// <p>A list of name/value string pairs associated with the finding. These are custom, user-defined fields added to a finding. </p>
1323    #[serde(rename = "UserDefinedFields")]
1324    #[serde(skip_serializing_if = "Option::is_none")]
1325    pub user_defined_fields: Option<::std::collections::HashMap<String, String>>,
1326    /// <p>Indicates the veracity of a finding. </p>
1327    #[serde(rename = "VerificationState")]
1328    #[serde(skip_serializing_if = "Option::is_none")]
1329    pub verification_state: Option<String>,
1330    /// <p>Provides a list of vulnerabilities associated with the findings.</p>
1331    #[serde(rename = "Vulnerabilities")]
1332    #[serde(skip_serializing_if = "Option::is_none")]
1333    pub vulnerabilities: Option<Vec<Vulnerability>>,
1334    /// <p>Provides information about the status of the investigation into a finding.</p>
1335    #[serde(rename = "Workflow")]
1336    #[serde(skip_serializing_if = "Option::is_none")]
1337    pub workflow: Option<Workflow>,
1338    /// <p>The workflow state of a finding. </p>
1339    #[serde(rename = "WorkflowState")]
1340    #[serde(skip_serializing_if = "Option::is_none")]
1341    pub workflow_state: Option<String>,
1342}
1343
1344/// <p>A collection of attributes that are applied to all active Security Hub-aggregated findings and that result in a subset of findings that are included in this insight.</p>
1345#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1346pub struct AwsSecurityFindingFilters {
1347    /// <p>The AWS account ID that a finding is generated in.</p>
1348    #[serde(rename = "AwsAccountId")]
1349    #[serde(skip_serializing_if = "Option::is_none")]
1350    pub aws_account_id: Option<Vec<StringFilter>>,
1351    /// <p>The name of the findings provider (company) that owns the solution (product) that generates findings.</p>
1352    #[serde(rename = "CompanyName")]
1353    #[serde(skip_serializing_if = "Option::is_none")]
1354    pub company_name: Option<Vec<StringFilter>>,
1355    /// <p>Exclusive to findings that are generated as the result of a check run against a specific rule in a supported standard, such as CIS AWS Foundations. Contains security standard-related finding details.</p>
1356    #[serde(rename = "ComplianceStatus")]
1357    #[serde(skip_serializing_if = "Option::is_none")]
1358    pub compliance_status: Option<Vec<StringFilter>>,
1359    /// <p>A finding's confidence. Confidence is defined as the likelihood that a finding accurately identifies the behavior or issue that it was intended to identify.</p> <p>Confidence is scored on a 0-100 basis using a ratio scale, where 0 means zero percent confidence and 100 means 100 percent confidence.</p>
1360    #[serde(rename = "Confidence")]
1361    #[serde(skip_serializing_if = "Option::is_none")]
1362    pub confidence: Option<Vec<NumberFilter>>,
1363    /// <p>An ISO8601-formatted timestamp that indicates when the security-findings provider captured the potential security issue that a finding captured.</p>
1364    #[serde(rename = "CreatedAt")]
1365    #[serde(skip_serializing_if = "Option::is_none")]
1366    pub created_at: Option<Vec<DateFilter>>,
1367    /// <p>The level of importance assigned to the resources associated with the finding.</p> <p>A score of 0 means that the underlying resources have no criticality, and a score of 100 is reserved for the most critical resources.</p>
1368    #[serde(rename = "Criticality")]
1369    #[serde(skip_serializing_if = "Option::is_none")]
1370    pub criticality: Option<Vec<NumberFilter>>,
1371    /// <p>A finding's description.</p>
1372    #[serde(rename = "Description")]
1373    #[serde(skip_serializing_if = "Option::is_none")]
1374    pub description: Option<Vec<StringFilter>>,
1375    /// <p>An ISO8601-formatted timestamp that indicates when the security-findings provider first observed the potential security issue that a finding captured.</p>
1376    #[serde(rename = "FirstObservedAt")]
1377    #[serde(skip_serializing_if = "Option::is_none")]
1378    pub first_observed_at: Option<Vec<DateFilter>>,
1379    /// <p>The identifier for the solution-specific component (a discrete unit of logic) that generated a finding. In various security-findings providers' solutions, this generator can be called a rule, a check, a detector, a plugin, etc.</p>
1380    #[serde(rename = "GeneratorId")]
1381    #[serde(skip_serializing_if = "Option::is_none")]
1382    pub generator_id: Option<Vec<StringFilter>>,
1383    /// <p>The security findings provider-specific identifier for a finding.</p>
1384    #[serde(rename = "Id")]
1385    #[serde(skip_serializing_if = "Option::is_none")]
1386    pub id: Option<Vec<StringFilter>>,
1387    /// <p>A keyword for a finding.</p>
1388    #[serde(rename = "Keyword")]
1389    #[serde(skip_serializing_if = "Option::is_none")]
1390    pub keyword: Option<Vec<KeywordFilter>>,
1391    /// <p>An ISO8601-formatted timestamp that indicates when the security-findings provider most recently observed the potential security issue that a finding captured.</p>
1392    #[serde(rename = "LastObservedAt")]
1393    #[serde(skip_serializing_if = "Option::is_none")]
1394    pub last_observed_at: Option<Vec<DateFilter>>,
1395    /// <p>The name of the malware that was observed.</p>
1396    #[serde(rename = "MalwareName")]
1397    #[serde(skip_serializing_if = "Option::is_none")]
1398    pub malware_name: Option<Vec<StringFilter>>,
1399    /// <p>The filesystem path of the malware that was observed.</p>
1400    #[serde(rename = "MalwarePath")]
1401    #[serde(skip_serializing_if = "Option::is_none")]
1402    pub malware_path: Option<Vec<StringFilter>>,
1403    /// <p>The state of the malware that was observed.</p>
1404    #[serde(rename = "MalwareState")]
1405    #[serde(skip_serializing_if = "Option::is_none")]
1406    pub malware_state: Option<Vec<StringFilter>>,
1407    /// <p>The type of the malware that was observed.</p>
1408    #[serde(rename = "MalwareType")]
1409    #[serde(skip_serializing_if = "Option::is_none")]
1410    pub malware_type: Option<Vec<StringFilter>>,
1411    /// <p>The destination domain of network-related information about a finding.</p>
1412    #[serde(rename = "NetworkDestinationDomain")]
1413    #[serde(skip_serializing_if = "Option::is_none")]
1414    pub network_destination_domain: Option<Vec<StringFilter>>,
1415    /// <p>The destination IPv4 address of network-related information about a finding.</p>
1416    #[serde(rename = "NetworkDestinationIpV4")]
1417    #[serde(skip_serializing_if = "Option::is_none")]
1418    pub network_destination_ip_v4: Option<Vec<IpFilter>>,
1419    /// <p>The destination IPv6 address of network-related information about a finding.</p>
1420    #[serde(rename = "NetworkDestinationIpV6")]
1421    #[serde(skip_serializing_if = "Option::is_none")]
1422    pub network_destination_ip_v6: Option<Vec<IpFilter>>,
1423    /// <p>The destination port of network-related information about a finding.</p>
1424    #[serde(rename = "NetworkDestinationPort")]
1425    #[serde(skip_serializing_if = "Option::is_none")]
1426    pub network_destination_port: Option<Vec<NumberFilter>>,
1427    /// <p>Indicates the direction of network traffic associated with a finding.</p>
1428    #[serde(rename = "NetworkDirection")]
1429    #[serde(skip_serializing_if = "Option::is_none")]
1430    pub network_direction: Option<Vec<StringFilter>>,
1431    /// <p>The protocol of network-related information about a finding.</p>
1432    #[serde(rename = "NetworkProtocol")]
1433    #[serde(skip_serializing_if = "Option::is_none")]
1434    pub network_protocol: Option<Vec<StringFilter>>,
1435    /// <p>The source domain of network-related information about a finding.</p>
1436    #[serde(rename = "NetworkSourceDomain")]
1437    #[serde(skip_serializing_if = "Option::is_none")]
1438    pub network_source_domain: Option<Vec<StringFilter>>,
1439    /// <p>The source IPv4 address of network-related information about a finding.</p>
1440    #[serde(rename = "NetworkSourceIpV4")]
1441    #[serde(skip_serializing_if = "Option::is_none")]
1442    pub network_source_ip_v4: Option<Vec<IpFilter>>,
1443    /// <p>The source IPv6 address of network-related information about a finding.</p>
1444    #[serde(rename = "NetworkSourceIpV6")]
1445    #[serde(skip_serializing_if = "Option::is_none")]
1446    pub network_source_ip_v6: Option<Vec<IpFilter>>,
1447    /// <p>The source media access control (MAC) address of network-related information about a finding.</p>
1448    #[serde(rename = "NetworkSourceMac")]
1449    #[serde(skip_serializing_if = "Option::is_none")]
1450    pub network_source_mac: Option<Vec<StringFilter>>,
1451    /// <p>The source port of network-related information about a finding.</p>
1452    #[serde(rename = "NetworkSourcePort")]
1453    #[serde(skip_serializing_if = "Option::is_none")]
1454    pub network_source_port: Option<Vec<NumberFilter>>,
1455    /// <p>The text of a note.</p>
1456    #[serde(rename = "NoteText")]
1457    #[serde(skip_serializing_if = "Option::is_none")]
1458    pub note_text: Option<Vec<StringFilter>>,
1459    /// <p>The timestamp of when the note was updated.</p>
1460    #[serde(rename = "NoteUpdatedAt")]
1461    #[serde(skip_serializing_if = "Option::is_none")]
1462    pub note_updated_at: Option<Vec<DateFilter>>,
1463    /// <p>The principal that created a note.</p>
1464    #[serde(rename = "NoteUpdatedBy")]
1465    #[serde(skip_serializing_if = "Option::is_none")]
1466    pub note_updated_by: Option<Vec<StringFilter>>,
1467    /// <p>The date/time that the process was launched.</p>
1468    #[serde(rename = "ProcessLaunchedAt")]
1469    #[serde(skip_serializing_if = "Option::is_none")]
1470    pub process_launched_at: Option<Vec<DateFilter>>,
1471    /// <p>The name of the process.</p>
1472    #[serde(rename = "ProcessName")]
1473    #[serde(skip_serializing_if = "Option::is_none")]
1474    pub process_name: Option<Vec<StringFilter>>,
1475    /// <p>The parent process ID.</p>
1476    #[serde(rename = "ProcessParentPid")]
1477    #[serde(skip_serializing_if = "Option::is_none")]
1478    pub process_parent_pid: Option<Vec<NumberFilter>>,
1479    /// <p>The path to the process executable.</p>
1480    #[serde(rename = "ProcessPath")]
1481    #[serde(skip_serializing_if = "Option::is_none")]
1482    pub process_path: Option<Vec<StringFilter>>,
1483    /// <p>The process ID.</p>
1484    #[serde(rename = "ProcessPid")]
1485    #[serde(skip_serializing_if = "Option::is_none")]
1486    pub process_pid: Option<Vec<NumberFilter>>,
1487    /// <p>The date/time that the process was terminated.</p>
1488    #[serde(rename = "ProcessTerminatedAt")]
1489    #[serde(skip_serializing_if = "Option::is_none")]
1490    pub process_terminated_at: Option<Vec<DateFilter>>,
1491    /// <p>The ARN generated by Security Hub that uniquely identifies a third-party company (security findings provider) after this provider's product (solution that generates findings) is registered with Security Hub.</p>
1492    #[serde(rename = "ProductArn")]
1493    #[serde(skip_serializing_if = "Option::is_none")]
1494    pub product_arn: Option<Vec<StringFilter>>,
1495    /// <p>A data type where security-findings providers can include additional solution-specific details that aren't part of the defined <code>AwsSecurityFinding</code> format.</p>
1496    #[serde(rename = "ProductFields")]
1497    #[serde(skip_serializing_if = "Option::is_none")]
1498    pub product_fields: Option<Vec<MapFilter>>,
1499    /// <p>The name of the solution (product) that generates findings.</p>
1500    #[serde(rename = "ProductName")]
1501    #[serde(skip_serializing_if = "Option::is_none")]
1502    pub product_name: Option<Vec<StringFilter>>,
1503    /// <p>The recommendation of what to do about the issue described in a finding.</p>
1504    #[serde(rename = "RecommendationText")]
1505    #[serde(skip_serializing_if = "Option::is_none")]
1506    pub recommendation_text: Option<Vec<StringFilter>>,
1507    /// <p>The updated record state for the finding.</p>
1508    #[serde(rename = "RecordState")]
1509    #[serde(skip_serializing_if = "Option::is_none")]
1510    pub record_state: Option<Vec<StringFilter>>,
1511    /// <p>The solution-generated identifier for a related finding.</p>
1512    #[serde(rename = "RelatedFindingsId")]
1513    #[serde(skip_serializing_if = "Option::is_none")]
1514    pub related_findings_id: Option<Vec<StringFilter>>,
1515    /// <p>The ARN of the solution that generated a related finding.</p>
1516    #[serde(rename = "RelatedFindingsProductArn")]
1517    #[serde(skip_serializing_if = "Option::is_none")]
1518    pub related_findings_product_arn: Option<Vec<StringFilter>>,
1519    /// <p>The IAM profile ARN of the instance.</p>
1520    #[serde(rename = "ResourceAwsEc2InstanceIamInstanceProfileArn")]
1521    #[serde(skip_serializing_if = "Option::is_none")]
1522    pub resource_aws_ec_2_instance_iam_instance_profile_arn: Option<Vec<StringFilter>>,
1523    /// <p>The Amazon Machine Image (AMI) ID of the instance.</p>
1524    #[serde(rename = "ResourceAwsEc2InstanceImageId")]
1525    #[serde(skip_serializing_if = "Option::is_none")]
1526    pub resource_aws_ec_2_instance_image_id: Option<Vec<StringFilter>>,
1527    /// <p>The IPv4 addresses associated with the instance.</p>
1528    #[serde(rename = "ResourceAwsEc2InstanceIpV4Addresses")]
1529    #[serde(skip_serializing_if = "Option::is_none")]
1530    pub resource_aws_ec_2_instance_ip_v4_addresses: Option<Vec<IpFilter>>,
1531    /// <p>The IPv6 addresses associated with the instance.</p>
1532    #[serde(rename = "ResourceAwsEc2InstanceIpV6Addresses")]
1533    #[serde(skip_serializing_if = "Option::is_none")]
1534    pub resource_aws_ec_2_instance_ip_v6_addresses: Option<Vec<IpFilter>>,
1535    /// <p>The key name associated with the instance.</p>
1536    #[serde(rename = "ResourceAwsEc2InstanceKeyName")]
1537    #[serde(skip_serializing_if = "Option::is_none")]
1538    pub resource_aws_ec_2_instance_key_name: Option<Vec<StringFilter>>,
1539    /// <p>The date and time the instance was launched.</p>
1540    #[serde(rename = "ResourceAwsEc2InstanceLaunchedAt")]
1541    #[serde(skip_serializing_if = "Option::is_none")]
1542    pub resource_aws_ec_2_instance_launched_at: Option<Vec<DateFilter>>,
1543    /// <p>The identifier of the subnet that the instance was launched in.</p>
1544    #[serde(rename = "ResourceAwsEc2InstanceSubnetId")]
1545    #[serde(skip_serializing_if = "Option::is_none")]
1546    pub resource_aws_ec_2_instance_subnet_id: Option<Vec<StringFilter>>,
1547    /// <p>The instance type of the instance.</p>
1548    #[serde(rename = "ResourceAwsEc2InstanceType")]
1549    #[serde(skip_serializing_if = "Option::is_none")]
1550    pub resource_aws_ec_2_instance_type: Option<Vec<StringFilter>>,
1551    /// <p>The identifier of the VPC that the instance was launched in.</p>
1552    #[serde(rename = "ResourceAwsEc2InstanceVpcId")]
1553    #[serde(skip_serializing_if = "Option::is_none")]
1554    pub resource_aws_ec_2_instance_vpc_id: Option<Vec<StringFilter>>,
1555    /// <p>The creation date/time of the IAM access key related to a finding.</p>
1556    #[serde(rename = "ResourceAwsIamAccessKeyCreatedAt")]
1557    #[serde(skip_serializing_if = "Option::is_none")]
1558    pub resource_aws_iam_access_key_created_at: Option<Vec<DateFilter>>,
1559    /// <p>The status of the IAM access key related to a finding.</p>
1560    #[serde(rename = "ResourceAwsIamAccessKeyStatus")]
1561    #[serde(skip_serializing_if = "Option::is_none")]
1562    pub resource_aws_iam_access_key_status: Option<Vec<StringFilter>>,
1563    /// <p>The user associated with the IAM access key related to a finding.</p>
1564    #[serde(rename = "ResourceAwsIamAccessKeyUserName")]
1565    #[serde(skip_serializing_if = "Option::is_none")]
1566    pub resource_aws_iam_access_key_user_name: Option<Vec<StringFilter>>,
1567    /// <p>The canonical user ID of the owner of the S3 bucket.</p>
1568    #[serde(rename = "ResourceAwsS3BucketOwnerId")]
1569    #[serde(skip_serializing_if = "Option::is_none")]
1570    pub resource_aws_s3_bucket_owner_id: Option<Vec<StringFilter>>,
1571    /// <p>The display name of the owner of the S3 bucket.</p>
1572    #[serde(rename = "ResourceAwsS3BucketOwnerName")]
1573    #[serde(skip_serializing_if = "Option::is_none")]
1574    pub resource_aws_s3_bucket_owner_name: Option<Vec<StringFilter>>,
1575    /// <p>The identifier of the image related to a finding.</p>
1576    #[serde(rename = "ResourceContainerImageId")]
1577    #[serde(skip_serializing_if = "Option::is_none")]
1578    pub resource_container_image_id: Option<Vec<StringFilter>>,
1579    /// <p>The name of the image related to a finding.</p>
1580    #[serde(rename = "ResourceContainerImageName")]
1581    #[serde(skip_serializing_if = "Option::is_none")]
1582    pub resource_container_image_name: Option<Vec<StringFilter>>,
1583    /// <p>The date/time that the container was started.</p>
1584    #[serde(rename = "ResourceContainerLaunchedAt")]
1585    #[serde(skip_serializing_if = "Option::is_none")]
1586    pub resource_container_launched_at: Option<Vec<DateFilter>>,
1587    /// <p>The name of the container related to a finding.</p>
1588    #[serde(rename = "ResourceContainerName")]
1589    #[serde(skip_serializing_if = "Option::is_none")]
1590    pub resource_container_name: Option<Vec<StringFilter>>,
1591    /// <p>The details of a resource that doesn't have a specific subfield for the resource type defined.</p>
1592    #[serde(rename = "ResourceDetailsOther")]
1593    #[serde(skip_serializing_if = "Option::is_none")]
1594    pub resource_details_other: Option<Vec<MapFilter>>,
1595    /// <p>The canonical identifier for the given resource type.</p>
1596    #[serde(rename = "ResourceId")]
1597    #[serde(skip_serializing_if = "Option::is_none")]
1598    pub resource_id: Option<Vec<StringFilter>>,
1599    /// <p>The canonical AWS partition name that the Region is assigned to.</p>
1600    #[serde(rename = "ResourcePartition")]
1601    #[serde(skip_serializing_if = "Option::is_none")]
1602    pub resource_partition: Option<Vec<StringFilter>>,
1603    /// <p>The canonical AWS external Region name where this resource is located.</p>
1604    #[serde(rename = "ResourceRegion")]
1605    #[serde(skip_serializing_if = "Option::is_none")]
1606    pub resource_region: Option<Vec<StringFilter>>,
1607    /// <p>A list of AWS tags associated with a resource at the time the finding was processed.</p>
1608    #[serde(rename = "ResourceTags")]
1609    #[serde(skip_serializing_if = "Option::is_none")]
1610    pub resource_tags: Option<Vec<MapFilter>>,
1611    /// <p>Specifies the type of the resource that details are provided for.</p>
1612    #[serde(rename = "ResourceType")]
1613    #[serde(skip_serializing_if = "Option::is_none")]
1614    pub resource_type: Option<Vec<StringFilter>>,
1615    /// <p>The label of a finding's severity.</p>
1616    #[serde(rename = "SeverityLabel")]
1617    #[serde(skip_serializing_if = "Option::is_none")]
1618    pub severity_label: Option<Vec<StringFilter>>,
1619    /// <p>The normalized severity of a finding.</p>
1620    #[serde(rename = "SeverityNormalized")]
1621    #[serde(skip_serializing_if = "Option::is_none")]
1622    pub severity_normalized: Option<Vec<NumberFilter>>,
1623    /// <p>The native severity as defined by the security-findings provider's solution that generated the finding.</p>
1624    #[serde(rename = "SeverityProduct")]
1625    #[serde(skip_serializing_if = "Option::is_none")]
1626    pub severity_product: Option<Vec<NumberFilter>>,
1627    /// <p>A URL that links to a page about the current finding in the security-findings provider's solution.</p>
1628    #[serde(rename = "SourceUrl")]
1629    #[serde(skip_serializing_if = "Option::is_none")]
1630    pub source_url: Option<Vec<StringFilter>>,
1631    /// <p>The category of a threat intelligence indicator.</p>
1632    #[serde(rename = "ThreatIntelIndicatorCategory")]
1633    #[serde(skip_serializing_if = "Option::is_none")]
1634    pub threat_intel_indicator_category: Option<Vec<StringFilter>>,
1635    /// <p>The date/time of the last observation of a threat intelligence indicator.</p>
1636    #[serde(rename = "ThreatIntelIndicatorLastObservedAt")]
1637    #[serde(skip_serializing_if = "Option::is_none")]
1638    pub threat_intel_indicator_last_observed_at: Option<Vec<DateFilter>>,
1639    /// <p>The source of the threat intelligence.</p>
1640    #[serde(rename = "ThreatIntelIndicatorSource")]
1641    #[serde(skip_serializing_if = "Option::is_none")]
1642    pub threat_intel_indicator_source: Option<Vec<StringFilter>>,
1643    /// <p>The URL for more details from the source of the threat intelligence.</p>
1644    #[serde(rename = "ThreatIntelIndicatorSourceUrl")]
1645    #[serde(skip_serializing_if = "Option::is_none")]
1646    pub threat_intel_indicator_source_url: Option<Vec<StringFilter>>,
1647    /// <p>The type of a threat intelligence indicator.</p>
1648    #[serde(rename = "ThreatIntelIndicatorType")]
1649    #[serde(skip_serializing_if = "Option::is_none")]
1650    pub threat_intel_indicator_type: Option<Vec<StringFilter>>,
1651    /// <p>The value of a threat intelligence indicator.</p>
1652    #[serde(rename = "ThreatIntelIndicatorValue")]
1653    #[serde(skip_serializing_if = "Option::is_none")]
1654    pub threat_intel_indicator_value: Option<Vec<StringFilter>>,
1655    /// <p>A finding's title.</p>
1656    #[serde(rename = "Title")]
1657    #[serde(skip_serializing_if = "Option::is_none")]
1658    pub title: Option<Vec<StringFilter>>,
1659    /// <p>A finding type in the format of <code>namespace/category/classifier</code> that classifies a finding.</p>
1660    #[serde(rename = "Type")]
1661    #[serde(skip_serializing_if = "Option::is_none")]
1662    pub type_: Option<Vec<StringFilter>>,
1663    /// <p>An ISO8601-formatted timestamp that indicates when the security-findings provider last updated the finding record. </p>
1664    #[serde(rename = "UpdatedAt")]
1665    #[serde(skip_serializing_if = "Option::is_none")]
1666    pub updated_at: Option<Vec<DateFilter>>,
1667    /// <p>A list of name/value string pairs associated with the finding. These are custom, user-defined fields added to a finding. </p>
1668    #[serde(rename = "UserDefinedFields")]
1669    #[serde(skip_serializing_if = "Option::is_none")]
1670    pub user_defined_fields: Option<Vec<MapFilter>>,
1671    /// <p>The veracity of a finding.</p>
1672    #[serde(rename = "VerificationState")]
1673    #[serde(skip_serializing_if = "Option::is_none")]
1674    pub verification_state: Option<Vec<StringFilter>>,
1675    /// <p>The workflow state of a finding.</p>
1676    #[serde(rename = "WorkflowState")]
1677    #[serde(skip_serializing_if = "Option::is_none")]
1678    pub workflow_state: Option<Vec<StringFilter>>,
1679    /// <p><p>The status of the investigation into a finding. Allowed values are the following.</p> <ul> <li> <p> <code>NEW</code> - The initial state of a finding, before it is reviewed.</p> </li> <li> <p> <code>NOTIFIED</code> - Indicates that the resource owner has been notified about the security issue. Used when the initial reviewer is not the resource owner, and needs intervention from the resource owner.</p> </li> <li> <p> <code>SUPPRESSED</code> - The finding will not be reviewed again and will not be acted upon.</p> </li> <li> <p> <code>RESOLVED</code> - The finding was reviewed and remediated and is now considered resolved. </p> </li> </ul></p>
1680    #[serde(rename = "WorkflowStatus")]
1681    #[serde(skip_serializing_if = "Option::is_none")]
1682    pub workflow_status: Option<Vec<StringFilter>>,
1683}
1684
1685/// <p>Identifies a finding to update using <code>BatchUpdateFindings</code>.</p>
1686#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1687pub struct AwsSecurityFindingIdentifier {
1688    /// <p>The identifier of the finding that was specified by the finding provider.</p>
1689    #[serde(rename = "Id")]
1690    pub id: String,
1691    /// <p>The ARN generated by Security Hub that uniquely identifies a product that generates findings. This can be the ARN for a third-party product that is integrated with Security Hub, or the ARN for a custom integration.</p>
1692    #[serde(rename = "ProductArn")]
1693    pub product_arn: String,
1694}
1695
1696/// <p>A wrapper type for the topic's Amazon Resource Name (ARN).</p>
1697#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1698pub struct AwsSnsTopicDetails {
1699    /// <p>The ID of an AWS managed customer master key (CMK) for Amazon SNS or a custom CMK.</p>
1700    #[serde(rename = "KmsMasterKeyId")]
1701    #[serde(skip_serializing_if = "Option::is_none")]
1702    pub kms_master_key_id: Option<String>,
1703    /// <p>The subscription's owner.</p>
1704    #[serde(rename = "Owner")]
1705    #[serde(skip_serializing_if = "Option::is_none")]
1706    pub owner: Option<String>,
1707    /// <p>Subscription is an embedded property that describes the subscription endpoints of an Amazon SNS topic.</p>
1708    #[serde(rename = "Subscription")]
1709    #[serde(skip_serializing_if = "Option::is_none")]
1710    pub subscription: Option<Vec<AwsSnsTopicSubscription>>,
1711    /// <p>The name of the topic.</p>
1712    #[serde(rename = "TopicName")]
1713    #[serde(skip_serializing_if = "Option::is_none")]
1714    pub topic_name: Option<String>,
1715}
1716
1717/// <p>A wrapper type for the attributes of an Amazon SNS subscription.</p>
1718#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1719pub struct AwsSnsTopicSubscription {
1720    /// <p>The subscription's endpoint (format depends on the protocol).</p>
1721    #[serde(rename = "Endpoint")]
1722    #[serde(skip_serializing_if = "Option::is_none")]
1723    pub endpoint: Option<String>,
1724    /// <p>The subscription's protocol.</p>
1725    #[serde(rename = "Protocol")]
1726    #[serde(skip_serializing_if = "Option::is_none")]
1727    pub protocol: Option<String>,
1728}
1729
1730/// <p>Data about a queue.</p>
1731#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1732pub struct AwsSqsQueueDetails {
1733    /// <p>The Amazon Resource Name (ARN) of the dead-letter queue to which Amazon SQS moves messages after the value of <code>maxReceiveCount</code> is exceeded. </p>
1734    #[serde(rename = "DeadLetterTargetArn")]
1735    #[serde(skip_serializing_if = "Option::is_none")]
1736    pub dead_letter_target_arn: Option<String>,
1737    /// <p>The length of time, in seconds, for which Amazon SQS can reuse a data key to encrypt or decrypt messages before calling AWS KMS again.</p>
1738    #[serde(rename = "KmsDataKeyReusePeriodSeconds")]
1739    #[serde(skip_serializing_if = "Option::is_none")]
1740    pub kms_data_key_reuse_period_seconds: Option<i64>,
1741    /// <p>The ID of an AWS managed customer master key (CMK) for Amazon SQS or a custom CMK.</p>
1742    #[serde(rename = "KmsMasterKeyId")]
1743    #[serde(skip_serializing_if = "Option::is_none")]
1744    pub kms_master_key_id: Option<String>,
1745    /// <p>The name of the new queue.</p>
1746    #[serde(rename = "QueueName")]
1747    #[serde(skip_serializing_if = "Option::is_none")]
1748    pub queue_name: Option<String>,
1749}
1750
1751/// <p>Details about a WAF WebACL.</p>
1752#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1753pub struct AwsWafWebAclDetails {
1754    /// <p>The action to perform if none of the rules contained in the WebACL match.</p>
1755    #[serde(rename = "DefaultAction")]
1756    #[serde(skip_serializing_if = "Option::is_none")]
1757    pub default_action: Option<String>,
1758    /// <p>A friendly name or description of the WebACL. You can't change the name of a WebACL after you create it.</p>
1759    #[serde(rename = "Name")]
1760    #[serde(skip_serializing_if = "Option::is_none")]
1761    pub name: Option<String>,
1762    /// <p>An array that contains the action for each rule in a WebACL, the priority of the rule, and the ID of the rule.</p>
1763    #[serde(rename = "Rules")]
1764    #[serde(skip_serializing_if = "Option::is_none")]
1765    pub rules: Option<Vec<AwsWafWebAclRule>>,
1766    /// <p>A unique identifier for a WebACL.</p>
1767    #[serde(rename = "WebAclId")]
1768    #[serde(skip_serializing_if = "Option::is_none")]
1769    pub web_acl_id: Option<String>,
1770}
1771
1772/// <p>Details for a rule in a WAF WebACL.</p>
1773#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1774pub struct AwsWafWebAclRule {
1775    /// <p>Specifies the action that CloudFront or AWS WAF takes when a web request matches the conditions in the rule. </p>
1776    #[serde(rename = "Action")]
1777    #[serde(skip_serializing_if = "Option::is_none")]
1778    pub action: Option<WafAction>,
1779    /// <p>Rules to exclude from a rule group.</p>
1780    #[serde(rename = "ExcludedRules")]
1781    #[serde(skip_serializing_if = "Option::is_none")]
1782    pub excluded_rules: Option<Vec<WafExcludedRule>>,
1783    /// <p>Use the <code>OverrideAction</code> to test your RuleGroup.</p> <p>Any rule in a RuleGroup can potentially block a request. If you set the <code>OverrideAction</code> to <code>None</code>, the RuleGroup blocks a request if any individual rule in the RuleGroup matches the request and is configured to block that request.</p> <p>However, if you first want to test the RuleGroup, set the <code>OverrideAction</code> to <code>Count</code>. The RuleGroup then overrides any block action specified by individual rules contained within the group. Instead of blocking matching requests, those requests are counted.</p> <p> <code>ActivatedRule</code>|<code>OverrideAction</code> applies only when updating or adding a RuleGroup to a WebACL. In this case you do not use <code>ActivatedRule</code>|<code>Action</code>. For all other update requests, <code>ActivatedRule</code>|<code>Action</code> is used instead of <code>ActivatedRule</code>|<code>OverrideAction</code>. </p>
1784    #[serde(rename = "OverrideAction")]
1785    #[serde(skip_serializing_if = "Option::is_none")]
1786    pub override_action: Option<WafOverrideAction>,
1787    /// <p>Specifies the order in which the rules in a WebACL are evaluated. Rules with a lower value for <code>Priority</code> are evaluated before rules with a higher value. The value must be a unique integer. If you add multiple rules to a WebACL, the values do not need to be consecutive.</p>
1788    #[serde(rename = "Priority")]
1789    #[serde(skip_serializing_if = "Option::is_none")]
1790    pub priority: Option<i64>,
1791    /// <p>The identifier for a rule.</p>
1792    #[serde(rename = "RuleId")]
1793    #[serde(skip_serializing_if = "Option::is_none")]
1794    pub rule_id: Option<String>,
1795    /// <p>The rule type.</p> <p>Valid values: <code>REGULAR</code> | <code>RATE_BASED</code> | <code>GROUP</code> </p> <p>The default is <code>REGULAR</code>.</p>
1796    #[serde(rename = "Type")]
1797    #[serde(skip_serializing_if = "Option::is_none")]
1798    pub type_: Option<String>,
1799}
1800
1801#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1802#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1803pub struct BatchDisableStandardsRequest {
1804    /// <p>The ARNs of the standards subscriptions to disable.</p>
1805    #[serde(rename = "StandardsSubscriptionArns")]
1806    pub standards_subscription_arns: Vec<String>,
1807}
1808
1809#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1810#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1811pub struct BatchDisableStandardsResponse {
1812    /// <p>The details of the standards subscriptions that were disabled.</p>
1813    #[serde(rename = "StandardsSubscriptions")]
1814    #[serde(skip_serializing_if = "Option::is_none")]
1815    pub standards_subscriptions: Option<Vec<StandardsSubscription>>,
1816}
1817
1818#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1819#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1820pub struct BatchEnableStandardsRequest {
1821    /// <p>The list of standards checks to enable.</p>
1822    #[serde(rename = "StandardsSubscriptionRequests")]
1823    pub standards_subscription_requests: Vec<StandardsSubscriptionRequest>,
1824}
1825
1826#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1827#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1828pub struct BatchEnableStandardsResponse {
1829    /// <p>The details of the standards subscriptions that were enabled.</p>
1830    #[serde(rename = "StandardsSubscriptions")]
1831    #[serde(skip_serializing_if = "Option::is_none")]
1832    pub standards_subscriptions: Option<Vec<StandardsSubscription>>,
1833}
1834
1835#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1836#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1837pub struct BatchImportFindingsRequest {
1838    /// <p>A list of findings to import. To successfully import a finding, it must follow the <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format.html">AWS Security Finding Format</a>. Maximum of 100 findings per request.</p>
1839    #[serde(rename = "Findings")]
1840    pub findings: Vec<AwsSecurityFinding>,
1841}
1842
1843#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1844#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1845pub struct BatchImportFindingsResponse {
1846    /// <p>The number of findings that failed to import.</p>
1847    #[serde(rename = "FailedCount")]
1848    pub failed_count: i64,
1849    /// <p>The list of findings that failed to import.</p>
1850    #[serde(rename = "FailedFindings")]
1851    #[serde(skip_serializing_if = "Option::is_none")]
1852    pub failed_findings: Option<Vec<ImportFindingsError>>,
1853    /// <p>The number of findings that were successfully imported.</p>
1854    #[serde(rename = "SuccessCount")]
1855    pub success_count: i64,
1856}
1857
1858#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1859#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1860pub struct BatchUpdateFindingsRequest {
1861    /// <p>The updated value for the finding confidence. Confidence is defined as the likelihood that a finding accurately identifies the behavior or issue that it was intended to identify.</p> <p>Confidence is scored on a 0-100 basis using a ratio scale, where 0 means zero percent confidence and 100 means 100 percent confidence.</p>
1862    #[serde(rename = "Confidence")]
1863    #[serde(skip_serializing_if = "Option::is_none")]
1864    pub confidence: Option<i64>,
1865    /// <p>The updated value for the level of importance assigned to the resources associated with the findings.</p> <p>A score of 0 means that the underlying resources have no criticality, and a score of 100 is reserved for the most critical resources. </p>
1866    #[serde(rename = "Criticality")]
1867    #[serde(skip_serializing_if = "Option::is_none")]
1868    pub criticality: Option<i64>,
1869    /// <p>The list of findings to update. <code>BatchUpdateFindings</code> can be used to update up to 100 findings at a time.</p> <p>For each finding, the list provides the finding identifier and the ARN of the finding provider.</p>
1870    #[serde(rename = "FindingIdentifiers")]
1871    pub finding_identifiers: Vec<AwsSecurityFindingIdentifier>,
1872    #[serde(rename = "Note")]
1873    #[serde(skip_serializing_if = "Option::is_none")]
1874    pub note: Option<NoteUpdate>,
1875    /// <p>A list of findings that are related to the updated findings.</p>
1876    #[serde(rename = "RelatedFindings")]
1877    #[serde(skip_serializing_if = "Option::is_none")]
1878    pub related_findings: Option<Vec<RelatedFinding>>,
1879    /// <p>Used to update the finding severity.</p>
1880    #[serde(rename = "Severity")]
1881    #[serde(skip_serializing_if = "Option::is_none")]
1882    pub severity: Option<SeverityUpdate>,
1883    /// <p><p>One or more finding types in the format of namespace/category/classifier that classify a finding.</p> <p>Valid namespace values are as follows.</p> <ul> <li> <p>Software and Configuration Checks</p> </li> <li> <p>TTPs</p> </li> <li> <p>Effects</p> </li> <li> <p>Unusual Behaviors</p> </li> <li> <p>Sensitive Data Identifications </p> </li> </ul></p>
1884    #[serde(rename = "Types")]
1885    #[serde(skip_serializing_if = "Option::is_none")]
1886    pub types: Option<Vec<String>>,
1887    /// <p>A list of name/value string pairs associated with the finding. These are custom, user-defined fields added to a finding.</p>
1888    #[serde(rename = "UserDefinedFields")]
1889    #[serde(skip_serializing_if = "Option::is_none")]
1890    pub user_defined_fields: Option<::std::collections::HashMap<String, String>>,
1891    /// <p><p>Indicates the veracity of a finding.</p> <p>The available values for <code>VerificationState</code> are as follows.</p> <ul> <li> <p> <code>UNKNOWN</code> – The default disposition of a security finding</p> </li> <li> <p> <code>TRUE<em>POSITIVE</code> – The security finding is confirmed</p> </li> <li> <p> <code>FALSE</em>POSITIVE</code> – The security finding was determined to be a false alarm</p> </li> <li> <p> <code>BENIGN<em>POSITIVE</code> – A special case of <code>TRUE</em>POSITIVE</code> where the finding doesn&#39;t pose any threat, is expected, or both</p> </li> </ul></p>
1892    #[serde(rename = "VerificationState")]
1893    #[serde(skip_serializing_if = "Option::is_none")]
1894    pub verification_state: Option<String>,
1895    /// <p>Used to update the workflow status of a finding.</p> <p>The workflow status indicates the progress of the investigation into the finding. </p>
1896    #[serde(rename = "Workflow")]
1897    #[serde(skip_serializing_if = "Option::is_none")]
1898    pub workflow: Option<WorkflowUpdate>,
1899}
1900
1901#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1902#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1903pub struct BatchUpdateFindingsResponse {
1904    /// <p>The list of findings that were updated successfully.</p>
1905    #[serde(rename = "ProcessedFindings")]
1906    pub processed_findings: Vec<AwsSecurityFindingIdentifier>,
1907    /// <p>The list of findings that were not updated.</p>
1908    #[serde(rename = "UnprocessedFindings")]
1909    pub unprocessed_findings: Vec<BatchUpdateFindingsUnprocessedFinding>,
1910}
1911
1912/// <p>A finding from a <code>BatchUpdateFindings</code> request that Security Hub was unable to update.</p>
1913#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1914#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1915pub struct BatchUpdateFindingsUnprocessedFinding {
1916    /// <p>The code associated with the error.</p>
1917    #[serde(rename = "ErrorCode")]
1918    pub error_code: String,
1919    /// <p>The message associated with the error.</p>
1920    #[serde(rename = "ErrorMessage")]
1921    pub error_message: String,
1922    /// <p>The identifier of the finding that was not updated.</p>
1923    #[serde(rename = "FindingIdentifier")]
1924    pub finding_identifier: AwsSecurityFindingIdentifier,
1925}
1926
1927/// <p>An IPv4 CIDR block association.</p>
1928#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1929pub struct CidrBlockAssociation {
1930    /// <p>The association ID for the IPv4 CIDR block.</p>
1931    #[serde(rename = "AssociationId")]
1932    #[serde(skip_serializing_if = "Option::is_none")]
1933    pub association_id: Option<String>,
1934    /// <p>The IPv4 CIDR block.</p>
1935    #[serde(rename = "CidrBlock")]
1936    #[serde(skip_serializing_if = "Option::is_none")]
1937    pub cidr_block: Option<String>,
1938    /// <p>Information about the state of the IPv4 CIDR block.</p>
1939    #[serde(rename = "CidrBlockState")]
1940    #[serde(skip_serializing_if = "Option::is_none")]
1941    pub cidr_block_state: Option<String>,
1942}
1943
1944/// <p>Contains finding details that are specific to control-based findings. Only returned for findings generated from controls.</p>
1945#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1946pub struct Compliance {
1947    /// <p>For a control, the industry or regulatory framework requirements that are related to the control. The check for that control is aligned with these requirements.</p>
1948    #[serde(rename = "RelatedRequirements")]
1949    #[serde(skip_serializing_if = "Option::is_none")]
1950    pub related_requirements: Option<Vec<String>>,
1951    /// <p><p>The result of a standards check.</p> <p>The valid values for <code>Status</code> are as follows.</p> <ul> <li> <ul> <li> <p> <code>PASSED</code> - Standards check passed for all evaluated resources.</p> </li> <li> <p> <code>WARNING</code> - Some information is missing or this check is not supported for your configuration.</p> </li> <li> <p> <code>FAILED</code> - Standards check failed for at least one evaluated resource.</p> </li> <li> <p> <code>NOT<em>AVAILABLE</code> - Check could not be performed due to a service outage, API error, or because the result of the AWS Config evaluation was <code>NOT</em>APPLICABLE</code>. If the AWS Config evaluation result was <code>NOT_APPLICABLE</code>, then after 3 days, Security Hub automatically archives the finding.</p> </li> </ul> </li> </ul></p>
1952    #[serde(rename = "Status")]
1953    #[serde(skip_serializing_if = "Option::is_none")]
1954    pub status: Option<String>,
1955    /// <p>For findings generated from controls, a list of reasons behind the value of <code>Status</code>. For the list of status reason codes and their meanings, see <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-results.html#securityhub-standards-results-asff">Standards-related information in the ASFF</a> in the <i>AWS Security Hub User Guide</i>. </p>
1956    #[serde(rename = "StatusReasons")]
1957    #[serde(skip_serializing_if = "Option::is_none")]
1958    pub status_reasons: Option<Vec<StatusReason>>,
1959}
1960
1961/// <p>Container details related to a finding.</p>
1962#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1963pub struct ContainerDetails {
1964    /// <p>The identifier of the image related to a finding.</p>
1965    #[serde(rename = "ImageId")]
1966    #[serde(skip_serializing_if = "Option::is_none")]
1967    pub image_id: Option<String>,
1968    /// <p>The name of the image related to a finding.</p>
1969    #[serde(rename = "ImageName")]
1970    #[serde(skip_serializing_if = "Option::is_none")]
1971    pub image_name: Option<String>,
1972    /// <p>The date and time when the container started.</p>
1973    #[serde(rename = "LaunchedAt")]
1974    #[serde(skip_serializing_if = "Option::is_none")]
1975    pub launched_at: Option<String>,
1976    /// <p>The name of the container related to a finding.</p>
1977    #[serde(rename = "Name")]
1978    #[serde(skip_serializing_if = "Option::is_none")]
1979    pub name: Option<String>,
1980}
1981
1982#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1983#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1984pub struct CreateActionTargetRequest {
1985    /// <p>The description for the custom action target.</p>
1986    #[serde(rename = "Description")]
1987    pub description: String,
1988    /// <p>The ID for the custom action target.</p>
1989    #[serde(rename = "Id")]
1990    pub id: String,
1991    /// <p>The name of the custom action target.</p>
1992    #[serde(rename = "Name")]
1993    pub name: String,
1994}
1995
1996#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1997#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1998pub struct CreateActionTargetResponse {
1999    /// <p>The ARN for the custom action target.</p>
2000    #[serde(rename = "ActionTargetArn")]
2001    pub action_target_arn: String,
2002}
2003
2004#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2005#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2006pub struct CreateInsightRequest {
2007    /// <p>One or more attributes used to filter the findings included in the insight. The insight only includes findings that match the criteria defined in the filters.</p>
2008    #[serde(rename = "Filters")]
2009    pub filters: AwsSecurityFindingFilters,
2010    /// <p>The attribute used to group the findings for the insight. The grouping attribute identifies the type of item that the insight applies to. For example, if an insight is grouped by resource identifier, then the insight produces a list of resource identifiers.</p>
2011    #[serde(rename = "GroupByAttribute")]
2012    pub group_by_attribute: String,
2013    /// <p>The name of the custom insight to create.</p>
2014    #[serde(rename = "Name")]
2015    pub name: String,
2016}
2017
2018#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2019#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2020pub struct CreateInsightResponse {
2021    /// <p>The ARN of the insight created.</p>
2022    #[serde(rename = "InsightArn")]
2023    pub insight_arn: String,
2024}
2025
2026#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2027#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2028pub struct CreateMembersRequest {
2029    /// <p>The list of accounts to associate with the Security Hub master account. For each account, the list includes the account ID and the email address.</p>
2030    #[serde(rename = "AccountDetails")]
2031    #[serde(skip_serializing_if = "Option::is_none")]
2032    pub account_details: Option<Vec<AccountDetails>>,
2033}
2034
2035#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2036#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2037pub struct CreateMembersResponse {
2038    /// <p>The list of AWS accounts that were not processed. For each account, the list includes the account ID and the email address.</p>
2039    #[serde(rename = "UnprocessedAccounts")]
2040    #[serde(skip_serializing_if = "Option::is_none")]
2041    pub unprocessed_accounts: Option<Vec<SecurityHubResult>>,
2042}
2043
2044/// <p>CVSS scores from the advisory related to the vulnerability.</p>
2045#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2046pub struct Cvss {
2047    /// <p>The base CVSS score.</p>
2048    #[serde(rename = "BaseScore")]
2049    #[serde(skip_serializing_if = "Option::is_none")]
2050    pub base_score: Option<f64>,
2051    /// <p>The base scoring vector for the CVSS score.</p>
2052    #[serde(rename = "BaseVector")]
2053    #[serde(skip_serializing_if = "Option::is_none")]
2054    pub base_vector: Option<String>,
2055    /// <p>The version of CVSS for the CVSS score.</p>
2056    #[serde(rename = "Version")]
2057    #[serde(skip_serializing_if = "Option::is_none")]
2058    pub version: Option<String>,
2059}
2060
2061/// <p>A date filter for querying findings.</p>
2062#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2063pub struct DateFilter {
2064    /// <p>A date range for the date filter.</p>
2065    #[serde(rename = "DateRange")]
2066    #[serde(skip_serializing_if = "Option::is_none")]
2067    pub date_range: Option<DateRange>,
2068    /// <p>An end date for the date filter.</p>
2069    #[serde(rename = "End")]
2070    #[serde(skip_serializing_if = "Option::is_none")]
2071    pub end: Option<String>,
2072    /// <p>A start date for the date filter.</p>
2073    #[serde(rename = "Start")]
2074    #[serde(skip_serializing_if = "Option::is_none")]
2075    pub start: Option<String>,
2076}
2077
2078/// <p>A date range for the date filter.</p>
2079#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2080pub struct DateRange {
2081    /// <p>A date range unit for the date filter.</p>
2082    #[serde(rename = "Unit")]
2083    #[serde(skip_serializing_if = "Option::is_none")]
2084    pub unit: Option<String>,
2085    /// <p>A date range value for the date filter.</p>
2086    #[serde(rename = "Value")]
2087    #[serde(skip_serializing_if = "Option::is_none")]
2088    pub value: Option<i64>,
2089}
2090
2091#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2092#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2093pub struct DeclineInvitationsRequest {
2094    /// <p>The list of account IDs for the accounts from which to decline the invitations to Security Hub.</p>
2095    #[serde(rename = "AccountIds")]
2096    pub account_ids: Vec<String>,
2097}
2098
2099#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2100#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2101pub struct DeclineInvitationsResponse {
2102    /// <p>The list of AWS accounts that were not processed. For each account, the list includes the account ID and the email address.</p>
2103    #[serde(rename = "UnprocessedAccounts")]
2104    #[serde(skip_serializing_if = "Option::is_none")]
2105    pub unprocessed_accounts: Option<Vec<SecurityHubResult>>,
2106}
2107
2108#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2109#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2110pub struct DeleteActionTargetRequest {
2111    /// <p>The ARN of the custom action target to delete.</p>
2112    #[serde(rename = "ActionTargetArn")]
2113    pub action_target_arn: String,
2114}
2115
2116#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2117#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2118pub struct DeleteActionTargetResponse {
2119    /// <p>The ARN of the custom action target that was deleted.</p>
2120    #[serde(rename = "ActionTargetArn")]
2121    pub action_target_arn: String,
2122}
2123
2124#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2125#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2126pub struct DeleteInsightRequest {
2127    /// <p>The ARN of the insight to delete.</p>
2128    #[serde(rename = "InsightArn")]
2129    pub insight_arn: String,
2130}
2131
2132#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2133#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2134pub struct DeleteInsightResponse {
2135    /// <p>The ARN of the insight that was deleted.</p>
2136    #[serde(rename = "InsightArn")]
2137    pub insight_arn: String,
2138}
2139
2140#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2141#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2142pub struct DeleteInvitationsRequest {
2143    /// <p>The list of the account IDs that sent the invitations to delete.</p>
2144    #[serde(rename = "AccountIds")]
2145    pub account_ids: Vec<String>,
2146}
2147
2148#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2149#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2150pub struct DeleteInvitationsResponse {
2151    /// <p>The list of AWS accounts for which the invitations were not deleted. For each account, the list includes the account ID and the email address.</p>
2152    #[serde(rename = "UnprocessedAccounts")]
2153    #[serde(skip_serializing_if = "Option::is_none")]
2154    pub unprocessed_accounts: Option<Vec<SecurityHubResult>>,
2155}
2156
2157#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2158#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2159pub struct DeleteMembersRequest {
2160    /// <p>The list of account IDs for the member accounts to delete.</p>
2161    #[serde(rename = "AccountIds")]
2162    #[serde(skip_serializing_if = "Option::is_none")]
2163    pub account_ids: Option<Vec<String>>,
2164}
2165
2166#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2167#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2168pub struct DeleteMembersResponse {
2169    /// <p>The list of AWS accounts that were not deleted. For each account, the list includes the account ID and the email address.</p>
2170    #[serde(rename = "UnprocessedAccounts")]
2171    #[serde(skip_serializing_if = "Option::is_none")]
2172    pub unprocessed_accounts: Option<Vec<SecurityHubResult>>,
2173}
2174
2175#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2176#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2177pub struct DescribeActionTargetsRequest {
2178    /// <p>A list of custom action target ARNs for the custom action targets to retrieve.</p>
2179    #[serde(rename = "ActionTargetArns")]
2180    #[serde(skip_serializing_if = "Option::is_none")]
2181    pub action_target_arns: Option<Vec<String>>,
2182    /// <p>The maximum number of results to return.</p>
2183    #[serde(rename = "MaxResults")]
2184    #[serde(skip_serializing_if = "Option::is_none")]
2185    pub max_results: Option<i64>,
2186    /// <p>The token that is required for pagination. On your first call to the <code>DescribeActionTargets</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2187    #[serde(rename = "NextToken")]
2188    #[serde(skip_serializing_if = "Option::is_none")]
2189    pub next_token: Option<String>,
2190}
2191
2192#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2193#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2194pub struct DescribeActionTargetsResponse {
2195    /// <p>A list of <code>ActionTarget</code> objects. Each object includes the <code>ActionTargetArn</code>, <code>Description</code>, and <code>Name</code> of a custom action target available in Security Hub.</p>
2196    #[serde(rename = "ActionTargets")]
2197    pub action_targets: Vec<ActionTarget>,
2198    /// <p>The pagination token to use to request the next page of results.</p>
2199    #[serde(rename = "NextToken")]
2200    #[serde(skip_serializing_if = "Option::is_none")]
2201    pub next_token: Option<String>,
2202}
2203
2204#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2205#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2206pub struct DescribeHubRequest {
2207    /// <p>The ARN of the Hub resource to retrieve.</p>
2208    #[serde(rename = "HubArn")]
2209    #[serde(skip_serializing_if = "Option::is_none")]
2210    pub hub_arn: Option<String>,
2211}
2212
2213#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2214#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2215pub struct DescribeHubResponse {
2216    /// <p>The ARN of the Hub resource that was retrieved.</p>
2217    #[serde(rename = "HubArn")]
2218    #[serde(skip_serializing_if = "Option::is_none")]
2219    pub hub_arn: Option<String>,
2220    /// <p>The date and time when Security Hub was enabled in the account.</p>
2221    #[serde(rename = "SubscribedAt")]
2222    #[serde(skip_serializing_if = "Option::is_none")]
2223    pub subscribed_at: Option<String>,
2224}
2225
2226#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2227#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2228pub struct DescribeProductsRequest {
2229    /// <p>The maximum number of results to return.</p>
2230    #[serde(rename = "MaxResults")]
2231    #[serde(skip_serializing_if = "Option::is_none")]
2232    pub max_results: Option<i64>,
2233    /// <p>The token that is required for pagination. On your first call to the <code>DescribeProducts</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2234    #[serde(rename = "NextToken")]
2235    #[serde(skip_serializing_if = "Option::is_none")]
2236    pub next_token: Option<String>,
2237}
2238
2239#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2240#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2241pub struct DescribeProductsResponse {
2242    /// <p>The pagination token to use to request the next page of results.</p>
2243    #[serde(rename = "NextToken")]
2244    #[serde(skip_serializing_if = "Option::is_none")]
2245    pub next_token: Option<String>,
2246    /// <p>A list of products, including details for each product.</p>
2247    #[serde(rename = "Products")]
2248    pub products: Vec<Product>,
2249}
2250
2251#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2252#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2253pub struct DescribeStandardsControlsRequest {
2254    /// <p>The maximum number of security standard controls to return.</p>
2255    #[serde(rename = "MaxResults")]
2256    #[serde(skip_serializing_if = "Option::is_none")]
2257    pub max_results: Option<i64>,
2258    /// <p>The token that is required for pagination. On your first call to the <code>DescribeStandardsControls</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2259    #[serde(rename = "NextToken")]
2260    #[serde(skip_serializing_if = "Option::is_none")]
2261    pub next_token: Option<String>,
2262    /// <p>The ARN of a resource that represents your subscription to a supported standard.</p>
2263    #[serde(rename = "StandardsSubscriptionArn")]
2264    pub standards_subscription_arn: String,
2265}
2266
2267#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2268#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2269pub struct DescribeStandardsControlsResponse {
2270    /// <p>A list of security standards controls.</p>
2271    #[serde(rename = "Controls")]
2272    #[serde(skip_serializing_if = "Option::is_none")]
2273    pub controls: Option<Vec<StandardsControl>>,
2274    /// <p>The pagination token to use to request the next page of results.</p>
2275    #[serde(rename = "NextToken")]
2276    #[serde(skip_serializing_if = "Option::is_none")]
2277    pub next_token: Option<String>,
2278}
2279
2280#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2281#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2282pub struct DescribeStandardsRequest {
2283    /// <p>The maximum number of standards to return.</p>
2284    #[serde(rename = "MaxResults")]
2285    #[serde(skip_serializing_if = "Option::is_none")]
2286    pub max_results: Option<i64>,
2287    /// <p>The token that is required for pagination. On your first call to the <code>DescribeStandards</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2288    #[serde(rename = "NextToken")]
2289    #[serde(skip_serializing_if = "Option::is_none")]
2290    pub next_token: Option<String>,
2291}
2292
2293#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2294#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2295pub struct DescribeStandardsResponse {
2296    /// <p>The pagination token to use to request the next page of results.</p>
2297    #[serde(rename = "NextToken")]
2298    #[serde(skip_serializing_if = "Option::is_none")]
2299    pub next_token: Option<String>,
2300    /// <p>A list of available standards.</p>
2301    #[serde(rename = "Standards")]
2302    #[serde(skip_serializing_if = "Option::is_none")]
2303    pub standards: Option<Vec<Standard>>,
2304}
2305
2306#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2307#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2308pub struct DisableImportFindingsForProductRequest {
2309    /// <p>The ARN of the integrated product to disable the integration for.</p>
2310    #[serde(rename = "ProductSubscriptionArn")]
2311    pub product_subscription_arn: String,
2312}
2313
2314#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2315#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2316pub struct DisableImportFindingsForProductResponse {}
2317
2318#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2319#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2320pub struct DisableSecurityHubRequest {}
2321
2322#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2323#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2324pub struct DisableSecurityHubResponse {}
2325
2326#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2327#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2328pub struct DisassociateFromMasterAccountRequest {}
2329
2330#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2331#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2332pub struct DisassociateFromMasterAccountResponse {}
2333
2334#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2335#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2336pub struct DisassociateMembersRequest {
2337    /// <p>The account IDs of the member accounts to disassociate from the master account.</p>
2338    #[serde(rename = "AccountIds")]
2339    #[serde(skip_serializing_if = "Option::is_none")]
2340    pub account_ids: Option<Vec<String>>,
2341}
2342
2343#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2344#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2345pub struct DisassociateMembersResponse {}
2346
2347#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2348#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2349pub struct EnableImportFindingsForProductRequest {
2350    /// <p>The ARN of the product to enable the integration for.</p>
2351    #[serde(rename = "ProductArn")]
2352    pub product_arn: String,
2353}
2354
2355#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2356#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2357pub struct EnableImportFindingsForProductResponse {
2358    /// <p>The ARN of your subscription to the product to enable integrations for.</p>
2359    #[serde(rename = "ProductSubscriptionArn")]
2360    #[serde(skip_serializing_if = "Option::is_none")]
2361    pub product_subscription_arn: Option<String>,
2362}
2363
2364#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2365#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2366pub struct EnableSecurityHubRequest {
2367    /// <p>Whether to enable the security standards that Security Hub has designated as automatically enabled. If you do not provide a value for <code>EnableDefaultStandards</code>, it is set to <code>true</code>. To not enable the automatically enabled standards, set <code>EnableDefaultStandards</code> to <code>false</code>.</p>
2368    #[serde(rename = "EnableDefaultStandards")]
2369    #[serde(skip_serializing_if = "Option::is_none")]
2370    pub enable_default_standards: Option<bool>,
2371    /// <p>The tags to add to the hub resource when you enable Security Hub.</p>
2372    #[serde(rename = "Tags")]
2373    #[serde(skip_serializing_if = "Option::is_none")]
2374    pub tags: Option<::std::collections::HashMap<String, String>>,
2375}
2376
2377#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2378#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2379pub struct EnableSecurityHubResponse {}
2380
2381#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2382#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2383pub struct GetEnabledStandardsRequest {
2384    /// <p>The maximum number of results to return in the response.</p>
2385    #[serde(rename = "MaxResults")]
2386    #[serde(skip_serializing_if = "Option::is_none")]
2387    pub max_results: Option<i64>,
2388    /// <p>The token that is required for pagination. On your first call to the <code>GetEnabledStandards</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2389    #[serde(rename = "NextToken")]
2390    #[serde(skip_serializing_if = "Option::is_none")]
2391    pub next_token: Option<String>,
2392    /// <p>The list of the standards subscription ARNs for the standards to retrieve.</p>
2393    #[serde(rename = "StandardsSubscriptionArns")]
2394    #[serde(skip_serializing_if = "Option::is_none")]
2395    pub standards_subscription_arns: Option<Vec<String>>,
2396}
2397
2398#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2399#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2400pub struct GetEnabledStandardsResponse {
2401    /// <p>The pagination token to use to request the next page of results.</p>
2402    #[serde(rename = "NextToken")]
2403    #[serde(skip_serializing_if = "Option::is_none")]
2404    pub next_token: Option<String>,
2405    /// <p>The list of <code>StandardsSubscriptions</code> objects that include information about the enabled standards.</p>
2406    #[serde(rename = "StandardsSubscriptions")]
2407    #[serde(skip_serializing_if = "Option::is_none")]
2408    pub standards_subscriptions: Option<Vec<StandardsSubscription>>,
2409}
2410
2411#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2412#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2413pub struct GetFindingsRequest {
2414    /// <p>The finding attributes used to define a condition to filter the returned findings.</p>
2415    #[serde(rename = "Filters")]
2416    #[serde(skip_serializing_if = "Option::is_none")]
2417    pub filters: Option<AwsSecurityFindingFilters>,
2418    /// <p>The maximum number of findings to return.</p>
2419    #[serde(rename = "MaxResults")]
2420    #[serde(skip_serializing_if = "Option::is_none")]
2421    pub max_results: Option<i64>,
2422    /// <p>The token that is required for pagination. On your first call to the <code>GetFindings</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2423    #[serde(rename = "NextToken")]
2424    #[serde(skip_serializing_if = "Option::is_none")]
2425    pub next_token: Option<String>,
2426    /// <p>The finding attributes used to sort the list of returned findings.</p>
2427    #[serde(rename = "SortCriteria")]
2428    #[serde(skip_serializing_if = "Option::is_none")]
2429    pub sort_criteria: Option<Vec<SortCriterion>>,
2430}
2431
2432#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2433#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2434pub struct GetFindingsResponse {
2435    /// <p>The findings that matched the filters specified in the request.</p>
2436    #[serde(rename = "Findings")]
2437    pub findings: Vec<AwsSecurityFinding>,
2438    /// <p>The pagination token to use to request the next page of results.</p>
2439    #[serde(rename = "NextToken")]
2440    #[serde(skip_serializing_if = "Option::is_none")]
2441    pub next_token: Option<String>,
2442}
2443
2444#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2445#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2446pub struct GetInsightResultsRequest {
2447    /// <p>The ARN of the insight for which to return results.</p>
2448    #[serde(rename = "InsightArn")]
2449    pub insight_arn: String,
2450}
2451
2452#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2453#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2454pub struct GetInsightResultsResponse {
2455    /// <p>The insight results returned by the operation.</p>
2456    #[serde(rename = "InsightResults")]
2457    pub insight_results: InsightResults,
2458}
2459
2460#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2461#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2462pub struct GetInsightsRequest {
2463    /// <p>The ARNs of the insights to describe. If you do not provide any insight ARNs, then <code>GetInsights</code> returns all of your custom insights. It does not return any managed insights.</p>
2464    #[serde(rename = "InsightArns")]
2465    #[serde(skip_serializing_if = "Option::is_none")]
2466    pub insight_arns: Option<Vec<String>>,
2467    /// <p>The maximum number of items to return in the response.</p>
2468    #[serde(rename = "MaxResults")]
2469    #[serde(skip_serializing_if = "Option::is_none")]
2470    pub max_results: Option<i64>,
2471    /// <p>The token that is required for pagination. On your first call to the <code>GetInsights</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2472    #[serde(rename = "NextToken")]
2473    #[serde(skip_serializing_if = "Option::is_none")]
2474    pub next_token: Option<String>,
2475}
2476
2477#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2478#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2479pub struct GetInsightsResponse {
2480    /// <p>The insights returned by the operation.</p>
2481    #[serde(rename = "Insights")]
2482    pub insights: Vec<Insight>,
2483    /// <p>The pagination token to use to request the next page of results.</p>
2484    #[serde(rename = "NextToken")]
2485    #[serde(skip_serializing_if = "Option::is_none")]
2486    pub next_token: Option<String>,
2487}
2488
2489#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2490#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2491pub struct GetInvitationsCountRequest {}
2492
2493#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2494#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2495pub struct GetInvitationsCountResponse {
2496    /// <p>The number of all membership invitations sent to this Security Hub member account, not including the currently accepted invitation.</p>
2497    #[serde(rename = "InvitationsCount")]
2498    #[serde(skip_serializing_if = "Option::is_none")]
2499    pub invitations_count: Option<i64>,
2500}
2501
2502#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2503#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2504pub struct GetMasterAccountRequest {}
2505
2506#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2507#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2508pub struct GetMasterAccountResponse {
2509    /// <p>A list of details about the Security Hub master account for the current member account. </p>
2510    #[serde(rename = "Master")]
2511    #[serde(skip_serializing_if = "Option::is_none")]
2512    pub master: Option<Invitation>,
2513}
2514
2515#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2516#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2517pub struct GetMembersRequest {
2518    /// <p>The list of account IDs for the Security Hub member accounts to return the details for. </p>
2519    #[serde(rename = "AccountIds")]
2520    pub account_ids: Vec<String>,
2521}
2522
2523#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2524#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2525pub struct GetMembersResponse {
2526    /// <p>The list of details about the Security Hub member accounts.</p>
2527    #[serde(rename = "Members")]
2528    #[serde(skip_serializing_if = "Option::is_none")]
2529    pub members: Option<Vec<Member>>,
2530    /// <p>The list of AWS accounts that could not be processed. For each account, the list includes the account ID and the email address.</p>
2531    #[serde(rename = "UnprocessedAccounts")]
2532    #[serde(skip_serializing_if = "Option::is_none")]
2533    pub unprocessed_accounts: Option<Vec<SecurityHubResult>>,
2534}
2535
2536/// <p>The list of the findings that cannot be imported. For each finding, the list provides the error.</p>
2537#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2538#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2539pub struct ImportFindingsError {
2540    /// <p>The code of the error returned by the <code>BatchImportFindings</code> operation.</p>
2541    #[serde(rename = "ErrorCode")]
2542    pub error_code: String,
2543    /// <p>The message of the error returned by the <code>BatchImportFindings</code> operation.</p>
2544    #[serde(rename = "ErrorMessage")]
2545    pub error_message: String,
2546    /// <p>The identifier of the finding that could not be updated.</p>
2547    #[serde(rename = "Id")]
2548    pub id: String,
2549}
2550
2551/// <p>Contains information about a Security Hub insight.</p>
2552#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2553#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2554pub struct Insight {
2555    /// <p>One or more attributes used to filter the findings included in the insight. The insight only includes findings that match the criteria defined in the filters.</p>
2556    #[serde(rename = "Filters")]
2557    pub filters: AwsSecurityFindingFilters,
2558    /// <p>The grouping attribute for the insight's findings. Indicates how to group the matching findings, and identifies the type of item that the insight applies to. For example, if an insight is grouped by resource identifier, then the insight produces a list of resource identifiers.</p>
2559    #[serde(rename = "GroupByAttribute")]
2560    pub group_by_attribute: String,
2561    /// <p>The ARN of a Security Hub insight.</p>
2562    #[serde(rename = "InsightArn")]
2563    pub insight_arn: String,
2564    /// <p>The name of a Security Hub insight.</p>
2565    #[serde(rename = "Name")]
2566    pub name: String,
2567}
2568
2569/// <p>The insight result values returned by the <code>GetInsightResults</code> operation.</p>
2570#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2571#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2572pub struct InsightResultValue {
2573    /// <p>The number of findings returned for each <code>GroupByAttributeValue</code>.</p>
2574    #[serde(rename = "Count")]
2575    pub count: i64,
2576    /// <p>The value of the attribute that the findings are grouped by for the insight whose results are returned by the <code>GetInsightResults</code> operation.</p>
2577    #[serde(rename = "GroupByAttributeValue")]
2578    pub group_by_attribute_value: String,
2579}
2580
2581/// <p>The insight results returned by the <code>GetInsightResults</code> operation.</p>
2582#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2583#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2584pub struct InsightResults {
2585    /// <p>The attribute that the findings are grouped by for the insight whose results are returned by the <code>GetInsightResults</code> operation.</p>
2586    #[serde(rename = "GroupByAttribute")]
2587    pub group_by_attribute: String,
2588    /// <p>The ARN of the insight whose results are returned by the <code>GetInsightResults</code> operation.</p>
2589    #[serde(rename = "InsightArn")]
2590    pub insight_arn: String,
2591    /// <p>The list of insight result values returned by the <code>GetInsightResults</code> operation.</p>
2592    #[serde(rename = "ResultValues")]
2593    pub result_values: Vec<InsightResultValue>,
2594}
2595
2596/// <p>Details about an invitation.</p>
2597#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2598#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2599pub struct Invitation {
2600    /// <p>The account ID of the Security Hub master account that the invitation was sent from.</p>
2601    #[serde(rename = "AccountId")]
2602    #[serde(skip_serializing_if = "Option::is_none")]
2603    pub account_id: Option<String>,
2604    /// <p>The ID of the invitation sent to the member account.</p>
2605    #[serde(rename = "InvitationId")]
2606    #[serde(skip_serializing_if = "Option::is_none")]
2607    pub invitation_id: Option<String>,
2608    /// <p>The timestamp of when the invitation was sent.</p>
2609    #[serde(rename = "InvitedAt")]
2610    #[serde(skip_serializing_if = "Option::is_none")]
2611    pub invited_at: Option<f64>,
2612    /// <p>The current status of the association between the member and master accounts.</p>
2613    #[serde(rename = "MemberStatus")]
2614    #[serde(skip_serializing_if = "Option::is_none")]
2615    pub member_status: Option<String>,
2616}
2617
2618#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2619#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2620pub struct InviteMembersRequest {
2621    /// <p>The list of account IDs of the AWS accounts to invite to Security Hub as members. </p>
2622    #[serde(rename = "AccountIds")]
2623    #[serde(skip_serializing_if = "Option::is_none")]
2624    pub account_ids: Option<Vec<String>>,
2625}
2626
2627#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2628#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2629pub struct InviteMembersResponse {
2630    /// <p>The list of AWS accounts that could not be processed. For each account, the list includes the account ID and the email address.</p>
2631    #[serde(rename = "UnprocessedAccounts")]
2632    #[serde(skip_serializing_if = "Option::is_none")]
2633    pub unprocessed_accounts: Option<Vec<SecurityHubResult>>,
2634}
2635
2636/// <p>The IP filter for querying findings.</p>
2637#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2638pub struct IpFilter {
2639    /// <p>A finding's CIDR value.</p>
2640    #[serde(rename = "Cidr")]
2641    #[serde(skip_serializing_if = "Option::is_none")]
2642    pub cidr: Option<String>,
2643}
2644
2645/// <p>An IPV6 CIDR block association.</p>
2646#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2647pub struct Ipv6CidrBlockAssociation {
2648    /// <p>The association ID for the IPv6 CIDR block.</p>
2649    #[serde(rename = "AssociationId")]
2650    #[serde(skip_serializing_if = "Option::is_none")]
2651    pub association_id: Option<String>,
2652    /// <p>Information about the state of the CIDR block.</p>
2653    #[serde(rename = "CidrBlockState")]
2654    #[serde(skip_serializing_if = "Option::is_none")]
2655    pub cidr_block_state: Option<String>,
2656    /// <p>The IPv6 CIDR block.</p>
2657    #[serde(rename = "Ipv6CidrBlock")]
2658    #[serde(skip_serializing_if = "Option::is_none")]
2659    pub ipv_6_cidr_block: Option<String>,
2660}
2661
2662/// <p>A keyword filter for querying findings.</p>
2663#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2664pub struct KeywordFilter {
2665    /// <p>A value for the keyword.</p>
2666    #[serde(rename = "Value")]
2667    #[serde(skip_serializing_if = "Option::is_none")]
2668    pub value: Option<String>,
2669}
2670
2671#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2672#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2673pub struct ListEnabledProductsForImportRequest {
2674    /// <p>The maximum number of items to return in the response.</p>
2675    #[serde(rename = "MaxResults")]
2676    #[serde(skip_serializing_if = "Option::is_none")]
2677    pub max_results: Option<i64>,
2678    /// <p>The token that is required for pagination. On your first call to the <code>ListEnabledProductsForImport</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2679    #[serde(rename = "NextToken")]
2680    #[serde(skip_serializing_if = "Option::is_none")]
2681    pub next_token: Option<String>,
2682}
2683
2684#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2685#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2686pub struct ListEnabledProductsForImportResponse {
2687    /// <p>The pagination token to use to request the next page of results.</p>
2688    #[serde(rename = "NextToken")]
2689    #[serde(skip_serializing_if = "Option::is_none")]
2690    pub next_token: Option<String>,
2691    /// <p>The list of ARNs for the resources that represent your subscriptions to products. </p>
2692    #[serde(rename = "ProductSubscriptions")]
2693    #[serde(skip_serializing_if = "Option::is_none")]
2694    pub product_subscriptions: Option<Vec<String>>,
2695}
2696
2697#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2698#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2699pub struct ListInvitationsRequest {
2700    /// <p>The maximum number of items to return in the response. </p>
2701    #[serde(rename = "MaxResults")]
2702    #[serde(skip_serializing_if = "Option::is_none")]
2703    pub max_results: Option<i64>,
2704    /// <p>The token that is required for pagination. On your first call to the <code>ListInvitations</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2705    #[serde(rename = "NextToken")]
2706    #[serde(skip_serializing_if = "Option::is_none")]
2707    pub next_token: Option<String>,
2708}
2709
2710#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2711#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2712pub struct ListInvitationsResponse {
2713    /// <p>The details of the invitations returned by the operation.</p>
2714    #[serde(rename = "Invitations")]
2715    #[serde(skip_serializing_if = "Option::is_none")]
2716    pub invitations: Option<Vec<Invitation>>,
2717    /// <p>The pagination token to use to request the next page of results.</p>
2718    #[serde(rename = "NextToken")]
2719    #[serde(skip_serializing_if = "Option::is_none")]
2720    pub next_token: Option<String>,
2721}
2722
2723#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2724#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2725pub struct ListMembersRequest {
2726    /// <p>The maximum number of items to return in the response. </p>
2727    #[serde(rename = "MaxResults")]
2728    #[serde(skip_serializing_if = "Option::is_none")]
2729    pub max_results: Option<i64>,
2730    /// <p>The token that is required for pagination. On your first call to the <code>ListMembers</code> operation, set the value of this parameter to <code>NULL</code>.</p> <p>For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.</p>
2731    #[serde(rename = "NextToken")]
2732    #[serde(skip_serializing_if = "Option::is_none")]
2733    pub next_token: Option<String>,
2734    /// <p>Specifies which member accounts to include in the response based on their relationship status with the master account. The default value is <code>TRUE</code>.</p> <p>If <code>OnlyAssociated</code> is set to <code>TRUE</code>, the response includes member accounts whose relationship status with the master is set to <code>ENABLED</code> or <code>DISABLED</code>.</p> <p>If <code>OnlyAssociated</code> is set to <code>FALSE</code>, the response includes all existing member accounts. </p>
2735    #[serde(rename = "OnlyAssociated")]
2736    #[serde(skip_serializing_if = "Option::is_none")]
2737    pub only_associated: Option<bool>,
2738}
2739
2740#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2741#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2742pub struct ListMembersResponse {
2743    /// <p>Member details returned by the operation.</p>
2744    #[serde(rename = "Members")]
2745    #[serde(skip_serializing_if = "Option::is_none")]
2746    pub members: Option<Vec<Member>>,
2747    /// <p>The pagination token to use to request the next page of results.</p>
2748    #[serde(rename = "NextToken")]
2749    #[serde(skip_serializing_if = "Option::is_none")]
2750    pub next_token: Option<String>,
2751}
2752
2753#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2754#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2755pub struct ListTagsForResourceRequest {
2756    /// <p>The ARN of the resource to retrieve tags for.</p>
2757    #[serde(rename = "ResourceArn")]
2758    pub resource_arn: String,
2759}
2760
2761#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2762#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2763pub struct ListTagsForResourceResponse {
2764    /// <p>The tags associated with a resource.</p>
2765    #[serde(rename = "Tags")]
2766    #[serde(skip_serializing_if = "Option::is_none")]
2767    pub tags: Option<::std::collections::HashMap<String, String>>,
2768}
2769
2770/// <p>Information about the state of the load balancer.</p>
2771#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2772pub struct LoadBalancerState {
2773    /// <p>The state code. The initial state of the load balancer is provisioning.</p> <p>After the load balancer is fully set up and ready to route traffic, its state is active.</p> <p>If the load balancer could not be set up, its state is failed. </p>
2774    #[serde(rename = "Code")]
2775    #[serde(skip_serializing_if = "Option::is_none")]
2776    pub code: Option<String>,
2777    /// <p>A description of the state.</p>
2778    #[serde(rename = "Reason")]
2779    #[serde(skip_serializing_if = "Option::is_none")]
2780    pub reason: Option<String>,
2781}
2782
2783/// <p>A list of malware related to a finding.</p>
2784#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2785pub struct Malware {
2786    /// <p>The name of the malware that was observed.</p>
2787    #[serde(rename = "Name")]
2788    pub name: String,
2789    /// <p>The file system path of the malware that was observed.</p>
2790    #[serde(rename = "Path")]
2791    #[serde(skip_serializing_if = "Option::is_none")]
2792    pub path: Option<String>,
2793    /// <p>The state of the malware that was observed.</p>
2794    #[serde(rename = "State")]
2795    #[serde(skip_serializing_if = "Option::is_none")]
2796    pub state: Option<String>,
2797    /// <p>The type of the malware that was observed.</p>
2798    #[serde(rename = "Type")]
2799    #[serde(skip_serializing_if = "Option::is_none")]
2800    pub type_: Option<String>,
2801}
2802
2803/// <p>The map filter for querying findings.</p>
2804#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2805pub struct MapFilter {
2806    /// <p>The condition to apply to a key value when querying for findings with a map filter.</p>
2807    #[serde(rename = "Comparison")]
2808    #[serde(skip_serializing_if = "Option::is_none")]
2809    pub comparison: Option<String>,
2810    /// <p>The key of the map filter.</p>
2811    #[serde(rename = "Key")]
2812    #[serde(skip_serializing_if = "Option::is_none")]
2813    pub key: Option<String>,
2814    /// <p>The value for the key in the map filter.</p>
2815    #[serde(rename = "Value")]
2816    #[serde(skip_serializing_if = "Option::is_none")]
2817    pub value: Option<String>,
2818}
2819
2820/// <p>The details about a member account.</p>
2821#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2822#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2823pub struct Member {
2824    /// <p>The AWS account ID of the member account.</p>
2825    #[serde(rename = "AccountId")]
2826    #[serde(skip_serializing_if = "Option::is_none")]
2827    pub account_id: Option<String>,
2828    /// <p>The email address of the member account.</p>
2829    #[serde(rename = "Email")]
2830    #[serde(skip_serializing_if = "Option::is_none")]
2831    pub email: Option<String>,
2832    /// <p>A timestamp for the date and time when the invitation was sent to the member account.</p>
2833    #[serde(rename = "InvitedAt")]
2834    #[serde(skip_serializing_if = "Option::is_none")]
2835    pub invited_at: Option<f64>,
2836    /// <p>The AWS account ID of the Security Hub master account associated with this member account.</p>
2837    #[serde(rename = "MasterId")]
2838    #[serde(skip_serializing_if = "Option::is_none")]
2839    pub master_id: Option<String>,
2840    /// <p>The status of the relationship between the member account and its master account. </p>
2841    #[serde(rename = "MemberStatus")]
2842    #[serde(skip_serializing_if = "Option::is_none")]
2843    pub member_status: Option<String>,
2844    /// <p>The timestamp for the date and time when the member account was updated.</p>
2845    #[serde(rename = "UpdatedAt")]
2846    #[serde(skip_serializing_if = "Option::is_none")]
2847    pub updated_at: Option<f64>,
2848}
2849
2850/// <p>The details of network-related information about a finding.</p>
2851#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2852pub struct Network {
2853    /// <p>The destination domain of network-related information about a finding.</p>
2854    #[serde(rename = "DestinationDomain")]
2855    #[serde(skip_serializing_if = "Option::is_none")]
2856    pub destination_domain: Option<String>,
2857    /// <p>The destination IPv4 address of network-related information about a finding.</p>
2858    #[serde(rename = "DestinationIpV4")]
2859    #[serde(skip_serializing_if = "Option::is_none")]
2860    pub destination_ip_v4: Option<String>,
2861    /// <p>The destination IPv6 address of network-related information about a finding.</p>
2862    #[serde(rename = "DestinationIpV6")]
2863    #[serde(skip_serializing_if = "Option::is_none")]
2864    pub destination_ip_v6: Option<String>,
2865    /// <p>The destination port of network-related information about a finding.</p>
2866    #[serde(rename = "DestinationPort")]
2867    #[serde(skip_serializing_if = "Option::is_none")]
2868    pub destination_port: Option<i64>,
2869    /// <p>The direction of network traffic associated with a finding.</p>
2870    #[serde(rename = "Direction")]
2871    #[serde(skip_serializing_if = "Option::is_none")]
2872    pub direction: Option<String>,
2873    /// <p>The range of open ports that is present on the network.</p>
2874    #[serde(rename = "OpenPortRange")]
2875    #[serde(skip_serializing_if = "Option::is_none")]
2876    pub open_port_range: Option<PortRange>,
2877    /// <p>The protocol of network-related information about a finding.</p>
2878    #[serde(rename = "Protocol")]
2879    #[serde(skip_serializing_if = "Option::is_none")]
2880    pub protocol: Option<String>,
2881    /// <p>The source domain of network-related information about a finding.</p>
2882    #[serde(rename = "SourceDomain")]
2883    #[serde(skip_serializing_if = "Option::is_none")]
2884    pub source_domain: Option<String>,
2885    /// <p>The source IPv4 address of network-related information about a finding.</p>
2886    #[serde(rename = "SourceIpV4")]
2887    #[serde(skip_serializing_if = "Option::is_none")]
2888    pub source_ip_v4: Option<String>,
2889    /// <p>The source IPv6 address of network-related information about a finding.</p>
2890    #[serde(rename = "SourceIpV6")]
2891    #[serde(skip_serializing_if = "Option::is_none")]
2892    pub source_ip_v6: Option<String>,
2893    /// <p>The source media access control (MAC) address of network-related information about a finding.</p>
2894    #[serde(rename = "SourceMac")]
2895    #[serde(skip_serializing_if = "Option::is_none")]
2896    pub source_mac: Option<String>,
2897    /// <p>The source port of network-related information about a finding.</p>
2898    #[serde(rename = "SourcePort")]
2899    #[serde(skip_serializing_if = "Option::is_none")]
2900    pub source_port: Option<i64>,
2901}
2902
2903/// <p>Details about a network path component that occurs before or after the current component.</p>
2904#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2905pub struct NetworkHeader {
2906    /// <p>Information about the destination of the component.</p>
2907    #[serde(rename = "Destination")]
2908    #[serde(skip_serializing_if = "Option::is_none")]
2909    pub destination: Option<NetworkPathComponentDetails>,
2910    /// <p>The protocol used for the component.</p>
2911    #[serde(rename = "Protocol")]
2912    #[serde(skip_serializing_if = "Option::is_none")]
2913    pub protocol: Option<String>,
2914    /// <p>Information about the origin of the component.</p>
2915    #[serde(rename = "Source")]
2916    #[serde(skip_serializing_if = "Option::is_none")]
2917    pub source: Option<NetworkPathComponentDetails>,
2918}
2919
2920/// <p>Information about a network path component.</p>
2921#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2922pub struct NetworkPathComponent {
2923    /// <p>The identifier of a component in the network path.</p>
2924    #[serde(rename = "ComponentId")]
2925    #[serde(skip_serializing_if = "Option::is_none")]
2926    pub component_id: Option<String>,
2927    /// <p>The type of component.</p>
2928    #[serde(rename = "ComponentType")]
2929    #[serde(skip_serializing_if = "Option::is_none")]
2930    pub component_type: Option<String>,
2931    /// <p>Information about the component that comes after the current component in the network path.</p>
2932    #[serde(rename = "Egress")]
2933    #[serde(skip_serializing_if = "Option::is_none")]
2934    pub egress: Option<NetworkHeader>,
2935    /// <p>Information about the component that comes before the current node in the network path.</p>
2936    #[serde(rename = "Ingress")]
2937    #[serde(skip_serializing_if = "Option::is_none")]
2938    pub ingress: Option<NetworkHeader>,
2939}
2940
2941/// <p>Information about the destination of the next component in the network path.</p>
2942#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2943pub struct NetworkPathComponentDetails {
2944    /// <p>The IP addresses of the destination.</p>
2945    #[serde(rename = "Address")]
2946    #[serde(skip_serializing_if = "Option::is_none")]
2947    pub address: Option<Vec<String>>,
2948    /// <p>A list of port ranges for the destination.</p>
2949    #[serde(rename = "PortRanges")]
2950    #[serde(skip_serializing_if = "Option::is_none")]
2951    pub port_ranges: Option<Vec<PortRange>>,
2952}
2953
2954/// <p>A user-defined note added to a finding.</p>
2955#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2956pub struct Note {
2957    /// <p>The text of a note.</p>
2958    #[serde(rename = "Text")]
2959    pub text: String,
2960    /// <p>The timestamp of when the note was updated.</p>
2961    #[serde(rename = "UpdatedAt")]
2962    pub updated_at: String,
2963    /// <p>The principal that created a note.</p>
2964    #[serde(rename = "UpdatedBy")]
2965    pub updated_by: String,
2966}
2967
2968/// <p>The updated note.</p>
2969#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2970#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2971pub struct NoteUpdate {
2972    /// <p>The updated note text.</p>
2973    #[serde(rename = "Text")]
2974    pub text: String,
2975    /// <p>The principal that updated the note.</p>
2976    #[serde(rename = "UpdatedBy")]
2977    pub updated_by: String,
2978}
2979
2980/// <p>A number filter for querying findings.</p>
2981#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2982pub struct NumberFilter {
2983    /// <p>The equal-to condition to be applied to a single field when querying for findings.</p>
2984    #[serde(rename = "Eq")]
2985    #[serde(skip_serializing_if = "Option::is_none")]
2986    pub eq: Option<f64>,
2987    /// <p>The greater-than-equal condition to be applied to a single field when querying for findings. </p>
2988    #[serde(rename = "Gte")]
2989    #[serde(skip_serializing_if = "Option::is_none")]
2990    pub gte: Option<f64>,
2991    /// <p>The less-than-equal condition to be applied to a single field when querying for findings. </p>
2992    #[serde(rename = "Lte")]
2993    #[serde(skip_serializing_if = "Option::is_none")]
2994    pub lte: Option<f64>,
2995}
2996
2997/// <p>A range of ports.</p>
2998#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2999pub struct PortRange {
3000    /// <p>The first port in the port range.</p>
3001    #[serde(rename = "Begin")]
3002    #[serde(skip_serializing_if = "Option::is_none")]
3003    pub begin: Option<i64>,
3004    /// <p>The last port in the port range.</p>
3005    #[serde(rename = "End")]
3006    #[serde(skip_serializing_if = "Option::is_none")]
3007    pub end: Option<i64>,
3008}
3009
3010/// <p>The details of process-related information about a finding.</p>
3011#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3012pub struct ProcessDetails {
3013    /// <p>The date/time that the process was launched.</p>
3014    #[serde(rename = "LaunchedAt")]
3015    #[serde(skip_serializing_if = "Option::is_none")]
3016    pub launched_at: Option<String>,
3017    /// <p>The name of the process.</p>
3018    #[serde(rename = "Name")]
3019    #[serde(skip_serializing_if = "Option::is_none")]
3020    pub name: Option<String>,
3021    /// <p>The parent process ID.</p>
3022    #[serde(rename = "ParentPid")]
3023    #[serde(skip_serializing_if = "Option::is_none")]
3024    pub parent_pid: Option<i64>,
3025    /// <p>The path to the process executable.</p>
3026    #[serde(rename = "Path")]
3027    #[serde(skip_serializing_if = "Option::is_none")]
3028    pub path: Option<String>,
3029    /// <p>The process ID.</p>
3030    #[serde(rename = "Pid")]
3031    #[serde(skip_serializing_if = "Option::is_none")]
3032    pub pid: Option<i64>,
3033    /// <p>The date and time when the process was terminated.</p>
3034    #[serde(rename = "TerminatedAt")]
3035    #[serde(skip_serializing_if = "Option::is_none")]
3036    pub terminated_at: Option<String>,
3037}
3038
3039/// <p>Contains details about a product.</p>
3040#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3041#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3042pub struct Product {
3043    /// <p>The URL used to activate the product.</p>
3044    #[serde(rename = "ActivationUrl")]
3045    #[serde(skip_serializing_if = "Option::is_none")]
3046    pub activation_url: Option<String>,
3047    /// <p>The categories assigned to the product.</p>
3048    #[serde(rename = "Categories")]
3049    #[serde(skip_serializing_if = "Option::is_none")]
3050    pub categories: Option<Vec<String>>,
3051    /// <p>The name of the company that provides the product.</p>
3052    #[serde(rename = "CompanyName")]
3053    #[serde(skip_serializing_if = "Option::is_none")]
3054    pub company_name: Option<String>,
3055    /// <p>A description of the product.</p>
3056    #[serde(rename = "Description")]
3057    #[serde(skip_serializing_if = "Option::is_none")]
3058    pub description: Option<String>,
3059    /// <p><p>The types of integration that the product supports. Available values are the following.</p> <ul> <li> <p> <code>SEND<em>FINDINGS</em>TO<em>SECURITY</em>HUB</code> - Indicates that the integration sends findings to Security Hub.</p> </li> <li> <p> <code>RECEIVE<em>FINDINGS</em>FROM<em>SECURITY</em>HUB</code> - Indicates that the integration receives findings from Security Hub.</p> </li> </ul></p>
3060    #[serde(rename = "IntegrationTypes")]
3061    #[serde(skip_serializing_if = "Option::is_none")]
3062    pub integration_types: Option<Vec<String>>,
3063    /// <p>The URL for the page that contains more information about the product.</p>
3064    #[serde(rename = "MarketplaceUrl")]
3065    #[serde(skip_serializing_if = "Option::is_none")]
3066    pub marketplace_url: Option<String>,
3067    /// <p>The ARN assigned to the product.</p>
3068    #[serde(rename = "ProductArn")]
3069    pub product_arn: String,
3070    /// <p>The name of the product.</p>
3071    #[serde(rename = "ProductName")]
3072    #[serde(skip_serializing_if = "Option::is_none")]
3073    pub product_name: Option<String>,
3074    /// <p>The resource policy associated with the product.</p>
3075    #[serde(rename = "ProductSubscriptionResourcePolicy")]
3076    #[serde(skip_serializing_if = "Option::is_none")]
3077    pub product_subscription_resource_policy: Option<String>,
3078}
3079
3080/// <p>A recommendation on how to remediate the issue identified in a finding.</p>
3081#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3082pub struct Recommendation {
3083    /// <p>Describes the recommended steps to take to remediate an issue identified in a finding.</p>
3084    #[serde(rename = "Text")]
3085    #[serde(skip_serializing_if = "Option::is_none")]
3086    pub text: Option<String>,
3087    /// <p>A URL to a page or site that contains information about how to remediate a finding.</p>
3088    #[serde(rename = "Url")]
3089    #[serde(skip_serializing_if = "Option::is_none")]
3090    pub url: Option<String>,
3091}
3092
3093/// <p>Details about a related finding.</p>
3094#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3095pub struct RelatedFinding {
3096    /// <p>The product-generated identifier for a related finding.</p>
3097    #[serde(rename = "Id")]
3098    pub id: String,
3099    /// <p>The ARN of the product that generated a related finding.</p>
3100    #[serde(rename = "ProductArn")]
3101    pub product_arn: String,
3102}
3103
3104/// <p>Details about the remediation steps for a finding.</p>
3105#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3106pub struct Remediation {
3107    /// <p>A recommendation on the steps to take to remediate the issue identified by a finding.</p>
3108    #[serde(rename = "Recommendation")]
3109    #[serde(skip_serializing_if = "Option::is_none")]
3110    pub recommendation: Option<Recommendation>,
3111}
3112
3113/// <p>A resource related to a finding.</p>
3114#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3115pub struct Resource {
3116    /// <p>Additional details about the resource related to a finding.</p>
3117    #[serde(rename = "Details")]
3118    #[serde(skip_serializing_if = "Option::is_none")]
3119    pub details: Option<ResourceDetails>,
3120    /// <p>The canonical identifier for the given resource type.</p>
3121    #[serde(rename = "Id")]
3122    pub id: String,
3123    /// <p>The canonical AWS partition name that the Region is assigned to.</p>
3124    #[serde(rename = "Partition")]
3125    #[serde(skip_serializing_if = "Option::is_none")]
3126    pub partition: Option<String>,
3127    /// <p>The canonical AWS external Region name where this resource is located.</p>
3128    #[serde(rename = "Region")]
3129    #[serde(skip_serializing_if = "Option::is_none")]
3130    pub region: Option<String>,
3131    /// <p>A list of AWS tags associated with a resource at the time the finding was processed.</p>
3132    #[serde(rename = "Tags")]
3133    #[serde(skip_serializing_if = "Option::is_none")]
3134    pub tags: Option<::std::collections::HashMap<String, String>>,
3135    /// <p>The type of the resource that details are provided for. If possible, set <code>Type</code> to one of the supported resource types. For example, if the resource is an EC2 instance, then set <code>Type</code> to <code>AwsEc2Instance</code>.</p> <p>If the resource does not match any of the provided types, then set <code>Type</code> to <code>Other</code>. </p>
3136    #[serde(rename = "Type")]
3137    pub type_: String,
3138}
3139
3140/// <p>Additional details about a resource related to a finding.</p> <p>To provide the details, use the object that corresponds to the resource type. For example, if the resource type is <code>AwsEc2Instance</code>, then you use the <code>AwsEc2Instance</code> object to provide the details.</p> <p>If the type-specific object does not contain all of the fields you want to populate, then you use the <code>Other</code> object to populate those additional fields.</p> <p>You also use the <code>Other</code> object to populate the details when the selected type does not have a corresponding object.</p>
3141#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3142pub struct ResourceDetails {
3143    /// <p>Details for an autoscaling group.</p>
3144    #[serde(rename = "AwsAutoScalingAutoScalingGroup")]
3145    #[serde(skip_serializing_if = "Option::is_none")]
3146    pub aws_auto_scaling_auto_scaling_group: Option<AwsAutoScalingAutoScalingGroupDetails>,
3147    /// <p>Details about a CloudFront distribution.</p>
3148    #[serde(rename = "AwsCloudFrontDistribution")]
3149    #[serde(skip_serializing_if = "Option::is_none")]
3150    pub aws_cloud_front_distribution: Option<AwsCloudFrontDistributionDetails>,
3151    /// <p>Details for an AWS CodeBuild project.</p>
3152    #[serde(rename = "AwsCodeBuildProject")]
3153    #[serde(skip_serializing_if = "Option::is_none")]
3154    pub aws_code_build_project: Option<AwsCodeBuildProjectDetails>,
3155    /// <p>Details about an Amazon EC2 instance related to a finding.</p>
3156    #[serde(rename = "AwsEc2Instance")]
3157    #[serde(skip_serializing_if = "Option::is_none")]
3158    pub aws_ec_2_instance: Option<AwsEc2InstanceDetails>,
3159    /// <p>Details for an Amazon EC2 network interface.</p>
3160    #[serde(rename = "AwsEc2NetworkInterface")]
3161    #[serde(skip_serializing_if = "Option::is_none")]
3162    pub aws_ec_2_network_interface: Option<AwsEc2NetworkInterfaceDetails>,
3163    /// <p>Details for an EC2 security group.</p>
3164    #[serde(rename = "AwsEc2SecurityGroup")]
3165    #[serde(skip_serializing_if = "Option::is_none")]
3166    pub aws_ec_2_security_group: Option<AwsEc2SecurityGroupDetails>,
3167    /// <p>Details for an EC2 volume.</p>
3168    #[serde(rename = "AwsEc2Volume")]
3169    #[serde(skip_serializing_if = "Option::is_none")]
3170    pub aws_ec_2_volume: Option<AwsEc2VolumeDetails>,
3171    /// <p>Details for an EC2 VPC.</p>
3172    #[serde(rename = "AwsEc2Vpc")]
3173    #[serde(skip_serializing_if = "Option::is_none")]
3174    pub aws_ec_2_vpc: Option<AwsEc2VpcDetails>,
3175    /// <p>Details for an Elasticsearch domain.</p>
3176    #[serde(rename = "AwsElasticsearchDomain")]
3177    #[serde(skip_serializing_if = "Option::is_none")]
3178    pub aws_elasticsearch_domain: Option<AwsElasticsearchDomainDetails>,
3179    /// <p>Details about a load balancer.</p>
3180    #[serde(rename = "AwsElbv2LoadBalancer")]
3181    #[serde(skip_serializing_if = "Option::is_none")]
3182    pub aws_elbv_2_load_balancer: Option<AwsElbv2LoadBalancerDetails>,
3183    /// <p>Details about an IAM access key related to a finding.</p>
3184    #[serde(rename = "AwsIamAccessKey")]
3185    #[serde(skip_serializing_if = "Option::is_none")]
3186    pub aws_iam_access_key: Option<AwsIamAccessKeyDetails>,
3187    /// <p>Details about an IAM role.</p>
3188    #[serde(rename = "AwsIamRole")]
3189    #[serde(skip_serializing_if = "Option::is_none")]
3190    pub aws_iam_role: Option<AwsIamRoleDetails>,
3191    /// <p>Details about a KMS key.</p>
3192    #[serde(rename = "AwsKmsKey")]
3193    #[serde(skip_serializing_if = "Option::is_none")]
3194    pub aws_kms_key: Option<AwsKmsKeyDetails>,
3195    /// <p>Details about a Lambda function.</p>
3196    #[serde(rename = "AwsLambdaFunction")]
3197    #[serde(skip_serializing_if = "Option::is_none")]
3198    pub aws_lambda_function: Option<AwsLambdaFunctionDetails>,
3199    /// <p>Details for a Lambda layer version.</p>
3200    #[serde(rename = "AwsLambdaLayerVersion")]
3201    #[serde(skip_serializing_if = "Option::is_none")]
3202    pub aws_lambda_layer_version: Option<AwsLambdaLayerVersionDetails>,
3203    /// <p>Details for an Amazon RDS database instance.</p>
3204    #[serde(rename = "AwsRdsDbInstance")]
3205    #[serde(skip_serializing_if = "Option::is_none")]
3206    pub aws_rds_db_instance: Option<AwsRdsDbInstanceDetails>,
3207    /// <p>Details about an Amazon S3 bucket related to a finding.</p>
3208    #[serde(rename = "AwsS3Bucket")]
3209    #[serde(skip_serializing_if = "Option::is_none")]
3210    pub aws_s3_bucket: Option<AwsS3BucketDetails>,
3211    /// <p>Details about an Amazon S3 object related to a finding.</p>
3212    #[serde(rename = "AwsS3Object")]
3213    #[serde(skip_serializing_if = "Option::is_none")]
3214    pub aws_s3_object: Option<AwsS3ObjectDetails>,
3215    /// <p>Details about an SNS topic.</p>
3216    #[serde(rename = "AwsSnsTopic")]
3217    #[serde(skip_serializing_if = "Option::is_none")]
3218    pub aws_sns_topic: Option<AwsSnsTopicDetails>,
3219    /// <p>Details about an SQS queue.</p>
3220    #[serde(rename = "AwsSqsQueue")]
3221    #[serde(skip_serializing_if = "Option::is_none")]
3222    pub aws_sqs_queue: Option<AwsSqsQueueDetails>,
3223    /// <p>Details for a WAF WebACL.</p>
3224    #[serde(rename = "AwsWafWebAcl")]
3225    #[serde(skip_serializing_if = "Option::is_none")]
3226    pub aws_waf_web_acl: Option<AwsWafWebAclDetails>,
3227    /// <p>Details about a container resource related to a finding.</p>
3228    #[serde(rename = "Container")]
3229    #[serde(skip_serializing_if = "Option::is_none")]
3230    pub container: Option<ContainerDetails>,
3231    /// <p><p>Details about a resource that are not available in a type-specific details object. Use the <code>Other</code> object in the following cases.</p> <ul> <li> <p>The type-specific object does not contain all of the fields that you want to populate. In this case, first use the type-specific object to populate those fields. Use the <code>Other</code> object to populate the fields that are missing from the type-specific object.</p> </li> <li> <p>The resource type does not have a corresponding object. This includes resources for which the type is <code>Other</code>. </p> </li> </ul></p>
3232    #[serde(rename = "Other")]
3233    #[serde(skip_serializing_if = "Option::is_none")]
3234    pub other: Option<::std::collections::HashMap<String, String>>,
3235}
3236
3237/// <p>Details about the account that was not processed.</p>
3238#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3239#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3240pub struct SecurityHubResult {
3241    /// <p>An AWS account ID of the account that was not processed.</p>
3242    #[serde(rename = "AccountId")]
3243    #[serde(skip_serializing_if = "Option::is_none")]
3244    pub account_id: Option<String>,
3245    /// <p>The reason that the account was not processed.</p>
3246    #[serde(rename = "ProcessingResult")]
3247    #[serde(skip_serializing_if = "Option::is_none")]
3248    pub processing_result: Option<String>,
3249}
3250
3251/// <p>The severity of the finding.</p>
3252#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3253pub struct Severity {
3254    /// <p><p>The severity value of the finding. The allowed values are the following.</p> <ul> <li> <p> <code>INFORMATIONAL</code> - No issue was found.</p> </li> <li> <p> <code>LOW</code> - The issue does not require action on its own.</p> </li> <li> <p> <code>MEDIUM</code> - The issue must be addressed but not urgently.</p> </li> <li> <p> <code>HIGH</code> - The issue must be addressed as a priority.</p> </li> <li> <p> <code>CRITICAL</code> - The issue must be remediated immediately to avoid it escalating.</p> </li> </ul></p>
3255    #[serde(rename = "Label")]
3256    #[serde(skip_serializing_if = "Option::is_none")]
3257    pub label: Option<String>,
3258    /// <p><p>Deprecated. This attribute is being deprecated. Instead of providing <code>Normalized</code>, provide <code>Label</code>.</p> <p>If you provide <code>Normalized</code> and do not provide <code>Label</code>, <code>Label</code> is set automatically as follows. </p> <ul> <li> <p>0 - <code>INFORMATIONAL</code> </p> </li> <li> <p>1–39 - <code>LOW</code> </p> </li> <li> <p>40–69 - <code>MEDIUM</code> </p> </li> <li> <p>70–89 - <code>HIGH</code> </p> </li> <li> <p>90–100 - <code>CRITICAL</code> </p> </li> </ul></p>
3259    #[serde(rename = "Normalized")]
3260    #[serde(skip_serializing_if = "Option::is_none")]
3261    pub normalized: Option<i64>,
3262    /// <p>The native severity from the finding product that generated the finding.</p>
3263    #[serde(rename = "Original")]
3264    #[serde(skip_serializing_if = "Option::is_none")]
3265    pub original: Option<String>,
3266    /// <p>Deprecated. This attribute is being deprecated. Instead of providing <code>Product</code>, provide <code>Original</code>.</p> <p>The native severity as defined by the AWS service or integrated partner product that generated the finding.</p>
3267    #[serde(rename = "Product")]
3268    #[serde(skip_serializing_if = "Option::is_none")]
3269    pub product: Option<f64>,
3270}
3271
3272/// <p>Updates to the severity information for a finding.</p>
3273#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3274#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3275pub struct SeverityUpdate {
3276    /// <p><p>The severity value of the finding. The allowed values are the following.</p> <ul> <li> <p> <code>INFORMATIONAL</code> - No issue was found.</p> </li> <li> <p> <code>LOW</code> - The issue does not require action on its own.</p> </li> <li> <p> <code>MEDIUM</code> - The issue must be addressed but not urgently.</p> </li> <li> <p> <code>HIGH</code> - The issue must be addressed as a priority.</p> </li> <li> <p> <code>CRITICAL</code> - The issue must be remediated immediately to avoid it escalating.</p> </li> </ul></p>
3277    #[serde(rename = "Label")]
3278    #[serde(skip_serializing_if = "Option::is_none")]
3279    pub label: Option<String>,
3280    /// <p><p>The normalized severity for the finding. This attribute is to be deprecated in favor of <code>Label</code>.</p> <p>If you provide <code>Normalized</code> and do not provide <code>Label</code>, <code>Label</code> is set automatically as follows.</p> <ul> <li> <p>0 - <code>INFORMATIONAL</code> </p> </li> <li> <p>1–39 - <code>LOW</code> </p> </li> <li> <p>40–69 - <code>MEDIUM</code> </p> </li> <li> <p>70–89 - <code>HIGH</code> </p> </li> <li> <p>90–100 - <code>CRITICAL</code> </p> </li> </ul></p>
3281    #[serde(rename = "Normalized")]
3282    #[serde(skip_serializing_if = "Option::is_none")]
3283    pub normalized: Option<i64>,
3284    /// <p>The native severity as defined by the AWS service or integrated partner product that generated the finding.</p>
3285    #[serde(rename = "Product")]
3286    #[serde(skip_serializing_if = "Option::is_none")]
3287    pub product: Option<f64>,
3288}
3289
3290/// <p>Information about a software package.</p>
3291#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3292pub struct SoftwarePackage {
3293    /// <p>The architecture used for the software package.</p>
3294    #[serde(rename = "Architecture")]
3295    #[serde(skip_serializing_if = "Option::is_none")]
3296    pub architecture: Option<String>,
3297    /// <p>The epoch of the software package.</p>
3298    #[serde(rename = "Epoch")]
3299    #[serde(skip_serializing_if = "Option::is_none")]
3300    pub epoch: Option<String>,
3301    /// <p>The name of the software package.</p>
3302    #[serde(rename = "Name")]
3303    #[serde(skip_serializing_if = "Option::is_none")]
3304    pub name: Option<String>,
3305    /// <p>The release of the software package.</p>
3306    #[serde(rename = "Release")]
3307    #[serde(skip_serializing_if = "Option::is_none")]
3308    pub release: Option<String>,
3309    /// <p>The version of the software package.</p>
3310    #[serde(rename = "Version")]
3311    #[serde(skip_serializing_if = "Option::is_none")]
3312    pub version: Option<String>,
3313}
3314
3315/// <p>A collection of finding attributes used to sort findings.</p>
3316#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3317#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3318pub struct SortCriterion {
3319    /// <p>The finding attribute used to sort findings.</p>
3320    #[serde(rename = "Field")]
3321    #[serde(skip_serializing_if = "Option::is_none")]
3322    pub field: Option<String>,
3323    /// <p>The order used to sort findings.</p>
3324    #[serde(rename = "SortOrder")]
3325    #[serde(skip_serializing_if = "Option::is_none")]
3326    pub sort_order: Option<String>,
3327}
3328
3329/// <p>Provides information about a specific standard.</p>
3330#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3331#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3332pub struct Standard {
3333    /// <p>A description of the standard.</p>
3334    #[serde(rename = "Description")]
3335    #[serde(skip_serializing_if = "Option::is_none")]
3336    pub description: Option<String>,
3337    /// <p>Whether the standard is enabled by default. When Security Hub is enabled from the console, if a standard is enabled by default, the check box for that standard is selected by default.</p> <p>When Security Hub is enabled using the <code>EnableSecurityHub</code> API operation, the standard is enabled by default unless <code>EnableDefaultStandards</code> is set to <code>false</code>.</p>
3338    #[serde(rename = "EnabledByDefault")]
3339    #[serde(skip_serializing_if = "Option::is_none")]
3340    pub enabled_by_default: Option<bool>,
3341    /// <p>The name of the standard.</p>
3342    #[serde(rename = "Name")]
3343    #[serde(skip_serializing_if = "Option::is_none")]
3344    pub name: Option<String>,
3345    /// <p>The ARN of a standard.</p>
3346    #[serde(rename = "StandardsArn")]
3347    #[serde(skip_serializing_if = "Option::is_none")]
3348    pub standards_arn: Option<String>,
3349}
3350
3351/// <p>Details for an individual security standard control.</p>
3352#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3353#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3354pub struct StandardsControl {
3355    /// <p>The identifier of the security standard control.</p>
3356    #[serde(rename = "ControlId")]
3357    #[serde(skip_serializing_if = "Option::is_none")]
3358    pub control_id: Option<String>,
3359    /// <p>The current status of the security standard control. Indicates whether the control is enabled or disabled. Security Hub does not check against disabled controls.</p>
3360    #[serde(rename = "ControlStatus")]
3361    #[serde(skip_serializing_if = "Option::is_none")]
3362    pub control_status: Option<String>,
3363    /// <p>The date and time that the status of the security standard control was most recently updated.</p>
3364    #[serde(rename = "ControlStatusUpdatedAt")]
3365    #[serde(skip_serializing_if = "Option::is_none")]
3366    pub control_status_updated_at: Option<f64>,
3367    /// <p>The longer description of the security standard control. Provides information about what the control is checking for.</p>
3368    #[serde(rename = "Description")]
3369    #[serde(skip_serializing_if = "Option::is_none")]
3370    pub description: Option<String>,
3371    /// <p>The reason provided for the most recent change in status for the control.</p>
3372    #[serde(rename = "DisabledReason")]
3373    #[serde(skip_serializing_if = "Option::is_none")]
3374    pub disabled_reason: Option<String>,
3375    /// <p>The list of requirements that are related to this control.</p>
3376    #[serde(rename = "RelatedRequirements")]
3377    #[serde(skip_serializing_if = "Option::is_none")]
3378    pub related_requirements: Option<Vec<String>>,
3379    /// <p>A link to remediation information for the control in the Security Hub user documentation.</p>
3380    #[serde(rename = "RemediationUrl")]
3381    #[serde(skip_serializing_if = "Option::is_none")]
3382    pub remediation_url: Option<String>,
3383    /// <p>The severity of findings generated from this security standard control.</p> <p>The finding severity is based on an assessment of how easy it would be to compromise AWS resources if the issue is detected.</p>
3384    #[serde(rename = "SeverityRating")]
3385    #[serde(skip_serializing_if = "Option::is_none")]
3386    pub severity_rating: Option<String>,
3387    /// <p>The ARN of the security standard control.</p>
3388    #[serde(rename = "StandardsControlArn")]
3389    #[serde(skip_serializing_if = "Option::is_none")]
3390    pub standards_control_arn: Option<String>,
3391    /// <p>The title of the security standard control.</p>
3392    #[serde(rename = "Title")]
3393    #[serde(skip_serializing_if = "Option::is_none")]
3394    pub title: Option<String>,
3395}
3396
3397/// <p>A resource that represents your subscription to a supported standard.</p>
3398#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3399#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3400pub struct StandardsSubscription {
3401    /// <p>The ARN of a standard.</p>
3402    #[serde(rename = "StandardsArn")]
3403    pub standards_arn: String,
3404    /// <p>A key-value pair of input for the standard.</p>
3405    #[serde(rename = "StandardsInput")]
3406    pub standards_input: ::std::collections::HashMap<String, String>,
3407    /// <p>The status of the standards subscription.</p>
3408    #[serde(rename = "StandardsStatus")]
3409    pub standards_status: String,
3410    /// <p>The ARN of a resource that represents your subscription to a supported standard.</p>
3411    #[serde(rename = "StandardsSubscriptionArn")]
3412    pub standards_subscription_arn: String,
3413}
3414
3415/// <p>The standard that you want to enable.</p>
3416#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3417#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3418pub struct StandardsSubscriptionRequest {
3419    /// <p>The ARN of the standard that you want to enable. To view the list of available standards and their ARNs, use the <code> <a>DescribeStandards</a> </code> operation.</p>
3420    #[serde(rename = "StandardsArn")]
3421    pub standards_arn: String,
3422    /// <p>A key-value pair of input for the standard.</p>
3423    #[serde(rename = "StandardsInput")]
3424    #[serde(skip_serializing_if = "Option::is_none")]
3425    pub standards_input: Option<::std::collections::HashMap<String, String>>,
3426}
3427
3428/// <p>Provides additional context for the value of <code>Compliance.Status</code>.</p>
3429#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3430pub struct StatusReason {
3431    /// <p>The corresponding description for the status reason code.</p>
3432    #[serde(rename = "Description")]
3433    #[serde(skip_serializing_if = "Option::is_none")]
3434    pub description: Option<String>,
3435    /// <p>A code that represents a reason for the control status. For the list of status reason codes and their meanings, see <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-results.html#securityhub-standards-results-asff">Standards-related information in the ASFF</a> in the <i>AWS Security Hub User Guide</i>. </p>
3436    #[serde(rename = "ReasonCode")]
3437    pub reason_code: String,
3438}
3439
3440/// <p>A string filter for querying findings.</p>
3441#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3442pub struct StringFilter {
3443    /// <p>The condition to be applied to a string value when querying for findings. </p>
3444    #[serde(rename = "Comparison")]
3445    #[serde(skip_serializing_if = "Option::is_none")]
3446    pub comparison: Option<String>,
3447    /// <p>The string filter value.</p>
3448    #[serde(rename = "Value")]
3449    #[serde(skip_serializing_if = "Option::is_none")]
3450    pub value: Option<String>,
3451}
3452
3453#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3454#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3455pub struct TagResourceRequest {
3456    /// <p>The ARN of the resource to apply the tags to.</p>
3457    #[serde(rename = "ResourceArn")]
3458    pub resource_arn: String,
3459    /// <p>The tags to add to the resource.</p>
3460    #[serde(rename = "Tags")]
3461    pub tags: ::std::collections::HashMap<String, String>,
3462}
3463
3464#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3465#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3466pub struct TagResourceResponse {}
3467
3468/// <p>Details about the threat intelligence related to a finding.</p>
3469#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3470pub struct ThreatIntelIndicator {
3471    /// <p>The category of a threat intelligence indicator.</p>
3472    #[serde(rename = "Category")]
3473    #[serde(skip_serializing_if = "Option::is_none")]
3474    pub category: Option<String>,
3475    /// <p>The date and time when the most recent instance of a threat intelligence indicator was observed.</p>
3476    #[serde(rename = "LastObservedAt")]
3477    #[serde(skip_serializing_if = "Option::is_none")]
3478    pub last_observed_at: Option<String>,
3479    /// <p>The source of the threat intelligence indicator.</p>
3480    #[serde(rename = "Source")]
3481    #[serde(skip_serializing_if = "Option::is_none")]
3482    pub source: Option<String>,
3483    /// <p>The URL to the page or site where you can get more information about the threat intelligence indicator.</p>
3484    #[serde(rename = "SourceUrl")]
3485    #[serde(skip_serializing_if = "Option::is_none")]
3486    pub source_url: Option<String>,
3487    /// <p>The type of threat intelligence indicator.</p>
3488    #[serde(rename = "Type")]
3489    #[serde(skip_serializing_if = "Option::is_none")]
3490    pub type_: Option<String>,
3491    /// <p>The value of a threat intelligence indicator.</p>
3492    #[serde(rename = "Value")]
3493    #[serde(skip_serializing_if = "Option::is_none")]
3494    pub value: Option<String>,
3495}
3496
3497#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3498#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3499pub struct UntagResourceRequest {
3500    /// <p>The ARN of the resource to remove the tags from.</p>
3501    #[serde(rename = "ResourceArn")]
3502    pub resource_arn: String,
3503    /// <p>The tag keys associated with the tags to remove from the resource.</p>
3504    #[serde(rename = "TagKeys")]
3505    pub tag_keys: Vec<String>,
3506}
3507
3508#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3509#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3510pub struct UntagResourceResponse {}
3511
3512#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3513#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3514pub struct UpdateActionTargetRequest {
3515    /// <p>The ARN of the custom action target to update.</p>
3516    #[serde(rename = "ActionTargetArn")]
3517    pub action_target_arn: String,
3518    /// <p>The updated description for the custom action target.</p>
3519    #[serde(rename = "Description")]
3520    #[serde(skip_serializing_if = "Option::is_none")]
3521    pub description: Option<String>,
3522    /// <p>The updated name of the custom action target.</p>
3523    #[serde(rename = "Name")]
3524    #[serde(skip_serializing_if = "Option::is_none")]
3525    pub name: Option<String>,
3526}
3527
3528#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3529#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3530pub struct UpdateActionTargetResponse {}
3531
3532#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3533#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3534pub struct UpdateFindingsRequest {
3535    /// <p>A collection of attributes that specify which findings you want to update.</p>
3536    #[serde(rename = "Filters")]
3537    pub filters: AwsSecurityFindingFilters,
3538    /// <p>The updated note for the finding.</p>
3539    #[serde(rename = "Note")]
3540    #[serde(skip_serializing_if = "Option::is_none")]
3541    pub note: Option<NoteUpdate>,
3542    /// <p>The updated record state for the finding.</p>
3543    #[serde(rename = "RecordState")]
3544    #[serde(skip_serializing_if = "Option::is_none")]
3545    pub record_state: Option<String>,
3546}
3547
3548#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3549#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3550pub struct UpdateFindingsResponse {}
3551
3552#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3553#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3554pub struct UpdateInsightRequest {
3555    /// <p>The updated filters that define this insight.</p>
3556    #[serde(rename = "Filters")]
3557    #[serde(skip_serializing_if = "Option::is_none")]
3558    pub filters: Option<AwsSecurityFindingFilters>,
3559    /// <p>The updated <code>GroupBy</code> attribute that defines this insight.</p>
3560    #[serde(rename = "GroupByAttribute")]
3561    #[serde(skip_serializing_if = "Option::is_none")]
3562    pub group_by_attribute: Option<String>,
3563    /// <p>The ARN of the insight that you want to update.</p>
3564    #[serde(rename = "InsightArn")]
3565    pub insight_arn: String,
3566    /// <p>The updated name for the insight.</p>
3567    #[serde(rename = "Name")]
3568    #[serde(skip_serializing_if = "Option::is_none")]
3569    pub name: Option<String>,
3570}
3571
3572#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3573#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3574pub struct UpdateInsightResponse {}
3575
3576#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3577#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3578pub struct UpdateStandardsControlRequest {
3579    /// <p>The updated status of the security standard control.</p>
3580    #[serde(rename = "ControlStatus")]
3581    #[serde(skip_serializing_if = "Option::is_none")]
3582    pub control_status: Option<String>,
3583    /// <p>A description of the reason why you are disabling a security standard control. If you are disabling a control, then this is required.</p>
3584    #[serde(rename = "DisabledReason")]
3585    #[serde(skip_serializing_if = "Option::is_none")]
3586    pub disabled_reason: Option<String>,
3587    /// <p>The ARN of the security standard control to enable or disable.</p>
3588    #[serde(rename = "StandardsControlArn")]
3589    pub standards_control_arn: String,
3590}
3591
3592#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3593#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3594pub struct UpdateStandardsControlResponse {}
3595
3596/// <p>A vulnerability associated with a finding.</p>
3597#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3598pub struct Vulnerability {
3599    /// <p>CVSS scores from the advisory related to the vulnerability.</p>
3600    #[serde(rename = "Cvss")]
3601    #[serde(skip_serializing_if = "Option::is_none")]
3602    pub cvss: Option<Vec<Cvss>>,
3603    /// <p>The identifier of the vulnerability.</p>
3604    #[serde(rename = "Id")]
3605    pub id: String,
3606    /// <p>A list of URLs that provide additional information about the vulnerability.</p>
3607    #[serde(rename = "ReferenceUrls")]
3608    #[serde(skip_serializing_if = "Option::is_none")]
3609    pub reference_urls: Option<Vec<String>>,
3610    /// <p>List of vulnerabilities that are related to this vulnerability.</p>
3611    #[serde(rename = "RelatedVulnerabilities")]
3612    #[serde(skip_serializing_if = "Option::is_none")]
3613    pub related_vulnerabilities: Option<Vec<String>>,
3614    /// <p>Information about the vendor that generates the vulnerability report.</p>
3615    #[serde(rename = "Vendor")]
3616    #[serde(skip_serializing_if = "Option::is_none")]
3617    pub vendor: Option<VulnerabilityVendor>,
3618    /// <p>List of software packages that have the vulnerability.</p>
3619    #[serde(rename = "VulnerablePackages")]
3620    #[serde(skip_serializing_if = "Option::is_none")]
3621    pub vulnerable_packages: Option<Vec<SoftwarePackage>>,
3622}
3623
3624/// <p>A vendor that generates a vulnerability report.</p>
3625#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3626pub struct VulnerabilityVendor {
3627    /// <p>The name of the vendor.</p>
3628    #[serde(rename = "Name")]
3629    pub name: String,
3630    /// <p>The URL of the vulnerability advisory.</p>
3631    #[serde(rename = "Url")]
3632    #[serde(skip_serializing_if = "Option::is_none")]
3633    pub url: Option<String>,
3634    /// <p>The datetime when the vulnerability advisory was created.</p>
3635    #[serde(rename = "VendorCreatedAt")]
3636    #[serde(skip_serializing_if = "Option::is_none")]
3637    pub vendor_created_at: Option<String>,
3638    /// <p>The severity that the vendor assigned to the vulnerability.</p>
3639    #[serde(rename = "VendorSeverity")]
3640    #[serde(skip_serializing_if = "Option::is_none")]
3641    pub vendor_severity: Option<String>,
3642    /// <p>The datetime when the vulnerability advisory was last updated.</p>
3643    #[serde(rename = "VendorUpdatedAt")]
3644    #[serde(skip_serializing_if = "Option::is_none")]
3645    pub vendor_updated_at: Option<String>,
3646}
3647
3648/// <p>Details about the action that CloudFront or AWS WAF takes when a web request matches the conditions in the rule. </p>
3649#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3650pub struct WafAction {
3651    /// <p><p>Specifies how you want AWS WAF to respond to requests that match the settings in a rule.</p> <p>Valid settings include the following:</p> <ul> <li> <p> <code>ALLOW</code> - AWS WAF allows requests</p> </li> <li> <p> <code>BLOCK</code> - AWS WAF blocks requests</p> </li> <li> <p> <code>COUNT</code> - AWS WAF increments a counter of the requests that match all of the conditions in the rule. AWS WAF then continues to inspect the web request based on the remaining rules in the web ACL. You can&#39;t specify <code>COUNT</code> for the default action for a WebACL.</p> </li> </ul></p>
3652    #[serde(rename = "Type")]
3653    #[serde(skip_serializing_if = "Option::is_none")]
3654    pub type_: Option<String>,
3655}
3656
3657/// <p>Details about a rule to exclude from a rule group.</p>
3658#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3659pub struct WafExcludedRule {
3660    /// <p>The unique identifier for the rule to exclude from the rule group.</p>
3661    #[serde(rename = "RuleId")]
3662    #[serde(skip_serializing_if = "Option::is_none")]
3663    pub rule_id: Option<String>,
3664}
3665
3666/// <p>Details about an override action for a rule.</p>
3667#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3668pub struct WafOverrideAction {
3669    /// <p> <code>COUNT</code> overrides the action specified by the individual rule within a <code>RuleGroup</code> .</p> <p>If set to <code>NONE</code>, the rule's action takes place.</p>
3670    #[serde(rename = "Type")]
3671    #[serde(skip_serializing_if = "Option::is_none")]
3672    pub type_: Option<String>,
3673}
3674
3675/// <p>Provides information about the status of the investigation into a finding.</p>
3676#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
3677pub struct Workflow {
3678    /// <p><p>The status of the investigation into the finding. The allowed values are the following.</p> <ul> <li> <p> <code>NEW</code> - The initial state of a finding, before it is reviewed.</p> </li> <li> <p> <code>NOTIFIED</code> - Indicates that you notified the resource owner about the security issue. Used when the initial reviewer is not the resource owner, and needs intervention from the resource owner.</p> </li> <li> <p> <code>SUPPRESSED</code> - The finding will not be reviewed again and will not be acted upon.</p> </li> <li> <p> <code>RESOLVED</code> - The finding was reviewed and remediated and is now considered resolved. </p> </li> </ul></p>
3679    #[serde(rename = "Status")]
3680    #[serde(skip_serializing_if = "Option::is_none")]
3681    pub status: Option<String>,
3682}
3683
3684/// <p>Used to update information about the investigation into the finding.</p>
3685#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3686#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3687pub struct WorkflowUpdate {
3688    /// <p><p>The status of the investigation into the finding. The allowed values are the following.</p> <ul> <li> <p> <code>NEW</code> - The initial state of a finding, before it is reviewed.</p> </li> <li> <p> <code>NOTIFIED</code> - Indicates that you notified the resource owner about the security issue. Used when the initial reviewer is not the resource owner, and needs intervention from the resource owner.</p> </li> <li> <p> <code>RESOLVED</code> - The finding was reviewed and remediated and is now considered resolved.</p> </li> <li> <p> <code>SUPPRESSED</code> - The finding will not be reviewed again and will not be acted upon.</p> </li> </ul></p>
3689    #[serde(rename = "Status")]
3690    #[serde(skip_serializing_if = "Option::is_none")]
3691    pub status: Option<String>,
3692}
3693
3694/// Errors returned by AcceptInvitation
3695#[derive(Debug, PartialEq)]
3696pub enum AcceptInvitationError {
3697    /// <p>Internal server error.</p>
3698    Internal(String),
3699    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
3700    InvalidAccess(String),
3701    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
3702    InvalidInput(String),
3703    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
3704    LimitExceeded(String),
3705    /// <p>The request was rejected because we can't find the specified resource.</p>
3706    ResourceNotFound(String),
3707}
3708
3709impl AcceptInvitationError {
3710    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AcceptInvitationError> {
3711        if let Some(err) = proto::json::Error::parse_rest(&res) {
3712            match err.typ.as_str() {
3713                "InternalException" => {
3714                    return RusotoError::Service(AcceptInvitationError::Internal(err.msg))
3715                }
3716                "InvalidAccessException" => {
3717                    return RusotoError::Service(AcceptInvitationError::InvalidAccess(err.msg))
3718                }
3719                "InvalidInputException" => {
3720                    return RusotoError::Service(AcceptInvitationError::InvalidInput(err.msg))
3721                }
3722                "LimitExceededException" => {
3723                    return RusotoError::Service(AcceptInvitationError::LimitExceeded(err.msg))
3724                }
3725                "ResourceNotFoundException" => {
3726                    return RusotoError::Service(AcceptInvitationError::ResourceNotFound(err.msg))
3727                }
3728                "ValidationException" => return RusotoError::Validation(err.msg),
3729                _ => {}
3730            }
3731        }
3732        RusotoError::Unknown(res)
3733    }
3734}
3735impl fmt::Display for AcceptInvitationError {
3736    #[allow(unused_variables)]
3737    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3738        match *self {
3739            AcceptInvitationError::Internal(ref cause) => write!(f, "{}", cause),
3740            AcceptInvitationError::InvalidAccess(ref cause) => write!(f, "{}", cause),
3741            AcceptInvitationError::InvalidInput(ref cause) => write!(f, "{}", cause),
3742            AcceptInvitationError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3743            AcceptInvitationError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3744        }
3745    }
3746}
3747impl Error for AcceptInvitationError {}
3748/// Errors returned by BatchDisableStandards
3749#[derive(Debug, PartialEq)]
3750pub enum BatchDisableStandardsError {
3751    /// <p>Internal server error.</p>
3752    Internal(String),
3753    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
3754    InvalidAccess(String),
3755    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
3756    InvalidInput(String),
3757    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
3758    LimitExceeded(String),
3759}
3760
3761impl BatchDisableStandardsError {
3762    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchDisableStandardsError> {
3763        if let Some(err) = proto::json::Error::parse_rest(&res) {
3764            match err.typ.as_str() {
3765                "InternalException" => {
3766                    return RusotoError::Service(BatchDisableStandardsError::Internal(err.msg))
3767                }
3768                "InvalidAccessException" => {
3769                    return RusotoError::Service(BatchDisableStandardsError::InvalidAccess(err.msg))
3770                }
3771                "InvalidInputException" => {
3772                    return RusotoError::Service(BatchDisableStandardsError::InvalidInput(err.msg))
3773                }
3774                "LimitExceededException" => {
3775                    return RusotoError::Service(BatchDisableStandardsError::LimitExceeded(err.msg))
3776                }
3777                "ValidationException" => return RusotoError::Validation(err.msg),
3778                _ => {}
3779            }
3780        }
3781        RusotoError::Unknown(res)
3782    }
3783}
3784impl fmt::Display for BatchDisableStandardsError {
3785    #[allow(unused_variables)]
3786    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3787        match *self {
3788            BatchDisableStandardsError::Internal(ref cause) => write!(f, "{}", cause),
3789            BatchDisableStandardsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
3790            BatchDisableStandardsError::InvalidInput(ref cause) => write!(f, "{}", cause),
3791            BatchDisableStandardsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3792        }
3793    }
3794}
3795impl Error for BatchDisableStandardsError {}
3796/// Errors returned by BatchEnableStandards
3797#[derive(Debug, PartialEq)]
3798pub enum BatchEnableStandardsError {
3799    /// <p>Internal server error.</p>
3800    Internal(String),
3801    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
3802    InvalidAccess(String),
3803    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
3804    InvalidInput(String),
3805    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
3806    LimitExceeded(String),
3807}
3808
3809impl BatchEnableStandardsError {
3810    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchEnableStandardsError> {
3811        if let Some(err) = proto::json::Error::parse_rest(&res) {
3812            match err.typ.as_str() {
3813                "InternalException" => {
3814                    return RusotoError::Service(BatchEnableStandardsError::Internal(err.msg))
3815                }
3816                "InvalidAccessException" => {
3817                    return RusotoError::Service(BatchEnableStandardsError::InvalidAccess(err.msg))
3818                }
3819                "InvalidInputException" => {
3820                    return RusotoError::Service(BatchEnableStandardsError::InvalidInput(err.msg))
3821                }
3822                "LimitExceededException" => {
3823                    return RusotoError::Service(BatchEnableStandardsError::LimitExceeded(err.msg))
3824                }
3825                "ValidationException" => return RusotoError::Validation(err.msg),
3826                _ => {}
3827            }
3828        }
3829        RusotoError::Unknown(res)
3830    }
3831}
3832impl fmt::Display for BatchEnableStandardsError {
3833    #[allow(unused_variables)]
3834    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3835        match *self {
3836            BatchEnableStandardsError::Internal(ref cause) => write!(f, "{}", cause),
3837            BatchEnableStandardsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
3838            BatchEnableStandardsError::InvalidInput(ref cause) => write!(f, "{}", cause),
3839            BatchEnableStandardsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3840        }
3841    }
3842}
3843impl Error for BatchEnableStandardsError {}
3844/// Errors returned by BatchImportFindings
3845#[derive(Debug, PartialEq)]
3846pub enum BatchImportFindingsError {
3847    /// <p>Internal server error.</p>
3848    Internal(String),
3849    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
3850    InvalidAccess(String),
3851    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
3852    InvalidInput(String),
3853    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
3854    LimitExceeded(String),
3855}
3856
3857impl BatchImportFindingsError {
3858    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchImportFindingsError> {
3859        if let Some(err) = proto::json::Error::parse_rest(&res) {
3860            match err.typ.as_str() {
3861                "InternalException" => {
3862                    return RusotoError::Service(BatchImportFindingsError::Internal(err.msg))
3863                }
3864                "InvalidAccessException" => {
3865                    return RusotoError::Service(BatchImportFindingsError::InvalidAccess(err.msg))
3866                }
3867                "InvalidInputException" => {
3868                    return RusotoError::Service(BatchImportFindingsError::InvalidInput(err.msg))
3869                }
3870                "LimitExceededException" => {
3871                    return RusotoError::Service(BatchImportFindingsError::LimitExceeded(err.msg))
3872                }
3873                "ValidationException" => return RusotoError::Validation(err.msg),
3874                _ => {}
3875            }
3876        }
3877        RusotoError::Unknown(res)
3878    }
3879}
3880impl fmt::Display for BatchImportFindingsError {
3881    #[allow(unused_variables)]
3882    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3883        match *self {
3884            BatchImportFindingsError::Internal(ref cause) => write!(f, "{}", cause),
3885            BatchImportFindingsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
3886            BatchImportFindingsError::InvalidInput(ref cause) => write!(f, "{}", cause),
3887            BatchImportFindingsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3888        }
3889    }
3890}
3891impl Error for BatchImportFindingsError {}
3892/// Errors returned by BatchUpdateFindings
3893#[derive(Debug, PartialEq)]
3894pub enum BatchUpdateFindingsError {
3895    /// <p>Internal server error.</p>
3896    Internal(String),
3897    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
3898    InvalidAccess(String),
3899    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
3900    InvalidInput(String),
3901    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
3902    LimitExceeded(String),
3903}
3904
3905impl BatchUpdateFindingsError {
3906    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchUpdateFindingsError> {
3907        if let Some(err) = proto::json::Error::parse_rest(&res) {
3908            match err.typ.as_str() {
3909                "InternalException" => {
3910                    return RusotoError::Service(BatchUpdateFindingsError::Internal(err.msg))
3911                }
3912                "InvalidAccessException" => {
3913                    return RusotoError::Service(BatchUpdateFindingsError::InvalidAccess(err.msg))
3914                }
3915                "InvalidInputException" => {
3916                    return RusotoError::Service(BatchUpdateFindingsError::InvalidInput(err.msg))
3917                }
3918                "LimitExceededException" => {
3919                    return RusotoError::Service(BatchUpdateFindingsError::LimitExceeded(err.msg))
3920                }
3921                "ValidationException" => return RusotoError::Validation(err.msg),
3922                _ => {}
3923            }
3924        }
3925        RusotoError::Unknown(res)
3926    }
3927}
3928impl fmt::Display for BatchUpdateFindingsError {
3929    #[allow(unused_variables)]
3930    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3931        match *self {
3932            BatchUpdateFindingsError::Internal(ref cause) => write!(f, "{}", cause),
3933            BatchUpdateFindingsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
3934            BatchUpdateFindingsError::InvalidInput(ref cause) => write!(f, "{}", cause),
3935            BatchUpdateFindingsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3936        }
3937    }
3938}
3939impl Error for BatchUpdateFindingsError {}
3940/// Errors returned by CreateActionTarget
3941#[derive(Debug, PartialEq)]
3942pub enum CreateActionTargetError {
3943    /// <p>Internal server error.</p>
3944    Internal(String),
3945    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
3946    InvalidAccess(String),
3947    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
3948    InvalidInput(String),
3949    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
3950    LimitExceeded(String),
3951    /// <p>The resource specified in the request conflicts with an existing resource.</p>
3952    ResourceConflict(String),
3953}
3954
3955impl CreateActionTargetError {
3956    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateActionTargetError> {
3957        if let Some(err) = proto::json::Error::parse_rest(&res) {
3958            match err.typ.as_str() {
3959                "InternalException" => {
3960                    return RusotoError::Service(CreateActionTargetError::Internal(err.msg))
3961                }
3962                "InvalidAccessException" => {
3963                    return RusotoError::Service(CreateActionTargetError::InvalidAccess(err.msg))
3964                }
3965                "InvalidInputException" => {
3966                    return RusotoError::Service(CreateActionTargetError::InvalidInput(err.msg))
3967                }
3968                "LimitExceededException" => {
3969                    return RusotoError::Service(CreateActionTargetError::LimitExceeded(err.msg))
3970                }
3971                "ResourceConflictException" => {
3972                    return RusotoError::Service(CreateActionTargetError::ResourceConflict(err.msg))
3973                }
3974                "ValidationException" => return RusotoError::Validation(err.msg),
3975                _ => {}
3976            }
3977        }
3978        RusotoError::Unknown(res)
3979    }
3980}
3981impl fmt::Display for CreateActionTargetError {
3982    #[allow(unused_variables)]
3983    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3984        match *self {
3985            CreateActionTargetError::Internal(ref cause) => write!(f, "{}", cause),
3986            CreateActionTargetError::InvalidAccess(ref cause) => write!(f, "{}", cause),
3987            CreateActionTargetError::InvalidInput(ref cause) => write!(f, "{}", cause),
3988            CreateActionTargetError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3989            CreateActionTargetError::ResourceConflict(ref cause) => write!(f, "{}", cause),
3990        }
3991    }
3992}
3993impl Error for CreateActionTargetError {}
3994/// Errors returned by CreateInsight
3995#[derive(Debug, PartialEq)]
3996pub enum CreateInsightError {
3997    /// <p>Internal server error.</p>
3998    Internal(String),
3999    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4000    InvalidAccess(String),
4001    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4002    InvalidInput(String),
4003    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4004    LimitExceeded(String),
4005    /// <p>The resource specified in the request conflicts with an existing resource.</p>
4006    ResourceConflict(String),
4007}
4008
4009impl CreateInsightError {
4010    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateInsightError> {
4011        if let Some(err) = proto::json::Error::parse_rest(&res) {
4012            match err.typ.as_str() {
4013                "InternalException" => {
4014                    return RusotoError::Service(CreateInsightError::Internal(err.msg))
4015                }
4016                "InvalidAccessException" => {
4017                    return RusotoError::Service(CreateInsightError::InvalidAccess(err.msg))
4018                }
4019                "InvalidInputException" => {
4020                    return RusotoError::Service(CreateInsightError::InvalidInput(err.msg))
4021                }
4022                "LimitExceededException" => {
4023                    return RusotoError::Service(CreateInsightError::LimitExceeded(err.msg))
4024                }
4025                "ResourceConflictException" => {
4026                    return RusotoError::Service(CreateInsightError::ResourceConflict(err.msg))
4027                }
4028                "ValidationException" => return RusotoError::Validation(err.msg),
4029                _ => {}
4030            }
4031        }
4032        RusotoError::Unknown(res)
4033    }
4034}
4035impl fmt::Display for CreateInsightError {
4036    #[allow(unused_variables)]
4037    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4038        match *self {
4039            CreateInsightError::Internal(ref cause) => write!(f, "{}", cause),
4040            CreateInsightError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4041            CreateInsightError::InvalidInput(ref cause) => write!(f, "{}", cause),
4042            CreateInsightError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4043            CreateInsightError::ResourceConflict(ref cause) => write!(f, "{}", cause),
4044        }
4045    }
4046}
4047impl Error for CreateInsightError {}
4048/// Errors returned by CreateMembers
4049#[derive(Debug, PartialEq)]
4050pub enum CreateMembersError {
4051    /// <p>Internal server error.</p>
4052    Internal(String),
4053    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4054    InvalidAccess(String),
4055    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4056    InvalidInput(String),
4057    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4058    LimitExceeded(String),
4059    /// <p>The resource specified in the request conflicts with an existing resource.</p>
4060    ResourceConflict(String),
4061}
4062
4063impl CreateMembersError {
4064    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateMembersError> {
4065        if let Some(err) = proto::json::Error::parse_rest(&res) {
4066            match err.typ.as_str() {
4067                "InternalException" => {
4068                    return RusotoError::Service(CreateMembersError::Internal(err.msg))
4069                }
4070                "InvalidAccessException" => {
4071                    return RusotoError::Service(CreateMembersError::InvalidAccess(err.msg))
4072                }
4073                "InvalidInputException" => {
4074                    return RusotoError::Service(CreateMembersError::InvalidInput(err.msg))
4075                }
4076                "LimitExceededException" => {
4077                    return RusotoError::Service(CreateMembersError::LimitExceeded(err.msg))
4078                }
4079                "ResourceConflictException" => {
4080                    return RusotoError::Service(CreateMembersError::ResourceConflict(err.msg))
4081                }
4082                "ValidationException" => return RusotoError::Validation(err.msg),
4083                _ => {}
4084            }
4085        }
4086        RusotoError::Unknown(res)
4087    }
4088}
4089impl fmt::Display for CreateMembersError {
4090    #[allow(unused_variables)]
4091    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4092        match *self {
4093            CreateMembersError::Internal(ref cause) => write!(f, "{}", cause),
4094            CreateMembersError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4095            CreateMembersError::InvalidInput(ref cause) => write!(f, "{}", cause),
4096            CreateMembersError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4097            CreateMembersError::ResourceConflict(ref cause) => write!(f, "{}", cause),
4098        }
4099    }
4100}
4101impl Error for CreateMembersError {}
4102/// Errors returned by DeclineInvitations
4103#[derive(Debug, PartialEq)]
4104pub enum DeclineInvitationsError {
4105    /// <p>Internal server error.</p>
4106    Internal(String),
4107    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4108    InvalidAccess(String),
4109    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4110    InvalidInput(String),
4111    /// <p>The request was rejected because we can't find the specified resource.</p>
4112    ResourceNotFound(String),
4113}
4114
4115impl DeclineInvitationsError {
4116    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeclineInvitationsError> {
4117        if let Some(err) = proto::json::Error::parse_rest(&res) {
4118            match err.typ.as_str() {
4119                "InternalException" => {
4120                    return RusotoError::Service(DeclineInvitationsError::Internal(err.msg))
4121                }
4122                "InvalidAccessException" => {
4123                    return RusotoError::Service(DeclineInvitationsError::InvalidAccess(err.msg))
4124                }
4125                "InvalidInputException" => {
4126                    return RusotoError::Service(DeclineInvitationsError::InvalidInput(err.msg))
4127                }
4128                "ResourceNotFoundException" => {
4129                    return RusotoError::Service(DeclineInvitationsError::ResourceNotFound(err.msg))
4130                }
4131                "ValidationException" => return RusotoError::Validation(err.msg),
4132                _ => {}
4133            }
4134        }
4135        RusotoError::Unknown(res)
4136    }
4137}
4138impl fmt::Display for DeclineInvitationsError {
4139    #[allow(unused_variables)]
4140    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4141        match *self {
4142            DeclineInvitationsError::Internal(ref cause) => write!(f, "{}", cause),
4143            DeclineInvitationsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4144            DeclineInvitationsError::InvalidInput(ref cause) => write!(f, "{}", cause),
4145            DeclineInvitationsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4146        }
4147    }
4148}
4149impl Error for DeclineInvitationsError {}
4150/// Errors returned by DeleteActionTarget
4151#[derive(Debug, PartialEq)]
4152pub enum DeleteActionTargetError {
4153    /// <p>Internal server error.</p>
4154    Internal(String),
4155    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4156    InvalidAccess(String),
4157    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4158    InvalidInput(String),
4159    /// <p>The request was rejected because we can't find the specified resource.</p>
4160    ResourceNotFound(String),
4161}
4162
4163impl DeleteActionTargetError {
4164    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteActionTargetError> {
4165        if let Some(err) = proto::json::Error::parse_rest(&res) {
4166            match err.typ.as_str() {
4167                "InternalException" => {
4168                    return RusotoError::Service(DeleteActionTargetError::Internal(err.msg))
4169                }
4170                "InvalidAccessException" => {
4171                    return RusotoError::Service(DeleteActionTargetError::InvalidAccess(err.msg))
4172                }
4173                "InvalidInputException" => {
4174                    return RusotoError::Service(DeleteActionTargetError::InvalidInput(err.msg))
4175                }
4176                "ResourceNotFoundException" => {
4177                    return RusotoError::Service(DeleteActionTargetError::ResourceNotFound(err.msg))
4178                }
4179                "ValidationException" => return RusotoError::Validation(err.msg),
4180                _ => {}
4181            }
4182        }
4183        RusotoError::Unknown(res)
4184    }
4185}
4186impl fmt::Display for DeleteActionTargetError {
4187    #[allow(unused_variables)]
4188    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4189        match *self {
4190            DeleteActionTargetError::Internal(ref cause) => write!(f, "{}", cause),
4191            DeleteActionTargetError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4192            DeleteActionTargetError::InvalidInput(ref cause) => write!(f, "{}", cause),
4193            DeleteActionTargetError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4194        }
4195    }
4196}
4197impl Error for DeleteActionTargetError {}
4198/// Errors returned by DeleteInsight
4199#[derive(Debug, PartialEq)]
4200pub enum DeleteInsightError {
4201    /// <p>Internal server error.</p>
4202    Internal(String),
4203    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4204    InvalidAccess(String),
4205    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4206    InvalidInput(String),
4207    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4208    LimitExceeded(String),
4209    /// <p>The request was rejected because we can't find the specified resource.</p>
4210    ResourceNotFound(String),
4211}
4212
4213impl DeleteInsightError {
4214    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteInsightError> {
4215        if let Some(err) = proto::json::Error::parse_rest(&res) {
4216            match err.typ.as_str() {
4217                "InternalException" => {
4218                    return RusotoError::Service(DeleteInsightError::Internal(err.msg))
4219                }
4220                "InvalidAccessException" => {
4221                    return RusotoError::Service(DeleteInsightError::InvalidAccess(err.msg))
4222                }
4223                "InvalidInputException" => {
4224                    return RusotoError::Service(DeleteInsightError::InvalidInput(err.msg))
4225                }
4226                "LimitExceededException" => {
4227                    return RusotoError::Service(DeleteInsightError::LimitExceeded(err.msg))
4228                }
4229                "ResourceNotFoundException" => {
4230                    return RusotoError::Service(DeleteInsightError::ResourceNotFound(err.msg))
4231                }
4232                "ValidationException" => return RusotoError::Validation(err.msg),
4233                _ => {}
4234            }
4235        }
4236        RusotoError::Unknown(res)
4237    }
4238}
4239impl fmt::Display for DeleteInsightError {
4240    #[allow(unused_variables)]
4241    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4242        match *self {
4243            DeleteInsightError::Internal(ref cause) => write!(f, "{}", cause),
4244            DeleteInsightError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4245            DeleteInsightError::InvalidInput(ref cause) => write!(f, "{}", cause),
4246            DeleteInsightError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4247            DeleteInsightError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4248        }
4249    }
4250}
4251impl Error for DeleteInsightError {}
4252/// Errors returned by DeleteInvitations
4253#[derive(Debug, PartialEq)]
4254pub enum DeleteInvitationsError {
4255    /// <p>Internal server error.</p>
4256    Internal(String),
4257    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4258    InvalidAccess(String),
4259    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4260    InvalidInput(String),
4261    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4262    LimitExceeded(String),
4263    /// <p>The request was rejected because we can't find the specified resource.</p>
4264    ResourceNotFound(String),
4265}
4266
4267impl DeleteInvitationsError {
4268    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteInvitationsError> {
4269        if let Some(err) = proto::json::Error::parse_rest(&res) {
4270            match err.typ.as_str() {
4271                "InternalException" => {
4272                    return RusotoError::Service(DeleteInvitationsError::Internal(err.msg))
4273                }
4274                "InvalidAccessException" => {
4275                    return RusotoError::Service(DeleteInvitationsError::InvalidAccess(err.msg))
4276                }
4277                "InvalidInputException" => {
4278                    return RusotoError::Service(DeleteInvitationsError::InvalidInput(err.msg))
4279                }
4280                "LimitExceededException" => {
4281                    return RusotoError::Service(DeleteInvitationsError::LimitExceeded(err.msg))
4282                }
4283                "ResourceNotFoundException" => {
4284                    return RusotoError::Service(DeleteInvitationsError::ResourceNotFound(err.msg))
4285                }
4286                "ValidationException" => return RusotoError::Validation(err.msg),
4287                _ => {}
4288            }
4289        }
4290        RusotoError::Unknown(res)
4291    }
4292}
4293impl fmt::Display for DeleteInvitationsError {
4294    #[allow(unused_variables)]
4295    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4296        match *self {
4297            DeleteInvitationsError::Internal(ref cause) => write!(f, "{}", cause),
4298            DeleteInvitationsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4299            DeleteInvitationsError::InvalidInput(ref cause) => write!(f, "{}", cause),
4300            DeleteInvitationsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4301            DeleteInvitationsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4302        }
4303    }
4304}
4305impl Error for DeleteInvitationsError {}
4306/// Errors returned by DeleteMembers
4307#[derive(Debug, PartialEq)]
4308pub enum DeleteMembersError {
4309    /// <p>Internal server error.</p>
4310    Internal(String),
4311    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4312    InvalidAccess(String),
4313    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4314    InvalidInput(String),
4315    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4316    LimitExceeded(String),
4317    /// <p>The request was rejected because we can't find the specified resource.</p>
4318    ResourceNotFound(String),
4319}
4320
4321impl DeleteMembersError {
4322    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteMembersError> {
4323        if let Some(err) = proto::json::Error::parse_rest(&res) {
4324            match err.typ.as_str() {
4325                "InternalException" => {
4326                    return RusotoError::Service(DeleteMembersError::Internal(err.msg))
4327                }
4328                "InvalidAccessException" => {
4329                    return RusotoError::Service(DeleteMembersError::InvalidAccess(err.msg))
4330                }
4331                "InvalidInputException" => {
4332                    return RusotoError::Service(DeleteMembersError::InvalidInput(err.msg))
4333                }
4334                "LimitExceededException" => {
4335                    return RusotoError::Service(DeleteMembersError::LimitExceeded(err.msg))
4336                }
4337                "ResourceNotFoundException" => {
4338                    return RusotoError::Service(DeleteMembersError::ResourceNotFound(err.msg))
4339                }
4340                "ValidationException" => return RusotoError::Validation(err.msg),
4341                _ => {}
4342            }
4343        }
4344        RusotoError::Unknown(res)
4345    }
4346}
4347impl fmt::Display for DeleteMembersError {
4348    #[allow(unused_variables)]
4349    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4350        match *self {
4351            DeleteMembersError::Internal(ref cause) => write!(f, "{}", cause),
4352            DeleteMembersError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4353            DeleteMembersError::InvalidInput(ref cause) => write!(f, "{}", cause),
4354            DeleteMembersError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4355            DeleteMembersError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4356        }
4357    }
4358}
4359impl Error for DeleteMembersError {}
4360/// Errors returned by DescribeActionTargets
4361#[derive(Debug, PartialEq)]
4362pub enum DescribeActionTargetsError {
4363    /// <p>Internal server error.</p>
4364    Internal(String),
4365    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4366    InvalidAccess(String),
4367    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4368    InvalidInput(String),
4369    /// <p>The request was rejected because we can't find the specified resource.</p>
4370    ResourceNotFound(String),
4371}
4372
4373impl DescribeActionTargetsError {
4374    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeActionTargetsError> {
4375        if let Some(err) = proto::json::Error::parse_rest(&res) {
4376            match err.typ.as_str() {
4377                "InternalException" => {
4378                    return RusotoError::Service(DescribeActionTargetsError::Internal(err.msg))
4379                }
4380                "InvalidAccessException" => {
4381                    return RusotoError::Service(DescribeActionTargetsError::InvalidAccess(err.msg))
4382                }
4383                "InvalidInputException" => {
4384                    return RusotoError::Service(DescribeActionTargetsError::InvalidInput(err.msg))
4385                }
4386                "ResourceNotFoundException" => {
4387                    return RusotoError::Service(DescribeActionTargetsError::ResourceNotFound(
4388                        err.msg,
4389                    ))
4390                }
4391                "ValidationException" => return RusotoError::Validation(err.msg),
4392                _ => {}
4393            }
4394        }
4395        RusotoError::Unknown(res)
4396    }
4397}
4398impl fmt::Display for DescribeActionTargetsError {
4399    #[allow(unused_variables)]
4400    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4401        match *self {
4402            DescribeActionTargetsError::Internal(ref cause) => write!(f, "{}", cause),
4403            DescribeActionTargetsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4404            DescribeActionTargetsError::InvalidInput(ref cause) => write!(f, "{}", cause),
4405            DescribeActionTargetsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4406        }
4407    }
4408}
4409impl Error for DescribeActionTargetsError {}
4410/// Errors returned by DescribeHub
4411#[derive(Debug, PartialEq)]
4412pub enum DescribeHubError {
4413    /// <p>Internal server error.</p>
4414    Internal(String),
4415    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4416    InvalidAccess(String),
4417    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4418    InvalidInput(String),
4419    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4420    LimitExceeded(String),
4421    /// <p>The request was rejected because we can't find the specified resource.</p>
4422    ResourceNotFound(String),
4423}
4424
4425impl DescribeHubError {
4426    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeHubError> {
4427        if let Some(err) = proto::json::Error::parse_rest(&res) {
4428            match err.typ.as_str() {
4429                "InternalException" => {
4430                    return RusotoError::Service(DescribeHubError::Internal(err.msg))
4431                }
4432                "InvalidAccessException" => {
4433                    return RusotoError::Service(DescribeHubError::InvalidAccess(err.msg))
4434                }
4435                "InvalidInputException" => {
4436                    return RusotoError::Service(DescribeHubError::InvalidInput(err.msg))
4437                }
4438                "LimitExceededException" => {
4439                    return RusotoError::Service(DescribeHubError::LimitExceeded(err.msg))
4440                }
4441                "ResourceNotFoundException" => {
4442                    return RusotoError::Service(DescribeHubError::ResourceNotFound(err.msg))
4443                }
4444                "ValidationException" => return RusotoError::Validation(err.msg),
4445                _ => {}
4446            }
4447        }
4448        RusotoError::Unknown(res)
4449    }
4450}
4451impl fmt::Display for DescribeHubError {
4452    #[allow(unused_variables)]
4453    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4454        match *self {
4455            DescribeHubError::Internal(ref cause) => write!(f, "{}", cause),
4456            DescribeHubError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4457            DescribeHubError::InvalidInput(ref cause) => write!(f, "{}", cause),
4458            DescribeHubError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4459            DescribeHubError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4460        }
4461    }
4462}
4463impl Error for DescribeHubError {}
4464/// Errors returned by DescribeProducts
4465#[derive(Debug, PartialEq)]
4466pub enum DescribeProductsError {
4467    /// <p>Internal server error.</p>
4468    Internal(String),
4469    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4470    InvalidAccess(String),
4471    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4472    InvalidInput(String),
4473    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4474    LimitExceeded(String),
4475}
4476
4477impl DescribeProductsError {
4478    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeProductsError> {
4479        if let Some(err) = proto::json::Error::parse_rest(&res) {
4480            match err.typ.as_str() {
4481                "InternalException" => {
4482                    return RusotoError::Service(DescribeProductsError::Internal(err.msg))
4483                }
4484                "InvalidAccessException" => {
4485                    return RusotoError::Service(DescribeProductsError::InvalidAccess(err.msg))
4486                }
4487                "InvalidInputException" => {
4488                    return RusotoError::Service(DescribeProductsError::InvalidInput(err.msg))
4489                }
4490                "LimitExceededException" => {
4491                    return RusotoError::Service(DescribeProductsError::LimitExceeded(err.msg))
4492                }
4493                "ValidationException" => return RusotoError::Validation(err.msg),
4494                _ => {}
4495            }
4496        }
4497        RusotoError::Unknown(res)
4498    }
4499}
4500impl fmt::Display for DescribeProductsError {
4501    #[allow(unused_variables)]
4502    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4503        match *self {
4504            DescribeProductsError::Internal(ref cause) => write!(f, "{}", cause),
4505            DescribeProductsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4506            DescribeProductsError::InvalidInput(ref cause) => write!(f, "{}", cause),
4507            DescribeProductsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4508        }
4509    }
4510}
4511impl Error for DescribeProductsError {}
4512/// Errors returned by DescribeStandards
4513#[derive(Debug, PartialEq)]
4514pub enum DescribeStandardsError {
4515    /// <p>Internal server error.</p>
4516    Internal(String),
4517    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4518    InvalidAccess(String),
4519    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4520    InvalidInput(String),
4521}
4522
4523impl DescribeStandardsError {
4524    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeStandardsError> {
4525        if let Some(err) = proto::json::Error::parse_rest(&res) {
4526            match err.typ.as_str() {
4527                "InternalException" => {
4528                    return RusotoError::Service(DescribeStandardsError::Internal(err.msg))
4529                }
4530                "InvalidAccessException" => {
4531                    return RusotoError::Service(DescribeStandardsError::InvalidAccess(err.msg))
4532                }
4533                "InvalidInputException" => {
4534                    return RusotoError::Service(DescribeStandardsError::InvalidInput(err.msg))
4535                }
4536                "ValidationException" => return RusotoError::Validation(err.msg),
4537                _ => {}
4538            }
4539        }
4540        RusotoError::Unknown(res)
4541    }
4542}
4543impl fmt::Display for DescribeStandardsError {
4544    #[allow(unused_variables)]
4545    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4546        match *self {
4547            DescribeStandardsError::Internal(ref cause) => write!(f, "{}", cause),
4548            DescribeStandardsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4549            DescribeStandardsError::InvalidInput(ref cause) => write!(f, "{}", cause),
4550        }
4551    }
4552}
4553impl Error for DescribeStandardsError {}
4554/// Errors returned by DescribeStandardsControls
4555#[derive(Debug, PartialEq)]
4556pub enum DescribeStandardsControlsError {
4557    /// <p>Internal server error.</p>
4558    Internal(String),
4559    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4560    InvalidAccess(String),
4561    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4562    InvalidInput(String),
4563    /// <p>The request was rejected because we can't find the specified resource.</p>
4564    ResourceNotFound(String),
4565}
4566
4567impl DescribeStandardsControlsError {
4568    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeStandardsControlsError> {
4569        if let Some(err) = proto::json::Error::parse_rest(&res) {
4570            match err.typ.as_str() {
4571                "InternalException" => {
4572                    return RusotoError::Service(DescribeStandardsControlsError::Internal(err.msg))
4573                }
4574                "InvalidAccessException" => {
4575                    return RusotoError::Service(DescribeStandardsControlsError::InvalidAccess(
4576                        err.msg,
4577                    ))
4578                }
4579                "InvalidInputException" => {
4580                    return RusotoError::Service(DescribeStandardsControlsError::InvalidInput(
4581                        err.msg,
4582                    ))
4583                }
4584                "ResourceNotFoundException" => {
4585                    return RusotoError::Service(DescribeStandardsControlsError::ResourceNotFound(
4586                        err.msg,
4587                    ))
4588                }
4589                "ValidationException" => return RusotoError::Validation(err.msg),
4590                _ => {}
4591            }
4592        }
4593        RusotoError::Unknown(res)
4594    }
4595}
4596impl fmt::Display for DescribeStandardsControlsError {
4597    #[allow(unused_variables)]
4598    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4599        match *self {
4600            DescribeStandardsControlsError::Internal(ref cause) => write!(f, "{}", cause),
4601            DescribeStandardsControlsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4602            DescribeStandardsControlsError::InvalidInput(ref cause) => write!(f, "{}", cause),
4603            DescribeStandardsControlsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4604        }
4605    }
4606}
4607impl Error for DescribeStandardsControlsError {}
4608/// Errors returned by DisableImportFindingsForProduct
4609#[derive(Debug, PartialEq)]
4610pub enum DisableImportFindingsForProductError {
4611    /// <p>Internal server error.</p>
4612    Internal(String),
4613    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4614    InvalidAccess(String),
4615    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4616    InvalidInput(String),
4617    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4618    LimitExceeded(String),
4619    /// <p>The request was rejected because we can't find the specified resource.</p>
4620    ResourceNotFound(String),
4621}
4622
4623impl DisableImportFindingsForProductError {
4624    pub fn from_response(
4625        res: BufferedHttpResponse,
4626    ) -> RusotoError<DisableImportFindingsForProductError> {
4627        if let Some(err) = proto::json::Error::parse_rest(&res) {
4628            match err.typ.as_str() {
4629                "InternalException" => {
4630                    return RusotoError::Service(DisableImportFindingsForProductError::Internal(
4631                        err.msg,
4632                    ))
4633                }
4634                "InvalidAccessException" => {
4635                    return RusotoError::Service(
4636                        DisableImportFindingsForProductError::InvalidAccess(err.msg),
4637                    )
4638                }
4639                "InvalidInputException" => {
4640                    return RusotoError::Service(
4641                        DisableImportFindingsForProductError::InvalidInput(err.msg),
4642                    )
4643                }
4644                "LimitExceededException" => {
4645                    return RusotoError::Service(
4646                        DisableImportFindingsForProductError::LimitExceeded(err.msg),
4647                    )
4648                }
4649                "ResourceNotFoundException" => {
4650                    return RusotoError::Service(
4651                        DisableImportFindingsForProductError::ResourceNotFound(err.msg),
4652                    )
4653                }
4654                "ValidationException" => return RusotoError::Validation(err.msg),
4655                _ => {}
4656            }
4657        }
4658        RusotoError::Unknown(res)
4659    }
4660}
4661impl fmt::Display for DisableImportFindingsForProductError {
4662    #[allow(unused_variables)]
4663    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4664        match *self {
4665            DisableImportFindingsForProductError::Internal(ref cause) => write!(f, "{}", cause),
4666            DisableImportFindingsForProductError::InvalidAccess(ref cause) => {
4667                write!(f, "{}", cause)
4668            }
4669            DisableImportFindingsForProductError::InvalidInput(ref cause) => write!(f, "{}", cause),
4670            DisableImportFindingsForProductError::LimitExceeded(ref cause) => {
4671                write!(f, "{}", cause)
4672            }
4673            DisableImportFindingsForProductError::ResourceNotFound(ref cause) => {
4674                write!(f, "{}", cause)
4675            }
4676        }
4677    }
4678}
4679impl Error for DisableImportFindingsForProductError {}
4680/// Errors returned by DisableSecurityHub
4681#[derive(Debug, PartialEq)]
4682pub enum DisableSecurityHubError {
4683    /// <p>Internal server error.</p>
4684    Internal(String),
4685    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4686    InvalidAccess(String),
4687    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4688    LimitExceeded(String),
4689    /// <p>The request was rejected because we can't find the specified resource.</p>
4690    ResourceNotFound(String),
4691}
4692
4693impl DisableSecurityHubError {
4694    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DisableSecurityHubError> {
4695        if let Some(err) = proto::json::Error::parse_rest(&res) {
4696            match err.typ.as_str() {
4697                "InternalException" => {
4698                    return RusotoError::Service(DisableSecurityHubError::Internal(err.msg))
4699                }
4700                "InvalidAccessException" => {
4701                    return RusotoError::Service(DisableSecurityHubError::InvalidAccess(err.msg))
4702                }
4703                "LimitExceededException" => {
4704                    return RusotoError::Service(DisableSecurityHubError::LimitExceeded(err.msg))
4705                }
4706                "ResourceNotFoundException" => {
4707                    return RusotoError::Service(DisableSecurityHubError::ResourceNotFound(err.msg))
4708                }
4709                "ValidationException" => return RusotoError::Validation(err.msg),
4710                _ => {}
4711            }
4712        }
4713        RusotoError::Unknown(res)
4714    }
4715}
4716impl fmt::Display for DisableSecurityHubError {
4717    #[allow(unused_variables)]
4718    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4719        match *self {
4720            DisableSecurityHubError::Internal(ref cause) => write!(f, "{}", cause),
4721            DisableSecurityHubError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4722            DisableSecurityHubError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4723            DisableSecurityHubError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4724        }
4725    }
4726}
4727impl Error for DisableSecurityHubError {}
4728/// Errors returned by DisassociateFromMasterAccount
4729#[derive(Debug, PartialEq)]
4730pub enum DisassociateFromMasterAccountError {
4731    /// <p>Internal server error.</p>
4732    Internal(String),
4733    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4734    InvalidAccess(String),
4735    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4736    InvalidInput(String),
4737    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4738    LimitExceeded(String),
4739    /// <p>The request was rejected because we can't find the specified resource.</p>
4740    ResourceNotFound(String),
4741}
4742
4743impl DisassociateFromMasterAccountError {
4744    pub fn from_response(
4745        res: BufferedHttpResponse,
4746    ) -> RusotoError<DisassociateFromMasterAccountError> {
4747        if let Some(err) = proto::json::Error::parse_rest(&res) {
4748            match err.typ.as_str() {
4749                "InternalException" => {
4750                    return RusotoError::Service(DisassociateFromMasterAccountError::Internal(
4751                        err.msg,
4752                    ))
4753                }
4754                "InvalidAccessException" => {
4755                    return RusotoError::Service(DisassociateFromMasterAccountError::InvalidAccess(
4756                        err.msg,
4757                    ))
4758                }
4759                "InvalidInputException" => {
4760                    return RusotoError::Service(DisassociateFromMasterAccountError::InvalidInput(
4761                        err.msg,
4762                    ))
4763                }
4764                "LimitExceededException" => {
4765                    return RusotoError::Service(DisassociateFromMasterAccountError::LimitExceeded(
4766                        err.msg,
4767                    ))
4768                }
4769                "ResourceNotFoundException" => {
4770                    return RusotoError::Service(
4771                        DisassociateFromMasterAccountError::ResourceNotFound(err.msg),
4772                    )
4773                }
4774                "ValidationException" => return RusotoError::Validation(err.msg),
4775                _ => {}
4776            }
4777        }
4778        RusotoError::Unknown(res)
4779    }
4780}
4781impl fmt::Display for DisassociateFromMasterAccountError {
4782    #[allow(unused_variables)]
4783    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4784        match *self {
4785            DisassociateFromMasterAccountError::Internal(ref cause) => write!(f, "{}", cause),
4786            DisassociateFromMasterAccountError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4787            DisassociateFromMasterAccountError::InvalidInput(ref cause) => write!(f, "{}", cause),
4788            DisassociateFromMasterAccountError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4789            DisassociateFromMasterAccountError::ResourceNotFound(ref cause) => {
4790                write!(f, "{}", cause)
4791            }
4792        }
4793    }
4794}
4795impl Error for DisassociateFromMasterAccountError {}
4796/// Errors returned by DisassociateMembers
4797#[derive(Debug, PartialEq)]
4798pub enum DisassociateMembersError {
4799    /// <p>Internal server error.</p>
4800    Internal(String),
4801    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4802    InvalidAccess(String),
4803    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4804    InvalidInput(String),
4805    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4806    LimitExceeded(String),
4807    /// <p>The request was rejected because we can't find the specified resource.</p>
4808    ResourceNotFound(String),
4809}
4810
4811impl DisassociateMembersError {
4812    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DisassociateMembersError> {
4813        if let Some(err) = proto::json::Error::parse_rest(&res) {
4814            match err.typ.as_str() {
4815                "InternalException" => {
4816                    return RusotoError::Service(DisassociateMembersError::Internal(err.msg))
4817                }
4818                "InvalidAccessException" => {
4819                    return RusotoError::Service(DisassociateMembersError::InvalidAccess(err.msg))
4820                }
4821                "InvalidInputException" => {
4822                    return RusotoError::Service(DisassociateMembersError::InvalidInput(err.msg))
4823                }
4824                "LimitExceededException" => {
4825                    return RusotoError::Service(DisassociateMembersError::LimitExceeded(err.msg))
4826                }
4827                "ResourceNotFoundException" => {
4828                    return RusotoError::Service(DisassociateMembersError::ResourceNotFound(
4829                        err.msg,
4830                    ))
4831                }
4832                "ValidationException" => return RusotoError::Validation(err.msg),
4833                _ => {}
4834            }
4835        }
4836        RusotoError::Unknown(res)
4837    }
4838}
4839impl fmt::Display for DisassociateMembersError {
4840    #[allow(unused_variables)]
4841    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4842        match *self {
4843            DisassociateMembersError::Internal(ref cause) => write!(f, "{}", cause),
4844            DisassociateMembersError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4845            DisassociateMembersError::InvalidInput(ref cause) => write!(f, "{}", cause),
4846            DisassociateMembersError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4847            DisassociateMembersError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
4848        }
4849    }
4850}
4851impl Error for DisassociateMembersError {}
4852/// Errors returned by EnableImportFindingsForProduct
4853#[derive(Debug, PartialEq)]
4854pub enum EnableImportFindingsForProductError {
4855    /// <p>Internal server error.</p>
4856    Internal(String),
4857    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4858    InvalidAccess(String),
4859    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4860    InvalidInput(String),
4861    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4862    LimitExceeded(String),
4863    /// <p>The resource specified in the request conflicts with an existing resource.</p>
4864    ResourceConflict(String),
4865}
4866
4867impl EnableImportFindingsForProductError {
4868    pub fn from_response(
4869        res: BufferedHttpResponse,
4870    ) -> RusotoError<EnableImportFindingsForProductError> {
4871        if let Some(err) = proto::json::Error::parse_rest(&res) {
4872            match err.typ.as_str() {
4873                "InternalException" => {
4874                    return RusotoError::Service(EnableImportFindingsForProductError::Internal(
4875                        err.msg,
4876                    ))
4877                }
4878                "InvalidAccessException" => {
4879                    return RusotoError::Service(
4880                        EnableImportFindingsForProductError::InvalidAccess(err.msg),
4881                    )
4882                }
4883                "InvalidInputException" => {
4884                    return RusotoError::Service(EnableImportFindingsForProductError::InvalidInput(
4885                        err.msg,
4886                    ))
4887                }
4888                "LimitExceededException" => {
4889                    return RusotoError::Service(
4890                        EnableImportFindingsForProductError::LimitExceeded(err.msg),
4891                    )
4892                }
4893                "ResourceConflictException" => {
4894                    return RusotoError::Service(
4895                        EnableImportFindingsForProductError::ResourceConflict(err.msg),
4896                    )
4897                }
4898                "ValidationException" => return RusotoError::Validation(err.msg),
4899                _ => {}
4900            }
4901        }
4902        RusotoError::Unknown(res)
4903    }
4904}
4905impl fmt::Display for EnableImportFindingsForProductError {
4906    #[allow(unused_variables)]
4907    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4908        match *self {
4909            EnableImportFindingsForProductError::Internal(ref cause) => write!(f, "{}", cause),
4910            EnableImportFindingsForProductError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4911            EnableImportFindingsForProductError::InvalidInput(ref cause) => write!(f, "{}", cause),
4912            EnableImportFindingsForProductError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4913            EnableImportFindingsForProductError::ResourceConflict(ref cause) => {
4914                write!(f, "{}", cause)
4915            }
4916        }
4917    }
4918}
4919impl Error for EnableImportFindingsForProductError {}
4920/// Errors returned by EnableSecurityHub
4921#[derive(Debug, PartialEq)]
4922pub enum EnableSecurityHubError {
4923    /// <p>You don't have permission to perform the action specified in the request.</p>
4924    AccessDenied(String),
4925    /// <p>Internal server error.</p>
4926    Internal(String),
4927    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4928    InvalidAccess(String),
4929    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4930    LimitExceeded(String),
4931    /// <p>The resource specified in the request conflicts with an existing resource.</p>
4932    ResourceConflict(String),
4933}
4934
4935impl EnableSecurityHubError {
4936    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<EnableSecurityHubError> {
4937        if let Some(err) = proto::json::Error::parse_rest(&res) {
4938            match err.typ.as_str() {
4939                "AccessDeniedException" => {
4940                    return RusotoError::Service(EnableSecurityHubError::AccessDenied(err.msg))
4941                }
4942                "InternalException" => {
4943                    return RusotoError::Service(EnableSecurityHubError::Internal(err.msg))
4944                }
4945                "InvalidAccessException" => {
4946                    return RusotoError::Service(EnableSecurityHubError::InvalidAccess(err.msg))
4947                }
4948                "LimitExceededException" => {
4949                    return RusotoError::Service(EnableSecurityHubError::LimitExceeded(err.msg))
4950                }
4951                "ResourceConflictException" => {
4952                    return RusotoError::Service(EnableSecurityHubError::ResourceConflict(err.msg))
4953                }
4954                "ValidationException" => return RusotoError::Validation(err.msg),
4955                _ => {}
4956            }
4957        }
4958        RusotoError::Unknown(res)
4959    }
4960}
4961impl fmt::Display for EnableSecurityHubError {
4962    #[allow(unused_variables)]
4963    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4964        match *self {
4965            EnableSecurityHubError::AccessDenied(ref cause) => write!(f, "{}", cause),
4966            EnableSecurityHubError::Internal(ref cause) => write!(f, "{}", cause),
4967            EnableSecurityHubError::InvalidAccess(ref cause) => write!(f, "{}", cause),
4968            EnableSecurityHubError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4969            EnableSecurityHubError::ResourceConflict(ref cause) => write!(f, "{}", cause),
4970        }
4971    }
4972}
4973impl Error for EnableSecurityHubError {}
4974/// Errors returned by GetEnabledStandards
4975#[derive(Debug, PartialEq)]
4976pub enum GetEnabledStandardsError {
4977    /// <p>Internal server error.</p>
4978    Internal(String),
4979    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
4980    InvalidAccess(String),
4981    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
4982    InvalidInput(String),
4983    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
4984    LimitExceeded(String),
4985}
4986
4987impl GetEnabledStandardsError {
4988    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetEnabledStandardsError> {
4989        if let Some(err) = proto::json::Error::parse_rest(&res) {
4990            match err.typ.as_str() {
4991                "InternalException" => {
4992                    return RusotoError::Service(GetEnabledStandardsError::Internal(err.msg))
4993                }
4994                "InvalidAccessException" => {
4995                    return RusotoError::Service(GetEnabledStandardsError::InvalidAccess(err.msg))
4996                }
4997                "InvalidInputException" => {
4998                    return RusotoError::Service(GetEnabledStandardsError::InvalidInput(err.msg))
4999                }
5000                "LimitExceededException" => {
5001                    return RusotoError::Service(GetEnabledStandardsError::LimitExceeded(err.msg))
5002                }
5003                "ValidationException" => return RusotoError::Validation(err.msg),
5004                _ => {}
5005            }
5006        }
5007        RusotoError::Unknown(res)
5008    }
5009}
5010impl fmt::Display for GetEnabledStandardsError {
5011    #[allow(unused_variables)]
5012    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5013        match *self {
5014            GetEnabledStandardsError::Internal(ref cause) => write!(f, "{}", cause),
5015            GetEnabledStandardsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5016            GetEnabledStandardsError::InvalidInput(ref cause) => write!(f, "{}", cause),
5017            GetEnabledStandardsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5018        }
5019    }
5020}
5021impl Error for GetEnabledStandardsError {}
5022/// Errors returned by GetFindings
5023#[derive(Debug, PartialEq)]
5024pub enum GetFindingsError {
5025    /// <p>Internal server error.</p>
5026    Internal(String),
5027    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5028    InvalidAccess(String),
5029    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5030    InvalidInput(String),
5031    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5032    LimitExceeded(String),
5033}
5034
5035impl GetFindingsError {
5036    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetFindingsError> {
5037        if let Some(err) = proto::json::Error::parse_rest(&res) {
5038            match err.typ.as_str() {
5039                "InternalException" => {
5040                    return RusotoError::Service(GetFindingsError::Internal(err.msg))
5041                }
5042                "InvalidAccessException" => {
5043                    return RusotoError::Service(GetFindingsError::InvalidAccess(err.msg))
5044                }
5045                "InvalidInputException" => {
5046                    return RusotoError::Service(GetFindingsError::InvalidInput(err.msg))
5047                }
5048                "LimitExceededException" => {
5049                    return RusotoError::Service(GetFindingsError::LimitExceeded(err.msg))
5050                }
5051                "ValidationException" => return RusotoError::Validation(err.msg),
5052                _ => {}
5053            }
5054        }
5055        RusotoError::Unknown(res)
5056    }
5057}
5058impl fmt::Display for GetFindingsError {
5059    #[allow(unused_variables)]
5060    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5061        match *self {
5062            GetFindingsError::Internal(ref cause) => write!(f, "{}", cause),
5063            GetFindingsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5064            GetFindingsError::InvalidInput(ref cause) => write!(f, "{}", cause),
5065            GetFindingsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5066        }
5067    }
5068}
5069impl Error for GetFindingsError {}
5070/// Errors returned by GetInsightResults
5071#[derive(Debug, PartialEq)]
5072pub enum GetInsightResultsError {
5073    /// <p>Internal server error.</p>
5074    Internal(String),
5075    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5076    InvalidAccess(String),
5077    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5078    InvalidInput(String),
5079    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5080    LimitExceeded(String),
5081    /// <p>The request was rejected because we can't find the specified resource.</p>
5082    ResourceNotFound(String),
5083}
5084
5085impl GetInsightResultsError {
5086    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetInsightResultsError> {
5087        if let Some(err) = proto::json::Error::parse_rest(&res) {
5088            match err.typ.as_str() {
5089                "InternalException" => {
5090                    return RusotoError::Service(GetInsightResultsError::Internal(err.msg))
5091                }
5092                "InvalidAccessException" => {
5093                    return RusotoError::Service(GetInsightResultsError::InvalidAccess(err.msg))
5094                }
5095                "InvalidInputException" => {
5096                    return RusotoError::Service(GetInsightResultsError::InvalidInput(err.msg))
5097                }
5098                "LimitExceededException" => {
5099                    return RusotoError::Service(GetInsightResultsError::LimitExceeded(err.msg))
5100                }
5101                "ResourceNotFoundException" => {
5102                    return RusotoError::Service(GetInsightResultsError::ResourceNotFound(err.msg))
5103                }
5104                "ValidationException" => return RusotoError::Validation(err.msg),
5105                _ => {}
5106            }
5107        }
5108        RusotoError::Unknown(res)
5109    }
5110}
5111impl fmt::Display for GetInsightResultsError {
5112    #[allow(unused_variables)]
5113    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5114        match *self {
5115            GetInsightResultsError::Internal(ref cause) => write!(f, "{}", cause),
5116            GetInsightResultsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5117            GetInsightResultsError::InvalidInput(ref cause) => write!(f, "{}", cause),
5118            GetInsightResultsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5119            GetInsightResultsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5120        }
5121    }
5122}
5123impl Error for GetInsightResultsError {}
5124/// Errors returned by GetInsights
5125#[derive(Debug, PartialEq)]
5126pub enum GetInsightsError {
5127    /// <p>Internal server error.</p>
5128    Internal(String),
5129    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5130    InvalidAccess(String),
5131    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5132    InvalidInput(String),
5133    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5134    LimitExceeded(String),
5135    /// <p>The request was rejected because we can't find the specified resource.</p>
5136    ResourceNotFound(String),
5137}
5138
5139impl GetInsightsError {
5140    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetInsightsError> {
5141        if let Some(err) = proto::json::Error::parse_rest(&res) {
5142            match err.typ.as_str() {
5143                "InternalException" => {
5144                    return RusotoError::Service(GetInsightsError::Internal(err.msg))
5145                }
5146                "InvalidAccessException" => {
5147                    return RusotoError::Service(GetInsightsError::InvalidAccess(err.msg))
5148                }
5149                "InvalidInputException" => {
5150                    return RusotoError::Service(GetInsightsError::InvalidInput(err.msg))
5151                }
5152                "LimitExceededException" => {
5153                    return RusotoError::Service(GetInsightsError::LimitExceeded(err.msg))
5154                }
5155                "ResourceNotFoundException" => {
5156                    return RusotoError::Service(GetInsightsError::ResourceNotFound(err.msg))
5157                }
5158                "ValidationException" => return RusotoError::Validation(err.msg),
5159                _ => {}
5160            }
5161        }
5162        RusotoError::Unknown(res)
5163    }
5164}
5165impl fmt::Display for GetInsightsError {
5166    #[allow(unused_variables)]
5167    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5168        match *self {
5169            GetInsightsError::Internal(ref cause) => write!(f, "{}", cause),
5170            GetInsightsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5171            GetInsightsError::InvalidInput(ref cause) => write!(f, "{}", cause),
5172            GetInsightsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5173            GetInsightsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5174        }
5175    }
5176}
5177impl Error for GetInsightsError {}
5178/// Errors returned by GetInvitationsCount
5179#[derive(Debug, PartialEq)]
5180pub enum GetInvitationsCountError {
5181    /// <p>Internal server error.</p>
5182    Internal(String),
5183    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5184    InvalidAccess(String),
5185    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5186    InvalidInput(String),
5187    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5188    LimitExceeded(String),
5189}
5190
5191impl GetInvitationsCountError {
5192    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetInvitationsCountError> {
5193        if let Some(err) = proto::json::Error::parse_rest(&res) {
5194            match err.typ.as_str() {
5195                "InternalException" => {
5196                    return RusotoError::Service(GetInvitationsCountError::Internal(err.msg))
5197                }
5198                "InvalidAccessException" => {
5199                    return RusotoError::Service(GetInvitationsCountError::InvalidAccess(err.msg))
5200                }
5201                "InvalidInputException" => {
5202                    return RusotoError::Service(GetInvitationsCountError::InvalidInput(err.msg))
5203                }
5204                "LimitExceededException" => {
5205                    return RusotoError::Service(GetInvitationsCountError::LimitExceeded(err.msg))
5206                }
5207                "ValidationException" => return RusotoError::Validation(err.msg),
5208                _ => {}
5209            }
5210        }
5211        RusotoError::Unknown(res)
5212    }
5213}
5214impl fmt::Display for GetInvitationsCountError {
5215    #[allow(unused_variables)]
5216    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5217        match *self {
5218            GetInvitationsCountError::Internal(ref cause) => write!(f, "{}", cause),
5219            GetInvitationsCountError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5220            GetInvitationsCountError::InvalidInput(ref cause) => write!(f, "{}", cause),
5221            GetInvitationsCountError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5222        }
5223    }
5224}
5225impl Error for GetInvitationsCountError {}
5226/// Errors returned by GetMasterAccount
5227#[derive(Debug, PartialEq)]
5228pub enum GetMasterAccountError {
5229    /// <p>Internal server error.</p>
5230    Internal(String),
5231    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5232    InvalidAccess(String),
5233    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5234    InvalidInput(String),
5235    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5236    LimitExceeded(String),
5237    /// <p>The request was rejected because we can't find the specified resource.</p>
5238    ResourceNotFound(String),
5239}
5240
5241impl GetMasterAccountError {
5242    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetMasterAccountError> {
5243        if let Some(err) = proto::json::Error::parse_rest(&res) {
5244            match err.typ.as_str() {
5245                "InternalException" => {
5246                    return RusotoError::Service(GetMasterAccountError::Internal(err.msg))
5247                }
5248                "InvalidAccessException" => {
5249                    return RusotoError::Service(GetMasterAccountError::InvalidAccess(err.msg))
5250                }
5251                "InvalidInputException" => {
5252                    return RusotoError::Service(GetMasterAccountError::InvalidInput(err.msg))
5253                }
5254                "LimitExceededException" => {
5255                    return RusotoError::Service(GetMasterAccountError::LimitExceeded(err.msg))
5256                }
5257                "ResourceNotFoundException" => {
5258                    return RusotoError::Service(GetMasterAccountError::ResourceNotFound(err.msg))
5259                }
5260                "ValidationException" => return RusotoError::Validation(err.msg),
5261                _ => {}
5262            }
5263        }
5264        RusotoError::Unknown(res)
5265    }
5266}
5267impl fmt::Display for GetMasterAccountError {
5268    #[allow(unused_variables)]
5269    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5270        match *self {
5271            GetMasterAccountError::Internal(ref cause) => write!(f, "{}", cause),
5272            GetMasterAccountError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5273            GetMasterAccountError::InvalidInput(ref cause) => write!(f, "{}", cause),
5274            GetMasterAccountError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5275            GetMasterAccountError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5276        }
5277    }
5278}
5279impl Error for GetMasterAccountError {}
5280/// Errors returned by GetMembers
5281#[derive(Debug, PartialEq)]
5282pub enum GetMembersError {
5283    /// <p>Internal server error.</p>
5284    Internal(String),
5285    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5286    InvalidAccess(String),
5287    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5288    InvalidInput(String),
5289    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5290    LimitExceeded(String),
5291    /// <p>The request was rejected because we can't find the specified resource.</p>
5292    ResourceNotFound(String),
5293}
5294
5295impl GetMembersError {
5296    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetMembersError> {
5297        if let Some(err) = proto::json::Error::parse_rest(&res) {
5298            match err.typ.as_str() {
5299                "InternalException" => {
5300                    return RusotoError::Service(GetMembersError::Internal(err.msg))
5301                }
5302                "InvalidAccessException" => {
5303                    return RusotoError::Service(GetMembersError::InvalidAccess(err.msg))
5304                }
5305                "InvalidInputException" => {
5306                    return RusotoError::Service(GetMembersError::InvalidInput(err.msg))
5307                }
5308                "LimitExceededException" => {
5309                    return RusotoError::Service(GetMembersError::LimitExceeded(err.msg))
5310                }
5311                "ResourceNotFoundException" => {
5312                    return RusotoError::Service(GetMembersError::ResourceNotFound(err.msg))
5313                }
5314                "ValidationException" => return RusotoError::Validation(err.msg),
5315                _ => {}
5316            }
5317        }
5318        RusotoError::Unknown(res)
5319    }
5320}
5321impl fmt::Display for GetMembersError {
5322    #[allow(unused_variables)]
5323    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5324        match *self {
5325            GetMembersError::Internal(ref cause) => write!(f, "{}", cause),
5326            GetMembersError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5327            GetMembersError::InvalidInput(ref cause) => write!(f, "{}", cause),
5328            GetMembersError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5329            GetMembersError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5330        }
5331    }
5332}
5333impl Error for GetMembersError {}
5334/// Errors returned by InviteMembers
5335#[derive(Debug, PartialEq)]
5336pub enum InviteMembersError {
5337    /// <p>Internal server error.</p>
5338    Internal(String),
5339    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5340    InvalidAccess(String),
5341    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5342    InvalidInput(String),
5343    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5344    LimitExceeded(String),
5345    /// <p>The request was rejected because we can't find the specified resource.</p>
5346    ResourceNotFound(String),
5347}
5348
5349impl InviteMembersError {
5350    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<InviteMembersError> {
5351        if let Some(err) = proto::json::Error::parse_rest(&res) {
5352            match err.typ.as_str() {
5353                "InternalException" => {
5354                    return RusotoError::Service(InviteMembersError::Internal(err.msg))
5355                }
5356                "InvalidAccessException" => {
5357                    return RusotoError::Service(InviteMembersError::InvalidAccess(err.msg))
5358                }
5359                "InvalidInputException" => {
5360                    return RusotoError::Service(InviteMembersError::InvalidInput(err.msg))
5361                }
5362                "LimitExceededException" => {
5363                    return RusotoError::Service(InviteMembersError::LimitExceeded(err.msg))
5364                }
5365                "ResourceNotFoundException" => {
5366                    return RusotoError::Service(InviteMembersError::ResourceNotFound(err.msg))
5367                }
5368                "ValidationException" => return RusotoError::Validation(err.msg),
5369                _ => {}
5370            }
5371        }
5372        RusotoError::Unknown(res)
5373    }
5374}
5375impl fmt::Display for InviteMembersError {
5376    #[allow(unused_variables)]
5377    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5378        match *self {
5379            InviteMembersError::Internal(ref cause) => write!(f, "{}", cause),
5380            InviteMembersError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5381            InviteMembersError::InvalidInput(ref cause) => write!(f, "{}", cause),
5382            InviteMembersError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5383            InviteMembersError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5384        }
5385    }
5386}
5387impl Error for InviteMembersError {}
5388/// Errors returned by ListEnabledProductsForImport
5389#[derive(Debug, PartialEq)]
5390pub enum ListEnabledProductsForImportError {
5391    /// <p>Internal server error.</p>
5392    Internal(String),
5393    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5394    InvalidAccess(String),
5395    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5396    LimitExceeded(String),
5397}
5398
5399impl ListEnabledProductsForImportError {
5400    pub fn from_response(
5401        res: BufferedHttpResponse,
5402    ) -> RusotoError<ListEnabledProductsForImportError> {
5403        if let Some(err) = proto::json::Error::parse_rest(&res) {
5404            match err.typ.as_str() {
5405                "InternalException" => {
5406                    return RusotoError::Service(ListEnabledProductsForImportError::Internal(
5407                        err.msg,
5408                    ))
5409                }
5410                "InvalidAccessException" => {
5411                    return RusotoError::Service(ListEnabledProductsForImportError::InvalidAccess(
5412                        err.msg,
5413                    ))
5414                }
5415                "LimitExceededException" => {
5416                    return RusotoError::Service(ListEnabledProductsForImportError::LimitExceeded(
5417                        err.msg,
5418                    ))
5419                }
5420                "ValidationException" => return RusotoError::Validation(err.msg),
5421                _ => {}
5422            }
5423        }
5424        RusotoError::Unknown(res)
5425    }
5426}
5427impl fmt::Display for ListEnabledProductsForImportError {
5428    #[allow(unused_variables)]
5429    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5430        match *self {
5431            ListEnabledProductsForImportError::Internal(ref cause) => write!(f, "{}", cause),
5432            ListEnabledProductsForImportError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5433            ListEnabledProductsForImportError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5434        }
5435    }
5436}
5437impl Error for ListEnabledProductsForImportError {}
5438/// Errors returned by ListInvitations
5439#[derive(Debug, PartialEq)]
5440pub enum ListInvitationsError {
5441    /// <p>Internal server error.</p>
5442    Internal(String),
5443    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5444    InvalidAccess(String),
5445    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5446    InvalidInput(String),
5447    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5448    LimitExceeded(String),
5449}
5450
5451impl ListInvitationsError {
5452    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListInvitationsError> {
5453        if let Some(err) = proto::json::Error::parse_rest(&res) {
5454            match err.typ.as_str() {
5455                "InternalException" => {
5456                    return RusotoError::Service(ListInvitationsError::Internal(err.msg))
5457                }
5458                "InvalidAccessException" => {
5459                    return RusotoError::Service(ListInvitationsError::InvalidAccess(err.msg))
5460                }
5461                "InvalidInputException" => {
5462                    return RusotoError::Service(ListInvitationsError::InvalidInput(err.msg))
5463                }
5464                "LimitExceededException" => {
5465                    return RusotoError::Service(ListInvitationsError::LimitExceeded(err.msg))
5466                }
5467                "ValidationException" => return RusotoError::Validation(err.msg),
5468                _ => {}
5469            }
5470        }
5471        RusotoError::Unknown(res)
5472    }
5473}
5474impl fmt::Display for ListInvitationsError {
5475    #[allow(unused_variables)]
5476    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5477        match *self {
5478            ListInvitationsError::Internal(ref cause) => write!(f, "{}", cause),
5479            ListInvitationsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5480            ListInvitationsError::InvalidInput(ref cause) => write!(f, "{}", cause),
5481            ListInvitationsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5482        }
5483    }
5484}
5485impl Error for ListInvitationsError {}
5486/// Errors returned by ListMembers
5487#[derive(Debug, PartialEq)]
5488pub enum ListMembersError {
5489    /// <p>Internal server error.</p>
5490    Internal(String),
5491    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5492    InvalidAccess(String),
5493    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5494    InvalidInput(String),
5495    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5496    LimitExceeded(String),
5497}
5498
5499impl ListMembersError {
5500    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListMembersError> {
5501        if let Some(err) = proto::json::Error::parse_rest(&res) {
5502            match err.typ.as_str() {
5503                "InternalException" => {
5504                    return RusotoError::Service(ListMembersError::Internal(err.msg))
5505                }
5506                "InvalidAccessException" => {
5507                    return RusotoError::Service(ListMembersError::InvalidAccess(err.msg))
5508                }
5509                "InvalidInputException" => {
5510                    return RusotoError::Service(ListMembersError::InvalidInput(err.msg))
5511                }
5512                "LimitExceededException" => {
5513                    return RusotoError::Service(ListMembersError::LimitExceeded(err.msg))
5514                }
5515                "ValidationException" => return RusotoError::Validation(err.msg),
5516                _ => {}
5517            }
5518        }
5519        RusotoError::Unknown(res)
5520    }
5521}
5522impl fmt::Display for ListMembersError {
5523    #[allow(unused_variables)]
5524    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5525        match *self {
5526            ListMembersError::Internal(ref cause) => write!(f, "{}", cause),
5527            ListMembersError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5528            ListMembersError::InvalidInput(ref cause) => write!(f, "{}", cause),
5529            ListMembersError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5530        }
5531    }
5532}
5533impl Error for ListMembersError {}
5534/// Errors returned by ListTagsForResource
5535#[derive(Debug, PartialEq)]
5536pub enum ListTagsForResourceError {
5537    /// <p>Internal server error.</p>
5538    Internal(String),
5539    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5540    InvalidInput(String),
5541    /// <p>The request was rejected because we can't find the specified resource.</p>
5542    ResourceNotFound(String),
5543}
5544
5545impl ListTagsForResourceError {
5546    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTagsForResourceError> {
5547        if let Some(err) = proto::json::Error::parse_rest(&res) {
5548            match err.typ.as_str() {
5549                "InternalException" => {
5550                    return RusotoError::Service(ListTagsForResourceError::Internal(err.msg))
5551                }
5552                "InvalidInputException" => {
5553                    return RusotoError::Service(ListTagsForResourceError::InvalidInput(err.msg))
5554                }
5555                "ResourceNotFoundException" => {
5556                    return RusotoError::Service(ListTagsForResourceError::ResourceNotFound(
5557                        err.msg,
5558                    ))
5559                }
5560                "ValidationException" => return RusotoError::Validation(err.msg),
5561                _ => {}
5562            }
5563        }
5564        RusotoError::Unknown(res)
5565    }
5566}
5567impl fmt::Display for ListTagsForResourceError {
5568    #[allow(unused_variables)]
5569    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5570        match *self {
5571            ListTagsForResourceError::Internal(ref cause) => write!(f, "{}", cause),
5572            ListTagsForResourceError::InvalidInput(ref cause) => write!(f, "{}", cause),
5573            ListTagsForResourceError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5574        }
5575    }
5576}
5577impl Error for ListTagsForResourceError {}
5578/// Errors returned by TagResource
5579#[derive(Debug, PartialEq)]
5580pub enum TagResourceError {
5581    /// <p>Internal server error.</p>
5582    Internal(String),
5583    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5584    InvalidInput(String),
5585    /// <p>The request was rejected because we can't find the specified resource.</p>
5586    ResourceNotFound(String),
5587}
5588
5589impl TagResourceError {
5590    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagResourceError> {
5591        if let Some(err) = proto::json::Error::parse_rest(&res) {
5592            match err.typ.as_str() {
5593                "InternalException" => {
5594                    return RusotoError::Service(TagResourceError::Internal(err.msg))
5595                }
5596                "InvalidInputException" => {
5597                    return RusotoError::Service(TagResourceError::InvalidInput(err.msg))
5598                }
5599                "ResourceNotFoundException" => {
5600                    return RusotoError::Service(TagResourceError::ResourceNotFound(err.msg))
5601                }
5602                "ValidationException" => return RusotoError::Validation(err.msg),
5603                _ => {}
5604            }
5605        }
5606        RusotoError::Unknown(res)
5607    }
5608}
5609impl fmt::Display for TagResourceError {
5610    #[allow(unused_variables)]
5611    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5612        match *self {
5613            TagResourceError::Internal(ref cause) => write!(f, "{}", cause),
5614            TagResourceError::InvalidInput(ref cause) => write!(f, "{}", cause),
5615            TagResourceError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5616        }
5617    }
5618}
5619impl Error for TagResourceError {}
5620/// Errors returned by UntagResource
5621#[derive(Debug, PartialEq)]
5622pub enum UntagResourceError {
5623    /// <p>Internal server error.</p>
5624    Internal(String),
5625    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5626    InvalidInput(String),
5627    /// <p>The request was rejected because we can't find the specified resource.</p>
5628    ResourceNotFound(String),
5629}
5630
5631impl UntagResourceError {
5632    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagResourceError> {
5633        if let Some(err) = proto::json::Error::parse_rest(&res) {
5634            match err.typ.as_str() {
5635                "InternalException" => {
5636                    return RusotoError::Service(UntagResourceError::Internal(err.msg))
5637                }
5638                "InvalidInputException" => {
5639                    return RusotoError::Service(UntagResourceError::InvalidInput(err.msg))
5640                }
5641                "ResourceNotFoundException" => {
5642                    return RusotoError::Service(UntagResourceError::ResourceNotFound(err.msg))
5643                }
5644                "ValidationException" => return RusotoError::Validation(err.msg),
5645                _ => {}
5646            }
5647        }
5648        RusotoError::Unknown(res)
5649    }
5650}
5651impl fmt::Display for UntagResourceError {
5652    #[allow(unused_variables)]
5653    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5654        match *self {
5655            UntagResourceError::Internal(ref cause) => write!(f, "{}", cause),
5656            UntagResourceError::InvalidInput(ref cause) => write!(f, "{}", cause),
5657            UntagResourceError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5658        }
5659    }
5660}
5661impl Error for UntagResourceError {}
5662/// Errors returned by UpdateActionTarget
5663#[derive(Debug, PartialEq)]
5664pub enum UpdateActionTargetError {
5665    /// <p>Internal server error.</p>
5666    Internal(String),
5667    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5668    InvalidAccess(String),
5669    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5670    InvalidInput(String),
5671    /// <p>The request was rejected because we can't find the specified resource.</p>
5672    ResourceNotFound(String),
5673}
5674
5675impl UpdateActionTargetError {
5676    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateActionTargetError> {
5677        if let Some(err) = proto::json::Error::parse_rest(&res) {
5678            match err.typ.as_str() {
5679                "InternalException" => {
5680                    return RusotoError::Service(UpdateActionTargetError::Internal(err.msg))
5681                }
5682                "InvalidAccessException" => {
5683                    return RusotoError::Service(UpdateActionTargetError::InvalidAccess(err.msg))
5684                }
5685                "InvalidInputException" => {
5686                    return RusotoError::Service(UpdateActionTargetError::InvalidInput(err.msg))
5687                }
5688                "ResourceNotFoundException" => {
5689                    return RusotoError::Service(UpdateActionTargetError::ResourceNotFound(err.msg))
5690                }
5691                "ValidationException" => return RusotoError::Validation(err.msg),
5692                _ => {}
5693            }
5694        }
5695        RusotoError::Unknown(res)
5696    }
5697}
5698impl fmt::Display for UpdateActionTargetError {
5699    #[allow(unused_variables)]
5700    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5701        match *self {
5702            UpdateActionTargetError::Internal(ref cause) => write!(f, "{}", cause),
5703            UpdateActionTargetError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5704            UpdateActionTargetError::InvalidInput(ref cause) => write!(f, "{}", cause),
5705            UpdateActionTargetError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5706        }
5707    }
5708}
5709impl Error for UpdateActionTargetError {}
5710/// Errors returned by UpdateFindings
5711#[derive(Debug, PartialEq)]
5712pub enum UpdateFindingsError {
5713    /// <p>Internal server error.</p>
5714    Internal(String),
5715    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5716    InvalidAccess(String),
5717    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5718    InvalidInput(String),
5719    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5720    LimitExceeded(String),
5721    /// <p>The request was rejected because we can't find the specified resource.</p>
5722    ResourceNotFound(String),
5723}
5724
5725impl UpdateFindingsError {
5726    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateFindingsError> {
5727        if let Some(err) = proto::json::Error::parse_rest(&res) {
5728            match err.typ.as_str() {
5729                "InternalException" => {
5730                    return RusotoError::Service(UpdateFindingsError::Internal(err.msg))
5731                }
5732                "InvalidAccessException" => {
5733                    return RusotoError::Service(UpdateFindingsError::InvalidAccess(err.msg))
5734                }
5735                "InvalidInputException" => {
5736                    return RusotoError::Service(UpdateFindingsError::InvalidInput(err.msg))
5737                }
5738                "LimitExceededException" => {
5739                    return RusotoError::Service(UpdateFindingsError::LimitExceeded(err.msg))
5740                }
5741                "ResourceNotFoundException" => {
5742                    return RusotoError::Service(UpdateFindingsError::ResourceNotFound(err.msg))
5743                }
5744                "ValidationException" => return RusotoError::Validation(err.msg),
5745                _ => {}
5746            }
5747        }
5748        RusotoError::Unknown(res)
5749    }
5750}
5751impl fmt::Display for UpdateFindingsError {
5752    #[allow(unused_variables)]
5753    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5754        match *self {
5755            UpdateFindingsError::Internal(ref cause) => write!(f, "{}", cause),
5756            UpdateFindingsError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5757            UpdateFindingsError::InvalidInput(ref cause) => write!(f, "{}", cause),
5758            UpdateFindingsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5759            UpdateFindingsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5760        }
5761    }
5762}
5763impl Error for UpdateFindingsError {}
5764/// Errors returned by UpdateInsight
5765#[derive(Debug, PartialEq)]
5766pub enum UpdateInsightError {
5767    /// <p>Internal server error.</p>
5768    Internal(String),
5769    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5770    InvalidAccess(String),
5771    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5772    InvalidInput(String),
5773    /// <p>The request was rejected because it attempted to create resources beyond the current AWS account limits. The error code describes the limit exceeded.</p>
5774    LimitExceeded(String),
5775    /// <p>The request was rejected because we can't find the specified resource.</p>
5776    ResourceNotFound(String),
5777}
5778
5779impl UpdateInsightError {
5780    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateInsightError> {
5781        if let Some(err) = proto::json::Error::parse_rest(&res) {
5782            match err.typ.as_str() {
5783                "InternalException" => {
5784                    return RusotoError::Service(UpdateInsightError::Internal(err.msg))
5785                }
5786                "InvalidAccessException" => {
5787                    return RusotoError::Service(UpdateInsightError::InvalidAccess(err.msg))
5788                }
5789                "InvalidInputException" => {
5790                    return RusotoError::Service(UpdateInsightError::InvalidInput(err.msg))
5791                }
5792                "LimitExceededException" => {
5793                    return RusotoError::Service(UpdateInsightError::LimitExceeded(err.msg))
5794                }
5795                "ResourceNotFoundException" => {
5796                    return RusotoError::Service(UpdateInsightError::ResourceNotFound(err.msg))
5797                }
5798                "ValidationException" => return RusotoError::Validation(err.msg),
5799                _ => {}
5800            }
5801        }
5802        RusotoError::Unknown(res)
5803    }
5804}
5805impl fmt::Display for UpdateInsightError {
5806    #[allow(unused_variables)]
5807    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5808        match *self {
5809            UpdateInsightError::Internal(ref cause) => write!(f, "{}", cause),
5810            UpdateInsightError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5811            UpdateInsightError::InvalidInput(ref cause) => write!(f, "{}", cause),
5812            UpdateInsightError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5813            UpdateInsightError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5814        }
5815    }
5816}
5817impl Error for UpdateInsightError {}
5818/// Errors returned by UpdateStandardsControl
5819#[derive(Debug, PartialEq)]
5820pub enum UpdateStandardsControlError {
5821    /// <p>Internal server error.</p>
5822    Internal(String),
5823    /// <p>AWS Security Hub isn't enabled for the account used to make this request.</p>
5824    InvalidAccess(String),
5825    /// <p>The request was rejected because you supplied an invalid or out-of-range value for an input parameter.</p>
5826    InvalidInput(String),
5827    /// <p>The request was rejected because we can't find the specified resource.</p>
5828    ResourceNotFound(String),
5829}
5830
5831impl UpdateStandardsControlError {
5832    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateStandardsControlError> {
5833        if let Some(err) = proto::json::Error::parse_rest(&res) {
5834            match err.typ.as_str() {
5835                "InternalException" => {
5836                    return RusotoError::Service(UpdateStandardsControlError::Internal(err.msg))
5837                }
5838                "InvalidAccessException" => {
5839                    return RusotoError::Service(UpdateStandardsControlError::InvalidAccess(
5840                        err.msg,
5841                    ))
5842                }
5843                "InvalidInputException" => {
5844                    return RusotoError::Service(UpdateStandardsControlError::InvalidInput(err.msg))
5845                }
5846                "ResourceNotFoundException" => {
5847                    return RusotoError::Service(UpdateStandardsControlError::ResourceNotFound(
5848                        err.msg,
5849                    ))
5850                }
5851                "ValidationException" => return RusotoError::Validation(err.msg),
5852                _ => {}
5853            }
5854        }
5855        RusotoError::Unknown(res)
5856    }
5857}
5858impl fmt::Display for UpdateStandardsControlError {
5859    #[allow(unused_variables)]
5860    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5861        match *self {
5862            UpdateStandardsControlError::Internal(ref cause) => write!(f, "{}", cause),
5863            UpdateStandardsControlError::InvalidAccess(ref cause) => write!(f, "{}", cause),
5864            UpdateStandardsControlError::InvalidInput(ref cause) => write!(f, "{}", cause),
5865            UpdateStandardsControlError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
5866        }
5867    }
5868}
5869impl Error for UpdateStandardsControlError {}
5870/// Trait representing the capabilities of the AWS SecurityHub API. AWS SecurityHub clients implement this trait.
5871#[async_trait]
5872pub trait SecurityHub {
5873    /// <p>Accepts the invitation to be a member account and be monitored by the Security Hub master account that the invitation was sent from.</p> <p>When the member account accepts the invitation, permission is granted to the master account to view findings generated in the member account.</p>
5874    async fn accept_invitation(
5875        &self,
5876        input: AcceptInvitationRequest,
5877    ) -> Result<AcceptInvitationResponse, RusotoError<AcceptInvitationError>>;
5878
5879    /// <p>Disables the standards specified by the provided <code>StandardsSubscriptionArns</code>.</p> <p>For more information, see <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html">Security Standards</a> section of the <i>AWS Security Hub User Guide</i>.</p>
5880    async fn batch_disable_standards(
5881        &self,
5882        input: BatchDisableStandardsRequest,
5883    ) -> Result<BatchDisableStandardsResponse, RusotoError<BatchDisableStandardsError>>;
5884
5885    /// <p>Enables the standards specified by the provided <code>StandardsArn</code>. To obtain the ARN for a standard, use the <code> <a>DescribeStandards</a> </code> operation.</p> <p>For more information, see the <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html">Security Standards</a> section of the <i>AWS Security Hub User Guide</i>.</p>
5886    async fn batch_enable_standards(
5887        &self,
5888        input: BatchEnableStandardsRequest,
5889    ) -> Result<BatchEnableStandardsResponse, RusotoError<BatchEnableStandardsError>>;
5890
5891    /// <p><p>Imports security findings generated from an integrated third-party product into Security Hub. This action is requested by the integrated product to import its findings into Security Hub.</p> <p>The maximum allowed size for a finding is 240 Kb. An error is returned for any finding larger than 240 Kb.</p> <p>After a finding is created, <code>BatchImportFindings</code> cannot be used to update the following finding fields and objects, which Security Hub customers use to manage their investigation workflow.</p> <ul> <li> <p> <code>Confidence</code> </p> </li> <li> <p> <code>Criticality</code> </p> </li> <li> <p> <code>Note</code> </p> </li> <li> <p> <code>RelatedFindings</code> </p> </li> <li> <p> <code>Severity</code> </p> </li> <li> <p> <code>Types</code> </p> </li> <li> <p> <code>UserDefinedFields</code> </p> </li> <li> <p> <code>VerificationState</code> </p> </li> <li> <p> <code>Workflow</code> </p> </li> </ul></p>
5892    async fn batch_import_findings(
5893        &self,
5894        input: BatchImportFindingsRequest,
5895    ) -> Result<BatchImportFindingsResponse, RusotoError<BatchImportFindingsError>>;
5896
5897    /// <p>Used by Security Hub customers to update information about their investigation into a finding. Requested by master accounts or member accounts. Master accounts can update findings for their account and their member accounts. Member accounts can update findings for their account.</p> <p>Updates from <code>BatchUpdateFindings</code> do not affect the value of <code>UpdatedAt</code> for a finding.</p> <p>Master accounts can use <code>BatchUpdateFindings</code> to update the following finding fields and objects.</p> <ul> <li> <p> <code>Confidence</code> </p> </li> <li> <p> <code>Criticality</code> </p> </li> <li> <p> <code>Note</code> </p> </li> <li> <p> <code>RelatedFindings</code> </p> </li> <li> <p> <code>Severity</code> </p> </li> <li> <p> <code>Types</code> </p> </li> <li> <p> <code>UserDefinedFields</code> </p> </li> <li> <p> <code>VerificationState</code> </p> </li> <li> <p> <code>Workflow</code> </p> </li> </ul> <p>Member accounts can only use <code>BatchUpdateFindings</code> to update the Note object.</p>
5898    async fn batch_update_findings(
5899        &self,
5900        input: BatchUpdateFindingsRequest,
5901    ) -> Result<BatchUpdateFindingsResponse, RusotoError<BatchUpdateFindingsError>>;
5902
5903    /// <p>Creates a custom action target in Security Hub.</p> <p>You can use custom actions on findings and insights in Security Hub to trigger target actions in Amazon CloudWatch Events.</p>
5904    async fn create_action_target(
5905        &self,
5906        input: CreateActionTargetRequest,
5907    ) -> Result<CreateActionTargetResponse, RusotoError<CreateActionTargetError>>;
5908
5909    /// <p>Creates a custom insight in Security Hub. An insight is a consolidation of findings that relate to a security issue that requires attention or remediation.</p> <p>To group the related findings in the insight, use the <code>GroupByAttribute</code>.</p>
5910    async fn create_insight(
5911        &self,
5912        input: CreateInsightRequest,
5913    ) -> Result<CreateInsightResponse, RusotoError<CreateInsightError>>;
5914
5915    /// <p>Creates a member association in Security Hub between the specified accounts and the account used to make the request, which is the master account. To successfully create a member, you must use this action from an account that already has Security Hub enabled. To enable Security Hub, you can use the <code> <a>EnableSecurityHub</a> </code> operation.</p> <p>After you use <code>CreateMembers</code> to create member account associations in Security Hub, you must use the <code> <a>InviteMembers</a> </code> operation to invite the accounts to enable Security Hub and become member accounts in Security Hub.</p> <p>If the account owner accepts the invitation, the account becomes a member account in Security Hub. A permissions policy is added that permits the master account to view the findings generated in the member account. When Security Hub is enabled in the invited account, findings start to be sent to both the member and master accounts.</p> <p>To remove the association between the master and member accounts, use the <code> <a>DisassociateFromMasterAccount</a> </code> or <code> <a>DisassociateMembers</a> </code> operation.</p>
5916    async fn create_members(
5917        &self,
5918        input: CreateMembersRequest,
5919    ) -> Result<CreateMembersResponse, RusotoError<CreateMembersError>>;
5920
5921    /// <p>Declines invitations to become a member account.</p>
5922    async fn decline_invitations(
5923        &self,
5924        input: DeclineInvitationsRequest,
5925    ) -> Result<DeclineInvitationsResponse, RusotoError<DeclineInvitationsError>>;
5926
5927    /// <p>Deletes a custom action target from Security Hub.</p> <p>Deleting a custom action target does not affect any findings or insights that were already sent to Amazon CloudWatch Events using the custom action.</p>
5928    async fn delete_action_target(
5929        &self,
5930        input: DeleteActionTargetRequest,
5931    ) -> Result<DeleteActionTargetResponse, RusotoError<DeleteActionTargetError>>;
5932
5933    /// <p>Deletes the insight specified by the <code>InsightArn</code>.</p>
5934    async fn delete_insight(
5935        &self,
5936        input: DeleteInsightRequest,
5937    ) -> Result<DeleteInsightResponse, RusotoError<DeleteInsightError>>;
5938
5939    /// <p>Deletes invitations received by the AWS account to become a member account.</p>
5940    async fn delete_invitations(
5941        &self,
5942        input: DeleteInvitationsRequest,
5943    ) -> Result<DeleteInvitationsResponse, RusotoError<DeleteInvitationsError>>;
5944
5945    /// <p>Deletes the specified member accounts from Security Hub.</p>
5946    async fn delete_members(
5947        &self,
5948        input: DeleteMembersRequest,
5949    ) -> Result<DeleteMembersResponse, RusotoError<DeleteMembersError>>;
5950
5951    /// <p>Returns a list of the custom action targets in Security Hub in your account.</p>
5952    async fn describe_action_targets(
5953        &self,
5954        input: DescribeActionTargetsRequest,
5955    ) -> Result<DescribeActionTargetsResponse, RusotoError<DescribeActionTargetsError>>;
5956
5957    /// <p>Returns details about the Hub resource in your account, including the <code>HubArn</code> and the time when you enabled Security Hub.</p>
5958    async fn describe_hub(
5959        &self,
5960        input: DescribeHubRequest,
5961    ) -> Result<DescribeHubResponse, RusotoError<DescribeHubError>>;
5962
5963    /// <p>Returns information about the available products that you can subscribe to and integrate with Security Hub in order to consolidate findings.</p>
5964    async fn describe_products(
5965        &self,
5966        input: DescribeProductsRequest,
5967    ) -> Result<DescribeProductsResponse, RusotoError<DescribeProductsError>>;
5968
5969    /// <p>Returns a list of the available standards in Security Hub.</p> <p>For each standard, the results include the standard ARN, the name, and a description. </p>
5970    async fn describe_standards(
5971        &self,
5972        input: DescribeStandardsRequest,
5973    ) -> Result<DescribeStandardsResponse, RusotoError<DescribeStandardsError>>;
5974
5975    /// <p>Returns a list of security standards controls.</p> <p>For each control, the results include information about whether it is currently enabled, the severity, and a link to remediation information.</p>
5976    async fn describe_standards_controls(
5977        &self,
5978        input: DescribeStandardsControlsRequest,
5979    ) -> Result<DescribeStandardsControlsResponse, RusotoError<DescribeStandardsControlsError>>;
5980
5981    /// <p>Disables the integration of the specified product with Security Hub. After the integration is disabled, findings from that product are no longer sent to Security Hub.</p>
5982    async fn disable_import_findings_for_product(
5983        &self,
5984        input: DisableImportFindingsForProductRequest,
5985    ) -> Result<
5986        DisableImportFindingsForProductResponse,
5987        RusotoError<DisableImportFindingsForProductError>,
5988    >;
5989
5990    /// <p>Disables Security Hub in your account only in the current Region. To disable Security Hub in all Regions, you must submit one request per Region where you have enabled Security Hub.</p> <p>When you disable Security Hub for a master account, it doesn't disable Security Hub for any associated member accounts.</p> <p>When you disable Security Hub, your existing findings and insights and any Security Hub configuration settings are deleted after 90 days and cannot be recovered. Any standards that were enabled are disabled, and your master and member account associations are removed.</p> <p>If you want to save your existing findings, you must export them before you disable Security Hub.</p>
5991    async fn disable_security_hub(
5992        &self,
5993    ) -> Result<DisableSecurityHubResponse, RusotoError<DisableSecurityHubError>>;
5994
5995    /// <p>Disassociates the current Security Hub member account from the associated master account.</p>
5996    async fn disassociate_from_master_account(
5997        &self,
5998    ) -> Result<
5999        DisassociateFromMasterAccountResponse,
6000        RusotoError<DisassociateFromMasterAccountError>,
6001    >;
6002
6003    /// <p>Disassociates the specified member accounts from the associated master account.</p>
6004    async fn disassociate_members(
6005        &self,
6006        input: DisassociateMembersRequest,
6007    ) -> Result<DisassociateMembersResponse, RusotoError<DisassociateMembersError>>;
6008
6009    /// <p>Enables the integration of a partner product with Security Hub. Integrated products send findings to Security Hub.</p> <p>When you enable a product integration, a permissions policy that grants permission for the product to send findings to Security Hub is applied.</p>
6010    async fn enable_import_findings_for_product(
6011        &self,
6012        input: EnableImportFindingsForProductRequest,
6013    ) -> Result<
6014        EnableImportFindingsForProductResponse,
6015        RusotoError<EnableImportFindingsForProductError>,
6016    >;
6017
6018    /// <p>Enables Security Hub for your account in the current Region or the Region you specify in the request.</p> <p>When you enable Security Hub, you grant to Security Hub the permissions necessary to gather findings from other services that are integrated with Security Hub.</p> <p>When you use the <code>EnableSecurityHub</code> operation to enable Security Hub, you also automatically enable the following standards.</p> <ul> <li> <p>CIS AWS Foundations</p> </li> <li> <p>AWS Foundational Security Best Practices</p> </li> </ul> <p>You do not enable the Payment Card Industry Data Security Standard (PCI DSS) standard. </p> <p>To not enable the automatically enabled standards, set <code>EnableDefaultStandards</code> to <code>false</code>.</p> <p>After you enable Security Hub, to enable a standard, use the <code> <a>BatchEnableStandards</a> </code> operation. To disable a standard, use the <code> <a>BatchDisableStandards</a> </code> operation.</p> <p>To learn more, see <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html">Setting Up AWS Security Hub</a> in the <i>AWS Security Hub User Guide</i>.</p>
6019    async fn enable_security_hub(
6020        &self,
6021        input: EnableSecurityHubRequest,
6022    ) -> Result<EnableSecurityHubResponse, RusotoError<EnableSecurityHubError>>;
6023
6024    /// <p>Returns a list of the standards that are currently enabled.</p>
6025    async fn get_enabled_standards(
6026        &self,
6027        input: GetEnabledStandardsRequest,
6028    ) -> Result<GetEnabledStandardsResponse, RusotoError<GetEnabledStandardsError>>;
6029
6030    /// <p>Returns a list of findings that match the specified criteria.</p>
6031    async fn get_findings(
6032        &self,
6033        input: GetFindingsRequest,
6034    ) -> Result<GetFindingsResponse, RusotoError<GetFindingsError>>;
6035
6036    /// <p>Lists the results of the Security Hub insight specified by the insight ARN.</p>
6037    async fn get_insight_results(
6038        &self,
6039        input: GetInsightResultsRequest,
6040    ) -> Result<GetInsightResultsResponse, RusotoError<GetInsightResultsError>>;
6041
6042    /// <p>Lists and describes insights for the specified insight ARNs.</p>
6043    async fn get_insights(
6044        &self,
6045        input: GetInsightsRequest,
6046    ) -> Result<GetInsightsResponse, RusotoError<GetInsightsError>>;
6047
6048    /// <p>Returns the count of all Security Hub membership invitations that were sent to the current member account, not including the currently accepted invitation. </p>
6049    async fn get_invitations_count(
6050        &self,
6051    ) -> Result<GetInvitationsCountResponse, RusotoError<GetInvitationsCountError>>;
6052
6053    /// <p>Provides the details for the Security Hub master account for the current member account. </p>
6054    async fn get_master_account(
6055        &self,
6056    ) -> Result<GetMasterAccountResponse, RusotoError<GetMasterAccountError>>;
6057
6058    /// <p>Returns the details for the Security Hub member accounts for the specified account IDs.</p>
6059    async fn get_members(
6060        &self,
6061        input: GetMembersRequest,
6062    ) -> Result<GetMembersResponse, RusotoError<GetMembersError>>;
6063
6064    /// <p>Invites other AWS accounts to become member accounts for the Security Hub master account that the invitation is sent from.</p> <p>Before you can use this action to invite a member, you must first use the <code> <a>CreateMembers</a> </code> action to create the member account in Security Hub.</p> <p>When the account owner accepts the invitation to become a member account and enables Security Hub, the master account can view the findings generated from the member account.</p>
6065    async fn invite_members(
6066        &self,
6067        input: InviteMembersRequest,
6068    ) -> Result<InviteMembersResponse, RusotoError<InviteMembersError>>;
6069
6070    /// <p>Lists all findings-generating solutions (products) that you are subscribed to receive findings from in Security Hub.</p>
6071    async fn list_enabled_products_for_import(
6072        &self,
6073        input: ListEnabledProductsForImportRequest,
6074    ) -> Result<ListEnabledProductsForImportResponse, RusotoError<ListEnabledProductsForImportError>>;
6075
6076    /// <p>Lists all Security Hub membership invitations that were sent to the current AWS account. </p>
6077    async fn list_invitations(
6078        &self,
6079        input: ListInvitationsRequest,
6080    ) -> Result<ListInvitationsResponse, RusotoError<ListInvitationsError>>;
6081
6082    /// <p>Lists details about all member accounts for the current Security Hub master account.</p>
6083    async fn list_members(
6084        &self,
6085        input: ListMembersRequest,
6086    ) -> Result<ListMembersResponse, RusotoError<ListMembersError>>;
6087
6088    /// <p>Returns a list of tags associated with a resource.</p>
6089    async fn list_tags_for_resource(
6090        &self,
6091        input: ListTagsForResourceRequest,
6092    ) -> Result<ListTagsForResourceResponse, RusotoError<ListTagsForResourceError>>;
6093
6094    /// <p>Adds one or more tags to a resource.</p>
6095    async fn tag_resource(
6096        &self,
6097        input: TagResourceRequest,
6098    ) -> Result<TagResourceResponse, RusotoError<TagResourceError>>;
6099
6100    /// <p>Removes one or more tags from a resource.</p>
6101    async fn untag_resource(
6102        &self,
6103        input: UntagResourceRequest,
6104    ) -> Result<UntagResourceResponse, RusotoError<UntagResourceError>>;
6105
6106    /// <p>Updates the name and description of a custom action target in Security Hub.</p>
6107    async fn update_action_target(
6108        &self,
6109        input: UpdateActionTargetRequest,
6110    ) -> Result<UpdateActionTargetResponse, RusotoError<UpdateActionTargetError>>;
6111
6112    /// <p> <code>UpdateFindings</code> is deprecated. Instead of <code>UpdateFindings</code>, use <code>BatchUpdateFindings</code>.</p> <p>Updates the <code>Note</code> and <code>RecordState</code> of the Security Hub-aggregated findings that the filter attributes specify. Any member account that can view the finding also sees the update to the finding.</p>
6113    async fn update_findings(
6114        &self,
6115        input: UpdateFindingsRequest,
6116    ) -> Result<UpdateFindingsResponse, RusotoError<UpdateFindingsError>>;
6117
6118    /// <p>Updates the Security Hub insight identified by the specified insight ARN.</p>
6119    async fn update_insight(
6120        &self,
6121        input: UpdateInsightRequest,
6122    ) -> Result<UpdateInsightResponse, RusotoError<UpdateInsightError>>;
6123
6124    /// <p>Used to control whether an individual security standard control is enabled or disabled.</p>
6125    async fn update_standards_control(
6126        &self,
6127        input: UpdateStandardsControlRequest,
6128    ) -> Result<UpdateStandardsControlResponse, RusotoError<UpdateStandardsControlError>>;
6129}
6130/// A client for the AWS SecurityHub API.
6131#[derive(Clone)]
6132pub struct SecurityHubClient {
6133    client: Client,
6134    region: region::Region,
6135}
6136
6137impl SecurityHubClient {
6138    /// Creates a client backed by the default tokio event loop.
6139    ///
6140    /// The client will use the default credentials provider and tls client.
6141    pub fn new(region: region::Region) -> SecurityHubClient {
6142        SecurityHubClient {
6143            client: Client::shared(),
6144            region,
6145        }
6146    }
6147
6148    pub fn new_with<P, D>(
6149        request_dispatcher: D,
6150        credentials_provider: P,
6151        region: region::Region,
6152    ) -> SecurityHubClient
6153    where
6154        P: ProvideAwsCredentials + Send + Sync + 'static,
6155        D: DispatchSignedRequest + Send + Sync + 'static,
6156    {
6157        SecurityHubClient {
6158            client: Client::new_with(credentials_provider, request_dispatcher),
6159            region,
6160        }
6161    }
6162
6163    pub fn new_with_client(client: Client, region: region::Region) -> SecurityHubClient {
6164        SecurityHubClient { client, region }
6165    }
6166}
6167
6168#[async_trait]
6169impl SecurityHub for SecurityHubClient {
6170    /// <p>Accepts the invitation to be a member account and be monitored by the Security Hub master account that the invitation was sent from.</p> <p>When the member account accepts the invitation, permission is granted to the master account to view findings generated in the member account.</p>
6171    #[allow(unused_mut)]
6172    async fn accept_invitation(
6173        &self,
6174        input: AcceptInvitationRequest,
6175    ) -> Result<AcceptInvitationResponse, RusotoError<AcceptInvitationError>> {
6176        let request_uri = "/master";
6177
6178        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6179        request.set_content_type("application/x-amz-json-1.1".to_owned());
6180
6181        let encoded = Some(serde_json::to_vec(&input).unwrap());
6182        request.set_payload(encoded);
6183
6184        let mut response = self
6185            .client
6186            .sign_and_dispatch(request)
6187            .await
6188            .map_err(RusotoError::from)?;
6189        if response.status.is_success() {
6190            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6191            let result = proto::json::ResponsePayload::new(&response)
6192                .deserialize::<AcceptInvitationResponse, _>()?;
6193
6194            Ok(result)
6195        } else {
6196            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6197            Err(AcceptInvitationError::from_response(response))
6198        }
6199    }
6200
6201    /// <p>Disables the standards specified by the provided <code>StandardsSubscriptionArns</code>.</p> <p>For more information, see <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html">Security Standards</a> section of the <i>AWS Security Hub User Guide</i>.</p>
6202    #[allow(unused_mut)]
6203    async fn batch_disable_standards(
6204        &self,
6205        input: BatchDisableStandardsRequest,
6206    ) -> Result<BatchDisableStandardsResponse, RusotoError<BatchDisableStandardsError>> {
6207        let request_uri = "/standards/deregister";
6208
6209        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6210        request.set_content_type("application/x-amz-json-1.1".to_owned());
6211
6212        let encoded = Some(serde_json::to_vec(&input).unwrap());
6213        request.set_payload(encoded);
6214
6215        let mut response = self
6216            .client
6217            .sign_and_dispatch(request)
6218            .await
6219            .map_err(RusotoError::from)?;
6220        if response.status.is_success() {
6221            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6222            let result = proto::json::ResponsePayload::new(&response)
6223                .deserialize::<BatchDisableStandardsResponse, _>()?;
6224
6225            Ok(result)
6226        } else {
6227            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6228            Err(BatchDisableStandardsError::from_response(response))
6229        }
6230    }
6231
6232    /// <p>Enables the standards specified by the provided <code>StandardsArn</code>. To obtain the ARN for a standard, use the <code> <a>DescribeStandards</a> </code> operation.</p> <p>For more information, see the <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html">Security Standards</a> section of the <i>AWS Security Hub User Guide</i>.</p>
6233    #[allow(unused_mut)]
6234    async fn batch_enable_standards(
6235        &self,
6236        input: BatchEnableStandardsRequest,
6237    ) -> Result<BatchEnableStandardsResponse, RusotoError<BatchEnableStandardsError>> {
6238        let request_uri = "/standards/register";
6239
6240        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6241        request.set_content_type("application/x-amz-json-1.1".to_owned());
6242
6243        let encoded = Some(serde_json::to_vec(&input).unwrap());
6244        request.set_payload(encoded);
6245
6246        let mut response = self
6247            .client
6248            .sign_and_dispatch(request)
6249            .await
6250            .map_err(RusotoError::from)?;
6251        if response.status.is_success() {
6252            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6253            let result = proto::json::ResponsePayload::new(&response)
6254                .deserialize::<BatchEnableStandardsResponse, _>()?;
6255
6256            Ok(result)
6257        } else {
6258            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6259            Err(BatchEnableStandardsError::from_response(response))
6260        }
6261    }
6262
6263    /// <p><p>Imports security findings generated from an integrated third-party product into Security Hub. This action is requested by the integrated product to import its findings into Security Hub.</p> <p>The maximum allowed size for a finding is 240 Kb. An error is returned for any finding larger than 240 Kb.</p> <p>After a finding is created, <code>BatchImportFindings</code> cannot be used to update the following finding fields and objects, which Security Hub customers use to manage their investigation workflow.</p> <ul> <li> <p> <code>Confidence</code> </p> </li> <li> <p> <code>Criticality</code> </p> </li> <li> <p> <code>Note</code> </p> </li> <li> <p> <code>RelatedFindings</code> </p> </li> <li> <p> <code>Severity</code> </p> </li> <li> <p> <code>Types</code> </p> </li> <li> <p> <code>UserDefinedFields</code> </p> </li> <li> <p> <code>VerificationState</code> </p> </li> <li> <p> <code>Workflow</code> </p> </li> </ul></p>
6264    #[allow(unused_mut)]
6265    async fn batch_import_findings(
6266        &self,
6267        input: BatchImportFindingsRequest,
6268    ) -> Result<BatchImportFindingsResponse, RusotoError<BatchImportFindingsError>> {
6269        let request_uri = "/findings/import";
6270
6271        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6272        request.set_content_type("application/x-amz-json-1.1".to_owned());
6273
6274        let encoded = Some(serde_json::to_vec(&input).unwrap());
6275        request.set_payload(encoded);
6276
6277        let mut response = self
6278            .client
6279            .sign_and_dispatch(request)
6280            .await
6281            .map_err(RusotoError::from)?;
6282        if response.status.is_success() {
6283            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6284            let result = proto::json::ResponsePayload::new(&response)
6285                .deserialize::<BatchImportFindingsResponse, _>()?;
6286
6287            Ok(result)
6288        } else {
6289            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6290            Err(BatchImportFindingsError::from_response(response))
6291        }
6292    }
6293
6294    /// <p>Used by Security Hub customers to update information about their investigation into a finding. Requested by master accounts or member accounts. Master accounts can update findings for their account and their member accounts. Member accounts can update findings for their account.</p> <p>Updates from <code>BatchUpdateFindings</code> do not affect the value of <code>UpdatedAt</code> for a finding.</p> <p>Master accounts can use <code>BatchUpdateFindings</code> to update the following finding fields and objects.</p> <ul> <li> <p> <code>Confidence</code> </p> </li> <li> <p> <code>Criticality</code> </p> </li> <li> <p> <code>Note</code> </p> </li> <li> <p> <code>RelatedFindings</code> </p> </li> <li> <p> <code>Severity</code> </p> </li> <li> <p> <code>Types</code> </p> </li> <li> <p> <code>UserDefinedFields</code> </p> </li> <li> <p> <code>VerificationState</code> </p> </li> <li> <p> <code>Workflow</code> </p> </li> </ul> <p>Member accounts can only use <code>BatchUpdateFindings</code> to update the Note object.</p>
6295    #[allow(unused_mut)]
6296    async fn batch_update_findings(
6297        &self,
6298        input: BatchUpdateFindingsRequest,
6299    ) -> Result<BatchUpdateFindingsResponse, RusotoError<BatchUpdateFindingsError>> {
6300        let request_uri = "/findings/batchupdate";
6301
6302        let mut request = SignedRequest::new("PATCH", "securityhub", &self.region, &request_uri);
6303        request.set_content_type("application/x-amz-json-1.1".to_owned());
6304
6305        let encoded = Some(serde_json::to_vec(&input).unwrap());
6306        request.set_payload(encoded);
6307
6308        let mut response = self
6309            .client
6310            .sign_and_dispatch(request)
6311            .await
6312            .map_err(RusotoError::from)?;
6313        if response.status.is_success() {
6314            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6315            let result = proto::json::ResponsePayload::new(&response)
6316                .deserialize::<BatchUpdateFindingsResponse, _>()?;
6317
6318            Ok(result)
6319        } else {
6320            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6321            Err(BatchUpdateFindingsError::from_response(response))
6322        }
6323    }
6324
6325    /// <p>Creates a custom action target in Security Hub.</p> <p>You can use custom actions on findings and insights in Security Hub to trigger target actions in Amazon CloudWatch Events.</p>
6326    #[allow(unused_mut)]
6327    async fn create_action_target(
6328        &self,
6329        input: CreateActionTargetRequest,
6330    ) -> Result<CreateActionTargetResponse, RusotoError<CreateActionTargetError>> {
6331        let request_uri = "/actionTargets";
6332
6333        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6334        request.set_content_type("application/x-amz-json-1.1".to_owned());
6335
6336        let encoded = Some(serde_json::to_vec(&input).unwrap());
6337        request.set_payload(encoded);
6338
6339        let mut response = self
6340            .client
6341            .sign_and_dispatch(request)
6342            .await
6343            .map_err(RusotoError::from)?;
6344        if response.status.is_success() {
6345            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6346            let result = proto::json::ResponsePayload::new(&response)
6347                .deserialize::<CreateActionTargetResponse, _>()?;
6348
6349            Ok(result)
6350        } else {
6351            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6352            Err(CreateActionTargetError::from_response(response))
6353        }
6354    }
6355
6356    /// <p>Creates a custom insight in Security Hub. An insight is a consolidation of findings that relate to a security issue that requires attention or remediation.</p> <p>To group the related findings in the insight, use the <code>GroupByAttribute</code>.</p>
6357    #[allow(unused_mut)]
6358    async fn create_insight(
6359        &self,
6360        input: CreateInsightRequest,
6361    ) -> Result<CreateInsightResponse, RusotoError<CreateInsightError>> {
6362        let request_uri = "/insights";
6363
6364        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6365        request.set_content_type("application/x-amz-json-1.1".to_owned());
6366
6367        let encoded = Some(serde_json::to_vec(&input).unwrap());
6368        request.set_payload(encoded);
6369
6370        let mut response = self
6371            .client
6372            .sign_and_dispatch(request)
6373            .await
6374            .map_err(RusotoError::from)?;
6375        if response.status.is_success() {
6376            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6377            let result = proto::json::ResponsePayload::new(&response)
6378                .deserialize::<CreateInsightResponse, _>()?;
6379
6380            Ok(result)
6381        } else {
6382            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6383            Err(CreateInsightError::from_response(response))
6384        }
6385    }
6386
6387    /// <p>Creates a member association in Security Hub between the specified accounts and the account used to make the request, which is the master account. To successfully create a member, you must use this action from an account that already has Security Hub enabled. To enable Security Hub, you can use the <code> <a>EnableSecurityHub</a> </code> operation.</p> <p>After you use <code>CreateMembers</code> to create member account associations in Security Hub, you must use the <code> <a>InviteMembers</a> </code> operation to invite the accounts to enable Security Hub and become member accounts in Security Hub.</p> <p>If the account owner accepts the invitation, the account becomes a member account in Security Hub. A permissions policy is added that permits the master account to view the findings generated in the member account. When Security Hub is enabled in the invited account, findings start to be sent to both the member and master accounts.</p> <p>To remove the association between the master and member accounts, use the <code> <a>DisassociateFromMasterAccount</a> </code> or <code> <a>DisassociateMembers</a> </code> operation.</p>
6388    #[allow(unused_mut)]
6389    async fn create_members(
6390        &self,
6391        input: CreateMembersRequest,
6392    ) -> Result<CreateMembersResponse, RusotoError<CreateMembersError>> {
6393        let request_uri = "/members";
6394
6395        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6396        request.set_content_type("application/x-amz-json-1.1".to_owned());
6397
6398        let encoded = Some(serde_json::to_vec(&input).unwrap());
6399        request.set_payload(encoded);
6400
6401        let mut response = self
6402            .client
6403            .sign_and_dispatch(request)
6404            .await
6405            .map_err(RusotoError::from)?;
6406        if response.status.is_success() {
6407            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6408            let result = proto::json::ResponsePayload::new(&response)
6409                .deserialize::<CreateMembersResponse, _>()?;
6410
6411            Ok(result)
6412        } else {
6413            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6414            Err(CreateMembersError::from_response(response))
6415        }
6416    }
6417
6418    /// <p>Declines invitations to become a member account.</p>
6419    #[allow(unused_mut)]
6420    async fn decline_invitations(
6421        &self,
6422        input: DeclineInvitationsRequest,
6423    ) -> Result<DeclineInvitationsResponse, RusotoError<DeclineInvitationsError>> {
6424        let request_uri = "/invitations/decline";
6425
6426        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6427        request.set_content_type("application/x-amz-json-1.1".to_owned());
6428
6429        let encoded = Some(serde_json::to_vec(&input).unwrap());
6430        request.set_payload(encoded);
6431
6432        let mut response = self
6433            .client
6434            .sign_and_dispatch(request)
6435            .await
6436            .map_err(RusotoError::from)?;
6437        if response.status.is_success() {
6438            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6439            let result = proto::json::ResponsePayload::new(&response)
6440                .deserialize::<DeclineInvitationsResponse, _>()?;
6441
6442            Ok(result)
6443        } else {
6444            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6445            Err(DeclineInvitationsError::from_response(response))
6446        }
6447    }
6448
6449    /// <p>Deletes a custom action target from Security Hub.</p> <p>Deleting a custom action target does not affect any findings or insights that were already sent to Amazon CloudWatch Events using the custom action.</p>
6450    #[allow(unused_mut)]
6451    async fn delete_action_target(
6452        &self,
6453        input: DeleteActionTargetRequest,
6454    ) -> Result<DeleteActionTargetResponse, RusotoError<DeleteActionTargetError>> {
6455        let request_uri = format!(
6456            "/actionTargets/{action_target_arn}",
6457            action_target_arn = input.action_target_arn
6458        );
6459
6460        let mut request = SignedRequest::new("DELETE", "securityhub", &self.region, &request_uri);
6461        request.set_content_type("application/x-amz-json-1.1".to_owned());
6462
6463        let mut response = self
6464            .client
6465            .sign_and_dispatch(request)
6466            .await
6467            .map_err(RusotoError::from)?;
6468        if response.status.is_success() {
6469            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6470            let result = proto::json::ResponsePayload::new(&response)
6471                .deserialize::<DeleteActionTargetResponse, _>()?;
6472
6473            Ok(result)
6474        } else {
6475            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6476            Err(DeleteActionTargetError::from_response(response))
6477        }
6478    }
6479
6480    /// <p>Deletes the insight specified by the <code>InsightArn</code>.</p>
6481    #[allow(unused_mut)]
6482    async fn delete_insight(
6483        &self,
6484        input: DeleteInsightRequest,
6485    ) -> Result<DeleteInsightResponse, RusotoError<DeleteInsightError>> {
6486        let request_uri = format!("/insights/{insight_arn}", insight_arn = input.insight_arn);
6487
6488        let mut request = SignedRequest::new("DELETE", "securityhub", &self.region, &request_uri);
6489        request.set_content_type("application/x-amz-json-1.1".to_owned());
6490
6491        let mut response = self
6492            .client
6493            .sign_and_dispatch(request)
6494            .await
6495            .map_err(RusotoError::from)?;
6496        if response.status.is_success() {
6497            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6498            let result = proto::json::ResponsePayload::new(&response)
6499                .deserialize::<DeleteInsightResponse, _>()?;
6500
6501            Ok(result)
6502        } else {
6503            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6504            Err(DeleteInsightError::from_response(response))
6505        }
6506    }
6507
6508    /// <p>Deletes invitations received by the AWS account to become a member account.</p>
6509    #[allow(unused_mut)]
6510    async fn delete_invitations(
6511        &self,
6512        input: DeleteInvitationsRequest,
6513    ) -> Result<DeleteInvitationsResponse, RusotoError<DeleteInvitationsError>> {
6514        let request_uri = "/invitations/delete";
6515
6516        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6517        request.set_content_type("application/x-amz-json-1.1".to_owned());
6518
6519        let encoded = Some(serde_json::to_vec(&input).unwrap());
6520        request.set_payload(encoded);
6521
6522        let mut response = self
6523            .client
6524            .sign_and_dispatch(request)
6525            .await
6526            .map_err(RusotoError::from)?;
6527        if response.status.is_success() {
6528            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6529            let result = proto::json::ResponsePayload::new(&response)
6530                .deserialize::<DeleteInvitationsResponse, _>()?;
6531
6532            Ok(result)
6533        } else {
6534            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6535            Err(DeleteInvitationsError::from_response(response))
6536        }
6537    }
6538
6539    /// <p>Deletes the specified member accounts from Security Hub.</p>
6540    #[allow(unused_mut)]
6541    async fn delete_members(
6542        &self,
6543        input: DeleteMembersRequest,
6544    ) -> Result<DeleteMembersResponse, RusotoError<DeleteMembersError>> {
6545        let request_uri = "/members/delete";
6546
6547        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6548        request.set_content_type("application/x-amz-json-1.1".to_owned());
6549
6550        let encoded = Some(serde_json::to_vec(&input).unwrap());
6551        request.set_payload(encoded);
6552
6553        let mut response = self
6554            .client
6555            .sign_and_dispatch(request)
6556            .await
6557            .map_err(RusotoError::from)?;
6558        if response.status.is_success() {
6559            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6560            let result = proto::json::ResponsePayload::new(&response)
6561                .deserialize::<DeleteMembersResponse, _>()?;
6562
6563            Ok(result)
6564        } else {
6565            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6566            Err(DeleteMembersError::from_response(response))
6567        }
6568    }
6569
6570    /// <p>Returns a list of the custom action targets in Security Hub in your account.</p>
6571    #[allow(unused_mut)]
6572    async fn describe_action_targets(
6573        &self,
6574        input: DescribeActionTargetsRequest,
6575    ) -> Result<DescribeActionTargetsResponse, RusotoError<DescribeActionTargetsError>> {
6576        let request_uri = "/actionTargets/get";
6577
6578        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6579        request.set_content_type("application/x-amz-json-1.1".to_owned());
6580
6581        let encoded = Some(serde_json::to_vec(&input).unwrap());
6582        request.set_payload(encoded);
6583
6584        let mut response = self
6585            .client
6586            .sign_and_dispatch(request)
6587            .await
6588            .map_err(RusotoError::from)?;
6589        if response.status.is_success() {
6590            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6591            let result = proto::json::ResponsePayload::new(&response)
6592                .deserialize::<DescribeActionTargetsResponse, _>()?;
6593
6594            Ok(result)
6595        } else {
6596            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6597            Err(DescribeActionTargetsError::from_response(response))
6598        }
6599    }
6600
6601    /// <p>Returns details about the Hub resource in your account, including the <code>HubArn</code> and the time when you enabled Security Hub.</p>
6602    #[allow(unused_mut)]
6603    async fn describe_hub(
6604        &self,
6605        input: DescribeHubRequest,
6606    ) -> Result<DescribeHubResponse, RusotoError<DescribeHubError>> {
6607        let request_uri = "/accounts";
6608
6609        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
6610        request.set_content_type("application/x-amz-json-1.1".to_owned());
6611
6612        let mut params = Params::new();
6613        if let Some(ref x) = input.hub_arn {
6614            params.put("HubArn", x);
6615        }
6616        request.set_params(params);
6617
6618        let mut response = self
6619            .client
6620            .sign_and_dispatch(request)
6621            .await
6622            .map_err(RusotoError::from)?;
6623        if response.status.is_success() {
6624            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6625            let result = proto::json::ResponsePayload::new(&response)
6626                .deserialize::<DescribeHubResponse, _>()?;
6627
6628            Ok(result)
6629        } else {
6630            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6631            Err(DescribeHubError::from_response(response))
6632        }
6633    }
6634
6635    /// <p>Returns information about the available products that you can subscribe to and integrate with Security Hub in order to consolidate findings.</p>
6636    #[allow(unused_mut)]
6637    async fn describe_products(
6638        &self,
6639        input: DescribeProductsRequest,
6640    ) -> Result<DescribeProductsResponse, RusotoError<DescribeProductsError>> {
6641        let request_uri = "/products";
6642
6643        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
6644        request.set_content_type("application/x-amz-json-1.1".to_owned());
6645
6646        let mut params = Params::new();
6647        if let Some(ref x) = input.max_results {
6648            params.put("MaxResults", x);
6649        }
6650        if let Some(ref x) = input.next_token {
6651            params.put("NextToken", x);
6652        }
6653        request.set_params(params);
6654
6655        let mut response = self
6656            .client
6657            .sign_and_dispatch(request)
6658            .await
6659            .map_err(RusotoError::from)?;
6660        if response.status.is_success() {
6661            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6662            let result = proto::json::ResponsePayload::new(&response)
6663                .deserialize::<DescribeProductsResponse, _>()?;
6664
6665            Ok(result)
6666        } else {
6667            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6668            Err(DescribeProductsError::from_response(response))
6669        }
6670    }
6671
6672    /// <p>Returns a list of the available standards in Security Hub.</p> <p>For each standard, the results include the standard ARN, the name, and a description. </p>
6673    #[allow(unused_mut)]
6674    async fn describe_standards(
6675        &self,
6676        input: DescribeStandardsRequest,
6677    ) -> Result<DescribeStandardsResponse, RusotoError<DescribeStandardsError>> {
6678        let request_uri = "/standards";
6679
6680        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
6681        request.set_content_type("application/x-amz-json-1.1".to_owned());
6682
6683        let mut params = Params::new();
6684        if let Some(ref x) = input.max_results {
6685            params.put("MaxResults", x);
6686        }
6687        if let Some(ref x) = input.next_token {
6688            params.put("NextToken", x);
6689        }
6690        request.set_params(params);
6691
6692        let mut response = self
6693            .client
6694            .sign_and_dispatch(request)
6695            .await
6696            .map_err(RusotoError::from)?;
6697        if response.status.is_success() {
6698            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6699            let result = proto::json::ResponsePayload::new(&response)
6700                .deserialize::<DescribeStandardsResponse, _>()?;
6701
6702            Ok(result)
6703        } else {
6704            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6705            Err(DescribeStandardsError::from_response(response))
6706        }
6707    }
6708
6709    /// <p>Returns a list of security standards controls.</p> <p>For each control, the results include information about whether it is currently enabled, the severity, and a link to remediation information.</p>
6710    #[allow(unused_mut)]
6711    async fn describe_standards_controls(
6712        &self,
6713        input: DescribeStandardsControlsRequest,
6714    ) -> Result<DescribeStandardsControlsResponse, RusotoError<DescribeStandardsControlsError>>
6715    {
6716        let request_uri = format!(
6717            "/standards/controls/{standards_subscription_arn}",
6718            standards_subscription_arn = input.standards_subscription_arn
6719        );
6720
6721        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
6722        request.set_content_type("application/x-amz-json-1.1".to_owned());
6723
6724        let mut params = Params::new();
6725        if let Some(ref x) = input.max_results {
6726            params.put("MaxResults", x);
6727        }
6728        if let Some(ref x) = input.next_token {
6729            params.put("NextToken", x);
6730        }
6731        request.set_params(params);
6732
6733        let mut response = self
6734            .client
6735            .sign_and_dispatch(request)
6736            .await
6737            .map_err(RusotoError::from)?;
6738        if response.status.is_success() {
6739            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6740            let result = proto::json::ResponsePayload::new(&response)
6741                .deserialize::<DescribeStandardsControlsResponse, _>()?;
6742
6743            Ok(result)
6744        } else {
6745            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6746            Err(DescribeStandardsControlsError::from_response(response))
6747        }
6748    }
6749
6750    /// <p>Disables the integration of the specified product with Security Hub. After the integration is disabled, findings from that product are no longer sent to Security Hub.</p>
6751    #[allow(unused_mut)]
6752    async fn disable_import_findings_for_product(
6753        &self,
6754        input: DisableImportFindingsForProductRequest,
6755    ) -> Result<
6756        DisableImportFindingsForProductResponse,
6757        RusotoError<DisableImportFindingsForProductError>,
6758    > {
6759        let request_uri = format!(
6760            "/productSubscriptions/{product_subscription_arn}",
6761            product_subscription_arn = input.product_subscription_arn
6762        );
6763
6764        let mut request = SignedRequest::new("DELETE", "securityhub", &self.region, &request_uri);
6765        request.set_content_type("application/x-amz-json-1.1".to_owned());
6766
6767        let mut response = self
6768            .client
6769            .sign_and_dispatch(request)
6770            .await
6771            .map_err(RusotoError::from)?;
6772        if response.status.is_success() {
6773            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6774            let result = proto::json::ResponsePayload::new(&response)
6775                .deserialize::<DisableImportFindingsForProductResponse, _>()?;
6776
6777            Ok(result)
6778        } else {
6779            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6780            Err(DisableImportFindingsForProductError::from_response(
6781                response,
6782            ))
6783        }
6784    }
6785
6786    /// <p>Disables Security Hub in your account only in the current Region. To disable Security Hub in all Regions, you must submit one request per Region where you have enabled Security Hub.</p> <p>When you disable Security Hub for a master account, it doesn't disable Security Hub for any associated member accounts.</p> <p>When you disable Security Hub, your existing findings and insights and any Security Hub configuration settings are deleted after 90 days and cannot be recovered. Any standards that were enabled are disabled, and your master and member account associations are removed.</p> <p>If you want to save your existing findings, you must export them before you disable Security Hub.</p>
6787    #[allow(unused_mut)]
6788    async fn disable_security_hub(
6789        &self,
6790    ) -> Result<DisableSecurityHubResponse, RusotoError<DisableSecurityHubError>> {
6791        let request_uri = "/accounts";
6792
6793        let mut request = SignedRequest::new("DELETE", "securityhub", &self.region, &request_uri);
6794        request.set_content_type("application/x-amz-json-1.1".to_owned());
6795
6796        let mut response = self
6797            .client
6798            .sign_and_dispatch(request)
6799            .await
6800            .map_err(RusotoError::from)?;
6801        if response.status.is_success() {
6802            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6803            let result = proto::json::ResponsePayload::new(&response)
6804                .deserialize::<DisableSecurityHubResponse, _>()?;
6805
6806            Ok(result)
6807        } else {
6808            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6809            Err(DisableSecurityHubError::from_response(response))
6810        }
6811    }
6812
6813    /// <p>Disassociates the current Security Hub member account from the associated master account.</p>
6814    #[allow(unused_mut)]
6815    async fn disassociate_from_master_account(
6816        &self,
6817    ) -> Result<
6818        DisassociateFromMasterAccountResponse,
6819        RusotoError<DisassociateFromMasterAccountError>,
6820    > {
6821        let request_uri = "/master/disassociate";
6822
6823        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6824        request.set_content_type("application/x-amz-json-1.1".to_owned());
6825
6826        let mut response = self
6827            .client
6828            .sign_and_dispatch(request)
6829            .await
6830            .map_err(RusotoError::from)?;
6831        if response.status.is_success() {
6832            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6833            let result = proto::json::ResponsePayload::new(&response)
6834                .deserialize::<DisassociateFromMasterAccountResponse, _>()?;
6835
6836            Ok(result)
6837        } else {
6838            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6839            Err(DisassociateFromMasterAccountError::from_response(response))
6840        }
6841    }
6842
6843    /// <p>Disassociates the specified member accounts from the associated master account.</p>
6844    #[allow(unused_mut)]
6845    async fn disassociate_members(
6846        &self,
6847        input: DisassociateMembersRequest,
6848    ) -> Result<DisassociateMembersResponse, RusotoError<DisassociateMembersError>> {
6849        let request_uri = "/members/disassociate";
6850
6851        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6852        request.set_content_type("application/x-amz-json-1.1".to_owned());
6853
6854        let encoded = Some(serde_json::to_vec(&input).unwrap());
6855        request.set_payload(encoded);
6856
6857        let mut response = self
6858            .client
6859            .sign_and_dispatch(request)
6860            .await
6861            .map_err(RusotoError::from)?;
6862        if response.status.is_success() {
6863            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6864            let result = proto::json::ResponsePayload::new(&response)
6865                .deserialize::<DisassociateMembersResponse, _>()?;
6866
6867            Ok(result)
6868        } else {
6869            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6870            Err(DisassociateMembersError::from_response(response))
6871        }
6872    }
6873
6874    /// <p>Enables the integration of a partner product with Security Hub. Integrated products send findings to Security Hub.</p> <p>When you enable a product integration, a permissions policy that grants permission for the product to send findings to Security Hub is applied.</p>
6875    #[allow(unused_mut)]
6876    async fn enable_import_findings_for_product(
6877        &self,
6878        input: EnableImportFindingsForProductRequest,
6879    ) -> Result<
6880        EnableImportFindingsForProductResponse,
6881        RusotoError<EnableImportFindingsForProductError>,
6882    > {
6883        let request_uri = "/productSubscriptions";
6884
6885        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6886        request.set_content_type("application/x-amz-json-1.1".to_owned());
6887
6888        let encoded = Some(serde_json::to_vec(&input).unwrap());
6889        request.set_payload(encoded);
6890
6891        let mut response = self
6892            .client
6893            .sign_and_dispatch(request)
6894            .await
6895            .map_err(RusotoError::from)?;
6896        if response.status.is_success() {
6897            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6898            let result = proto::json::ResponsePayload::new(&response)
6899                .deserialize::<EnableImportFindingsForProductResponse, _>()?;
6900
6901            Ok(result)
6902        } else {
6903            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6904            Err(EnableImportFindingsForProductError::from_response(response))
6905        }
6906    }
6907
6908    /// <p>Enables Security Hub for your account in the current Region or the Region you specify in the request.</p> <p>When you enable Security Hub, you grant to Security Hub the permissions necessary to gather findings from other services that are integrated with Security Hub.</p> <p>When you use the <code>EnableSecurityHub</code> operation to enable Security Hub, you also automatically enable the following standards.</p> <ul> <li> <p>CIS AWS Foundations</p> </li> <li> <p>AWS Foundational Security Best Practices</p> </li> </ul> <p>You do not enable the Payment Card Industry Data Security Standard (PCI DSS) standard. </p> <p>To not enable the automatically enabled standards, set <code>EnableDefaultStandards</code> to <code>false</code>.</p> <p>After you enable Security Hub, to enable a standard, use the <code> <a>BatchEnableStandards</a> </code> operation. To disable a standard, use the <code> <a>BatchDisableStandards</a> </code> operation.</p> <p>To learn more, see <a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html">Setting Up AWS Security Hub</a> in the <i>AWS Security Hub User Guide</i>.</p>
6909    #[allow(unused_mut)]
6910    async fn enable_security_hub(
6911        &self,
6912        input: EnableSecurityHubRequest,
6913    ) -> Result<EnableSecurityHubResponse, RusotoError<EnableSecurityHubError>> {
6914        let request_uri = "/accounts";
6915
6916        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6917        request.set_content_type("application/x-amz-json-1.1".to_owned());
6918
6919        let encoded = Some(serde_json::to_vec(&input).unwrap());
6920        request.set_payload(encoded);
6921
6922        let mut response = self
6923            .client
6924            .sign_and_dispatch(request)
6925            .await
6926            .map_err(RusotoError::from)?;
6927        if response.status.is_success() {
6928            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6929            let result = proto::json::ResponsePayload::new(&response)
6930                .deserialize::<EnableSecurityHubResponse, _>()?;
6931
6932            Ok(result)
6933        } else {
6934            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6935            Err(EnableSecurityHubError::from_response(response))
6936        }
6937    }
6938
6939    /// <p>Returns a list of the standards that are currently enabled.</p>
6940    #[allow(unused_mut)]
6941    async fn get_enabled_standards(
6942        &self,
6943        input: GetEnabledStandardsRequest,
6944    ) -> Result<GetEnabledStandardsResponse, RusotoError<GetEnabledStandardsError>> {
6945        let request_uri = "/standards/get";
6946
6947        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6948        request.set_content_type("application/x-amz-json-1.1".to_owned());
6949
6950        let encoded = Some(serde_json::to_vec(&input).unwrap());
6951        request.set_payload(encoded);
6952
6953        let mut response = self
6954            .client
6955            .sign_and_dispatch(request)
6956            .await
6957            .map_err(RusotoError::from)?;
6958        if response.status.is_success() {
6959            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6960            let result = proto::json::ResponsePayload::new(&response)
6961                .deserialize::<GetEnabledStandardsResponse, _>()?;
6962
6963            Ok(result)
6964        } else {
6965            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6966            Err(GetEnabledStandardsError::from_response(response))
6967        }
6968    }
6969
6970    /// <p>Returns a list of findings that match the specified criteria.</p>
6971    #[allow(unused_mut)]
6972    async fn get_findings(
6973        &self,
6974        input: GetFindingsRequest,
6975    ) -> Result<GetFindingsResponse, RusotoError<GetFindingsError>> {
6976        let request_uri = "/findings";
6977
6978        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
6979        request.set_content_type("application/x-amz-json-1.1".to_owned());
6980
6981        let encoded = Some(serde_json::to_vec(&input).unwrap());
6982        request.set_payload(encoded);
6983
6984        let mut response = self
6985            .client
6986            .sign_and_dispatch(request)
6987            .await
6988            .map_err(RusotoError::from)?;
6989        if response.status.is_success() {
6990            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6991            let result = proto::json::ResponsePayload::new(&response)
6992                .deserialize::<GetFindingsResponse, _>()?;
6993
6994            Ok(result)
6995        } else {
6996            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6997            Err(GetFindingsError::from_response(response))
6998        }
6999    }
7000
7001    /// <p>Lists the results of the Security Hub insight specified by the insight ARN.</p>
7002    #[allow(unused_mut)]
7003    async fn get_insight_results(
7004        &self,
7005        input: GetInsightResultsRequest,
7006    ) -> Result<GetInsightResultsResponse, RusotoError<GetInsightResultsError>> {
7007        let request_uri = format!(
7008            "/insights/results/{insight_arn}",
7009            insight_arn = input.insight_arn
7010        );
7011
7012        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
7013        request.set_content_type("application/x-amz-json-1.1".to_owned());
7014
7015        let mut response = self
7016            .client
7017            .sign_and_dispatch(request)
7018            .await
7019            .map_err(RusotoError::from)?;
7020        if response.status.is_success() {
7021            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7022            let result = proto::json::ResponsePayload::new(&response)
7023                .deserialize::<GetInsightResultsResponse, _>()?;
7024
7025            Ok(result)
7026        } else {
7027            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7028            Err(GetInsightResultsError::from_response(response))
7029        }
7030    }
7031
7032    /// <p>Lists and describes insights for the specified insight ARNs.</p>
7033    #[allow(unused_mut)]
7034    async fn get_insights(
7035        &self,
7036        input: GetInsightsRequest,
7037    ) -> Result<GetInsightsResponse, RusotoError<GetInsightsError>> {
7038        let request_uri = "/insights/get";
7039
7040        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
7041        request.set_content_type("application/x-amz-json-1.1".to_owned());
7042
7043        let encoded = Some(serde_json::to_vec(&input).unwrap());
7044        request.set_payload(encoded);
7045
7046        let mut response = self
7047            .client
7048            .sign_and_dispatch(request)
7049            .await
7050            .map_err(RusotoError::from)?;
7051        if response.status.is_success() {
7052            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7053            let result = proto::json::ResponsePayload::new(&response)
7054                .deserialize::<GetInsightsResponse, _>()?;
7055
7056            Ok(result)
7057        } else {
7058            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7059            Err(GetInsightsError::from_response(response))
7060        }
7061    }
7062
7063    /// <p>Returns the count of all Security Hub membership invitations that were sent to the current member account, not including the currently accepted invitation. </p>
7064    #[allow(unused_mut)]
7065    async fn get_invitations_count(
7066        &self,
7067    ) -> Result<GetInvitationsCountResponse, RusotoError<GetInvitationsCountError>> {
7068        let request_uri = "/invitations/count";
7069
7070        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
7071        request.set_content_type("application/x-amz-json-1.1".to_owned());
7072
7073        let mut response = self
7074            .client
7075            .sign_and_dispatch(request)
7076            .await
7077            .map_err(RusotoError::from)?;
7078        if response.status.is_success() {
7079            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7080            let result = proto::json::ResponsePayload::new(&response)
7081                .deserialize::<GetInvitationsCountResponse, _>()?;
7082
7083            Ok(result)
7084        } else {
7085            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7086            Err(GetInvitationsCountError::from_response(response))
7087        }
7088    }
7089
7090    /// <p>Provides the details for the Security Hub master account for the current member account. </p>
7091    #[allow(unused_mut)]
7092    async fn get_master_account(
7093        &self,
7094    ) -> Result<GetMasterAccountResponse, RusotoError<GetMasterAccountError>> {
7095        let request_uri = "/master";
7096
7097        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
7098        request.set_content_type("application/x-amz-json-1.1".to_owned());
7099
7100        let mut response = self
7101            .client
7102            .sign_and_dispatch(request)
7103            .await
7104            .map_err(RusotoError::from)?;
7105        if response.status.is_success() {
7106            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7107            let result = proto::json::ResponsePayload::new(&response)
7108                .deserialize::<GetMasterAccountResponse, _>()?;
7109
7110            Ok(result)
7111        } else {
7112            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7113            Err(GetMasterAccountError::from_response(response))
7114        }
7115    }
7116
7117    /// <p>Returns the details for the Security Hub member accounts for the specified account IDs.</p>
7118    #[allow(unused_mut)]
7119    async fn get_members(
7120        &self,
7121        input: GetMembersRequest,
7122    ) -> Result<GetMembersResponse, RusotoError<GetMembersError>> {
7123        let request_uri = "/members/get";
7124
7125        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
7126        request.set_content_type("application/x-amz-json-1.1".to_owned());
7127
7128        let encoded = Some(serde_json::to_vec(&input).unwrap());
7129        request.set_payload(encoded);
7130
7131        let mut response = self
7132            .client
7133            .sign_and_dispatch(request)
7134            .await
7135            .map_err(RusotoError::from)?;
7136        if response.status.is_success() {
7137            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7138            let result = proto::json::ResponsePayload::new(&response)
7139                .deserialize::<GetMembersResponse, _>()?;
7140
7141            Ok(result)
7142        } else {
7143            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7144            Err(GetMembersError::from_response(response))
7145        }
7146    }
7147
7148    /// <p>Invites other AWS accounts to become member accounts for the Security Hub master account that the invitation is sent from.</p> <p>Before you can use this action to invite a member, you must first use the <code> <a>CreateMembers</a> </code> action to create the member account in Security Hub.</p> <p>When the account owner accepts the invitation to become a member account and enables Security Hub, the master account can view the findings generated from the member account.</p>
7149    #[allow(unused_mut)]
7150    async fn invite_members(
7151        &self,
7152        input: InviteMembersRequest,
7153    ) -> Result<InviteMembersResponse, RusotoError<InviteMembersError>> {
7154        let request_uri = "/members/invite";
7155
7156        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
7157        request.set_content_type("application/x-amz-json-1.1".to_owned());
7158
7159        let encoded = Some(serde_json::to_vec(&input).unwrap());
7160        request.set_payload(encoded);
7161
7162        let mut response = self
7163            .client
7164            .sign_and_dispatch(request)
7165            .await
7166            .map_err(RusotoError::from)?;
7167        if response.status.is_success() {
7168            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7169            let result = proto::json::ResponsePayload::new(&response)
7170                .deserialize::<InviteMembersResponse, _>()?;
7171
7172            Ok(result)
7173        } else {
7174            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7175            Err(InviteMembersError::from_response(response))
7176        }
7177    }
7178
7179    /// <p>Lists all findings-generating solutions (products) that you are subscribed to receive findings from in Security Hub.</p>
7180    #[allow(unused_mut)]
7181    async fn list_enabled_products_for_import(
7182        &self,
7183        input: ListEnabledProductsForImportRequest,
7184    ) -> Result<ListEnabledProductsForImportResponse, RusotoError<ListEnabledProductsForImportError>>
7185    {
7186        let request_uri = "/productSubscriptions";
7187
7188        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
7189        request.set_content_type("application/x-amz-json-1.1".to_owned());
7190
7191        let mut params = Params::new();
7192        if let Some(ref x) = input.max_results {
7193            params.put("MaxResults", x);
7194        }
7195        if let Some(ref x) = input.next_token {
7196            params.put("NextToken", x);
7197        }
7198        request.set_params(params);
7199
7200        let mut response = self
7201            .client
7202            .sign_and_dispatch(request)
7203            .await
7204            .map_err(RusotoError::from)?;
7205        if response.status.is_success() {
7206            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7207            let result = proto::json::ResponsePayload::new(&response)
7208                .deserialize::<ListEnabledProductsForImportResponse, _>()?;
7209
7210            Ok(result)
7211        } else {
7212            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7213            Err(ListEnabledProductsForImportError::from_response(response))
7214        }
7215    }
7216
7217    /// <p>Lists all Security Hub membership invitations that were sent to the current AWS account. </p>
7218    #[allow(unused_mut)]
7219    async fn list_invitations(
7220        &self,
7221        input: ListInvitationsRequest,
7222    ) -> Result<ListInvitationsResponse, RusotoError<ListInvitationsError>> {
7223        let request_uri = "/invitations";
7224
7225        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
7226        request.set_content_type("application/x-amz-json-1.1".to_owned());
7227
7228        let mut params = Params::new();
7229        if let Some(ref x) = input.max_results {
7230            params.put("MaxResults", x);
7231        }
7232        if let Some(ref x) = input.next_token {
7233            params.put("NextToken", x);
7234        }
7235        request.set_params(params);
7236
7237        let mut response = self
7238            .client
7239            .sign_and_dispatch(request)
7240            .await
7241            .map_err(RusotoError::from)?;
7242        if response.status.is_success() {
7243            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7244            let result = proto::json::ResponsePayload::new(&response)
7245                .deserialize::<ListInvitationsResponse, _>()?;
7246
7247            Ok(result)
7248        } else {
7249            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7250            Err(ListInvitationsError::from_response(response))
7251        }
7252    }
7253
7254    /// <p>Lists details about all member accounts for the current Security Hub master account.</p>
7255    #[allow(unused_mut)]
7256    async fn list_members(
7257        &self,
7258        input: ListMembersRequest,
7259    ) -> Result<ListMembersResponse, RusotoError<ListMembersError>> {
7260        let request_uri = "/members";
7261
7262        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
7263        request.set_content_type("application/x-amz-json-1.1".to_owned());
7264
7265        let mut params = Params::new();
7266        if let Some(ref x) = input.max_results {
7267            params.put("MaxResults", x);
7268        }
7269        if let Some(ref x) = input.next_token {
7270            params.put("NextToken", x);
7271        }
7272        if let Some(ref x) = input.only_associated {
7273            params.put("OnlyAssociated", x);
7274        }
7275        request.set_params(params);
7276
7277        let mut response = self
7278            .client
7279            .sign_and_dispatch(request)
7280            .await
7281            .map_err(RusotoError::from)?;
7282        if response.status.is_success() {
7283            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7284            let result = proto::json::ResponsePayload::new(&response)
7285                .deserialize::<ListMembersResponse, _>()?;
7286
7287            Ok(result)
7288        } else {
7289            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7290            Err(ListMembersError::from_response(response))
7291        }
7292    }
7293
7294    /// <p>Returns a list of tags associated with a resource.</p>
7295    #[allow(unused_mut)]
7296    async fn list_tags_for_resource(
7297        &self,
7298        input: ListTagsForResourceRequest,
7299    ) -> Result<ListTagsForResourceResponse, RusotoError<ListTagsForResourceError>> {
7300        let request_uri = format!("/tags/{resource_arn}", resource_arn = input.resource_arn);
7301
7302        let mut request = SignedRequest::new("GET", "securityhub", &self.region, &request_uri);
7303        request.set_content_type("application/x-amz-json-1.1".to_owned());
7304
7305        let mut response = self
7306            .client
7307            .sign_and_dispatch(request)
7308            .await
7309            .map_err(RusotoError::from)?;
7310        if response.status.is_success() {
7311            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7312            let result = proto::json::ResponsePayload::new(&response)
7313                .deserialize::<ListTagsForResourceResponse, _>()?;
7314
7315            Ok(result)
7316        } else {
7317            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7318            Err(ListTagsForResourceError::from_response(response))
7319        }
7320    }
7321
7322    /// <p>Adds one or more tags to a resource.</p>
7323    #[allow(unused_mut)]
7324    async fn tag_resource(
7325        &self,
7326        input: TagResourceRequest,
7327    ) -> Result<TagResourceResponse, RusotoError<TagResourceError>> {
7328        let request_uri = format!("/tags/{resource_arn}", resource_arn = input.resource_arn);
7329
7330        let mut request = SignedRequest::new("POST", "securityhub", &self.region, &request_uri);
7331        request.set_content_type("application/x-amz-json-1.1".to_owned());
7332
7333        let encoded = Some(serde_json::to_vec(&input).unwrap());
7334        request.set_payload(encoded);
7335
7336        let mut response = self
7337            .client
7338            .sign_and_dispatch(request)
7339            .await
7340            .map_err(RusotoError::from)?;
7341        if response.status.is_success() {
7342            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7343            let result = proto::json::ResponsePayload::new(&response)
7344                .deserialize::<TagResourceResponse, _>()?;
7345
7346            Ok(result)
7347        } else {
7348            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7349            Err(TagResourceError::from_response(response))
7350        }
7351    }
7352
7353    /// <p>Removes one or more tags from a resource.</p>
7354    #[allow(unused_mut)]
7355    async fn untag_resource(
7356        &self,
7357        input: UntagResourceRequest,
7358    ) -> Result<UntagResourceResponse, RusotoError<UntagResourceError>> {
7359        let request_uri = format!("/tags/{resource_arn}", resource_arn = input.resource_arn);
7360
7361        let mut request = SignedRequest::new("DELETE", "securityhub", &self.region, &request_uri);
7362        request.set_content_type("application/x-amz-json-1.1".to_owned());
7363
7364        let mut params = Params::new();
7365        for item in input.tag_keys.iter() {
7366            params.put("tagKeys", item);
7367        }
7368        request.set_params(params);
7369
7370        let mut response = self
7371            .client
7372            .sign_and_dispatch(request)
7373            .await
7374            .map_err(RusotoError::from)?;
7375        if response.status.is_success() {
7376            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7377            let result = proto::json::ResponsePayload::new(&response)
7378                .deserialize::<UntagResourceResponse, _>()?;
7379
7380            Ok(result)
7381        } else {
7382            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7383            Err(UntagResourceError::from_response(response))
7384        }
7385    }
7386
7387    /// <p>Updates the name and description of a custom action target in Security Hub.</p>
7388    #[allow(unused_mut)]
7389    async fn update_action_target(
7390        &self,
7391        input: UpdateActionTargetRequest,
7392    ) -> Result<UpdateActionTargetResponse, RusotoError<UpdateActionTargetError>> {
7393        let request_uri = format!(
7394            "/actionTargets/{action_target_arn}",
7395            action_target_arn = input.action_target_arn
7396        );
7397
7398        let mut request = SignedRequest::new("PATCH", "securityhub", &self.region, &request_uri);
7399        request.set_content_type("application/x-amz-json-1.1".to_owned());
7400
7401        let encoded = Some(serde_json::to_vec(&input).unwrap());
7402        request.set_payload(encoded);
7403
7404        let mut response = self
7405            .client
7406            .sign_and_dispatch(request)
7407            .await
7408            .map_err(RusotoError::from)?;
7409        if response.status.is_success() {
7410            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7411            let result = proto::json::ResponsePayload::new(&response)
7412                .deserialize::<UpdateActionTargetResponse, _>()?;
7413
7414            Ok(result)
7415        } else {
7416            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7417            Err(UpdateActionTargetError::from_response(response))
7418        }
7419    }
7420
7421    /// <p> <code>UpdateFindings</code> is deprecated. Instead of <code>UpdateFindings</code>, use <code>BatchUpdateFindings</code>.</p> <p>Updates the <code>Note</code> and <code>RecordState</code> of the Security Hub-aggregated findings that the filter attributes specify. Any member account that can view the finding also sees the update to the finding.</p>
7422    #[allow(unused_mut)]
7423    async fn update_findings(
7424        &self,
7425        input: UpdateFindingsRequest,
7426    ) -> Result<UpdateFindingsResponse, RusotoError<UpdateFindingsError>> {
7427        let request_uri = "/findings";
7428
7429        let mut request = SignedRequest::new("PATCH", "securityhub", &self.region, &request_uri);
7430        request.set_content_type("application/x-amz-json-1.1".to_owned());
7431
7432        let encoded = Some(serde_json::to_vec(&input).unwrap());
7433        request.set_payload(encoded);
7434
7435        let mut response = self
7436            .client
7437            .sign_and_dispatch(request)
7438            .await
7439            .map_err(RusotoError::from)?;
7440        if response.status.is_success() {
7441            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7442            let result = proto::json::ResponsePayload::new(&response)
7443                .deserialize::<UpdateFindingsResponse, _>()?;
7444
7445            Ok(result)
7446        } else {
7447            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7448            Err(UpdateFindingsError::from_response(response))
7449        }
7450    }
7451
7452    /// <p>Updates the Security Hub insight identified by the specified insight ARN.</p>
7453    #[allow(unused_mut)]
7454    async fn update_insight(
7455        &self,
7456        input: UpdateInsightRequest,
7457    ) -> Result<UpdateInsightResponse, RusotoError<UpdateInsightError>> {
7458        let request_uri = format!("/insights/{insight_arn}", insight_arn = input.insight_arn);
7459
7460        let mut request = SignedRequest::new("PATCH", "securityhub", &self.region, &request_uri);
7461        request.set_content_type("application/x-amz-json-1.1".to_owned());
7462
7463        let encoded = Some(serde_json::to_vec(&input).unwrap());
7464        request.set_payload(encoded);
7465
7466        let mut response = self
7467            .client
7468            .sign_and_dispatch(request)
7469            .await
7470            .map_err(RusotoError::from)?;
7471        if response.status.is_success() {
7472            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7473            let result = proto::json::ResponsePayload::new(&response)
7474                .deserialize::<UpdateInsightResponse, _>()?;
7475
7476            Ok(result)
7477        } else {
7478            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7479            Err(UpdateInsightError::from_response(response))
7480        }
7481    }
7482
7483    /// <p>Used to control whether an individual security standard control is enabled or disabled.</p>
7484    #[allow(unused_mut)]
7485    async fn update_standards_control(
7486        &self,
7487        input: UpdateStandardsControlRequest,
7488    ) -> Result<UpdateStandardsControlResponse, RusotoError<UpdateStandardsControlError>> {
7489        let request_uri = format!(
7490            "/standards/control/{standards_control_arn}",
7491            standards_control_arn = input.standards_control_arn
7492        );
7493
7494        let mut request = SignedRequest::new("PATCH", "securityhub", &self.region, &request_uri);
7495        request.set_content_type("application/x-amz-json-1.1".to_owned());
7496
7497        let encoded = Some(serde_json::to_vec(&input).unwrap());
7498        request.set_payload(encoded);
7499
7500        let mut response = self
7501            .client
7502            .sign_and_dispatch(request)
7503            .await
7504            .map_err(RusotoError::from)?;
7505        if response.status.is_success() {
7506            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7507            let result = proto::json::ResponsePayload::new(&response)
7508                .deserialize::<UpdateStandardsControlResponse, _>()?;
7509
7510            Ok(result)
7511        } else {
7512            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7513            Err(UpdateStandardsControlError::from_response(response))
7514        }
7515    }
7516}