aws-sdk-guardduty 0.24.0

AWS SDK for Amazon GuardDuty
Documentation
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.

/// <p>Contains the Amazon Resource Name (ARN) of the resource to publish to, such as an S3 bucket, and the ARN of the KMS key to use to encrypt published findings.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DestinationProperties {
    /// <p>The ARN of the resource to publish to.</p>
    /// <p>To specify an S3 bucket folder use the following format: <code>arn:aws:s3:::DOC-EXAMPLE-BUCKET/myFolder/</code> </p>
    #[doc(hidden)]
    pub destination_arn: std::option::Option<std::string::String>,
    /// <p>The ARN of the KMS key to use for encryption.</p>
    #[doc(hidden)]
    pub kms_key_arn: std::option::Option<std::string::String>,
}
impl DestinationProperties {
    /// <p>The ARN of the resource to publish to.</p>
    /// <p>To specify an S3 bucket folder use the following format: <code>arn:aws:s3:::DOC-EXAMPLE-BUCKET/myFolder/</code> </p>
    pub fn destination_arn(&self) -> std::option::Option<&str> {
        self.destination_arn.as_deref()
    }
    /// <p>The ARN of the KMS key to use for encryption.</p>
    pub fn kms_key_arn(&self) -> std::option::Option<&str> {
        self.kms_key_arn.as_deref()
    }
}
/// See [`DestinationProperties`](crate::model::DestinationProperties).
pub mod destination_properties {

    /// A builder for [`DestinationProperties`](crate::model::DestinationProperties).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) destination_arn: std::option::Option<std::string::String>,
        pub(crate) kms_key_arn: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The ARN of the resource to publish to.</p>
        /// <p>To specify an S3 bucket folder use the following format: <code>arn:aws:s3:::DOC-EXAMPLE-BUCKET/myFolder/</code> </p>
        pub fn destination_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.destination_arn = Some(input.into());
            self
        }
        /// <p>The ARN of the resource to publish to.</p>
        /// <p>To specify an S3 bucket folder use the following format: <code>arn:aws:s3:::DOC-EXAMPLE-BUCKET/myFolder/</code> </p>
        pub fn set_destination_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.destination_arn = input;
            self
        }
        /// <p>The ARN of the KMS key to use for encryption.</p>
        pub fn kms_key_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.kms_key_arn = Some(input.into());
            self
        }
        /// <p>The ARN of the KMS key to use for encryption.</p>
        pub fn set_kms_key_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.kms_key_arn = input;
            self
        }
        /// Consumes the builder and constructs a [`DestinationProperties`](crate::model::DestinationProperties).
        pub fn build(self) -> crate::model::DestinationProperties {
            crate::model::DestinationProperties {
                destination_arn: self.destination_arn,
                kms_key_arn: self.kms_key_arn,
            }
        }
    }
}
impl DestinationProperties {
    /// Creates a new builder-style object to manufacture [`DestinationProperties`](crate::model::DestinationProperties).
    pub fn builder() -> crate::model::destination_properties::Builder {
        crate::model::destination_properties::Builder::default()
    }
}

/// <p>An object that contains information on which data sources will be configured to be automatically enabled for new members within the organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationDataSourceConfigurations {
    /// <p>Describes whether S3 data event logs are enabled for new members of the organization.</p>
    #[doc(hidden)]
    pub s3_logs: std::option::Option<crate::model::OrganizationS3LogsConfiguration>,
    /// <p>Describes the configuration of Kubernetes data sources for new members of the organization.</p>
    #[doc(hidden)]
    pub kubernetes: std::option::Option<crate::model::OrganizationKubernetesConfiguration>,
    /// <p>Describes the configuration of Malware Protection for new members of the organization.</p>
    #[doc(hidden)]
    pub malware_protection:
        std::option::Option<crate::model::OrganizationMalwareProtectionConfiguration>,
}
impl OrganizationDataSourceConfigurations {
    /// <p>Describes whether S3 data event logs are enabled for new members of the organization.</p>
    pub fn s3_logs(&self) -> std::option::Option<&crate::model::OrganizationS3LogsConfiguration> {
        self.s3_logs.as_ref()
    }
    /// <p>Describes the configuration of Kubernetes data sources for new members of the organization.</p>
    pub fn kubernetes(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationKubernetesConfiguration> {
        self.kubernetes.as_ref()
    }
    /// <p>Describes the configuration of Malware Protection for new members of the organization.</p>
    pub fn malware_protection(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationMalwareProtectionConfiguration> {
        self.malware_protection.as_ref()
    }
}
/// See [`OrganizationDataSourceConfigurations`](crate::model::OrganizationDataSourceConfigurations).
pub mod organization_data_source_configurations {

    /// A builder for [`OrganizationDataSourceConfigurations`](crate::model::OrganizationDataSourceConfigurations).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) s3_logs: std::option::Option<crate::model::OrganizationS3LogsConfiguration>,
        pub(crate) kubernetes:
            std::option::Option<crate::model::OrganizationKubernetesConfiguration>,
        pub(crate) malware_protection:
            std::option::Option<crate::model::OrganizationMalwareProtectionConfiguration>,
    }
    impl Builder {
        /// <p>Describes whether S3 data event logs are enabled for new members of the organization.</p>
        pub fn s3_logs(mut self, input: crate::model::OrganizationS3LogsConfiguration) -> Self {
            self.s3_logs = Some(input);
            self
        }
        /// <p>Describes whether S3 data event logs are enabled for new members of the organization.</p>
        pub fn set_s3_logs(
            mut self,
            input: std::option::Option<crate::model::OrganizationS3LogsConfiguration>,
        ) -> Self {
            self.s3_logs = input;
            self
        }
        /// <p>Describes the configuration of Kubernetes data sources for new members of the organization.</p>
        pub fn kubernetes(
            mut self,
            input: crate::model::OrganizationKubernetesConfiguration,
        ) -> Self {
            self.kubernetes = Some(input);
            self
        }
        /// <p>Describes the configuration of Kubernetes data sources for new members of the organization.</p>
        pub fn set_kubernetes(
            mut self,
            input: std::option::Option<crate::model::OrganizationKubernetesConfiguration>,
        ) -> Self {
            self.kubernetes = input;
            self
        }
        /// <p>Describes the configuration of Malware Protection for new members of the organization.</p>
        pub fn malware_protection(
            mut self,
            input: crate::model::OrganizationMalwareProtectionConfiguration,
        ) -> Self {
            self.malware_protection = Some(input);
            self
        }
        /// <p>Describes the configuration of Malware Protection for new members of the organization.</p>
        pub fn set_malware_protection(
            mut self,
            input: std::option::Option<crate::model::OrganizationMalwareProtectionConfiguration>,
        ) -> Self {
            self.malware_protection = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationDataSourceConfigurations`](crate::model::OrganizationDataSourceConfigurations).
        pub fn build(self) -> crate::model::OrganizationDataSourceConfigurations {
            crate::model::OrganizationDataSourceConfigurations {
                s3_logs: self.s3_logs,
                kubernetes: self.kubernetes,
                malware_protection: self.malware_protection,
            }
        }
    }
}
impl OrganizationDataSourceConfigurations {
    /// Creates a new builder-style object to manufacture [`OrganizationDataSourceConfigurations`](crate::model::OrganizationDataSourceConfigurations).
    pub fn builder() -> crate::model::organization_data_source_configurations::Builder {
        crate::model::organization_data_source_configurations::Builder::default()
    }
}

/// <p>Organization-wide Malware Protection configurations.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationMalwareProtectionConfiguration {
    /// <p>Whether Malware Protection for EC2 instances with findings should be auto-enabled for new members joining the organization.</p>
    #[doc(hidden)]
    pub scan_ec2_instance_with_findings:
        std::option::Option<crate::model::OrganizationScanEc2InstanceWithFindings>,
}
impl OrganizationMalwareProtectionConfiguration {
    /// <p>Whether Malware Protection for EC2 instances with findings should be auto-enabled for new members joining the organization.</p>
    pub fn scan_ec2_instance_with_findings(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationScanEc2InstanceWithFindings> {
        self.scan_ec2_instance_with_findings.as_ref()
    }
}
/// See [`OrganizationMalwareProtectionConfiguration`](crate::model::OrganizationMalwareProtectionConfiguration).
pub mod organization_malware_protection_configuration {

    /// A builder for [`OrganizationMalwareProtectionConfiguration`](crate::model::OrganizationMalwareProtectionConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scan_ec2_instance_with_findings:
            std::option::Option<crate::model::OrganizationScanEc2InstanceWithFindings>,
    }
    impl Builder {
        /// <p>Whether Malware Protection for EC2 instances with findings should be auto-enabled for new members joining the organization.</p>
        pub fn scan_ec2_instance_with_findings(
            mut self,
            input: crate::model::OrganizationScanEc2InstanceWithFindings,
        ) -> Self {
            self.scan_ec2_instance_with_findings = Some(input);
            self
        }
        /// <p>Whether Malware Protection for EC2 instances with findings should be auto-enabled for new members joining the organization.</p>
        pub fn set_scan_ec2_instance_with_findings(
            mut self,
            input: std::option::Option<crate::model::OrganizationScanEc2InstanceWithFindings>,
        ) -> Self {
            self.scan_ec2_instance_with_findings = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationMalwareProtectionConfiguration`](crate::model::OrganizationMalwareProtectionConfiguration).
        pub fn build(self) -> crate::model::OrganizationMalwareProtectionConfiguration {
            crate::model::OrganizationMalwareProtectionConfiguration {
                scan_ec2_instance_with_findings: self.scan_ec2_instance_with_findings,
            }
        }
    }
}
impl OrganizationMalwareProtectionConfiguration {
    /// Creates a new builder-style object to manufacture [`OrganizationMalwareProtectionConfiguration`](crate::model::OrganizationMalwareProtectionConfiguration).
    pub fn builder() -> crate::model::organization_malware_protection_configuration::Builder {
        crate::model::organization_malware_protection_configuration::Builder::default()
    }
}

/// <p>Organization-wide EC2 instances with findings scan configuration.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationScanEc2InstanceWithFindings {
    /// <p>Whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
    #[doc(hidden)]
    pub ebs_volumes: std::option::Option<crate::model::OrganizationEbsVolumes>,
}
impl OrganizationScanEc2InstanceWithFindings {
    /// <p>Whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
    pub fn ebs_volumes(&self) -> std::option::Option<&crate::model::OrganizationEbsVolumes> {
        self.ebs_volumes.as_ref()
    }
}
/// See [`OrganizationScanEc2InstanceWithFindings`](crate::model::OrganizationScanEc2InstanceWithFindings).
pub mod organization_scan_ec2_instance_with_findings {

    /// A builder for [`OrganizationScanEc2InstanceWithFindings`](crate::model::OrganizationScanEc2InstanceWithFindings).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) ebs_volumes: std::option::Option<crate::model::OrganizationEbsVolumes>,
    }
    impl Builder {
        /// <p>Whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
        pub fn ebs_volumes(mut self, input: crate::model::OrganizationEbsVolumes) -> Self {
            self.ebs_volumes = Some(input);
            self
        }
        /// <p>Whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
        pub fn set_ebs_volumes(
            mut self,
            input: std::option::Option<crate::model::OrganizationEbsVolumes>,
        ) -> Self {
            self.ebs_volumes = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationScanEc2InstanceWithFindings`](crate::model::OrganizationScanEc2InstanceWithFindings).
        pub fn build(self) -> crate::model::OrganizationScanEc2InstanceWithFindings {
            crate::model::OrganizationScanEc2InstanceWithFindings {
                ebs_volumes: self.ebs_volumes,
            }
        }
    }
}
impl OrganizationScanEc2InstanceWithFindings {
    /// Creates a new builder-style object to manufacture [`OrganizationScanEc2InstanceWithFindings`](crate::model::OrganizationScanEc2InstanceWithFindings).
    pub fn builder() -> crate::model::organization_scan_ec2_instance_with_findings::Builder {
        crate::model::organization_scan_ec2_instance_with_findings::Builder::default()
    }
}

/// <p>Organization-wide EBS volumes scan configuration.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationEbsVolumes {
    /// <p>Whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
    #[doc(hidden)]
    pub auto_enable: bool,
}
impl OrganizationEbsVolumes {
    /// <p>Whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
    pub fn auto_enable(&self) -> bool {
        self.auto_enable
    }
}
/// See [`OrganizationEbsVolumes`](crate::model::OrganizationEbsVolumes).
pub mod organization_ebs_volumes {

    /// A builder for [`OrganizationEbsVolumes`](crate::model::OrganizationEbsVolumes).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) auto_enable: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>Whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
        pub fn auto_enable(mut self, input: bool) -> Self {
            self.auto_enable = Some(input);
            self
        }
        /// <p>Whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
        pub fn set_auto_enable(mut self, input: std::option::Option<bool>) -> Self {
            self.auto_enable = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationEbsVolumes`](crate::model::OrganizationEbsVolumes).
        pub fn build(self) -> crate::model::OrganizationEbsVolumes {
            crate::model::OrganizationEbsVolumes {
                auto_enable: self.auto_enable.unwrap_or_default(),
            }
        }
    }
}
impl OrganizationEbsVolumes {
    /// Creates a new builder-style object to manufacture [`OrganizationEbsVolumes`](crate::model::OrganizationEbsVolumes).
    pub fn builder() -> crate::model::organization_ebs_volumes::Builder {
        crate::model::organization_ebs_volumes::Builder::default()
    }
}

/// <p>Organization-wide Kubernetes data sources configurations.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationKubernetesConfiguration {
    /// <p>Whether Kubernetes audit logs data source should be auto-enabled for new members joining the organization.</p>
    #[doc(hidden)]
    pub audit_logs: std::option::Option<crate::model::OrganizationKubernetesAuditLogsConfiguration>,
}
impl OrganizationKubernetesConfiguration {
    /// <p>Whether Kubernetes audit logs data source should be auto-enabled for new members joining the organization.</p>
    pub fn audit_logs(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationKubernetesAuditLogsConfiguration> {
        self.audit_logs.as_ref()
    }
}
/// See [`OrganizationKubernetesConfiguration`](crate::model::OrganizationKubernetesConfiguration).
pub mod organization_kubernetes_configuration {

    /// A builder for [`OrganizationKubernetesConfiguration`](crate::model::OrganizationKubernetesConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) audit_logs:
            std::option::Option<crate::model::OrganizationKubernetesAuditLogsConfiguration>,
    }
    impl Builder {
        /// <p>Whether Kubernetes audit logs data source should be auto-enabled for new members joining the organization.</p>
        pub fn audit_logs(
            mut self,
            input: crate::model::OrganizationKubernetesAuditLogsConfiguration,
        ) -> Self {
            self.audit_logs = Some(input);
            self
        }
        /// <p>Whether Kubernetes audit logs data source should be auto-enabled for new members joining the organization.</p>
        pub fn set_audit_logs(
            mut self,
            input: std::option::Option<crate::model::OrganizationKubernetesAuditLogsConfiguration>,
        ) -> Self {
            self.audit_logs = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationKubernetesConfiguration`](crate::model::OrganizationKubernetesConfiguration).
        pub fn build(self) -> crate::model::OrganizationKubernetesConfiguration {
            crate::model::OrganizationKubernetesConfiguration {
                audit_logs: self.audit_logs,
            }
        }
    }
}
impl OrganizationKubernetesConfiguration {
    /// Creates a new builder-style object to manufacture [`OrganizationKubernetesConfiguration`](crate::model::OrganizationKubernetesConfiguration).
    pub fn builder() -> crate::model::organization_kubernetes_configuration::Builder {
        crate::model::organization_kubernetes_configuration::Builder::default()
    }
}

/// <p>Organization-wide Kubernetes audit logs configuration.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationKubernetesAuditLogsConfiguration {
    /// <p>A value that contains information on whether Kubernetes audit logs should be enabled automatically as a data source for the organization.</p>
    #[doc(hidden)]
    pub auto_enable: bool,
}
impl OrganizationKubernetesAuditLogsConfiguration {
    /// <p>A value that contains information on whether Kubernetes audit logs should be enabled automatically as a data source for the organization.</p>
    pub fn auto_enable(&self) -> bool {
        self.auto_enable
    }
}
/// See [`OrganizationKubernetesAuditLogsConfiguration`](crate::model::OrganizationKubernetesAuditLogsConfiguration).
pub mod organization_kubernetes_audit_logs_configuration {

    /// A builder for [`OrganizationKubernetesAuditLogsConfiguration`](crate::model::OrganizationKubernetesAuditLogsConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) auto_enable: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>A value that contains information on whether Kubernetes audit logs should be enabled automatically as a data source for the organization.</p>
        pub fn auto_enable(mut self, input: bool) -> Self {
            self.auto_enable = Some(input);
            self
        }
        /// <p>A value that contains information on whether Kubernetes audit logs should be enabled automatically as a data source for the organization.</p>
        pub fn set_auto_enable(mut self, input: std::option::Option<bool>) -> Self {
            self.auto_enable = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationKubernetesAuditLogsConfiguration`](crate::model::OrganizationKubernetesAuditLogsConfiguration).
        pub fn build(self) -> crate::model::OrganizationKubernetesAuditLogsConfiguration {
            crate::model::OrganizationKubernetesAuditLogsConfiguration {
                auto_enable: self.auto_enable.unwrap_or_default(),
            }
        }
    }
}
impl OrganizationKubernetesAuditLogsConfiguration {
    /// Creates a new builder-style object to manufacture [`OrganizationKubernetesAuditLogsConfiguration`](crate::model::OrganizationKubernetesAuditLogsConfiguration).
    pub fn builder() -> crate::model::organization_kubernetes_audit_logs_configuration::Builder {
        crate::model::organization_kubernetes_audit_logs_configuration::Builder::default()
    }
}

/// <p>Describes whether S3 data event logs will be automatically enabled for new members of the organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationS3LogsConfiguration {
    /// <p>A value that contains information on whether S3 data event logs will be enabled automatically as a data source for the organization.</p>
    #[doc(hidden)]
    pub auto_enable: bool,
}
impl OrganizationS3LogsConfiguration {
    /// <p>A value that contains information on whether S3 data event logs will be enabled automatically as a data source for the organization.</p>
    pub fn auto_enable(&self) -> bool {
        self.auto_enable
    }
}
/// See [`OrganizationS3LogsConfiguration`](crate::model::OrganizationS3LogsConfiguration).
pub mod organization_s3_logs_configuration {

    /// A builder for [`OrganizationS3LogsConfiguration`](crate::model::OrganizationS3LogsConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) auto_enable: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>A value that contains information on whether S3 data event logs will be enabled automatically as a data source for the organization.</p>
        pub fn auto_enable(mut self, input: bool) -> Self {
            self.auto_enable = Some(input);
            self
        }
        /// <p>A value that contains information on whether S3 data event logs will be enabled automatically as a data source for the organization.</p>
        pub fn set_auto_enable(mut self, input: std::option::Option<bool>) -> Self {
            self.auto_enable = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationS3LogsConfiguration`](crate::model::OrganizationS3LogsConfiguration).
        pub fn build(self) -> crate::model::OrganizationS3LogsConfiguration {
            crate::model::OrganizationS3LogsConfiguration {
                auto_enable: self.auto_enable.unwrap_or_default(),
            }
        }
    }
}
impl OrganizationS3LogsConfiguration {
    /// Creates a new builder-style object to manufacture [`OrganizationS3LogsConfiguration`](crate::model::OrganizationS3LogsConfiguration).
    pub fn builder() -> crate::model::organization_s3_logs_configuration::Builder {
        crate::model::organization_s3_logs_configuration::Builder::default()
    }
}

/// <p>Contains information about the accounts that weren't processed.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct UnprocessedAccount {
    /// <p>The Amazon Web Services account ID.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>A reason why the account hasn't been processed.</p>
    #[doc(hidden)]
    pub result: std::option::Option<std::string::String>,
}
impl UnprocessedAccount {
    /// <p>The Amazon Web Services account ID.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>A reason why the account hasn't been processed.</p>
    pub fn result(&self) -> std::option::Option<&str> {
        self.result.as_deref()
    }
}
/// See [`UnprocessedAccount`](crate::model::UnprocessedAccount).
pub mod unprocessed_account {

    /// A builder for [`UnprocessedAccount`](crate::model::UnprocessedAccount).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) result: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The Amazon Web Services account ID.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The Amazon Web Services account ID.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>A reason why the account hasn't been processed.</p>
        pub fn result(mut self, input: impl Into<std::string::String>) -> Self {
            self.result = Some(input.into());
            self
        }
        /// <p>A reason why the account hasn't been processed.</p>
        pub fn set_result(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.result = input;
            self
        }
        /// Consumes the builder and constructs a [`UnprocessedAccount`](crate::model::UnprocessedAccount).
        pub fn build(self) -> crate::model::UnprocessedAccount {
            crate::model::UnprocessedAccount {
                account_id: self.account_id,
                result: self.result,
            }
        }
    }
}
impl UnprocessedAccount {
    /// Creates a new builder-style object to manufacture [`UnprocessedAccount`](crate::model::UnprocessedAccount).
    pub fn builder() -> crate::model::unprocessed_account::Builder {
        crate::model::unprocessed_account::Builder::default()
    }
}

/// <p>Contains information about which data sources are enabled.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DataSourceConfigurations {
    /// <p>Describes whether S3 data event logs are enabled as a data source.</p>
    #[doc(hidden)]
    pub s3_logs: std::option::Option<crate::model::S3LogsConfiguration>,
    /// <p>Describes whether any Kubernetes logs are enabled as data sources.</p>
    #[doc(hidden)]
    pub kubernetes: std::option::Option<crate::model::KubernetesConfiguration>,
    /// <p>Describes whether Malware Protection is enabled as a data source.</p>
    #[doc(hidden)]
    pub malware_protection: std::option::Option<crate::model::MalwareProtectionConfiguration>,
}
impl DataSourceConfigurations {
    /// <p>Describes whether S3 data event logs are enabled as a data source.</p>
    pub fn s3_logs(&self) -> std::option::Option<&crate::model::S3LogsConfiguration> {
        self.s3_logs.as_ref()
    }
    /// <p>Describes whether any Kubernetes logs are enabled as data sources.</p>
    pub fn kubernetes(&self) -> std::option::Option<&crate::model::KubernetesConfiguration> {
        self.kubernetes.as_ref()
    }
    /// <p>Describes whether Malware Protection is enabled as a data source.</p>
    pub fn malware_protection(
        &self,
    ) -> std::option::Option<&crate::model::MalwareProtectionConfiguration> {
        self.malware_protection.as_ref()
    }
}
/// See [`DataSourceConfigurations`](crate::model::DataSourceConfigurations).
pub mod data_source_configurations {

    /// A builder for [`DataSourceConfigurations`](crate::model::DataSourceConfigurations).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) s3_logs: std::option::Option<crate::model::S3LogsConfiguration>,
        pub(crate) kubernetes: std::option::Option<crate::model::KubernetesConfiguration>,
        pub(crate) malware_protection:
            std::option::Option<crate::model::MalwareProtectionConfiguration>,
    }
    impl Builder {
        /// <p>Describes whether S3 data event logs are enabled as a data source.</p>
        pub fn s3_logs(mut self, input: crate::model::S3LogsConfiguration) -> Self {
            self.s3_logs = Some(input);
            self
        }
        /// <p>Describes whether S3 data event logs are enabled as a data source.</p>
        pub fn set_s3_logs(
            mut self,
            input: std::option::Option<crate::model::S3LogsConfiguration>,
        ) -> Self {
            self.s3_logs = input;
            self
        }
        /// <p>Describes whether any Kubernetes logs are enabled as data sources.</p>
        pub fn kubernetes(mut self, input: crate::model::KubernetesConfiguration) -> Self {
            self.kubernetes = Some(input);
            self
        }
        /// <p>Describes whether any Kubernetes logs are enabled as data sources.</p>
        pub fn set_kubernetes(
            mut self,
            input: std::option::Option<crate::model::KubernetesConfiguration>,
        ) -> Self {
            self.kubernetes = input;
            self
        }
        /// <p>Describes whether Malware Protection is enabled as a data source.</p>
        pub fn malware_protection(
            mut self,
            input: crate::model::MalwareProtectionConfiguration,
        ) -> Self {
            self.malware_protection = Some(input);
            self
        }
        /// <p>Describes whether Malware Protection is enabled as a data source.</p>
        pub fn set_malware_protection(
            mut self,
            input: std::option::Option<crate::model::MalwareProtectionConfiguration>,
        ) -> Self {
            self.malware_protection = input;
            self
        }
        /// Consumes the builder and constructs a [`DataSourceConfigurations`](crate::model::DataSourceConfigurations).
        pub fn build(self) -> crate::model::DataSourceConfigurations {
            crate::model::DataSourceConfigurations {
                s3_logs: self.s3_logs,
                kubernetes: self.kubernetes,
                malware_protection: self.malware_protection,
            }
        }
    }
}
impl DataSourceConfigurations {
    /// Creates a new builder-style object to manufacture [`DataSourceConfigurations`](crate::model::DataSourceConfigurations).
    pub fn builder() -> crate::model::data_source_configurations::Builder {
        crate::model::data_source_configurations::Builder::default()
    }
}

/// <p>Describes whether Malware Protection will be enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct MalwareProtectionConfiguration {
    /// <p>Describes the configuration of Malware Protection for EC2 instances with findings.</p>
    #[doc(hidden)]
    pub scan_ec2_instance_with_findings:
        std::option::Option<crate::model::ScanEc2InstanceWithFindings>,
}
impl MalwareProtectionConfiguration {
    /// <p>Describes the configuration of Malware Protection for EC2 instances with findings.</p>
    pub fn scan_ec2_instance_with_findings(
        &self,
    ) -> std::option::Option<&crate::model::ScanEc2InstanceWithFindings> {
        self.scan_ec2_instance_with_findings.as_ref()
    }
}
/// See [`MalwareProtectionConfiguration`](crate::model::MalwareProtectionConfiguration).
pub mod malware_protection_configuration {

    /// A builder for [`MalwareProtectionConfiguration`](crate::model::MalwareProtectionConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scan_ec2_instance_with_findings:
            std::option::Option<crate::model::ScanEc2InstanceWithFindings>,
    }
    impl Builder {
        /// <p>Describes the configuration of Malware Protection for EC2 instances with findings.</p>
        pub fn scan_ec2_instance_with_findings(
            mut self,
            input: crate::model::ScanEc2InstanceWithFindings,
        ) -> Self {
            self.scan_ec2_instance_with_findings = Some(input);
            self
        }
        /// <p>Describes the configuration of Malware Protection for EC2 instances with findings.</p>
        pub fn set_scan_ec2_instance_with_findings(
            mut self,
            input: std::option::Option<crate::model::ScanEc2InstanceWithFindings>,
        ) -> Self {
            self.scan_ec2_instance_with_findings = input;
            self
        }
        /// Consumes the builder and constructs a [`MalwareProtectionConfiguration`](crate::model::MalwareProtectionConfiguration).
        pub fn build(self) -> crate::model::MalwareProtectionConfiguration {
            crate::model::MalwareProtectionConfiguration {
                scan_ec2_instance_with_findings: self.scan_ec2_instance_with_findings,
            }
        }
    }
}
impl MalwareProtectionConfiguration {
    /// Creates a new builder-style object to manufacture [`MalwareProtectionConfiguration`](crate::model::MalwareProtectionConfiguration).
    pub fn builder() -> crate::model::malware_protection_configuration::Builder {
        crate::model::malware_protection_configuration::Builder::default()
    }
}

/// <p>Describes whether Malware Protection for EC2 instances with findings will be enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanEc2InstanceWithFindings {
    /// <p>Describes the configuration for scanning EBS volumes as data source.</p>
    #[doc(hidden)]
    pub ebs_volumes: bool,
}
impl ScanEc2InstanceWithFindings {
    /// <p>Describes the configuration for scanning EBS volumes as data source.</p>
    pub fn ebs_volumes(&self) -> bool {
        self.ebs_volumes
    }
}
/// See [`ScanEc2InstanceWithFindings`](crate::model::ScanEc2InstanceWithFindings).
pub mod scan_ec2_instance_with_findings {

    /// A builder for [`ScanEc2InstanceWithFindings`](crate::model::ScanEc2InstanceWithFindings).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) ebs_volumes: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>Describes the configuration for scanning EBS volumes as data source.</p>
        pub fn ebs_volumes(mut self, input: bool) -> Self {
            self.ebs_volumes = Some(input);
            self
        }
        /// <p>Describes the configuration for scanning EBS volumes as data source.</p>
        pub fn set_ebs_volumes(mut self, input: std::option::Option<bool>) -> Self {
            self.ebs_volumes = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanEc2InstanceWithFindings`](crate::model::ScanEc2InstanceWithFindings).
        pub fn build(self) -> crate::model::ScanEc2InstanceWithFindings {
            crate::model::ScanEc2InstanceWithFindings {
                ebs_volumes: self.ebs_volumes.unwrap_or_default(),
            }
        }
    }
}
impl ScanEc2InstanceWithFindings {
    /// Creates a new builder-style object to manufacture [`ScanEc2InstanceWithFindings`](crate::model::ScanEc2InstanceWithFindings).
    pub fn builder() -> crate::model::scan_ec2_instance_with_findings::Builder {
        crate::model::scan_ec2_instance_with_findings::Builder::default()
    }
}

/// <p>Describes whether any Kubernetes data sources are enabled.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesConfiguration {
    /// <p>The status of Kubernetes audit logs as a data source.</p>
    #[doc(hidden)]
    pub audit_logs: std::option::Option<crate::model::KubernetesAuditLogsConfiguration>,
}
impl KubernetesConfiguration {
    /// <p>The status of Kubernetes audit logs as a data source.</p>
    pub fn audit_logs(
        &self,
    ) -> std::option::Option<&crate::model::KubernetesAuditLogsConfiguration> {
        self.audit_logs.as_ref()
    }
}
/// See [`KubernetesConfiguration`](crate::model::KubernetesConfiguration).
pub mod kubernetes_configuration {

    /// A builder for [`KubernetesConfiguration`](crate::model::KubernetesConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) audit_logs: std::option::Option<crate::model::KubernetesAuditLogsConfiguration>,
    }
    impl Builder {
        /// <p>The status of Kubernetes audit logs as a data source.</p>
        pub fn audit_logs(mut self, input: crate::model::KubernetesAuditLogsConfiguration) -> Self {
            self.audit_logs = Some(input);
            self
        }
        /// <p>The status of Kubernetes audit logs as a data source.</p>
        pub fn set_audit_logs(
            mut self,
            input: std::option::Option<crate::model::KubernetesAuditLogsConfiguration>,
        ) -> Self {
            self.audit_logs = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesConfiguration`](crate::model::KubernetesConfiguration).
        pub fn build(self) -> crate::model::KubernetesConfiguration {
            crate::model::KubernetesConfiguration {
                audit_logs: self.audit_logs,
            }
        }
    }
}
impl KubernetesConfiguration {
    /// Creates a new builder-style object to manufacture [`KubernetesConfiguration`](crate::model::KubernetesConfiguration).
    pub fn builder() -> crate::model::kubernetes_configuration::Builder {
        crate::model::kubernetes_configuration::Builder::default()
    }
}

/// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesAuditLogsConfiguration {
    /// <p>The status of Kubernetes audit logs as a data source.</p>
    #[doc(hidden)]
    pub enable: bool,
}
impl KubernetesAuditLogsConfiguration {
    /// <p>The status of Kubernetes audit logs as a data source.</p>
    pub fn enable(&self) -> bool {
        self.enable
    }
}
/// See [`KubernetesAuditLogsConfiguration`](crate::model::KubernetesAuditLogsConfiguration).
pub mod kubernetes_audit_logs_configuration {

    /// A builder for [`KubernetesAuditLogsConfiguration`](crate::model::KubernetesAuditLogsConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) enable: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>The status of Kubernetes audit logs as a data source.</p>
        pub fn enable(mut self, input: bool) -> Self {
            self.enable = Some(input);
            self
        }
        /// <p>The status of Kubernetes audit logs as a data source.</p>
        pub fn set_enable(mut self, input: std::option::Option<bool>) -> Self {
            self.enable = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesAuditLogsConfiguration`](crate::model::KubernetesAuditLogsConfiguration).
        pub fn build(self) -> crate::model::KubernetesAuditLogsConfiguration {
            crate::model::KubernetesAuditLogsConfiguration {
                enable: self.enable.unwrap_or_default(),
            }
        }
    }
}
impl KubernetesAuditLogsConfiguration {
    /// Creates a new builder-style object to manufacture [`KubernetesAuditLogsConfiguration`](crate::model::KubernetesAuditLogsConfiguration).
    pub fn builder() -> crate::model::kubernetes_audit_logs_configuration::Builder {
        crate::model::kubernetes_audit_logs_configuration::Builder::default()
    }
}

/// <p>Describes whether S3 data event logs will be enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct S3LogsConfiguration {
    /// <p> The status of S3 data event logs as a data source.</p>
    #[doc(hidden)]
    pub enable: bool,
}
impl S3LogsConfiguration {
    /// <p> The status of S3 data event logs as a data source.</p>
    pub fn enable(&self) -> bool {
        self.enable
    }
}
/// See [`S3LogsConfiguration`](crate::model::S3LogsConfiguration).
pub mod s3_logs_configuration {

    /// A builder for [`S3LogsConfiguration`](crate::model::S3LogsConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) enable: std::option::Option<bool>,
    }
    impl Builder {
        /// <p> The status of S3 data event logs as a data source.</p>
        pub fn enable(mut self, input: bool) -> Self {
            self.enable = Some(input);
            self
        }
        /// <p> The status of S3 data event logs as a data source.</p>
        pub fn set_enable(mut self, input: std::option::Option<bool>) -> Self {
            self.enable = input;
            self
        }
        /// Consumes the builder and constructs a [`S3LogsConfiguration`](crate::model::S3LogsConfiguration).
        pub fn build(self) -> crate::model::S3LogsConfiguration {
            crate::model::S3LogsConfiguration {
                enable: self.enable.unwrap_or_default(),
            }
        }
    }
}
impl S3LogsConfiguration {
    /// Creates a new builder-style object to manufacture [`S3LogsConfiguration`](crate::model::S3LogsConfiguration).
    pub fn builder() -> crate::model::s3_logs_configuration::Builder {
        crate::model::s3_logs_configuration::Builder::default()
    }
}

/// When writing a match expression against `EbsSnapshotPreservation`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let ebssnapshotpreservation = unimplemented!();
/// match ebssnapshotpreservation {
///     EbsSnapshotPreservation::NoRetention => { /* ... */ },
///     EbsSnapshotPreservation::RetentionWithFinding => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `ebssnapshotpreservation` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `EbsSnapshotPreservation::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `EbsSnapshotPreservation::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `EbsSnapshotPreservation::NewFeature` is defined.
/// Specifically, when `ebssnapshotpreservation` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `EbsSnapshotPreservation::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum EbsSnapshotPreservation {
    #[allow(missing_docs)] // documentation missing in model
    NoRetention,
    #[allow(missing_docs)] // documentation missing in model
    RetentionWithFinding,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for EbsSnapshotPreservation {
    fn from(s: &str) -> Self {
        match s {
            "NO_RETENTION" => EbsSnapshotPreservation::NoRetention,
            "RETENTION_WITH_FINDING" => EbsSnapshotPreservation::RetentionWithFinding,
            other => EbsSnapshotPreservation::Unknown(crate::types::UnknownVariantValue(
                other.to_owned(),
            )),
        }
    }
}
impl std::str::FromStr for EbsSnapshotPreservation {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(EbsSnapshotPreservation::from(s))
    }
}
impl EbsSnapshotPreservation {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            EbsSnapshotPreservation::NoRetention => "NO_RETENTION",
            EbsSnapshotPreservation::RetentionWithFinding => "RETENTION_WITH_FINDING",
            EbsSnapshotPreservation::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["NO_RETENTION", "RETENTION_WITH_FINDING"]
    }
}
impl AsRef<str> for EbsSnapshotPreservation {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information about criteria used to filter resources before triggering malware scan.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanResourceCriteria {
    /// <p>Represents condition that when matched will allow a malware scan for a certain resource.</p>
    #[doc(hidden)]
    pub include: std::option::Option<
        std::collections::HashMap<crate::model::ScanCriterionKey, crate::model::ScanCondition>,
    >,
    /// <p>Represents condition that when matched will prevent a malware scan for a certain resource.</p>
    #[doc(hidden)]
    pub exclude: std::option::Option<
        std::collections::HashMap<crate::model::ScanCriterionKey, crate::model::ScanCondition>,
    >,
}
impl ScanResourceCriteria {
    /// <p>Represents condition that when matched will allow a malware scan for a certain resource.</p>
    pub fn include(
        &self,
    ) -> std::option::Option<
        &std::collections::HashMap<crate::model::ScanCriterionKey, crate::model::ScanCondition>,
    > {
        self.include.as_ref()
    }
    /// <p>Represents condition that when matched will prevent a malware scan for a certain resource.</p>
    pub fn exclude(
        &self,
    ) -> std::option::Option<
        &std::collections::HashMap<crate::model::ScanCriterionKey, crate::model::ScanCondition>,
    > {
        self.exclude.as_ref()
    }
}
/// See [`ScanResourceCriteria`](crate::model::ScanResourceCriteria).
pub mod scan_resource_criteria {

    /// A builder for [`ScanResourceCriteria`](crate::model::ScanResourceCriteria).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) include: std::option::Option<
            std::collections::HashMap<crate::model::ScanCriterionKey, crate::model::ScanCondition>,
        >,
        pub(crate) exclude: std::option::Option<
            std::collections::HashMap<crate::model::ScanCriterionKey, crate::model::ScanCondition>,
        >,
    }
    impl Builder {
        /// Adds a key-value pair to `include`.
        ///
        /// To override the contents of this collection use [`set_include`](Self::set_include).
        ///
        /// <p>Represents condition that when matched will allow a malware scan for a certain resource.</p>
        pub fn include(
            mut self,
            k: crate::model::ScanCriterionKey,
            v: crate::model::ScanCondition,
        ) -> Self {
            let mut hash_map = self.include.unwrap_or_default();
            hash_map.insert(k, v);
            self.include = Some(hash_map);
            self
        }
        /// <p>Represents condition that when matched will allow a malware scan for a certain resource.</p>
        pub fn set_include(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<
                    crate::model::ScanCriterionKey,
                    crate::model::ScanCondition,
                >,
            >,
        ) -> Self {
            self.include = input;
            self
        }
        /// Adds a key-value pair to `exclude`.
        ///
        /// To override the contents of this collection use [`set_exclude`](Self::set_exclude).
        ///
        /// <p>Represents condition that when matched will prevent a malware scan for a certain resource.</p>
        pub fn exclude(
            mut self,
            k: crate::model::ScanCriterionKey,
            v: crate::model::ScanCondition,
        ) -> Self {
            let mut hash_map = self.exclude.unwrap_or_default();
            hash_map.insert(k, v);
            self.exclude = Some(hash_map);
            self
        }
        /// <p>Represents condition that when matched will prevent a malware scan for a certain resource.</p>
        pub fn set_exclude(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<
                    crate::model::ScanCriterionKey,
                    crate::model::ScanCondition,
                >,
            >,
        ) -> Self {
            self.exclude = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanResourceCriteria`](crate::model::ScanResourceCriteria).
        pub fn build(self) -> crate::model::ScanResourceCriteria {
            crate::model::ScanResourceCriteria {
                include: self.include,
                exclude: self.exclude,
            }
        }
    }
}
impl ScanResourceCriteria {
    /// Creates a new builder-style object to manufacture [`ScanResourceCriteria`](crate::model::ScanResourceCriteria).
    pub fn builder() -> crate::model::scan_resource_criteria::Builder {
        crate::model::scan_resource_criteria::Builder::default()
    }
}

/// <p>Contains information about the condition.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanCondition {
    /// <p>Represents an <i>mapEqual</i> <b></b> condition to be applied to a single field when triggering for malware scan.</p>
    #[doc(hidden)]
    pub map_equals: std::option::Option<std::vec::Vec<crate::model::ScanConditionPair>>,
}
impl ScanCondition {
    /// <p>Represents an <i>mapEqual</i> <b></b> condition to be applied to a single field when triggering for malware scan.</p>
    pub fn map_equals(&self) -> std::option::Option<&[crate::model::ScanConditionPair]> {
        self.map_equals.as_deref()
    }
}
/// See [`ScanCondition`](crate::model::ScanCondition).
pub mod scan_condition {

    /// A builder for [`ScanCondition`](crate::model::ScanCondition).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) map_equals: std::option::Option<std::vec::Vec<crate::model::ScanConditionPair>>,
    }
    impl Builder {
        /// Appends an item to `map_equals`.
        ///
        /// To override the contents of this collection use [`set_map_equals`](Self::set_map_equals).
        ///
        /// <p>Represents an <i>mapEqual</i> <b></b> condition to be applied to a single field when triggering for malware scan.</p>
        pub fn map_equals(mut self, input: crate::model::ScanConditionPair) -> Self {
            let mut v = self.map_equals.unwrap_or_default();
            v.push(input);
            self.map_equals = Some(v);
            self
        }
        /// <p>Represents an <i>mapEqual</i> <b></b> condition to be applied to a single field when triggering for malware scan.</p>
        pub fn set_map_equals(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ScanConditionPair>>,
        ) -> Self {
            self.map_equals = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanCondition`](crate::model::ScanCondition).
        pub fn build(self) -> crate::model::ScanCondition {
            crate::model::ScanCondition {
                map_equals: self.map_equals,
            }
        }
    }
}
impl ScanCondition {
    /// Creates a new builder-style object to manufacture [`ScanCondition`](crate::model::ScanCondition).
    pub fn builder() -> crate::model::scan_condition::Builder {
        crate::model::scan_condition::Builder::default()
    }
}

/// <p>Represents key, value pair to be matched against given resource property.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanConditionPair {
    /// <p>Represents <i>key</i> <b></b> in the map condition.</p>
    #[doc(hidden)]
    pub key: std::option::Option<std::string::String>,
    /// <p>Represents optional <i>value</i> <b></b> in the map condition. If not specified, only <i>key</i> <b></b> will be matched.</p>
    #[doc(hidden)]
    pub value: std::option::Option<std::string::String>,
}
impl ScanConditionPair {
    /// <p>Represents <i>key</i> <b></b> in the map condition.</p>
    pub fn key(&self) -> std::option::Option<&str> {
        self.key.as_deref()
    }
    /// <p>Represents optional <i>value</i> <b></b> in the map condition. If not specified, only <i>key</i> <b></b> will be matched.</p>
    pub fn value(&self) -> std::option::Option<&str> {
        self.value.as_deref()
    }
}
/// See [`ScanConditionPair`](crate::model::ScanConditionPair).
pub mod scan_condition_pair {

    /// A builder for [`ScanConditionPair`](crate::model::ScanConditionPair).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) key: std::option::Option<std::string::String>,
        pub(crate) value: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>Represents <i>key</i> <b></b> in the map condition.</p>
        pub fn key(mut self, input: impl Into<std::string::String>) -> Self {
            self.key = Some(input.into());
            self
        }
        /// <p>Represents <i>key</i> <b></b> in the map condition.</p>
        pub fn set_key(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.key = input;
            self
        }
        /// <p>Represents optional <i>value</i> <b></b> in the map condition. If not specified, only <i>key</i> <b></b> will be matched.</p>
        pub fn value(mut self, input: impl Into<std::string::String>) -> Self {
            self.value = Some(input.into());
            self
        }
        /// <p>Represents optional <i>value</i> <b></b> in the map condition. If not specified, only <i>key</i> <b></b> will be matched.</p>
        pub fn set_value(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.value = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanConditionPair`](crate::model::ScanConditionPair).
        pub fn build(self) -> crate::model::ScanConditionPair {
            crate::model::ScanConditionPair {
                key: self.key,
                value: self.value,
            }
        }
    }
}
impl ScanConditionPair {
    /// Creates a new builder-style object to manufacture [`ScanConditionPair`](crate::model::ScanConditionPair).
    pub fn builder() -> crate::model::scan_condition_pair::Builder {
        crate::model::scan_condition_pair::Builder::default()
    }
}

/// When writing a match expression against `ScanCriterionKey`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let scancriterionkey = unimplemented!();
/// match scancriterionkey {
///     ScanCriterionKey::Ec2InstanceTag => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `scancriterionkey` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `ScanCriterionKey::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `ScanCriterionKey::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `ScanCriterionKey::NewFeature` is defined.
/// Specifically, when `scancriterionkey` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `ScanCriterionKey::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
/// <p>An enum value representing possible resource properties to match with given scan condition.</p>
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum ScanCriterionKey {
    #[allow(missing_docs)] // documentation missing in model
    Ec2InstanceTag,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for ScanCriterionKey {
    fn from(s: &str) -> Self {
        match s {
            "EC2_INSTANCE_TAG" => ScanCriterionKey::Ec2InstanceTag,
            other => ScanCriterionKey::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for ScanCriterionKey {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(ScanCriterionKey::from(s))
    }
}
impl ScanCriterionKey {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            ScanCriterionKey::Ec2InstanceTag => "EC2_INSTANCE_TAG",
            ScanCriterionKey::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["EC2_INSTANCE_TAG"]
    }
}
impl AsRef<str> for ScanCriterionKey {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// When writing a match expression against `Feedback`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let feedback = unimplemented!();
/// match feedback {
///     Feedback::NotUseful => { /* ... */ },
///     Feedback::Useful => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `feedback` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `Feedback::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `Feedback::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `Feedback::NewFeature` is defined.
/// Specifically, when `feedback` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `Feedback::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum Feedback {
    #[allow(missing_docs)] // documentation missing in model
    NotUseful,
    #[allow(missing_docs)] // documentation missing in model
    Useful,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for Feedback {
    fn from(s: &str) -> Self {
        match s {
            "NOT_USEFUL" => Feedback::NotUseful,
            "USEFUL" => Feedback::Useful,
            other => Feedback::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for Feedback {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(Feedback::from(s))
    }
}
impl Feedback {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            Feedback::NotUseful => "NOT_USEFUL",
            Feedback::Useful => "USEFUL",
            Feedback::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["NOT_USEFUL", "USEFUL"]
    }
}
impl AsRef<str> for Feedback {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information about the criteria used for querying findings.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct FindingCriteria {
    /// <p>Represents a map of finding properties that match specified conditions and values when querying findings.</p>
    #[doc(hidden)]
    pub criterion: std::option::Option<
        std::collections::HashMap<std::string::String, crate::model::Condition>,
    >,
}
impl FindingCriteria {
    /// <p>Represents a map of finding properties that match specified conditions and values when querying findings.</p>
    pub fn criterion(
        &self,
    ) -> std::option::Option<&std::collections::HashMap<std::string::String, crate::model::Condition>>
    {
        self.criterion.as_ref()
    }
}
/// See [`FindingCriteria`](crate::model::FindingCriteria).
pub mod finding_criteria {

    /// A builder for [`FindingCriteria`](crate::model::FindingCriteria).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) criterion: std::option::Option<
            std::collections::HashMap<std::string::String, crate::model::Condition>,
        >,
    }
    impl Builder {
        /// Adds a key-value pair to `criterion`.
        ///
        /// To override the contents of this collection use [`set_criterion`](Self::set_criterion).
        ///
        /// <p>Represents a map of finding properties that match specified conditions and values when querying findings.</p>
        pub fn criterion(
            mut self,
            k: impl Into<std::string::String>,
            v: crate::model::Condition,
        ) -> Self {
            let mut hash_map = self.criterion.unwrap_or_default();
            hash_map.insert(k.into(), v);
            self.criterion = Some(hash_map);
            self
        }
        /// <p>Represents a map of finding properties that match specified conditions and values when querying findings.</p>
        pub fn set_criterion(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<std::string::String, crate::model::Condition>,
            >,
        ) -> Self {
            self.criterion = input;
            self
        }
        /// Consumes the builder and constructs a [`FindingCriteria`](crate::model::FindingCriteria).
        pub fn build(self) -> crate::model::FindingCriteria {
            crate::model::FindingCriteria {
                criterion: self.criterion,
            }
        }
    }
}
impl FindingCriteria {
    /// Creates a new builder-style object to manufacture [`FindingCriteria`](crate::model::FindingCriteria).
    pub fn builder() -> crate::model::finding_criteria::Builder {
        crate::model::finding_criteria::Builder::default()
    }
}

/// <p>Contains information about the condition.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Condition {
    /// <p>Represents the <i>equal</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    #[doc(hidden)]
    pub eq: std::option::Option<std::vec::Vec<std::string::String>>,
    /// <p>Represents the <i>not equal</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    #[doc(hidden)]
    pub neq: std::option::Option<std::vec::Vec<std::string::String>>,
    /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    #[doc(hidden)]
    pub gt: i32,
    /// <p>Represents a <i>greater than or equal</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    #[doc(hidden)]
    pub gte: i32,
    /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    #[doc(hidden)]
    pub lt: i32,
    /// <p>Represents a <i>less than or equal</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    #[doc(hidden)]
    pub lte: i32,
    /// <p>Represents an <i>equal</i> <b></b> condition to be applied to a single field when querying for findings.</p>
    #[doc(hidden)]
    pub equals: std::option::Option<std::vec::Vec<std::string::String>>,
    /// <p>Represents a <i>not equal</i> <b></b> condition to be applied to a single field when querying for findings.</p>
    #[doc(hidden)]
    pub not_equals: std::option::Option<std::vec::Vec<std::string::String>>,
    /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for findings.</p>
    #[doc(hidden)]
    pub greater_than: i64,
    /// <p>Represents a <i>greater than or equal</i> condition to be applied to a single field when querying for findings.</p>
    #[doc(hidden)]
    pub greater_than_or_equal: i64,
    /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for findings.</p>
    #[doc(hidden)]
    pub less_than: i64,
    /// <p>Represents a <i>less than or equal</i> condition to be applied to a single field when querying for findings.</p>
    #[doc(hidden)]
    pub less_than_or_equal: i64,
}
impl Condition {
    /// <p>Represents the <i>equal</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    pub fn eq(&self) -> std::option::Option<&[std::string::String]> {
        self.eq.as_deref()
    }
    /// <p>Represents the <i>not equal</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    pub fn neq(&self) -> std::option::Option<&[std::string::String]> {
        self.neq.as_deref()
    }
    /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    pub fn gt(&self) -> i32 {
        self.gt
    }
    /// <p>Represents a <i>greater than or equal</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    pub fn gte(&self) -> i32 {
        self.gte
    }
    /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    pub fn lt(&self) -> i32 {
        self.lt
    }
    /// <p>Represents a <i>less than or equal</i> condition to be applied to a single field when querying for findings.</p>
    #[deprecated]
    pub fn lte(&self) -> i32 {
        self.lte
    }
    /// <p>Represents an <i>equal</i> <b></b> condition to be applied to a single field when querying for findings.</p>
    pub fn equals(&self) -> std::option::Option<&[std::string::String]> {
        self.equals.as_deref()
    }
    /// <p>Represents a <i>not equal</i> <b></b> condition to be applied to a single field when querying for findings.</p>
    pub fn not_equals(&self) -> std::option::Option<&[std::string::String]> {
        self.not_equals.as_deref()
    }
    /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for findings.</p>
    pub fn greater_than(&self) -> i64 {
        self.greater_than
    }
    /// <p>Represents a <i>greater than or equal</i> condition to be applied to a single field when querying for findings.</p>
    pub fn greater_than_or_equal(&self) -> i64 {
        self.greater_than_or_equal
    }
    /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for findings.</p>
    pub fn less_than(&self) -> i64 {
        self.less_than
    }
    /// <p>Represents a <i>less than or equal</i> condition to be applied to a single field when querying for findings.</p>
    pub fn less_than_or_equal(&self) -> i64 {
        self.less_than_or_equal
    }
}
/// See [`Condition`](crate::model::Condition).
pub mod condition {

    /// A builder for [`Condition`](crate::model::Condition).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) eq: std::option::Option<std::vec::Vec<std::string::String>>,
        pub(crate) neq: std::option::Option<std::vec::Vec<std::string::String>>,
        pub(crate) gt: std::option::Option<i32>,
        pub(crate) gte: std::option::Option<i32>,
        pub(crate) lt: std::option::Option<i32>,
        pub(crate) lte: std::option::Option<i32>,
        pub(crate) equals: std::option::Option<std::vec::Vec<std::string::String>>,
        pub(crate) not_equals: std::option::Option<std::vec::Vec<std::string::String>>,
        pub(crate) greater_than: std::option::Option<i64>,
        pub(crate) greater_than_or_equal: std::option::Option<i64>,
        pub(crate) less_than: std::option::Option<i64>,
        pub(crate) less_than_or_equal: std::option::Option<i64>,
    }
    impl Builder {
        /// Appends an item to `eq`.
        ///
        /// To override the contents of this collection use [`set_eq`](Self::set_eq).
        ///
        /// <p>Represents the <i>equal</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn eq(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.eq.unwrap_or_default();
            v.push(input.into());
            self.eq = Some(v);
            self
        }
        /// <p>Represents the <i>equal</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn set_eq(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.eq = input;
            self
        }
        /// Appends an item to `neq`.
        ///
        /// To override the contents of this collection use [`set_neq`](Self::set_neq).
        ///
        /// <p>Represents the <i>not equal</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn neq(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.neq.unwrap_or_default();
            v.push(input.into());
            self.neq = Some(v);
            self
        }
        /// <p>Represents the <i>not equal</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn set_neq(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.neq = input;
            self
        }
        /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn gt(mut self, input: i32) -> Self {
            self.gt = Some(input);
            self
        }
        /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn set_gt(mut self, input: std::option::Option<i32>) -> Self {
            self.gt = input;
            self
        }
        /// <p>Represents a <i>greater than or equal</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn gte(mut self, input: i32) -> Self {
            self.gte = Some(input);
            self
        }
        /// <p>Represents a <i>greater than or equal</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn set_gte(mut self, input: std::option::Option<i32>) -> Self {
            self.gte = input;
            self
        }
        /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn lt(mut self, input: i32) -> Self {
            self.lt = Some(input);
            self
        }
        /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn set_lt(mut self, input: std::option::Option<i32>) -> Self {
            self.lt = input;
            self
        }
        /// <p>Represents a <i>less than or equal</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn lte(mut self, input: i32) -> Self {
            self.lte = Some(input);
            self
        }
        /// <p>Represents a <i>less than or equal</i> condition to be applied to a single field when querying for findings.</p>
        #[deprecated]
        pub fn set_lte(mut self, input: std::option::Option<i32>) -> Self {
            self.lte = input;
            self
        }
        /// Appends an item to `equals`.
        ///
        /// To override the contents of this collection use [`set_equals`](Self::set_equals).
        ///
        /// <p>Represents an <i>equal</i> <b></b> condition to be applied to a single field when querying for findings.</p>
        pub fn equals(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.equals.unwrap_or_default();
            v.push(input.into());
            self.equals = Some(v);
            self
        }
        /// <p>Represents an <i>equal</i> <b></b> condition to be applied to a single field when querying for findings.</p>
        pub fn set_equals(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.equals = input;
            self
        }
        /// Appends an item to `not_equals`.
        ///
        /// To override the contents of this collection use [`set_not_equals`](Self::set_not_equals).
        ///
        /// <p>Represents a <i>not equal</i> <b></b> condition to be applied to a single field when querying for findings.</p>
        pub fn not_equals(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.not_equals.unwrap_or_default();
            v.push(input.into());
            self.not_equals = Some(v);
            self
        }
        /// <p>Represents a <i>not equal</i> <b></b> condition to be applied to a single field when querying for findings.</p>
        pub fn set_not_equals(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.not_equals = input;
            self
        }
        /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for findings.</p>
        pub fn greater_than(mut self, input: i64) -> Self {
            self.greater_than = Some(input);
            self
        }
        /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for findings.</p>
        pub fn set_greater_than(mut self, input: std::option::Option<i64>) -> Self {
            self.greater_than = input;
            self
        }
        /// <p>Represents a <i>greater than or equal</i> condition to be applied to a single field when querying for findings.</p>
        pub fn greater_than_or_equal(mut self, input: i64) -> Self {
            self.greater_than_or_equal = Some(input);
            self
        }
        /// <p>Represents a <i>greater than or equal</i> condition to be applied to a single field when querying for findings.</p>
        pub fn set_greater_than_or_equal(mut self, input: std::option::Option<i64>) -> Self {
            self.greater_than_or_equal = input;
            self
        }
        /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for findings.</p>
        pub fn less_than(mut self, input: i64) -> Self {
            self.less_than = Some(input);
            self
        }
        /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for findings.</p>
        pub fn set_less_than(mut self, input: std::option::Option<i64>) -> Self {
            self.less_than = input;
            self
        }
        /// <p>Represents a <i>less than or equal</i> condition to be applied to a single field when querying for findings.</p>
        pub fn less_than_or_equal(mut self, input: i64) -> Self {
            self.less_than_or_equal = Some(input);
            self
        }
        /// <p>Represents a <i>less than or equal</i> condition to be applied to a single field when querying for findings.</p>
        pub fn set_less_than_or_equal(mut self, input: std::option::Option<i64>) -> Self {
            self.less_than_or_equal = input;
            self
        }
        /// Consumes the builder and constructs a [`Condition`](crate::model::Condition).
        pub fn build(self) -> crate::model::Condition {
            crate::model::Condition {
                eq: self.eq,
                neq: self.neq,
                gt: self.gt.unwrap_or_default(),
                gte: self.gte.unwrap_or_default(),
                lt: self.lt.unwrap_or_default(),
                lte: self.lte.unwrap_or_default(),
                equals: self.equals,
                not_equals: self.not_equals,
                greater_than: self.greater_than.unwrap_or_default(),
                greater_than_or_equal: self.greater_than_or_equal.unwrap_or_default(),
                less_than: self.less_than.unwrap_or_default(),
                less_than_or_equal: self.less_than_or_equal.unwrap_or_default(),
            }
        }
    }
}
impl Condition {
    /// Creates a new builder-style object to manufacture [`Condition`](crate::model::Condition).
    pub fn builder() -> crate::model::condition::Builder {
        crate::model::condition::Builder::default()
    }
}

/// When writing a match expression against `FilterAction`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let filteraction = unimplemented!();
/// match filteraction {
///     FilterAction::Archive => { /* ... */ },
///     FilterAction::Noop => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `filteraction` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `FilterAction::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `FilterAction::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `FilterAction::NewFeature` is defined.
/// Specifically, when `filteraction` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `FilterAction::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum FilterAction {
    #[allow(missing_docs)] // documentation missing in model
    Archive,
    #[allow(missing_docs)] // documentation missing in model
    Noop,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for FilterAction {
    fn from(s: &str) -> Self {
        match s {
            "ARCHIVE" => FilterAction::Archive,
            "NOOP" => FilterAction::Noop,
            other => FilterAction::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for FilterAction {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(FilterAction::from(s))
    }
}
impl FilterAction {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            FilterAction::Archive => "ARCHIVE",
            FilterAction::Noop => "NOOP",
            FilterAction::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["ARCHIVE", "NOOP"]
    }
}
impl AsRef<str> for FilterAction {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// When writing a match expression against `FindingPublishingFrequency`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let findingpublishingfrequency = unimplemented!();
/// match findingpublishingfrequency {
///     FindingPublishingFrequency::FifteenMinutes => { /* ... */ },
///     FindingPublishingFrequency::OneHour => { /* ... */ },
///     FindingPublishingFrequency::SixHours => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `findingpublishingfrequency` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `FindingPublishingFrequency::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `FindingPublishingFrequency::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `FindingPublishingFrequency::NewFeature` is defined.
/// Specifically, when `findingpublishingfrequency` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `FindingPublishingFrequency::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum FindingPublishingFrequency {
    #[allow(missing_docs)] // documentation missing in model
    FifteenMinutes,
    #[allow(missing_docs)] // documentation missing in model
    OneHour,
    #[allow(missing_docs)] // documentation missing in model
    SixHours,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for FindingPublishingFrequency {
    fn from(s: &str) -> Self {
        match s {
            "FIFTEEN_MINUTES" => FindingPublishingFrequency::FifteenMinutes,
            "ONE_HOUR" => FindingPublishingFrequency::OneHour,
            "SIX_HOURS" => FindingPublishingFrequency::SixHours,
            other => FindingPublishingFrequency::Unknown(crate::types::UnknownVariantValue(
                other.to_owned(),
            )),
        }
    }
}
impl std::str::FromStr for FindingPublishingFrequency {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(FindingPublishingFrequency::from(s))
    }
}
impl FindingPublishingFrequency {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            FindingPublishingFrequency::FifteenMinutes => "FIFTEEN_MINUTES",
            FindingPublishingFrequency::OneHour => "ONE_HOUR",
            FindingPublishingFrequency::SixHours => "SIX_HOURS",
            FindingPublishingFrequency::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["FIFTEEN_MINUTES", "ONE_HOUR", "SIX_HOURS"]
    }
}
impl AsRef<str> for FindingPublishingFrequency {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information about the publishing destination, including the ID, type, and status.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Destination {
    /// <p>The unique ID of the publishing destination.</p>
    #[doc(hidden)]
    pub destination_id: std::option::Option<std::string::String>,
    /// <p>The type of resource used for the publishing destination. Currently, only Amazon S3 buckets are supported.</p>
    #[doc(hidden)]
    pub destination_type: std::option::Option<crate::model::DestinationType>,
    /// <p>The status of the publishing destination.</p>
    #[doc(hidden)]
    pub status: std::option::Option<crate::model::PublishingStatus>,
}
impl Destination {
    /// <p>The unique ID of the publishing destination.</p>
    pub fn destination_id(&self) -> std::option::Option<&str> {
        self.destination_id.as_deref()
    }
    /// <p>The type of resource used for the publishing destination. Currently, only Amazon S3 buckets are supported.</p>
    pub fn destination_type(&self) -> std::option::Option<&crate::model::DestinationType> {
        self.destination_type.as_ref()
    }
    /// <p>The status of the publishing destination.</p>
    pub fn status(&self) -> std::option::Option<&crate::model::PublishingStatus> {
        self.status.as_ref()
    }
}
/// See [`Destination`](crate::model::Destination).
pub mod destination {

    /// A builder for [`Destination`](crate::model::Destination).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) destination_id: std::option::Option<std::string::String>,
        pub(crate) destination_type: std::option::Option<crate::model::DestinationType>,
        pub(crate) status: std::option::Option<crate::model::PublishingStatus>,
    }
    impl Builder {
        /// <p>The unique ID of the publishing destination.</p>
        pub fn destination_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.destination_id = Some(input.into());
            self
        }
        /// <p>The unique ID of the publishing destination.</p>
        pub fn set_destination_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.destination_id = input;
            self
        }
        /// <p>The type of resource used for the publishing destination. Currently, only Amazon S3 buckets are supported.</p>
        pub fn destination_type(mut self, input: crate::model::DestinationType) -> Self {
            self.destination_type = Some(input);
            self
        }
        /// <p>The type of resource used for the publishing destination. Currently, only Amazon S3 buckets are supported.</p>
        pub fn set_destination_type(
            mut self,
            input: std::option::Option<crate::model::DestinationType>,
        ) -> Self {
            self.destination_type = input;
            self
        }
        /// <p>The status of the publishing destination.</p>
        pub fn status(mut self, input: crate::model::PublishingStatus) -> Self {
            self.status = Some(input);
            self
        }
        /// <p>The status of the publishing destination.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::PublishingStatus>,
        ) -> Self {
            self.status = input;
            self
        }
        /// Consumes the builder and constructs a [`Destination`](crate::model::Destination).
        pub fn build(self) -> crate::model::Destination {
            crate::model::Destination {
                destination_id: self.destination_id,
                destination_type: self.destination_type,
                status: self.status,
            }
        }
    }
}
impl Destination {
    /// Creates a new builder-style object to manufacture [`Destination`](crate::model::Destination).
    pub fn builder() -> crate::model::destination::Builder {
        crate::model::destination::Builder::default()
    }
}

/// When writing a match expression against `PublishingStatus`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let publishingstatus = unimplemented!();
/// match publishingstatus {
///     PublishingStatus::PendingVerification => { /* ... */ },
///     PublishingStatus::Publishing => { /* ... */ },
///     PublishingStatus::Stopped => { /* ... */ },
///     PublishingStatus::UnableToPublishFixDestinationProperty => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `publishingstatus` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `PublishingStatus::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `PublishingStatus::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `PublishingStatus::NewFeature` is defined.
/// Specifically, when `publishingstatus` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `PublishingStatus::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum PublishingStatus {
    #[allow(missing_docs)] // documentation missing in model
    PendingVerification,
    #[allow(missing_docs)] // documentation missing in model
    Publishing,
    #[allow(missing_docs)] // documentation missing in model
    Stopped,
    #[allow(missing_docs)] // documentation missing in model
    UnableToPublishFixDestinationProperty,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for PublishingStatus {
    fn from(s: &str) -> Self {
        match s {
            "PENDING_VERIFICATION" => PublishingStatus::PendingVerification,
            "PUBLISHING" => PublishingStatus::Publishing,
            "STOPPED" => PublishingStatus::Stopped,
            "UNABLE_TO_PUBLISH_FIX_DESTINATION_PROPERTY" => {
                PublishingStatus::UnableToPublishFixDestinationProperty
            }
            other => PublishingStatus::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for PublishingStatus {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(PublishingStatus::from(s))
    }
}
impl PublishingStatus {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            PublishingStatus::PendingVerification => "PENDING_VERIFICATION",
            PublishingStatus::Publishing => "PUBLISHING",
            PublishingStatus::Stopped => "STOPPED",
            PublishingStatus::UnableToPublishFixDestinationProperty => {
                "UNABLE_TO_PUBLISH_FIX_DESTINATION_PROPERTY"
            }
            PublishingStatus::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &[
            "PENDING_VERIFICATION",
            "PUBLISHING",
            "STOPPED",
            "UNABLE_TO_PUBLISH_FIX_DESTINATION_PROPERTY",
        ]
    }
}
impl AsRef<str> for PublishingStatus {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// When writing a match expression against `DestinationType`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let destinationtype = unimplemented!();
/// match destinationtype {
///     DestinationType::S3 => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `destinationtype` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `DestinationType::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `DestinationType::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `DestinationType::NewFeature` is defined.
/// Specifically, when `destinationtype` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `DestinationType::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum DestinationType {
    #[allow(missing_docs)] // documentation missing in model
    S3,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for DestinationType {
    fn from(s: &str) -> Self {
        match s {
            "S3" => DestinationType::S3,
            other => DestinationType::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for DestinationType {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(DestinationType::from(s))
    }
}
impl DestinationType {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            DestinationType::S3 => "S3",
            DestinationType::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["S3"]
    }
}
impl AsRef<str> for DestinationType {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>The account within the organization specified as the GuardDuty delegated administrator.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct AdminAccount {
    /// <p>The Amazon Web Services account ID for the account.</p>
    #[doc(hidden)]
    pub admin_account_id: std::option::Option<std::string::String>,
    /// <p>Indicates whether the account is enabled as the delegated administrator.</p>
    #[doc(hidden)]
    pub admin_status: std::option::Option<crate::model::AdminStatus>,
}
impl AdminAccount {
    /// <p>The Amazon Web Services account ID for the account.</p>
    pub fn admin_account_id(&self) -> std::option::Option<&str> {
        self.admin_account_id.as_deref()
    }
    /// <p>Indicates whether the account is enabled as the delegated administrator.</p>
    pub fn admin_status(&self) -> std::option::Option<&crate::model::AdminStatus> {
        self.admin_status.as_ref()
    }
}
/// See [`AdminAccount`](crate::model::AdminAccount).
pub mod admin_account {

    /// A builder for [`AdminAccount`](crate::model::AdminAccount).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) admin_account_id: std::option::Option<std::string::String>,
        pub(crate) admin_status: std::option::Option<crate::model::AdminStatus>,
    }
    impl Builder {
        /// <p>The Amazon Web Services account ID for the account.</p>
        pub fn admin_account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.admin_account_id = Some(input.into());
            self
        }
        /// <p>The Amazon Web Services account ID for the account.</p>
        pub fn set_admin_account_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.admin_account_id = input;
            self
        }
        /// <p>Indicates whether the account is enabled as the delegated administrator.</p>
        pub fn admin_status(mut self, input: crate::model::AdminStatus) -> Self {
            self.admin_status = Some(input);
            self
        }
        /// <p>Indicates whether the account is enabled as the delegated administrator.</p>
        pub fn set_admin_status(
            mut self,
            input: std::option::Option<crate::model::AdminStatus>,
        ) -> Self {
            self.admin_status = input;
            self
        }
        /// Consumes the builder and constructs a [`AdminAccount`](crate::model::AdminAccount).
        pub fn build(self) -> crate::model::AdminAccount {
            crate::model::AdminAccount {
                admin_account_id: self.admin_account_id,
                admin_status: self.admin_status,
            }
        }
    }
}
impl AdminAccount {
    /// Creates a new builder-style object to manufacture [`AdminAccount`](crate::model::AdminAccount).
    pub fn builder() -> crate::model::admin_account::Builder {
        crate::model::admin_account::Builder::default()
    }
}

/// When writing a match expression against `AdminStatus`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let adminstatus = unimplemented!();
/// match adminstatus {
///     AdminStatus::DisableInProgress => { /* ... */ },
///     AdminStatus::Enabled => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `adminstatus` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `AdminStatus::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `AdminStatus::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `AdminStatus::NewFeature` is defined.
/// Specifically, when `adminstatus` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `AdminStatus::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum AdminStatus {
    #[allow(missing_docs)] // documentation missing in model
    DisableInProgress,
    #[allow(missing_docs)] // documentation missing in model
    Enabled,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for AdminStatus {
    fn from(s: &str) -> Self {
        match s {
            "DISABLE_IN_PROGRESS" => AdminStatus::DisableInProgress,
            "ENABLED" => AdminStatus::Enabled,
            other => AdminStatus::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for AdminStatus {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(AdminStatus::from(s))
    }
}
impl AdminStatus {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            AdminStatus::DisableInProgress => "DISABLE_IN_PROGRESS",
            AdminStatus::Enabled => "ENABLED",
            AdminStatus::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["DISABLE_IN_PROGRESS", "ENABLED"]
    }
}
impl AsRef<str> for AdminStatus {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information about the member account. </p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Member {
    /// <p>The ID of the member account.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>The detector ID of the member account.</p>
    #[doc(hidden)]
    pub detector_id: std::option::Option<std::string::String>,
    /// <p>The administrator account ID.</p>
    #[doc(hidden)]
    pub master_id: std::option::Option<std::string::String>,
    /// <p>The email address of the member account.</p>
    #[doc(hidden)]
    pub email: std::option::Option<std::string::String>,
    /// <p>The status of the relationship between the member and the administrator.</p>
    #[doc(hidden)]
    pub relationship_status: std::option::Option<std::string::String>,
    /// <p>The timestamp when the invitation was sent.</p>
    #[doc(hidden)]
    pub invited_at: std::option::Option<std::string::String>,
    /// <p>The last-updated timestamp of the member.</p>
    #[doc(hidden)]
    pub updated_at: std::option::Option<std::string::String>,
    /// <p>The administrator account ID.</p>
    #[doc(hidden)]
    pub administrator_id: std::option::Option<std::string::String>,
}
impl Member {
    /// <p>The ID of the member account.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>The detector ID of the member account.</p>
    pub fn detector_id(&self) -> std::option::Option<&str> {
        self.detector_id.as_deref()
    }
    /// <p>The administrator account ID.</p>
    pub fn master_id(&self) -> std::option::Option<&str> {
        self.master_id.as_deref()
    }
    /// <p>The email address of the member account.</p>
    pub fn email(&self) -> std::option::Option<&str> {
        self.email.as_deref()
    }
    /// <p>The status of the relationship between the member and the administrator.</p>
    pub fn relationship_status(&self) -> std::option::Option<&str> {
        self.relationship_status.as_deref()
    }
    /// <p>The timestamp when the invitation was sent.</p>
    pub fn invited_at(&self) -> std::option::Option<&str> {
        self.invited_at.as_deref()
    }
    /// <p>The last-updated timestamp of the member.</p>
    pub fn updated_at(&self) -> std::option::Option<&str> {
        self.updated_at.as_deref()
    }
    /// <p>The administrator account ID.</p>
    pub fn administrator_id(&self) -> std::option::Option<&str> {
        self.administrator_id.as_deref()
    }
}
/// See [`Member`](crate::model::Member).
pub mod member {

    /// A builder for [`Member`](crate::model::Member).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) detector_id: std::option::Option<std::string::String>,
        pub(crate) master_id: std::option::Option<std::string::String>,
        pub(crate) email: std::option::Option<std::string::String>,
        pub(crate) relationship_status: std::option::Option<std::string::String>,
        pub(crate) invited_at: std::option::Option<std::string::String>,
        pub(crate) updated_at: std::option::Option<std::string::String>,
        pub(crate) administrator_id: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The ID of the member account.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The ID of the member account.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>The detector ID of the member account.</p>
        pub fn detector_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.detector_id = Some(input.into());
            self
        }
        /// <p>The detector ID of the member account.</p>
        pub fn set_detector_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.detector_id = input;
            self
        }
        /// <p>The administrator account ID.</p>
        pub fn master_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.master_id = Some(input.into());
            self
        }
        /// <p>The administrator account ID.</p>
        pub fn set_master_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.master_id = input;
            self
        }
        /// <p>The email address of the member account.</p>
        pub fn email(mut self, input: impl Into<std::string::String>) -> Self {
            self.email = Some(input.into());
            self
        }
        /// <p>The email address of the member account.</p>
        pub fn set_email(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.email = input;
            self
        }
        /// <p>The status of the relationship between the member and the administrator.</p>
        pub fn relationship_status(mut self, input: impl Into<std::string::String>) -> Self {
            self.relationship_status = Some(input.into());
            self
        }
        /// <p>The status of the relationship between the member and the administrator.</p>
        pub fn set_relationship_status(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.relationship_status = input;
            self
        }
        /// <p>The timestamp when the invitation was sent.</p>
        pub fn invited_at(mut self, input: impl Into<std::string::String>) -> Self {
            self.invited_at = Some(input.into());
            self
        }
        /// <p>The timestamp when the invitation was sent.</p>
        pub fn set_invited_at(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.invited_at = input;
            self
        }
        /// <p>The last-updated timestamp of the member.</p>
        pub fn updated_at(mut self, input: impl Into<std::string::String>) -> Self {
            self.updated_at = Some(input.into());
            self
        }
        /// <p>The last-updated timestamp of the member.</p>
        pub fn set_updated_at(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.updated_at = input;
            self
        }
        /// <p>The administrator account ID.</p>
        pub fn administrator_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.administrator_id = Some(input.into());
            self
        }
        /// <p>The administrator account ID.</p>
        pub fn set_administrator_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.administrator_id = input;
            self
        }
        /// Consumes the builder and constructs a [`Member`](crate::model::Member).
        pub fn build(self) -> crate::model::Member {
            crate::model::Member {
                account_id: self.account_id,
                detector_id: self.detector_id,
                master_id: self.master_id,
                email: self.email,
                relationship_status: self.relationship_status,
                invited_at: self.invited_at,
                updated_at: self.updated_at,
                administrator_id: self.administrator_id,
            }
        }
    }
}
impl Member {
    /// Creates a new builder-style object to manufacture [`Member`](crate::model::Member).
    pub fn builder() -> crate::model::member::Builder {
        crate::model::member::Builder::default()
    }
}

/// <p>Contains information about the invitation to become a member account.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Invitation {
    /// <p>The ID of the account that the invitation was sent from.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>The ID of the invitation. This value is used to validate the inviter account to the member account.</p>
    #[doc(hidden)]
    pub invitation_id: std::option::Option<std::string::String>,
    /// <p>The status of the relationship between the inviter and invitee accounts.</p>
    #[doc(hidden)]
    pub relationship_status: std::option::Option<std::string::String>,
    /// <p>The timestamp when the invitation was sent.</p>
    #[doc(hidden)]
    pub invited_at: std::option::Option<std::string::String>,
}
impl Invitation {
    /// <p>The ID of the account that the invitation was sent from.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>The ID of the invitation. This value is used to validate the inviter account to the member account.</p>
    pub fn invitation_id(&self) -> std::option::Option<&str> {
        self.invitation_id.as_deref()
    }
    /// <p>The status of the relationship between the inviter and invitee accounts.</p>
    pub fn relationship_status(&self) -> std::option::Option<&str> {
        self.relationship_status.as_deref()
    }
    /// <p>The timestamp when the invitation was sent.</p>
    pub fn invited_at(&self) -> std::option::Option<&str> {
        self.invited_at.as_deref()
    }
}
/// See [`Invitation`](crate::model::Invitation).
pub mod invitation {

    /// A builder for [`Invitation`](crate::model::Invitation).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) invitation_id: std::option::Option<std::string::String>,
        pub(crate) relationship_status: std::option::Option<std::string::String>,
        pub(crate) invited_at: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The ID of the account that the invitation was sent from.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The ID of the account that the invitation was sent from.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>The ID of the invitation. This value is used to validate the inviter account to the member account.</p>
        pub fn invitation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.invitation_id = Some(input.into());
            self
        }
        /// <p>The ID of the invitation. This value is used to validate the inviter account to the member account.</p>
        pub fn set_invitation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.invitation_id = input;
            self
        }
        /// <p>The status of the relationship between the inviter and invitee accounts.</p>
        pub fn relationship_status(mut self, input: impl Into<std::string::String>) -> Self {
            self.relationship_status = Some(input.into());
            self
        }
        /// <p>The status of the relationship between the inviter and invitee accounts.</p>
        pub fn set_relationship_status(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.relationship_status = input;
            self
        }
        /// <p>The timestamp when the invitation was sent.</p>
        pub fn invited_at(mut self, input: impl Into<std::string::String>) -> Self {
            self.invited_at = Some(input.into());
            self
        }
        /// <p>The timestamp when the invitation was sent.</p>
        pub fn set_invited_at(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.invited_at = input;
            self
        }
        /// Consumes the builder and constructs a [`Invitation`](crate::model::Invitation).
        pub fn build(self) -> crate::model::Invitation {
            crate::model::Invitation {
                account_id: self.account_id,
                invitation_id: self.invitation_id,
                relationship_status: self.relationship_status,
                invited_at: self.invited_at,
            }
        }
    }
}
impl Invitation {
    /// Creates a new builder-style object to manufacture [`Invitation`](crate::model::Invitation).
    pub fn builder() -> crate::model::invitation::Builder {
        crate::model::invitation::Builder::default()
    }
}

/// <p>Contains information about the criteria used for sorting findings.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct SortCriteria {
    /// <p>Represents the finding attribute (for example, accountId) to sort findings by.</p>
    #[doc(hidden)]
    pub attribute_name: std::option::Option<std::string::String>,
    /// <p>The order by which the sorted findings are to be displayed.</p>
    #[doc(hidden)]
    pub order_by: std::option::Option<crate::model::OrderBy>,
}
impl SortCriteria {
    /// <p>Represents the finding attribute (for example, accountId) to sort findings by.</p>
    pub fn attribute_name(&self) -> std::option::Option<&str> {
        self.attribute_name.as_deref()
    }
    /// <p>The order by which the sorted findings are to be displayed.</p>
    pub fn order_by(&self) -> std::option::Option<&crate::model::OrderBy> {
        self.order_by.as_ref()
    }
}
/// See [`SortCriteria`](crate::model::SortCriteria).
pub mod sort_criteria {

    /// A builder for [`SortCriteria`](crate::model::SortCriteria).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) attribute_name: std::option::Option<std::string::String>,
        pub(crate) order_by: std::option::Option<crate::model::OrderBy>,
    }
    impl Builder {
        /// <p>Represents the finding attribute (for example, accountId) to sort findings by.</p>
        pub fn attribute_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.attribute_name = Some(input.into());
            self
        }
        /// <p>Represents the finding attribute (for example, accountId) to sort findings by.</p>
        pub fn set_attribute_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.attribute_name = input;
            self
        }
        /// <p>The order by which the sorted findings are to be displayed.</p>
        pub fn order_by(mut self, input: crate::model::OrderBy) -> Self {
            self.order_by = Some(input);
            self
        }
        /// <p>The order by which the sorted findings are to be displayed.</p>
        pub fn set_order_by(mut self, input: std::option::Option<crate::model::OrderBy>) -> Self {
            self.order_by = input;
            self
        }
        /// Consumes the builder and constructs a [`SortCriteria`](crate::model::SortCriteria).
        pub fn build(self) -> crate::model::SortCriteria {
            crate::model::SortCriteria {
                attribute_name: self.attribute_name,
                order_by: self.order_by,
            }
        }
    }
}
impl SortCriteria {
    /// Creates a new builder-style object to manufacture [`SortCriteria`](crate::model::SortCriteria).
    pub fn builder() -> crate::model::sort_criteria::Builder {
        crate::model::sort_criteria::Builder::default()
    }
}

/// When writing a match expression against `OrderBy`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let orderby = unimplemented!();
/// match orderby {
///     OrderBy::Asc => { /* ... */ },
///     OrderBy::Desc => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `orderby` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `OrderBy::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `OrderBy::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `OrderBy::NewFeature` is defined.
/// Specifically, when `orderby` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `OrderBy::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum OrderBy {
    #[allow(missing_docs)] // documentation missing in model
    Asc,
    #[allow(missing_docs)] // documentation missing in model
    Desc,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for OrderBy {
    fn from(s: &str) -> Self {
        match s {
            "ASC" => OrderBy::Asc,
            "DESC" => OrderBy::Desc,
            other => OrderBy::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for OrderBy {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(OrderBy::from(s))
    }
}
impl OrderBy {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            OrderBy::Asc => "ASC",
            OrderBy::Desc => "DESC",
            OrderBy::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["ASC", "DESC"]
    }
}
impl AsRef<str> for OrderBy {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains the result of GuardDuty usage. If a UsageStatisticType is provided the result for other types will be null. </p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct UsageStatistics {
    /// <p>The usage statistic sum organized by account ID.</p>
    #[doc(hidden)]
    pub sum_by_account: std::option::Option<std::vec::Vec<crate::model::UsageAccountResult>>,
    /// <p>The usage statistic sum organized by on data source.</p>
    #[doc(hidden)]
    pub sum_by_data_source: std::option::Option<std::vec::Vec<crate::model::UsageDataSourceResult>>,
    /// <p>The usage statistic sum organized by resource.</p>
    #[doc(hidden)]
    pub sum_by_resource: std::option::Option<std::vec::Vec<crate::model::UsageResourceResult>>,
    /// <p>Lists the top 50 resources that have generated the most GuardDuty usage, in order from most to least expensive.</p>
    #[doc(hidden)]
    pub top_resources: std::option::Option<std::vec::Vec<crate::model::UsageResourceResult>>,
}
impl UsageStatistics {
    /// <p>The usage statistic sum organized by account ID.</p>
    pub fn sum_by_account(&self) -> std::option::Option<&[crate::model::UsageAccountResult]> {
        self.sum_by_account.as_deref()
    }
    /// <p>The usage statistic sum organized by on data source.</p>
    pub fn sum_by_data_source(
        &self,
    ) -> std::option::Option<&[crate::model::UsageDataSourceResult]> {
        self.sum_by_data_source.as_deref()
    }
    /// <p>The usage statistic sum organized by resource.</p>
    pub fn sum_by_resource(&self) -> std::option::Option<&[crate::model::UsageResourceResult]> {
        self.sum_by_resource.as_deref()
    }
    /// <p>Lists the top 50 resources that have generated the most GuardDuty usage, in order from most to least expensive.</p>
    pub fn top_resources(&self) -> std::option::Option<&[crate::model::UsageResourceResult]> {
        self.top_resources.as_deref()
    }
}
/// See [`UsageStatistics`](crate::model::UsageStatistics).
pub mod usage_statistics {

    /// A builder for [`UsageStatistics`](crate::model::UsageStatistics).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) sum_by_account:
            std::option::Option<std::vec::Vec<crate::model::UsageAccountResult>>,
        pub(crate) sum_by_data_source:
            std::option::Option<std::vec::Vec<crate::model::UsageDataSourceResult>>,
        pub(crate) sum_by_resource:
            std::option::Option<std::vec::Vec<crate::model::UsageResourceResult>>,
        pub(crate) top_resources:
            std::option::Option<std::vec::Vec<crate::model::UsageResourceResult>>,
    }
    impl Builder {
        /// Appends an item to `sum_by_account`.
        ///
        /// To override the contents of this collection use [`set_sum_by_account`](Self::set_sum_by_account).
        ///
        /// <p>The usage statistic sum organized by account ID.</p>
        pub fn sum_by_account(mut self, input: crate::model::UsageAccountResult) -> Self {
            let mut v = self.sum_by_account.unwrap_or_default();
            v.push(input);
            self.sum_by_account = Some(v);
            self
        }
        /// <p>The usage statistic sum organized by account ID.</p>
        pub fn set_sum_by_account(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::UsageAccountResult>>,
        ) -> Self {
            self.sum_by_account = input;
            self
        }
        /// Appends an item to `sum_by_data_source`.
        ///
        /// To override the contents of this collection use [`set_sum_by_data_source`](Self::set_sum_by_data_source).
        ///
        /// <p>The usage statistic sum organized by on data source.</p>
        pub fn sum_by_data_source(mut self, input: crate::model::UsageDataSourceResult) -> Self {
            let mut v = self.sum_by_data_source.unwrap_or_default();
            v.push(input);
            self.sum_by_data_source = Some(v);
            self
        }
        /// <p>The usage statistic sum organized by on data source.</p>
        pub fn set_sum_by_data_source(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::UsageDataSourceResult>>,
        ) -> Self {
            self.sum_by_data_source = input;
            self
        }
        /// Appends an item to `sum_by_resource`.
        ///
        /// To override the contents of this collection use [`set_sum_by_resource`](Self::set_sum_by_resource).
        ///
        /// <p>The usage statistic sum organized by resource.</p>
        pub fn sum_by_resource(mut self, input: crate::model::UsageResourceResult) -> Self {
            let mut v = self.sum_by_resource.unwrap_or_default();
            v.push(input);
            self.sum_by_resource = Some(v);
            self
        }
        /// <p>The usage statistic sum organized by resource.</p>
        pub fn set_sum_by_resource(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::UsageResourceResult>>,
        ) -> Self {
            self.sum_by_resource = input;
            self
        }
        /// Appends an item to `top_resources`.
        ///
        /// To override the contents of this collection use [`set_top_resources`](Self::set_top_resources).
        ///
        /// <p>Lists the top 50 resources that have generated the most GuardDuty usage, in order from most to least expensive.</p>
        pub fn top_resources(mut self, input: crate::model::UsageResourceResult) -> Self {
            let mut v = self.top_resources.unwrap_or_default();
            v.push(input);
            self.top_resources = Some(v);
            self
        }
        /// <p>Lists the top 50 resources that have generated the most GuardDuty usage, in order from most to least expensive.</p>
        pub fn set_top_resources(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::UsageResourceResult>>,
        ) -> Self {
            self.top_resources = input;
            self
        }
        /// Consumes the builder and constructs a [`UsageStatistics`](crate::model::UsageStatistics).
        pub fn build(self) -> crate::model::UsageStatistics {
            crate::model::UsageStatistics {
                sum_by_account: self.sum_by_account,
                sum_by_data_source: self.sum_by_data_source,
                sum_by_resource: self.sum_by_resource,
                top_resources: self.top_resources,
            }
        }
    }
}
impl UsageStatistics {
    /// Creates a new builder-style object to manufacture [`UsageStatistics`](crate::model::UsageStatistics).
    pub fn builder() -> crate::model::usage_statistics::Builder {
        crate::model::usage_statistics::Builder::default()
    }
}

/// <p>Contains information on the sum of usage based on an Amazon Web Services resource.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct UsageResourceResult {
    /// <p>The Amazon Web Services resource that generated usage.</p>
    #[doc(hidden)]
    pub resource: std::option::Option<std::string::String>,
    /// <p>Represents the sum total of usage for the specified resource type.</p>
    #[doc(hidden)]
    pub total: std::option::Option<crate::model::Total>,
}
impl UsageResourceResult {
    /// <p>The Amazon Web Services resource that generated usage.</p>
    pub fn resource(&self) -> std::option::Option<&str> {
        self.resource.as_deref()
    }
    /// <p>Represents the sum total of usage for the specified resource type.</p>
    pub fn total(&self) -> std::option::Option<&crate::model::Total> {
        self.total.as_ref()
    }
}
/// See [`UsageResourceResult`](crate::model::UsageResourceResult).
pub mod usage_resource_result {

    /// A builder for [`UsageResourceResult`](crate::model::UsageResourceResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) resource: std::option::Option<std::string::String>,
        pub(crate) total: std::option::Option<crate::model::Total>,
    }
    impl Builder {
        /// <p>The Amazon Web Services resource that generated usage.</p>
        pub fn resource(mut self, input: impl Into<std::string::String>) -> Self {
            self.resource = Some(input.into());
            self
        }
        /// <p>The Amazon Web Services resource that generated usage.</p>
        pub fn set_resource(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.resource = input;
            self
        }
        /// <p>Represents the sum total of usage for the specified resource type.</p>
        pub fn total(mut self, input: crate::model::Total) -> Self {
            self.total = Some(input);
            self
        }
        /// <p>Represents the sum total of usage for the specified resource type.</p>
        pub fn set_total(mut self, input: std::option::Option<crate::model::Total>) -> Self {
            self.total = input;
            self
        }
        /// Consumes the builder and constructs a [`UsageResourceResult`](crate::model::UsageResourceResult).
        pub fn build(self) -> crate::model::UsageResourceResult {
            crate::model::UsageResourceResult {
                resource: self.resource,
                total: self.total,
            }
        }
    }
}
impl UsageResourceResult {
    /// Creates a new builder-style object to manufacture [`UsageResourceResult`](crate::model::UsageResourceResult).
    pub fn builder() -> crate::model::usage_resource_result::Builder {
        crate::model::usage_resource_result::Builder::default()
    }
}

/// <p>Contains the total usage with the corresponding currency unit for that value.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Total {
    /// <p>The total usage.</p>
    #[doc(hidden)]
    pub amount: std::option::Option<std::string::String>,
    /// <p>The currency unit that the amount is given in.</p>
    #[doc(hidden)]
    pub unit: std::option::Option<std::string::String>,
}
impl Total {
    /// <p>The total usage.</p>
    pub fn amount(&self) -> std::option::Option<&str> {
        self.amount.as_deref()
    }
    /// <p>The currency unit that the amount is given in.</p>
    pub fn unit(&self) -> std::option::Option<&str> {
        self.unit.as_deref()
    }
}
/// See [`Total`](crate::model::Total).
pub mod total {

    /// A builder for [`Total`](crate::model::Total).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) amount: std::option::Option<std::string::String>,
        pub(crate) unit: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The total usage.</p>
        pub fn amount(mut self, input: impl Into<std::string::String>) -> Self {
            self.amount = Some(input.into());
            self
        }
        /// <p>The total usage.</p>
        pub fn set_amount(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.amount = input;
            self
        }
        /// <p>The currency unit that the amount is given in.</p>
        pub fn unit(mut self, input: impl Into<std::string::String>) -> Self {
            self.unit = Some(input.into());
            self
        }
        /// <p>The currency unit that the amount is given in.</p>
        pub fn set_unit(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.unit = input;
            self
        }
        /// Consumes the builder and constructs a [`Total`](crate::model::Total).
        pub fn build(self) -> crate::model::Total {
            crate::model::Total {
                amount: self.amount,
                unit: self.unit,
            }
        }
    }
}
impl Total {
    /// Creates a new builder-style object to manufacture [`Total`](crate::model::Total).
    pub fn builder() -> crate::model::total::Builder {
        crate::model::total::Builder::default()
    }
}

/// <p>Contains information on the result of usage based on data source type.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct UsageDataSourceResult {
    /// <p>The data source type that generated usage.</p>
    #[doc(hidden)]
    pub data_source: std::option::Option<crate::model::DataSource>,
    /// <p>Represents the total of usage for the specified data source.</p>
    #[doc(hidden)]
    pub total: std::option::Option<crate::model::Total>,
}
impl UsageDataSourceResult {
    /// <p>The data source type that generated usage.</p>
    pub fn data_source(&self) -> std::option::Option<&crate::model::DataSource> {
        self.data_source.as_ref()
    }
    /// <p>Represents the total of usage for the specified data source.</p>
    pub fn total(&self) -> std::option::Option<&crate::model::Total> {
        self.total.as_ref()
    }
}
/// See [`UsageDataSourceResult`](crate::model::UsageDataSourceResult).
pub mod usage_data_source_result {

    /// A builder for [`UsageDataSourceResult`](crate::model::UsageDataSourceResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) data_source: std::option::Option<crate::model::DataSource>,
        pub(crate) total: std::option::Option<crate::model::Total>,
    }
    impl Builder {
        /// <p>The data source type that generated usage.</p>
        pub fn data_source(mut self, input: crate::model::DataSource) -> Self {
            self.data_source = Some(input);
            self
        }
        /// <p>The data source type that generated usage.</p>
        pub fn set_data_source(
            mut self,
            input: std::option::Option<crate::model::DataSource>,
        ) -> Self {
            self.data_source = input;
            self
        }
        /// <p>Represents the total of usage for the specified data source.</p>
        pub fn total(mut self, input: crate::model::Total) -> Self {
            self.total = Some(input);
            self
        }
        /// <p>Represents the total of usage for the specified data source.</p>
        pub fn set_total(mut self, input: std::option::Option<crate::model::Total>) -> Self {
            self.total = input;
            self
        }
        /// Consumes the builder and constructs a [`UsageDataSourceResult`](crate::model::UsageDataSourceResult).
        pub fn build(self) -> crate::model::UsageDataSourceResult {
            crate::model::UsageDataSourceResult {
                data_source: self.data_source,
                total: self.total,
            }
        }
    }
}
impl UsageDataSourceResult {
    /// Creates a new builder-style object to manufacture [`UsageDataSourceResult`](crate::model::UsageDataSourceResult).
    pub fn builder() -> crate::model::usage_data_source_result::Builder {
        crate::model::usage_data_source_result::Builder::default()
    }
}

/// When writing a match expression against `DataSource`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let datasource = unimplemented!();
/// match datasource {
///     DataSource::CloudTrail => { /* ... */ },
///     DataSource::DnsLogs => { /* ... */ },
///     DataSource::Ec2MalwareScan => { /* ... */ },
///     DataSource::FlowLogs => { /* ... */ },
///     DataSource::KubernetesAuditLogs => { /* ... */ },
///     DataSource::S3Logs => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `datasource` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `DataSource::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `DataSource::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `DataSource::NewFeature` is defined.
/// Specifically, when `datasource` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `DataSource::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum DataSource {
    #[allow(missing_docs)] // documentation missing in model
    CloudTrail,
    #[allow(missing_docs)] // documentation missing in model
    DnsLogs,
    #[allow(missing_docs)] // documentation missing in model
    Ec2MalwareScan,
    #[allow(missing_docs)] // documentation missing in model
    FlowLogs,
    #[allow(missing_docs)] // documentation missing in model
    KubernetesAuditLogs,
    #[allow(missing_docs)] // documentation missing in model
    S3Logs,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for DataSource {
    fn from(s: &str) -> Self {
        match s {
            "CLOUD_TRAIL" => DataSource::CloudTrail,
            "DNS_LOGS" => DataSource::DnsLogs,
            "EC2_MALWARE_SCAN" => DataSource::Ec2MalwareScan,
            "FLOW_LOGS" => DataSource::FlowLogs,
            "KUBERNETES_AUDIT_LOGS" => DataSource::KubernetesAuditLogs,
            "S3_LOGS" => DataSource::S3Logs,
            other => DataSource::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for DataSource {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(DataSource::from(s))
    }
}
impl DataSource {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            DataSource::CloudTrail => "CLOUD_TRAIL",
            DataSource::DnsLogs => "DNS_LOGS",
            DataSource::Ec2MalwareScan => "EC2_MALWARE_SCAN",
            DataSource::FlowLogs => "FLOW_LOGS",
            DataSource::KubernetesAuditLogs => "KUBERNETES_AUDIT_LOGS",
            DataSource::S3Logs => "S3_LOGS",
            DataSource::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &[
            "CLOUD_TRAIL",
            "DNS_LOGS",
            "EC2_MALWARE_SCAN",
            "FLOW_LOGS",
            "KUBERNETES_AUDIT_LOGS",
            "S3_LOGS",
        ]
    }
}
impl AsRef<str> for DataSource {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information on the total of usage based on account IDs.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct UsageAccountResult {
    /// <p>The Account ID that generated usage.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>Represents the total of usage for the Account ID.</p>
    #[doc(hidden)]
    pub total: std::option::Option<crate::model::Total>,
}
impl UsageAccountResult {
    /// <p>The Account ID that generated usage.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>Represents the total of usage for the Account ID.</p>
    pub fn total(&self) -> std::option::Option<&crate::model::Total> {
        self.total.as_ref()
    }
}
/// See [`UsageAccountResult`](crate::model::UsageAccountResult).
pub mod usage_account_result {

    /// A builder for [`UsageAccountResult`](crate::model::UsageAccountResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) total: std::option::Option<crate::model::Total>,
    }
    impl Builder {
        /// <p>The Account ID that generated usage.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The Account ID that generated usage.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>Represents the total of usage for the Account ID.</p>
        pub fn total(mut self, input: crate::model::Total) -> Self {
            self.total = Some(input);
            self
        }
        /// <p>Represents the total of usage for the Account ID.</p>
        pub fn set_total(mut self, input: std::option::Option<crate::model::Total>) -> Self {
            self.total = input;
            self
        }
        /// Consumes the builder and constructs a [`UsageAccountResult`](crate::model::UsageAccountResult).
        pub fn build(self) -> crate::model::UsageAccountResult {
            crate::model::UsageAccountResult {
                account_id: self.account_id,
                total: self.total,
            }
        }
    }
}
impl UsageAccountResult {
    /// Creates a new builder-style object to manufacture [`UsageAccountResult`](crate::model::UsageAccountResult).
    pub fn builder() -> crate::model::usage_account_result::Builder {
        crate::model::usage_account_result::Builder::default()
    }
}

/// <p>Contains information about the criteria used to query usage statistics.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct UsageCriteria {
    /// <p>The account IDs to aggregate usage statistics from.</p>
    #[doc(hidden)]
    pub account_ids: std::option::Option<std::vec::Vec<std::string::String>>,
    /// <p>The data sources to aggregate usage statistics from.</p>
    #[doc(hidden)]
    pub data_sources: std::option::Option<std::vec::Vec<crate::model::DataSource>>,
    /// <p>The resources to aggregate usage statistics from. Only accepts exact resource names.</p>
    #[doc(hidden)]
    pub resources: std::option::Option<std::vec::Vec<std::string::String>>,
}
impl UsageCriteria {
    /// <p>The account IDs to aggregate usage statistics from.</p>
    pub fn account_ids(&self) -> std::option::Option<&[std::string::String]> {
        self.account_ids.as_deref()
    }
    /// <p>The data sources to aggregate usage statistics from.</p>
    pub fn data_sources(&self) -> std::option::Option<&[crate::model::DataSource]> {
        self.data_sources.as_deref()
    }
    /// <p>The resources to aggregate usage statistics from. Only accepts exact resource names.</p>
    pub fn resources(&self) -> std::option::Option<&[std::string::String]> {
        self.resources.as_deref()
    }
}
/// See [`UsageCriteria`](crate::model::UsageCriteria).
pub mod usage_criteria {

    /// A builder for [`UsageCriteria`](crate::model::UsageCriteria).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_ids: std::option::Option<std::vec::Vec<std::string::String>>,
        pub(crate) data_sources: std::option::Option<std::vec::Vec<crate::model::DataSource>>,
        pub(crate) resources: std::option::Option<std::vec::Vec<std::string::String>>,
    }
    impl Builder {
        /// Appends an item to `account_ids`.
        ///
        /// To override the contents of this collection use [`set_account_ids`](Self::set_account_ids).
        ///
        /// <p>The account IDs to aggregate usage statistics from.</p>
        pub fn account_ids(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.account_ids.unwrap_or_default();
            v.push(input.into());
            self.account_ids = Some(v);
            self
        }
        /// <p>The account IDs to aggregate usage statistics from.</p>
        pub fn set_account_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.account_ids = input;
            self
        }
        /// Appends an item to `data_sources`.
        ///
        /// To override the contents of this collection use [`set_data_sources`](Self::set_data_sources).
        ///
        /// <p>The data sources to aggregate usage statistics from.</p>
        pub fn data_sources(mut self, input: crate::model::DataSource) -> Self {
            let mut v = self.data_sources.unwrap_or_default();
            v.push(input);
            self.data_sources = Some(v);
            self
        }
        /// <p>The data sources to aggregate usage statistics from.</p>
        pub fn set_data_sources(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::DataSource>>,
        ) -> Self {
            self.data_sources = input;
            self
        }
        /// Appends an item to `resources`.
        ///
        /// To override the contents of this collection use [`set_resources`](Self::set_resources).
        ///
        /// <p>The resources to aggregate usage statistics from. Only accepts exact resource names.</p>
        pub fn resources(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.resources.unwrap_or_default();
            v.push(input.into());
            self.resources = Some(v);
            self
        }
        /// <p>The resources to aggregate usage statistics from. Only accepts exact resource names.</p>
        pub fn set_resources(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.resources = input;
            self
        }
        /// Consumes the builder and constructs a [`UsageCriteria`](crate::model::UsageCriteria).
        pub fn build(self) -> crate::model::UsageCriteria {
            crate::model::UsageCriteria {
                account_ids: self.account_ids,
                data_sources: self.data_sources,
                resources: self.resources,
            }
        }
    }
}
impl UsageCriteria {
    /// Creates a new builder-style object to manufacture [`UsageCriteria`](crate::model::UsageCriteria).
    pub fn builder() -> crate::model::usage_criteria::Builder {
        crate::model::usage_criteria::Builder::default()
    }
}

/// When writing a match expression against `UsageStatisticType`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let usagestatistictype = unimplemented!();
/// match usagestatistictype {
///     UsageStatisticType::SumByAccount => { /* ... */ },
///     UsageStatisticType::SumByDataSource => { /* ... */ },
///     UsageStatisticType::SumByResource => { /* ... */ },
///     UsageStatisticType::TopResources => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `usagestatistictype` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `UsageStatisticType::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `UsageStatisticType::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `UsageStatisticType::NewFeature` is defined.
/// Specifically, when `usagestatistictype` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `UsageStatisticType::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum UsageStatisticType {
    #[allow(missing_docs)] // documentation missing in model
    SumByAccount,
    #[allow(missing_docs)] // documentation missing in model
    SumByDataSource,
    #[allow(missing_docs)] // documentation missing in model
    SumByResource,
    #[allow(missing_docs)] // documentation missing in model
    TopResources,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for UsageStatisticType {
    fn from(s: &str) -> Self {
        match s {
            "SUM_BY_ACCOUNT" => UsageStatisticType::SumByAccount,
            "SUM_BY_DATA_SOURCE" => UsageStatisticType::SumByDataSource,
            "SUM_BY_RESOURCE" => UsageStatisticType::SumByResource,
            "TOP_RESOURCES" => UsageStatisticType::TopResources,
            other => {
                UsageStatisticType::Unknown(crate::types::UnknownVariantValue(other.to_owned()))
            }
        }
    }
}
impl std::str::FromStr for UsageStatisticType {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(UsageStatisticType::from(s))
    }
}
impl UsageStatisticType {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            UsageStatisticType::SumByAccount => "SUM_BY_ACCOUNT",
            UsageStatisticType::SumByDataSource => "SUM_BY_DATA_SOURCE",
            UsageStatisticType::SumByResource => "SUM_BY_RESOURCE",
            UsageStatisticType::TopResources => "TOP_RESOURCES",
            UsageStatisticType::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &[
            "SUM_BY_ACCOUNT",
            "SUM_BY_DATA_SOURCE",
            "SUM_BY_RESOURCE",
            "TOP_RESOURCES",
        ]
    }
}
impl AsRef<str> for UsageStatisticType {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// When writing a match expression against `ThreatIntelSetStatus`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let threatintelsetstatus = unimplemented!();
/// match threatintelsetstatus {
///     ThreatIntelSetStatus::Activating => { /* ... */ },
///     ThreatIntelSetStatus::Active => { /* ... */ },
///     ThreatIntelSetStatus::Deactivating => { /* ... */ },
///     ThreatIntelSetStatus::Deleted => { /* ... */ },
///     ThreatIntelSetStatus::DeletePending => { /* ... */ },
///     ThreatIntelSetStatus::Error => { /* ... */ },
///     ThreatIntelSetStatus::Inactive => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `threatintelsetstatus` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `ThreatIntelSetStatus::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `ThreatIntelSetStatus::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `ThreatIntelSetStatus::NewFeature` is defined.
/// Specifically, when `threatintelsetstatus` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `ThreatIntelSetStatus::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum ThreatIntelSetStatus {
    #[allow(missing_docs)] // documentation missing in model
    Activating,
    #[allow(missing_docs)] // documentation missing in model
    Active,
    #[allow(missing_docs)] // documentation missing in model
    Deactivating,
    #[allow(missing_docs)] // documentation missing in model
    Deleted,
    #[allow(missing_docs)] // documentation missing in model
    DeletePending,
    #[allow(missing_docs)] // documentation missing in model
    Error,
    #[allow(missing_docs)] // documentation missing in model
    Inactive,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for ThreatIntelSetStatus {
    fn from(s: &str) -> Self {
        match s {
            "ACTIVATING" => ThreatIntelSetStatus::Activating,
            "ACTIVE" => ThreatIntelSetStatus::Active,
            "DEACTIVATING" => ThreatIntelSetStatus::Deactivating,
            "DELETED" => ThreatIntelSetStatus::Deleted,
            "DELETE_PENDING" => ThreatIntelSetStatus::DeletePending,
            "ERROR" => ThreatIntelSetStatus::Error,
            "INACTIVE" => ThreatIntelSetStatus::Inactive,
            other => {
                ThreatIntelSetStatus::Unknown(crate::types::UnknownVariantValue(other.to_owned()))
            }
        }
    }
}
impl std::str::FromStr for ThreatIntelSetStatus {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(ThreatIntelSetStatus::from(s))
    }
}
impl ThreatIntelSetStatus {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            ThreatIntelSetStatus::Activating => "ACTIVATING",
            ThreatIntelSetStatus::Active => "ACTIVE",
            ThreatIntelSetStatus::Deactivating => "DEACTIVATING",
            ThreatIntelSetStatus::Deleted => "DELETED",
            ThreatIntelSetStatus::DeletePending => "DELETE_PENDING",
            ThreatIntelSetStatus::Error => "ERROR",
            ThreatIntelSetStatus::Inactive => "INACTIVE",
            ThreatIntelSetStatus::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &[
            "ACTIVATING",
            "ACTIVE",
            "DEACTIVATING",
            "DELETED",
            "DELETE_PENDING",
            "ERROR",
            "INACTIVE",
        ]
    }
}
impl AsRef<str> for ThreatIntelSetStatus {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// When writing a match expression against `ThreatIntelSetFormat`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let threatintelsetformat = unimplemented!();
/// match threatintelsetformat {
///     ThreatIntelSetFormat::AlienVault => { /* ... */ },
///     ThreatIntelSetFormat::FireEye => { /* ... */ },
///     ThreatIntelSetFormat::OtxCsv => { /* ... */ },
///     ThreatIntelSetFormat::ProofPoint => { /* ... */ },
///     ThreatIntelSetFormat::Stix => { /* ... */ },
///     ThreatIntelSetFormat::Txt => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `threatintelsetformat` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `ThreatIntelSetFormat::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `ThreatIntelSetFormat::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `ThreatIntelSetFormat::NewFeature` is defined.
/// Specifically, when `threatintelsetformat` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `ThreatIntelSetFormat::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum ThreatIntelSetFormat {
    #[allow(missing_docs)] // documentation missing in model
    AlienVault,
    #[allow(missing_docs)] // documentation missing in model
    FireEye,
    #[allow(missing_docs)] // documentation missing in model
    OtxCsv,
    #[allow(missing_docs)] // documentation missing in model
    ProofPoint,
    #[allow(missing_docs)] // documentation missing in model
    Stix,
    #[allow(missing_docs)] // documentation missing in model
    Txt,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for ThreatIntelSetFormat {
    fn from(s: &str) -> Self {
        match s {
            "ALIEN_VAULT" => ThreatIntelSetFormat::AlienVault,
            "FIRE_EYE" => ThreatIntelSetFormat::FireEye,
            "OTX_CSV" => ThreatIntelSetFormat::OtxCsv,
            "PROOF_POINT" => ThreatIntelSetFormat::ProofPoint,
            "STIX" => ThreatIntelSetFormat::Stix,
            "TXT" => ThreatIntelSetFormat::Txt,
            other => {
                ThreatIntelSetFormat::Unknown(crate::types::UnknownVariantValue(other.to_owned()))
            }
        }
    }
}
impl std::str::FromStr for ThreatIntelSetFormat {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(ThreatIntelSetFormat::from(s))
    }
}
impl ThreatIntelSetFormat {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            ThreatIntelSetFormat::AlienVault => "ALIEN_VAULT",
            ThreatIntelSetFormat::FireEye => "FIRE_EYE",
            ThreatIntelSetFormat::OtxCsv => "OTX_CSV",
            ThreatIntelSetFormat::ProofPoint => "PROOF_POINT",
            ThreatIntelSetFormat::Stix => "STIX",
            ThreatIntelSetFormat::Txt => "TXT",
            ThreatIntelSetFormat::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &[
            "ALIEN_VAULT",
            "FIRE_EYE",
            "OTX_CSV",
            "PROOF_POINT",
            "STIX",
            "TXT",
        ]
    }
}
impl AsRef<str> for ThreatIntelSetFormat {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Provides details of the GuardDuty member account that uses a free trial service.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct AccountFreeTrialInfo {
    /// <p>The account identifier of the GuardDuty member account.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>Describes the data source enabled for the GuardDuty member account.</p>
    #[doc(hidden)]
    pub data_sources: std::option::Option<crate::model::DataSourcesFreeTrial>,
}
impl AccountFreeTrialInfo {
    /// <p>The account identifier of the GuardDuty member account.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>Describes the data source enabled for the GuardDuty member account.</p>
    pub fn data_sources(&self) -> std::option::Option<&crate::model::DataSourcesFreeTrial> {
        self.data_sources.as_ref()
    }
}
/// See [`AccountFreeTrialInfo`](crate::model::AccountFreeTrialInfo).
pub mod account_free_trial_info {

    /// A builder for [`AccountFreeTrialInfo`](crate::model::AccountFreeTrialInfo).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) data_sources: std::option::Option<crate::model::DataSourcesFreeTrial>,
    }
    impl Builder {
        /// <p>The account identifier of the GuardDuty member account.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The account identifier of the GuardDuty member account.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>Describes the data source enabled for the GuardDuty member account.</p>
        pub fn data_sources(mut self, input: crate::model::DataSourcesFreeTrial) -> Self {
            self.data_sources = Some(input);
            self
        }
        /// <p>Describes the data source enabled for the GuardDuty member account.</p>
        pub fn set_data_sources(
            mut self,
            input: std::option::Option<crate::model::DataSourcesFreeTrial>,
        ) -> Self {
            self.data_sources = input;
            self
        }
        /// Consumes the builder and constructs a [`AccountFreeTrialInfo`](crate::model::AccountFreeTrialInfo).
        pub fn build(self) -> crate::model::AccountFreeTrialInfo {
            crate::model::AccountFreeTrialInfo {
                account_id: self.account_id,
                data_sources: self.data_sources,
            }
        }
    }
}
impl AccountFreeTrialInfo {
    /// Creates a new builder-style object to manufacture [`AccountFreeTrialInfo`](crate::model::AccountFreeTrialInfo).
    pub fn builder() -> crate::model::account_free_trial_info::Builder {
        crate::model::account_free_trial_info::Builder::default()
    }
}

/// <p>Contains information about which data sources are enabled for the GuardDuty member account.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DataSourcesFreeTrial {
    /// <p>Describes whether any Amazon Web Services CloudTrail management event logs are enabled as data sources.</p>
    #[doc(hidden)]
    pub cloud_trail: std::option::Option<crate::model::DataSourceFreeTrial>,
    /// <p>Describes whether any DNS logs are enabled as data sources.</p>
    #[doc(hidden)]
    pub dns_logs: std::option::Option<crate::model::DataSourceFreeTrial>,
    /// <p>Describes whether any VPC Flow logs are enabled as data sources.</p>
    #[doc(hidden)]
    pub flow_logs: std::option::Option<crate::model::DataSourceFreeTrial>,
    /// <p>Describes whether any S3 data event logs are enabled as data sources.</p>
    #[doc(hidden)]
    pub s3_logs: std::option::Option<crate::model::DataSourceFreeTrial>,
    /// <p>Describes whether any Kubernetes logs are enabled as data sources.</p>
    #[doc(hidden)]
    pub kubernetes: std::option::Option<crate::model::KubernetesDataSourceFreeTrial>,
    /// <p>Describes whether Malware Protection is enabled as a data source.</p>
    #[doc(hidden)]
    pub malware_protection: std::option::Option<crate::model::MalwareProtectionDataSourceFreeTrial>,
}
impl DataSourcesFreeTrial {
    /// <p>Describes whether any Amazon Web Services CloudTrail management event logs are enabled as data sources.</p>
    pub fn cloud_trail(&self) -> std::option::Option<&crate::model::DataSourceFreeTrial> {
        self.cloud_trail.as_ref()
    }
    /// <p>Describes whether any DNS logs are enabled as data sources.</p>
    pub fn dns_logs(&self) -> std::option::Option<&crate::model::DataSourceFreeTrial> {
        self.dns_logs.as_ref()
    }
    /// <p>Describes whether any VPC Flow logs are enabled as data sources.</p>
    pub fn flow_logs(&self) -> std::option::Option<&crate::model::DataSourceFreeTrial> {
        self.flow_logs.as_ref()
    }
    /// <p>Describes whether any S3 data event logs are enabled as data sources.</p>
    pub fn s3_logs(&self) -> std::option::Option<&crate::model::DataSourceFreeTrial> {
        self.s3_logs.as_ref()
    }
    /// <p>Describes whether any Kubernetes logs are enabled as data sources.</p>
    pub fn kubernetes(&self) -> std::option::Option<&crate::model::KubernetesDataSourceFreeTrial> {
        self.kubernetes.as_ref()
    }
    /// <p>Describes whether Malware Protection is enabled as a data source.</p>
    pub fn malware_protection(
        &self,
    ) -> std::option::Option<&crate::model::MalwareProtectionDataSourceFreeTrial> {
        self.malware_protection.as_ref()
    }
}
/// See [`DataSourcesFreeTrial`](crate::model::DataSourcesFreeTrial).
pub mod data_sources_free_trial {

    /// A builder for [`DataSourcesFreeTrial`](crate::model::DataSourcesFreeTrial).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) cloud_trail: std::option::Option<crate::model::DataSourceFreeTrial>,
        pub(crate) dns_logs: std::option::Option<crate::model::DataSourceFreeTrial>,
        pub(crate) flow_logs: std::option::Option<crate::model::DataSourceFreeTrial>,
        pub(crate) s3_logs: std::option::Option<crate::model::DataSourceFreeTrial>,
        pub(crate) kubernetes: std::option::Option<crate::model::KubernetesDataSourceFreeTrial>,
        pub(crate) malware_protection:
            std::option::Option<crate::model::MalwareProtectionDataSourceFreeTrial>,
    }
    impl Builder {
        /// <p>Describes whether any Amazon Web Services CloudTrail management event logs are enabled as data sources.</p>
        pub fn cloud_trail(mut self, input: crate::model::DataSourceFreeTrial) -> Self {
            self.cloud_trail = Some(input);
            self
        }
        /// <p>Describes whether any Amazon Web Services CloudTrail management event logs are enabled as data sources.</p>
        pub fn set_cloud_trail(
            mut self,
            input: std::option::Option<crate::model::DataSourceFreeTrial>,
        ) -> Self {
            self.cloud_trail = input;
            self
        }
        /// <p>Describes whether any DNS logs are enabled as data sources.</p>
        pub fn dns_logs(mut self, input: crate::model::DataSourceFreeTrial) -> Self {
            self.dns_logs = Some(input);
            self
        }
        /// <p>Describes whether any DNS logs are enabled as data sources.</p>
        pub fn set_dns_logs(
            mut self,
            input: std::option::Option<crate::model::DataSourceFreeTrial>,
        ) -> Self {
            self.dns_logs = input;
            self
        }
        /// <p>Describes whether any VPC Flow logs are enabled as data sources.</p>
        pub fn flow_logs(mut self, input: crate::model::DataSourceFreeTrial) -> Self {
            self.flow_logs = Some(input);
            self
        }
        /// <p>Describes whether any VPC Flow logs are enabled as data sources.</p>
        pub fn set_flow_logs(
            mut self,
            input: std::option::Option<crate::model::DataSourceFreeTrial>,
        ) -> Self {
            self.flow_logs = input;
            self
        }
        /// <p>Describes whether any S3 data event logs are enabled as data sources.</p>
        pub fn s3_logs(mut self, input: crate::model::DataSourceFreeTrial) -> Self {
            self.s3_logs = Some(input);
            self
        }
        /// <p>Describes whether any S3 data event logs are enabled as data sources.</p>
        pub fn set_s3_logs(
            mut self,
            input: std::option::Option<crate::model::DataSourceFreeTrial>,
        ) -> Self {
            self.s3_logs = input;
            self
        }
        /// <p>Describes whether any Kubernetes logs are enabled as data sources.</p>
        pub fn kubernetes(mut self, input: crate::model::KubernetesDataSourceFreeTrial) -> Self {
            self.kubernetes = Some(input);
            self
        }
        /// <p>Describes whether any Kubernetes logs are enabled as data sources.</p>
        pub fn set_kubernetes(
            mut self,
            input: std::option::Option<crate::model::KubernetesDataSourceFreeTrial>,
        ) -> Self {
            self.kubernetes = input;
            self
        }
        /// <p>Describes whether Malware Protection is enabled as a data source.</p>
        pub fn malware_protection(
            mut self,
            input: crate::model::MalwareProtectionDataSourceFreeTrial,
        ) -> Self {
            self.malware_protection = Some(input);
            self
        }
        /// <p>Describes whether Malware Protection is enabled as a data source.</p>
        pub fn set_malware_protection(
            mut self,
            input: std::option::Option<crate::model::MalwareProtectionDataSourceFreeTrial>,
        ) -> Self {
            self.malware_protection = input;
            self
        }
        /// Consumes the builder and constructs a [`DataSourcesFreeTrial`](crate::model::DataSourcesFreeTrial).
        pub fn build(self) -> crate::model::DataSourcesFreeTrial {
            crate::model::DataSourcesFreeTrial {
                cloud_trail: self.cloud_trail,
                dns_logs: self.dns_logs,
                flow_logs: self.flow_logs,
                s3_logs: self.s3_logs,
                kubernetes: self.kubernetes,
                malware_protection: self.malware_protection,
            }
        }
    }
}
impl DataSourcesFreeTrial {
    /// Creates a new builder-style object to manufacture [`DataSourcesFreeTrial`](crate::model::DataSourcesFreeTrial).
    pub fn builder() -> crate::model::data_sources_free_trial::Builder {
        crate::model::data_sources_free_trial::Builder::default()
    }
}

/// <p>Provides details about Malware Protection when it is enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct MalwareProtectionDataSourceFreeTrial {
    /// <p>Describes whether Malware Protection for EC2 instances with findings is enabled as a data source.</p>
    #[doc(hidden)]
    pub scan_ec2_instance_with_findings: std::option::Option<crate::model::DataSourceFreeTrial>,
}
impl MalwareProtectionDataSourceFreeTrial {
    /// <p>Describes whether Malware Protection for EC2 instances with findings is enabled as a data source.</p>
    pub fn scan_ec2_instance_with_findings(
        &self,
    ) -> std::option::Option<&crate::model::DataSourceFreeTrial> {
        self.scan_ec2_instance_with_findings.as_ref()
    }
}
/// See [`MalwareProtectionDataSourceFreeTrial`](crate::model::MalwareProtectionDataSourceFreeTrial).
pub mod malware_protection_data_source_free_trial {

    /// A builder for [`MalwareProtectionDataSourceFreeTrial`](crate::model::MalwareProtectionDataSourceFreeTrial).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scan_ec2_instance_with_findings:
            std::option::Option<crate::model::DataSourceFreeTrial>,
    }
    impl Builder {
        /// <p>Describes whether Malware Protection for EC2 instances with findings is enabled as a data source.</p>
        pub fn scan_ec2_instance_with_findings(
            mut self,
            input: crate::model::DataSourceFreeTrial,
        ) -> Self {
            self.scan_ec2_instance_with_findings = Some(input);
            self
        }
        /// <p>Describes whether Malware Protection for EC2 instances with findings is enabled as a data source.</p>
        pub fn set_scan_ec2_instance_with_findings(
            mut self,
            input: std::option::Option<crate::model::DataSourceFreeTrial>,
        ) -> Self {
            self.scan_ec2_instance_with_findings = input;
            self
        }
        /// Consumes the builder and constructs a [`MalwareProtectionDataSourceFreeTrial`](crate::model::MalwareProtectionDataSourceFreeTrial).
        pub fn build(self) -> crate::model::MalwareProtectionDataSourceFreeTrial {
            crate::model::MalwareProtectionDataSourceFreeTrial {
                scan_ec2_instance_with_findings: self.scan_ec2_instance_with_findings,
            }
        }
    }
}
impl MalwareProtectionDataSourceFreeTrial {
    /// Creates a new builder-style object to manufacture [`MalwareProtectionDataSourceFreeTrial`](crate::model::MalwareProtectionDataSourceFreeTrial).
    pub fn builder() -> crate::model::malware_protection_data_source_free_trial::Builder {
        crate::model::malware_protection_data_source_free_trial::Builder::default()
    }
}

/// <p>Contains information about which data sources are enabled for the GuardDuty member account.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DataSourceFreeTrial {
    /// <p>A value that specifies the number of days left to use each enabled data source.</p>
    #[doc(hidden)]
    pub free_trial_days_remaining: i32,
}
impl DataSourceFreeTrial {
    /// <p>A value that specifies the number of days left to use each enabled data source.</p>
    pub fn free_trial_days_remaining(&self) -> i32 {
        self.free_trial_days_remaining
    }
}
/// See [`DataSourceFreeTrial`](crate::model::DataSourceFreeTrial).
pub mod data_source_free_trial {

    /// A builder for [`DataSourceFreeTrial`](crate::model::DataSourceFreeTrial).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) free_trial_days_remaining: std::option::Option<i32>,
    }
    impl Builder {
        /// <p>A value that specifies the number of days left to use each enabled data source.</p>
        pub fn free_trial_days_remaining(mut self, input: i32) -> Self {
            self.free_trial_days_remaining = Some(input);
            self
        }
        /// <p>A value that specifies the number of days left to use each enabled data source.</p>
        pub fn set_free_trial_days_remaining(mut self, input: std::option::Option<i32>) -> Self {
            self.free_trial_days_remaining = input;
            self
        }
        /// Consumes the builder and constructs a [`DataSourceFreeTrial`](crate::model::DataSourceFreeTrial).
        pub fn build(self) -> crate::model::DataSourceFreeTrial {
            crate::model::DataSourceFreeTrial {
                free_trial_days_remaining: self.free_trial_days_remaining.unwrap_or_default(),
            }
        }
    }
}
impl DataSourceFreeTrial {
    /// Creates a new builder-style object to manufacture [`DataSourceFreeTrial`](crate::model::DataSourceFreeTrial).
    pub fn builder() -> crate::model::data_source_free_trial::Builder {
        crate::model::data_source_free_trial::Builder::default()
    }
}

/// <p>Provides details about the Kubernetes resources when it is enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesDataSourceFreeTrial {
    /// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
    #[doc(hidden)]
    pub audit_logs: std::option::Option<crate::model::DataSourceFreeTrial>,
}
impl KubernetesDataSourceFreeTrial {
    /// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
    pub fn audit_logs(&self) -> std::option::Option<&crate::model::DataSourceFreeTrial> {
        self.audit_logs.as_ref()
    }
}
/// See [`KubernetesDataSourceFreeTrial`](crate::model::KubernetesDataSourceFreeTrial).
pub mod kubernetes_data_source_free_trial {

    /// A builder for [`KubernetesDataSourceFreeTrial`](crate::model::KubernetesDataSourceFreeTrial).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) audit_logs: std::option::Option<crate::model::DataSourceFreeTrial>,
    }
    impl Builder {
        /// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
        pub fn audit_logs(mut self, input: crate::model::DataSourceFreeTrial) -> Self {
            self.audit_logs = Some(input);
            self
        }
        /// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
        pub fn set_audit_logs(
            mut self,
            input: std::option::Option<crate::model::DataSourceFreeTrial>,
        ) -> Self {
            self.audit_logs = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesDataSourceFreeTrial`](crate::model::KubernetesDataSourceFreeTrial).
        pub fn build(self) -> crate::model::KubernetesDataSourceFreeTrial {
            crate::model::KubernetesDataSourceFreeTrial {
                audit_logs: self.audit_logs,
            }
        }
    }
}
impl KubernetesDataSourceFreeTrial {
    /// Creates a new builder-style object to manufacture [`KubernetesDataSourceFreeTrial`](crate::model::KubernetesDataSourceFreeTrial).
    pub fn builder() -> crate::model::kubernetes_data_source_free_trial::Builder {
        crate::model::kubernetes_data_source_free_trial::Builder::default()
    }
}

/// <p>Contains information on which data sources are enabled for a member account.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct MemberDataSourceConfiguration {
    /// <p>The account ID for the member account.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>Contains information on the status of data sources for the account.</p>
    #[doc(hidden)]
    pub data_sources: std::option::Option<crate::model::DataSourceConfigurationsResult>,
}
impl MemberDataSourceConfiguration {
    /// <p>The account ID for the member account.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>Contains information on the status of data sources for the account.</p>
    pub fn data_sources(
        &self,
    ) -> std::option::Option<&crate::model::DataSourceConfigurationsResult> {
        self.data_sources.as_ref()
    }
}
/// See [`MemberDataSourceConfiguration`](crate::model::MemberDataSourceConfiguration).
pub mod member_data_source_configuration {

    /// A builder for [`MemberDataSourceConfiguration`](crate::model::MemberDataSourceConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) data_sources: std::option::Option<crate::model::DataSourceConfigurationsResult>,
    }
    impl Builder {
        /// <p>The account ID for the member account.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The account ID for the member account.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>Contains information on the status of data sources for the account.</p>
        pub fn data_sources(mut self, input: crate::model::DataSourceConfigurationsResult) -> Self {
            self.data_sources = Some(input);
            self
        }
        /// <p>Contains information on the status of data sources for the account.</p>
        pub fn set_data_sources(
            mut self,
            input: std::option::Option<crate::model::DataSourceConfigurationsResult>,
        ) -> Self {
            self.data_sources = input;
            self
        }
        /// Consumes the builder and constructs a [`MemberDataSourceConfiguration`](crate::model::MemberDataSourceConfiguration).
        pub fn build(self) -> crate::model::MemberDataSourceConfiguration {
            crate::model::MemberDataSourceConfiguration {
                account_id: self.account_id,
                data_sources: self.data_sources,
            }
        }
    }
}
impl MemberDataSourceConfiguration {
    /// Creates a new builder-style object to manufacture [`MemberDataSourceConfiguration`](crate::model::MemberDataSourceConfiguration).
    pub fn builder() -> crate::model::member_data_source_configuration::Builder {
        crate::model::member_data_source_configuration::Builder::default()
    }
}

/// <p>Contains information on the status of data sources for the detector.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DataSourceConfigurationsResult {
    /// <p>An object that contains information on the status of CloudTrail as a data source.</p>
    #[doc(hidden)]
    pub cloud_trail: std::option::Option<crate::model::CloudTrailConfigurationResult>,
    /// <p>An object that contains information on the status of DNS logs as a data source.</p>
    #[doc(hidden)]
    pub dns_logs: std::option::Option<crate::model::DnsLogsConfigurationResult>,
    /// <p>An object that contains information on the status of VPC flow logs as a data source.</p>
    #[doc(hidden)]
    pub flow_logs: std::option::Option<crate::model::FlowLogsConfigurationResult>,
    /// <p>An object that contains information on the status of S3 Data event logs as a data source.</p>
    #[doc(hidden)]
    pub s3_logs: std::option::Option<crate::model::S3LogsConfigurationResult>,
    /// <p>An object that contains information on the status of all Kubernetes data sources.</p>
    #[doc(hidden)]
    pub kubernetes: std::option::Option<crate::model::KubernetesConfigurationResult>,
    /// <p>Describes the configuration of Malware Protection data sources.</p>
    #[doc(hidden)]
    pub malware_protection: std::option::Option<crate::model::MalwareProtectionConfigurationResult>,
}
impl DataSourceConfigurationsResult {
    /// <p>An object that contains information on the status of CloudTrail as a data source.</p>
    pub fn cloud_trail(&self) -> std::option::Option<&crate::model::CloudTrailConfigurationResult> {
        self.cloud_trail.as_ref()
    }
    /// <p>An object that contains information on the status of DNS logs as a data source.</p>
    pub fn dns_logs(&self) -> std::option::Option<&crate::model::DnsLogsConfigurationResult> {
        self.dns_logs.as_ref()
    }
    /// <p>An object that contains information on the status of VPC flow logs as a data source.</p>
    pub fn flow_logs(&self) -> std::option::Option<&crate::model::FlowLogsConfigurationResult> {
        self.flow_logs.as_ref()
    }
    /// <p>An object that contains information on the status of S3 Data event logs as a data source.</p>
    pub fn s3_logs(&self) -> std::option::Option<&crate::model::S3LogsConfigurationResult> {
        self.s3_logs.as_ref()
    }
    /// <p>An object that contains information on the status of all Kubernetes data sources.</p>
    pub fn kubernetes(&self) -> std::option::Option<&crate::model::KubernetesConfigurationResult> {
        self.kubernetes.as_ref()
    }
    /// <p>Describes the configuration of Malware Protection data sources.</p>
    pub fn malware_protection(
        &self,
    ) -> std::option::Option<&crate::model::MalwareProtectionConfigurationResult> {
        self.malware_protection.as_ref()
    }
}
/// See [`DataSourceConfigurationsResult`](crate::model::DataSourceConfigurationsResult).
pub mod data_source_configurations_result {

    /// A builder for [`DataSourceConfigurationsResult`](crate::model::DataSourceConfigurationsResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) cloud_trail: std::option::Option<crate::model::CloudTrailConfigurationResult>,
        pub(crate) dns_logs: std::option::Option<crate::model::DnsLogsConfigurationResult>,
        pub(crate) flow_logs: std::option::Option<crate::model::FlowLogsConfigurationResult>,
        pub(crate) s3_logs: std::option::Option<crate::model::S3LogsConfigurationResult>,
        pub(crate) kubernetes: std::option::Option<crate::model::KubernetesConfigurationResult>,
        pub(crate) malware_protection:
            std::option::Option<crate::model::MalwareProtectionConfigurationResult>,
    }
    impl Builder {
        /// <p>An object that contains information on the status of CloudTrail as a data source.</p>
        pub fn cloud_trail(mut self, input: crate::model::CloudTrailConfigurationResult) -> Self {
            self.cloud_trail = Some(input);
            self
        }
        /// <p>An object that contains information on the status of CloudTrail as a data source.</p>
        pub fn set_cloud_trail(
            mut self,
            input: std::option::Option<crate::model::CloudTrailConfigurationResult>,
        ) -> Self {
            self.cloud_trail = input;
            self
        }
        /// <p>An object that contains information on the status of DNS logs as a data source.</p>
        pub fn dns_logs(mut self, input: crate::model::DnsLogsConfigurationResult) -> Self {
            self.dns_logs = Some(input);
            self
        }
        /// <p>An object that contains information on the status of DNS logs as a data source.</p>
        pub fn set_dns_logs(
            mut self,
            input: std::option::Option<crate::model::DnsLogsConfigurationResult>,
        ) -> Self {
            self.dns_logs = input;
            self
        }
        /// <p>An object that contains information on the status of VPC flow logs as a data source.</p>
        pub fn flow_logs(mut self, input: crate::model::FlowLogsConfigurationResult) -> Self {
            self.flow_logs = Some(input);
            self
        }
        /// <p>An object that contains information on the status of VPC flow logs as a data source.</p>
        pub fn set_flow_logs(
            mut self,
            input: std::option::Option<crate::model::FlowLogsConfigurationResult>,
        ) -> Self {
            self.flow_logs = input;
            self
        }
        /// <p>An object that contains information on the status of S3 Data event logs as a data source.</p>
        pub fn s3_logs(mut self, input: crate::model::S3LogsConfigurationResult) -> Self {
            self.s3_logs = Some(input);
            self
        }
        /// <p>An object that contains information on the status of S3 Data event logs as a data source.</p>
        pub fn set_s3_logs(
            mut self,
            input: std::option::Option<crate::model::S3LogsConfigurationResult>,
        ) -> Self {
            self.s3_logs = input;
            self
        }
        /// <p>An object that contains information on the status of all Kubernetes data sources.</p>
        pub fn kubernetes(mut self, input: crate::model::KubernetesConfigurationResult) -> Self {
            self.kubernetes = Some(input);
            self
        }
        /// <p>An object that contains information on the status of all Kubernetes data sources.</p>
        pub fn set_kubernetes(
            mut self,
            input: std::option::Option<crate::model::KubernetesConfigurationResult>,
        ) -> Self {
            self.kubernetes = input;
            self
        }
        /// <p>Describes the configuration of Malware Protection data sources.</p>
        pub fn malware_protection(
            mut self,
            input: crate::model::MalwareProtectionConfigurationResult,
        ) -> Self {
            self.malware_protection = Some(input);
            self
        }
        /// <p>Describes the configuration of Malware Protection data sources.</p>
        pub fn set_malware_protection(
            mut self,
            input: std::option::Option<crate::model::MalwareProtectionConfigurationResult>,
        ) -> Self {
            self.malware_protection = input;
            self
        }
        /// Consumes the builder and constructs a [`DataSourceConfigurationsResult`](crate::model::DataSourceConfigurationsResult).
        pub fn build(self) -> crate::model::DataSourceConfigurationsResult {
            crate::model::DataSourceConfigurationsResult {
                cloud_trail: self.cloud_trail,
                dns_logs: self.dns_logs,
                flow_logs: self.flow_logs,
                s3_logs: self.s3_logs,
                kubernetes: self.kubernetes,
                malware_protection: self.malware_protection,
            }
        }
    }
}
impl DataSourceConfigurationsResult {
    /// Creates a new builder-style object to manufacture [`DataSourceConfigurationsResult`](crate::model::DataSourceConfigurationsResult).
    pub fn builder() -> crate::model::data_source_configurations_result::Builder {
        crate::model::data_source_configurations_result::Builder::default()
    }
}

/// <p>An object that contains information on the status of all Malware Protection data sources.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct MalwareProtectionConfigurationResult {
    /// <p>Describes the configuration of Malware Protection for EC2 instances with findings.</p>
    #[doc(hidden)]
    pub scan_ec2_instance_with_findings:
        std::option::Option<crate::model::ScanEc2InstanceWithFindingsResult>,
    /// <p>The GuardDuty Malware Protection service role.</p>
    #[doc(hidden)]
    pub service_role: std::option::Option<std::string::String>,
}
impl MalwareProtectionConfigurationResult {
    /// <p>Describes the configuration of Malware Protection for EC2 instances with findings.</p>
    pub fn scan_ec2_instance_with_findings(
        &self,
    ) -> std::option::Option<&crate::model::ScanEc2InstanceWithFindingsResult> {
        self.scan_ec2_instance_with_findings.as_ref()
    }
    /// <p>The GuardDuty Malware Protection service role.</p>
    pub fn service_role(&self) -> std::option::Option<&str> {
        self.service_role.as_deref()
    }
}
/// See [`MalwareProtectionConfigurationResult`](crate::model::MalwareProtectionConfigurationResult).
pub mod malware_protection_configuration_result {

    /// A builder for [`MalwareProtectionConfigurationResult`](crate::model::MalwareProtectionConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scan_ec2_instance_with_findings:
            std::option::Option<crate::model::ScanEc2InstanceWithFindingsResult>,
        pub(crate) service_role: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>Describes the configuration of Malware Protection for EC2 instances with findings.</p>
        pub fn scan_ec2_instance_with_findings(
            mut self,
            input: crate::model::ScanEc2InstanceWithFindingsResult,
        ) -> Self {
            self.scan_ec2_instance_with_findings = Some(input);
            self
        }
        /// <p>Describes the configuration of Malware Protection for EC2 instances with findings.</p>
        pub fn set_scan_ec2_instance_with_findings(
            mut self,
            input: std::option::Option<crate::model::ScanEc2InstanceWithFindingsResult>,
        ) -> Self {
            self.scan_ec2_instance_with_findings = input;
            self
        }
        /// <p>The GuardDuty Malware Protection service role.</p>
        pub fn service_role(mut self, input: impl Into<std::string::String>) -> Self {
            self.service_role = Some(input.into());
            self
        }
        /// <p>The GuardDuty Malware Protection service role.</p>
        pub fn set_service_role(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.service_role = input;
            self
        }
        /// Consumes the builder and constructs a [`MalwareProtectionConfigurationResult`](crate::model::MalwareProtectionConfigurationResult).
        pub fn build(self) -> crate::model::MalwareProtectionConfigurationResult {
            crate::model::MalwareProtectionConfigurationResult {
                scan_ec2_instance_with_findings: self.scan_ec2_instance_with_findings,
                service_role: self.service_role,
            }
        }
    }
}
impl MalwareProtectionConfigurationResult {
    /// Creates a new builder-style object to manufacture [`MalwareProtectionConfigurationResult`](crate::model::MalwareProtectionConfigurationResult).
    pub fn builder() -> crate::model::malware_protection_configuration_result::Builder {
        crate::model::malware_protection_configuration_result::Builder::default()
    }
}

/// <p>An object that contains information on the status of whether Malware Protection for EC2 instances with findings will be enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanEc2InstanceWithFindingsResult {
    /// <p>Describes the configuration of scanning EBS volumes as a data source.</p>
    #[doc(hidden)]
    pub ebs_volumes: std::option::Option<crate::model::EbsVolumesResult>,
}
impl ScanEc2InstanceWithFindingsResult {
    /// <p>Describes the configuration of scanning EBS volumes as a data source.</p>
    pub fn ebs_volumes(&self) -> std::option::Option<&crate::model::EbsVolumesResult> {
        self.ebs_volumes.as_ref()
    }
}
/// See [`ScanEc2InstanceWithFindingsResult`](crate::model::ScanEc2InstanceWithFindingsResult).
pub mod scan_ec2_instance_with_findings_result {

    /// A builder for [`ScanEc2InstanceWithFindingsResult`](crate::model::ScanEc2InstanceWithFindingsResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) ebs_volumes: std::option::Option<crate::model::EbsVolumesResult>,
    }
    impl Builder {
        /// <p>Describes the configuration of scanning EBS volumes as a data source.</p>
        pub fn ebs_volumes(mut self, input: crate::model::EbsVolumesResult) -> Self {
            self.ebs_volumes = Some(input);
            self
        }
        /// <p>Describes the configuration of scanning EBS volumes as a data source.</p>
        pub fn set_ebs_volumes(
            mut self,
            input: std::option::Option<crate::model::EbsVolumesResult>,
        ) -> Self {
            self.ebs_volumes = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanEc2InstanceWithFindingsResult`](crate::model::ScanEc2InstanceWithFindingsResult).
        pub fn build(self) -> crate::model::ScanEc2InstanceWithFindingsResult {
            crate::model::ScanEc2InstanceWithFindingsResult {
                ebs_volumes: self.ebs_volumes,
            }
        }
    }
}
impl ScanEc2InstanceWithFindingsResult {
    /// Creates a new builder-style object to manufacture [`ScanEc2InstanceWithFindingsResult`](crate::model::ScanEc2InstanceWithFindingsResult).
    pub fn builder() -> crate::model::scan_ec2_instance_with_findings_result::Builder {
        crate::model::scan_ec2_instance_with_findings_result::Builder::default()
    }
}

/// <p>Describes the configuration of scanning EBS volumes as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct EbsVolumesResult {
    /// <p>Describes whether scanning EBS volumes is enabled as a data source.</p>
    #[doc(hidden)]
    pub status: std::option::Option<crate::model::DataSourceStatus>,
    /// <p>Specifies the reason why scanning EBS volumes (Malware Protection) was not enabled as a data source.</p>
    #[doc(hidden)]
    pub reason: std::option::Option<std::string::String>,
}
impl EbsVolumesResult {
    /// <p>Describes whether scanning EBS volumes is enabled as a data source.</p>
    pub fn status(&self) -> std::option::Option<&crate::model::DataSourceStatus> {
        self.status.as_ref()
    }
    /// <p>Specifies the reason why scanning EBS volumes (Malware Protection) was not enabled as a data source.</p>
    pub fn reason(&self) -> std::option::Option<&str> {
        self.reason.as_deref()
    }
}
/// See [`EbsVolumesResult`](crate::model::EbsVolumesResult).
pub mod ebs_volumes_result {

    /// A builder for [`EbsVolumesResult`](crate::model::EbsVolumesResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) status: std::option::Option<crate::model::DataSourceStatus>,
        pub(crate) reason: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>Describes whether scanning EBS volumes is enabled as a data source.</p>
        pub fn status(mut self, input: crate::model::DataSourceStatus) -> Self {
            self.status = Some(input);
            self
        }
        /// <p>Describes whether scanning EBS volumes is enabled as a data source.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::DataSourceStatus>,
        ) -> Self {
            self.status = input;
            self
        }
        /// <p>Specifies the reason why scanning EBS volumes (Malware Protection) was not enabled as a data source.</p>
        pub fn reason(mut self, input: impl Into<std::string::String>) -> Self {
            self.reason = Some(input.into());
            self
        }
        /// <p>Specifies the reason why scanning EBS volumes (Malware Protection) was not enabled as a data source.</p>
        pub fn set_reason(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.reason = input;
            self
        }
        /// Consumes the builder and constructs a [`EbsVolumesResult`](crate::model::EbsVolumesResult).
        pub fn build(self) -> crate::model::EbsVolumesResult {
            crate::model::EbsVolumesResult {
                status: self.status,
                reason: self.reason,
            }
        }
    }
}
impl EbsVolumesResult {
    /// Creates a new builder-style object to manufacture [`EbsVolumesResult`](crate::model::EbsVolumesResult).
    pub fn builder() -> crate::model::ebs_volumes_result::Builder {
        crate::model::ebs_volumes_result::Builder::default()
    }
}

/// When writing a match expression against `DataSourceStatus`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let datasourcestatus = unimplemented!();
/// match datasourcestatus {
///     DataSourceStatus::Disabled => { /* ... */ },
///     DataSourceStatus::Enabled => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `datasourcestatus` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `DataSourceStatus::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `DataSourceStatus::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `DataSourceStatus::NewFeature` is defined.
/// Specifically, when `datasourcestatus` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `DataSourceStatus::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum DataSourceStatus {
    #[allow(missing_docs)] // documentation missing in model
    Disabled,
    #[allow(missing_docs)] // documentation missing in model
    Enabled,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for DataSourceStatus {
    fn from(s: &str) -> Self {
        match s {
            "DISABLED" => DataSourceStatus::Disabled,
            "ENABLED" => DataSourceStatus::Enabled,
            other => DataSourceStatus::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for DataSourceStatus {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(DataSourceStatus::from(s))
    }
}
impl DataSourceStatus {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            DataSourceStatus::Disabled => "DISABLED",
            DataSourceStatus::Enabled => "ENABLED",
            DataSourceStatus::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["DISABLED", "ENABLED"]
    }
}
impl AsRef<str> for DataSourceStatus {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Describes whether any Kubernetes logs will be enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesConfigurationResult {
    /// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
    #[doc(hidden)]
    pub audit_logs: std::option::Option<crate::model::KubernetesAuditLogsConfigurationResult>,
}
impl KubernetesConfigurationResult {
    /// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
    pub fn audit_logs(
        &self,
    ) -> std::option::Option<&crate::model::KubernetesAuditLogsConfigurationResult> {
        self.audit_logs.as_ref()
    }
}
/// See [`KubernetesConfigurationResult`](crate::model::KubernetesConfigurationResult).
pub mod kubernetes_configuration_result {

    /// A builder for [`KubernetesConfigurationResult`](crate::model::KubernetesConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) audit_logs:
            std::option::Option<crate::model::KubernetesAuditLogsConfigurationResult>,
    }
    impl Builder {
        /// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
        pub fn audit_logs(
            mut self,
            input: crate::model::KubernetesAuditLogsConfigurationResult,
        ) -> Self {
            self.audit_logs = Some(input);
            self
        }
        /// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
        pub fn set_audit_logs(
            mut self,
            input: std::option::Option<crate::model::KubernetesAuditLogsConfigurationResult>,
        ) -> Self {
            self.audit_logs = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesConfigurationResult`](crate::model::KubernetesConfigurationResult).
        pub fn build(self) -> crate::model::KubernetesConfigurationResult {
            crate::model::KubernetesConfigurationResult {
                audit_logs: self.audit_logs,
            }
        }
    }
}
impl KubernetesConfigurationResult {
    /// Creates a new builder-style object to manufacture [`KubernetesConfigurationResult`](crate::model::KubernetesConfigurationResult).
    pub fn builder() -> crate::model::kubernetes_configuration_result::Builder {
        crate::model::kubernetes_configuration_result::Builder::default()
    }
}

/// <p>Describes whether Kubernetes audit logs are enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesAuditLogsConfigurationResult {
    /// <p>A value that describes whether Kubernetes audit logs are enabled as a data source.</p>
    #[doc(hidden)]
    pub status: std::option::Option<crate::model::DataSourceStatus>,
}
impl KubernetesAuditLogsConfigurationResult {
    /// <p>A value that describes whether Kubernetes audit logs are enabled as a data source.</p>
    pub fn status(&self) -> std::option::Option<&crate::model::DataSourceStatus> {
        self.status.as_ref()
    }
}
/// See [`KubernetesAuditLogsConfigurationResult`](crate::model::KubernetesAuditLogsConfigurationResult).
pub mod kubernetes_audit_logs_configuration_result {

    /// A builder for [`KubernetesAuditLogsConfigurationResult`](crate::model::KubernetesAuditLogsConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) status: std::option::Option<crate::model::DataSourceStatus>,
    }
    impl Builder {
        /// <p>A value that describes whether Kubernetes audit logs are enabled as a data source.</p>
        pub fn status(mut self, input: crate::model::DataSourceStatus) -> Self {
            self.status = Some(input);
            self
        }
        /// <p>A value that describes whether Kubernetes audit logs are enabled as a data source.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::DataSourceStatus>,
        ) -> Self {
            self.status = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesAuditLogsConfigurationResult`](crate::model::KubernetesAuditLogsConfigurationResult).
        pub fn build(self) -> crate::model::KubernetesAuditLogsConfigurationResult {
            crate::model::KubernetesAuditLogsConfigurationResult {
                status: self.status,
            }
        }
    }
}
impl KubernetesAuditLogsConfigurationResult {
    /// Creates a new builder-style object to manufacture [`KubernetesAuditLogsConfigurationResult`](crate::model::KubernetesAuditLogsConfigurationResult).
    pub fn builder() -> crate::model::kubernetes_audit_logs_configuration_result::Builder {
        crate::model::kubernetes_audit_logs_configuration_result::Builder::default()
    }
}

/// <p>Describes whether S3 data event logs will be enabled as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct S3LogsConfigurationResult {
    /// <p>A value that describes whether S3 data event logs are automatically enabled for new members of the organization.</p>
    #[doc(hidden)]
    pub status: std::option::Option<crate::model::DataSourceStatus>,
}
impl S3LogsConfigurationResult {
    /// <p>A value that describes whether S3 data event logs are automatically enabled for new members of the organization.</p>
    pub fn status(&self) -> std::option::Option<&crate::model::DataSourceStatus> {
        self.status.as_ref()
    }
}
/// See [`S3LogsConfigurationResult`](crate::model::S3LogsConfigurationResult).
pub mod s3_logs_configuration_result {

    /// A builder for [`S3LogsConfigurationResult`](crate::model::S3LogsConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) status: std::option::Option<crate::model::DataSourceStatus>,
    }
    impl Builder {
        /// <p>A value that describes whether S3 data event logs are automatically enabled for new members of the organization.</p>
        pub fn status(mut self, input: crate::model::DataSourceStatus) -> Self {
            self.status = Some(input);
            self
        }
        /// <p>A value that describes whether S3 data event logs are automatically enabled for new members of the organization.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::DataSourceStatus>,
        ) -> Self {
            self.status = input;
            self
        }
        /// Consumes the builder and constructs a [`S3LogsConfigurationResult`](crate::model::S3LogsConfigurationResult).
        pub fn build(self) -> crate::model::S3LogsConfigurationResult {
            crate::model::S3LogsConfigurationResult {
                status: self.status,
            }
        }
    }
}
impl S3LogsConfigurationResult {
    /// Creates a new builder-style object to manufacture [`S3LogsConfigurationResult`](crate::model::S3LogsConfigurationResult).
    pub fn builder() -> crate::model::s3_logs_configuration_result::Builder {
        crate::model::s3_logs_configuration_result::Builder::default()
    }
}

/// <p>Contains information on the status of VPC flow logs as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct FlowLogsConfigurationResult {
    /// <p>Denotes whether VPC flow logs is enabled as a data source.</p>
    #[doc(hidden)]
    pub status: std::option::Option<crate::model::DataSourceStatus>,
}
impl FlowLogsConfigurationResult {
    /// <p>Denotes whether VPC flow logs is enabled as a data source.</p>
    pub fn status(&self) -> std::option::Option<&crate::model::DataSourceStatus> {
        self.status.as_ref()
    }
}
/// See [`FlowLogsConfigurationResult`](crate::model::FlowLogsConfigurationResult).
pub mod flow_logs_configuration_result {

    /// A builder for [`FlowLogsConfigurationResult`](crate::model::FlowLogsConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) status: std::option::Option<crate::model::DataSourceStatus>,
    }
    impl Builder {
        /// <p>Denotes whether VPC flow logs is enabled as a data source.</p>
        pub fn status(mut self, input: crate::model::DataSourceStatus) -> Self {
            self.status = Some(input);
            self
        }
        /// <p>Denotes whether VPC flow logs is enabled as a data source.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::DataSourceStatus>,
        ) -> Self {
            self.status = input;
            self
        }
        /// Consumes the builder and constructs a [`FlowLogsConfigurationResult`](crate::model::FlowLogsConfigurationResult).
        pub fn build(self) -> crate::model::FlowLogsConfigurationResult {
            crate::model::FlowLogsConfigurationResult {
                status: self.status,
            }
        }
    }
}
impl FlowLogsConfigurationResult {
    /// Creates a new builder-style object to manufacture [`FlowLogsConfigurationResult`](crate::model::FlowLogsConfigurationResult).
    pub fn builder() -> crate::model::flow_logs_configuration_result::Builder {
        crate::model::flow_logs_configuration_result::Builder::default()
    }
}

/// <p>Contains information on the status of DNS logs as a data source.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DnsLogsConfigurationResult {
    /// <p>Denotes whether DNS logs is enabled as a data source.</p>
    #[doc(hidden)]
    pub status: std::option::Option<crate::model::DataSourceStatus>,
}
impl DnsLogsConfigurationResult {
    /// <p>Denotes whether DNS logs is enabled as a data source.</p>
    pub fn status(&self) -> std::option::Option<&crate::model::DataSourceStatus> {
        self.status.as_ref()
    }
}
/// See [`DnsLogsConfigurationResult`](crate::model::DnsLogsConfigurationResult).
pub mod dns_logs_configuration_result {

    /// A builder for [`DnsLogsConfigurationResult`](crate::model::DnsLogsConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) status: std::option::Option<crate::model::DataSourceStatus>,
    }
    impl Builder {
        /// <p>Denotes whether DNS logs is enabled as a data source.</p>
        pub fn status(mut self, input: crate::model::DataSourceStatus) -> Self {
            self.status = Some(input);
            self
        }
        /// <p>Denotes whether DNS logs is enabled as a data source.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::DataSourceStatus>,
        ) -> Self {
            self.status = input;
            self
        }
        /// Consumes the builder and constructs a [`DnsLogsConfigurationResult`](crate::model::DnsLogsConfigurationResult).
        pub fn build(self) -> crate::model::DnsLogsConfigurationResult {
            crate::model::DnsLogsConfigurationResult {
                status: self.status,
            }
        }
    }
}
impl DnsLogsConfigurationResult {
    /// Creates a new builder-style object to manufacture [`DnsLogsConfigurationResult`](crate::model::DnsLogsConfigurationResult).
    pub fn builder() -> crate::model::dns_logs_configuration_result::Builder {
        crate::model::dns_logs_configuration_result::Builder::default()
    }
}

/// <p>Contains information on the status of CloudTrail as a data source for the detector.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct CloudTrailConfigurationResult {
    /// <p>Describes whether CloudTrail is enabled as a data source for the detector.</p>
    #[doc(hidden)]
    pub status: std::option::Option<crate::model::DataSourceStatus>,
}
impl CloudTrailConfigurationResult {
    /// <p>Describes whether CloudTrail is enabled as a data source for the detector.</p>
    pub fn status(&self) -> std::option::Option<&crate::model::DataSourceStatus> {
        self.status.as_ref()
    }
}
/// See [`CloudTrailConfigurationResult`](crate::model::CloudTrailConfigurationResult).
pub mod cloud_trail_configuration_result {

    /// A builder for [`CloudTrailConfigurationResult`](crate::model::CloudTrailConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) status: std::option::Option<crate::model::DataSourceStatus>,
    }
    impl Builder {
        /// <p>Describes whether CloudTrail is enabled as a data source for the detector.</p>
        pub fn status(mut self, input: crate::model::DataSourceStatus) -> Self {
            self.status = Some(input);
            self
        }
        /// <p>Describes whether CloudTrail is enabled as a data source for the detector.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::DataSourceStatus>,
        ) -> Self {
            self.status = input;
            self
        }
        /// Consumes the builder and constructs a [`CloudTrailConfigurationResult`](crate::model::CloudTrailConfigurationResult).
        pub fn build(self) -> crate::model::CloudTrailConfigurationResult {
            crate::model::CloudTrailConfigurationResult {
                status: self.status,
            }
        }
    }
}
impl CloudTrailConfigurationResult {
    /// Creates a new builder-style object to manufacture [`CloudTrailConfigurationResult`](crate::model::CloudTrailConfigurationResult).
    pub fn builder() -> crate::model::cloud_trail_configuration_result::Builder {
        crate::model::cloud_trail_configuration_result::Builder::default()
    }
}

/// <p>Contains information about the administrator account and invitation.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Master {
    /// <p>The ID of the account used as the administrator account.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>The value used to validate the administrator account to the member account.</p>
    #[doc(hidden)]
    pub invitation_id: std::option::Option<std::string::String>,
    /// <p>The status of the relationship between the administrator and member accounts.</p>
    #[doc(hidden)]
    pub relationship_status: std::option::Option<std::string::String>,
    /// <p>The timestamp when the invitation was sent.</p>
    #[doc(hidden)]
    pub invited_at: std::option::Option<std::string::String>,
}
impl Master {
    /// <p>The ID of the account used as the administrator account.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>The value used to validate the administrator account to the member account.</p>
    pub fn invitation_id(&self) -> std::option::Option<&str> {
        self.invitation_id.as_deref()
    }
    /// <p>The status of the relationship between the administrator and member accounts.</p>
    pub fn relationship_status(&self) -> std::option::Option<&str> {
        self.relationship_status.as_deref()
    }
    /// <p>The timestamp when the invitation was sent.</p>
    pub fn invited_at(&self) -> std::option::Option<&str> {
        self.invited_at.as_deref()
    }
}
/// See [`Master`](crate::model::Master).
pub mod master {

    /// A builder for [`Master`](crate::model::Master).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) invitation_id: std::option::Option<std::string::String>,
        pub(crate) relationship_status: std::option::Option<std::string::String>,
        pub(crate) invited_at: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The ID of the account used as the administrator account.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The ID of the account used as the administrator account.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>The value used to validate the administrator account to the member account.</p>
        pub fn invitation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.invitation_id = Some(input.into());
            self
        }
        /// <p>The value used to validate the administrator account to the member account.</p>
        pub fn set_invitation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.invitation_id = input;
            self
        }
        /// <p>The status of the relationship between the administrator and member accounts.</p>
        pub fn relationship_status(mut self, input: impl Into<std::string::String>) -> Self {
            self.relationship_status = Some(input.into());
            self
        }
        /// <p>The status of the relationship between the administrator and member accounts.</p>
        pub fn set_relationship_status(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.relationship_status = input;
            self
        }
        /// <p>The timestamp when the invitation was sent.</p>
        pub fn invited_at(mut self, input: impl Into<std::string::String>) -> Self {
            self.invited_at = Some(input.into());
            self
        }
        /// <p>The timestamp when the invitation was sent.</p>
        pub fn set_invited_at(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.invited_at = input;
            self
        }
        /// Consumes the builder and constructs a [`Master`](crate::model::Master).
        pub fn build(self) -> crate::model::Master {
            crate::model::Master {
                account_id: self.account_id,
                invitation_id: self.invitation_id,
                relationship_status: self.relationship_status,
                invited_at: self.invited_at,
            }
        }
    }
}
impl Master {
    /// Creates a new builder-style object to manufacture [`Master`](crate::model::Master).
    pub fn builder() -> crate::model::master::Builder {
        crate::model::master::Builder::default()
    }
}

/// When writing a match expression against `IpSetStatus`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let ipsetstatus = unimplemented!();
/// match ipsetstatus {
///     IpSetStatus::Activating => { /* ... */ },
///     IpSetStatus::Active => { /* ... */ },
///     IpSetStatus::Deactivating => { /* ... */ },
///     IpSetStatus::Deleted => { /* ... */ },
///     IpSetStatus::DeletePending => { /* ... */ },
///     IpSetStatus::Error => { /* ... */ },
///     IpSetStatus::Inactive => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `ipsetstatus` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `IpSetStatus::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `IpSetStatus::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `IpSetStatus::NewFeature` is defined.
/// Specifically, when `ipsetstatus` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `IpSetStatus::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum IpSetStatus {
    #[allow(missing_docs)] // documentation missing in model
    Activating,
    #[allow(missing_docs)] // documentation missing in model
    Active,
    #[allow(missing_docs)] // documentation missing in model
    Deactivating,
    #[allow(missing_docs)] // documentation missing in model
    Deleted,
    #[allow(missing_docs)] // documentation missing in model
    DeletePending,
    #[allow(missing_docs)] // documentation missing in model
    Error,
    #[allow(missing_docs)] // documentation missing in model
    Inactive,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for IpSetStatus {
    fn from(s: &str) -> Self {
        match s {
            "ACTIVATING" => IpSetStatus::Activating,
            "ACTIVE" => IpSetStatus::Active,
            "DEACTIVATING" => IpSetStatus::Deactivating,
            "DELETED" => IpSetStatus::Deleted,
            "DELETE_PENDING" => IpSetStatus::DeletePending,
            "ERROR" => IpSetStatus::Error,
            "INACTIVE" => IpSetStatus::Inactive,
            other => IpSetStatus::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for IpSetStatus {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(IpSetStatus::from(s))
    }
}
impl IpSetStatus {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            IpSetStatus::Activating => "ACTIVATING",
            IpSetStatus::Active => "ACTIVE",
            IpSetStatus::Deactivating => "DEACTIVATING",
            IpSetStatus::Deleted => "DELETED",
            IpSetStatus::DeletePending => "DELETE_PENDING",
            IpSetStatus::Error => "ERROR",
            IpSetStatus::Inactive => "INACTIVE",
            IpSetStatus::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &[
            "ACTIVATING",
            "ACTIVE",
            "DEACTIVATING",
            "DELETED",
            "DELETE_PENDING",
            "ERROR",
            "INACTIVE",
        ]
    }
}
impl AsRef<str> for IpSetStatus {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// When writing a match expression against `IpSetFormat`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let ipsetformat = unimplemented!();
/// match ipsetformat {
///     IpSetFormat::AlienVault => { /* ... */ },
///     IpSetFormat::FireEye => { /* ... */ },
///     IpSetFormat::OtxCsv => { /* ... */ },
///     IpSetFormat::ProofPoint => { /* ... */ },
///     IpSetFormat::Stix => { /* ... */ },
///     IpSetFormat::Txt => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `ipsetformat` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `IpSetFormat::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `IpSetFormat::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `IpSetFormat::NewFeature` is defined.
/// Specifically, when `ipsetformat` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `IpSetFormat::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum IpSetFormat {
    #[allow(missing_docs)] // documentation missing in model
    AlienVault,
    #[allow(missing_docs)] // documentation missing in model
    FireEye,
    #[allow(missing_docs)] // documentation missing in model
    OtxCsv,
    #[allow(missing_docs)] // documentation missing in model
    ProofPoint,
    #[allow(missing_docs)] // documentation missing in model
    Stix,
    #[allow(missing_docs)] // documentation missing in model
    Txt,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for IpSetFormat {
    fn from(s: &str) -> Self {
        match s {
            "ALIEN_VAULT" => IpSetFormat::AlienVault,
            "FIRE_EYE" => IpSetFormat::FireEye,
            "OTX_CSV" => IpSetFormat::OtxCsv,
            "PROOF_POINT" => IpSetFormat::ProofPoint,
            "STIX" => IpSetFormat::Stix,
            "TXT" => IpSetFormat::Txt,
            other => IpSetFormat::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for IpSetFormat {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(IpSetFormat::from(s))
    }
}
impl IpSetFormat {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            IpSetFormat::AlienVault => "ALIEN_VAULT",
            IpSetFormat::FireEye => "FIRE_EYE",
            IpSetFormat::OtxCsv => "OTX_CSV",
            IpSetFormat::ProofPoint => "PROOF_POINT",
            IpSetFormat::Stix => "STIX",
            IpSetFormat::Txt => "TXT",
            IpSetFormat::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &[
            "ALIEN_VAULT",
            "FIRE_EYE",
            "OTX_CSV",
            "PROOF_POINT",
            "STIX",
            "TXT",
        ]
    }
}
impl AsRef<str> for IpSetFormat {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information about finding statistics.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct FindingStatistics {
    /// <p>Represents a map of severity to count statistics for a set of findings.</p>
    #[doc(hidden)]
    pub count_by_severity: std::option::Option<std::collections::HashMap<std::string::String, i32>>,
}
impl FindingStatistics {
    /// <p>Represents a map of severity to count statistics for a set of findings.</p>
    pub fn count_by_severity(
        &self,
    ) -> std::option::Option<&std::collections::HashMap<std::string::String, i32>> {
        self.count_by_severity.as_ref()
    }
}
/// See [`FindingStatistics`](crate::model::FindingStatistics).
pub mod finding_statistics {

    /// A builder for [`FindingStatistics`](crate::model::FindingStatistics).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) count_by_severity:
            std::option::Option<std::collections::HashMap<std::string::String, i32>>,
    }
    impl Builder {
        /// Adds a key-value pair to `count_by_severity`.
        ///
        /// To override the contents of this collection use [`set_count_by_severity`](Self::set_count_by_severity).
        ///
        /// <p>Represents a map of severity to count statistics for a set of findings.</p>
        pub fn count_by_severity(mut self, k: impl Into<std::string::String>, v: i32) -> Self {
            let mut hash_map = self.count_by_severity.unwrap_or_default();
            hash_map.insert(k.into(), v);
            self.count_by_severity = Some(hash_map);
            self
        }
        /// <p>Represents a map of severity to count statistics for a set of findings.</p>
        pub fn set_count_by_severity(
            mut self,
            input: std::option::Option<std::collections::HashMap<std::string::String, i32>>,
        ) -> Self {
            self.count_by_severity = input;
            self
        }
        /// Consumes the builder and constructs a [`FindingStatistics`](crate::model::FindingStatistics).
        pub fn build(self) -> crate::model::FindingStatistics {
            crate::model::FindingStatistics {
                count_by_severity: self.count_by_severity,
            }
        }
    }
}
impl FindingStatistics {
    /// Creates a new builder-style object to manufacture [`FindingStatistics`](crate::model::FindingStatistics).
    pub fn builder() -> crate::model::finding_statistics::Builder {
        crate::model::finding_statistics::Builder::default()
    }
}

/// When writing a match expression against `FindingStatisticType`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let findingstatistictype = unimplemented!();
/// match findingstatistictype {
///     FindingStatisticType::CountBySeverity => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `findingstatistictype` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `FindingStatisticType::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `FindingStatisticType::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `FindingStatisticType::NewFeature` is defined.
/// Specifically, when `findingstatistictype` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `FindingStatisticType::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum FindingStatisticType {
    #[allow(missing_docs)] // documentation missing in model
    CountBySeverity,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for FindingStatisticType {
    fn from(s: &str) -> Self {
        match s {
            "COUNT_BY_SEVERITY" => FindingStatisticType::CountBySeverity,
            other => {
                FindingStatisticType::Unknown(crate::types::UnknownVariantValue(other.to_owned()))
            }
        }
    }
}
impl std::str::FromStr for FindingStatisticType {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(FindingStatisticType::from(s))
    }
}
impl FindingStatisticType {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            FindingStatisticType::CountBySeverity => "COUNT_BY_SEVERITY",
            FindingStatisticType::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["COUNT_BY_SEVERITY"]
    }
}
impl AsRef<str> for FindingStatisticType {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information about the finding, which is generated when abnormal or suspicious activity is detected.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Finding {
    /// <p>The ID of the account in which the finding was generated.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>The ARN of the finding.</p>
    #[doc(hidden)]
    pub arn: std::option::Option<std::string::String>,
    /// <p>The confidence score for the finding.</p>
    #[doc(hidden)]
    pub confidence: f64,
    /// <p>The time and date when the finding was created.</p>
    #[doc(hidden)]
    pub created_at: std::option::Option<std::string::String>,
    /// <p>The description of the finding.</p>
    #[doc(hidden)]
    pub description: std::option::Option<std::string::String>,
    /// <p>The ID of the finding.</p>
    #[doc(hidden)]
    pub id: std::option::Option<std::string::String>,
    /// <p>The partition associated with the finding.</p>
    #[doc(hidden)]
    pub partition: std::option::Option<std::string::String>,
    /// <p>The Region where the finding was generated.</p>
    #[doc(hidden)]
    pub region: std::option::Option<std::string::String>,
    /// <p>Contains information about the Amazon Web Services resource associated with the activity that prompted GuardDuty to generate a finding.</p>
    #[doc(hidden)]
    pub resource: std::option::Option<crate::model::Resource>,
    /// <p>The version of the schema used for the finding.</p>
    #[doc(hidden)]
    pub schema_version: std::option::Option<std::string::String>,
    /// <p>Contains additional information about the generated finding.</p>
    #[doc(hidden)]
    pub service: std::option::Option<crate::model::Service>,
    /// <p>The severity of the finding.</p>
    #[doc(hidden)]
    pub severity: f64,
    /// <p>The title of the finding.</p>
    #[doc(hidden)]
    pub title: std::option::Option<std::string::String>,
    /// <p>The type of finding.</p>
    #[doc(hidden)]
    pub r#type: std::option::Option<std::string::String>,
    /// <p>The time and date when the finding was last updated.</p>
    #[doc(hidden)]
    pub updated_at: std::option::Option<std::string::String>,
}
impl Finding {
    /// <p>The ID of the account in which the finding was generated.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>The ARN of the finding.</p>
    pub fn arn(&self) -> std::option::Option<&str> {
        self.arn.as_deref()
    }
    /// <p>The confidence score for the finding.</p>
    pub fn confidence(&self) -> f64 {
        self.confidence
    }
    /// <p>The time and date when the finding was created.</p>
    pub fn created_at(&self) -> std::option::Option<&str> {
        self.created_at.as_deref()
    }
    /// <p>The description of the finding.</p>
    pub fn description(&self) -> std::option::Option<&str> {
        self.description.as_deref()
    }
    /// <p>The ID of the finding.</p>
    pub fn id(&self) -> std::option::Option<&str> {
        self.id.as_deref()
    }
    /// <p>The partition associated with the finding.</p>
    pub fn partition(&self) -> std::option::Option<&str> {
        self.partition.as_deref()
    }
    /// <p>The Region where the finding was generated.</p>
    pub fn region(&self) -> std::option::Option<&str> {
        self.region.as_deref()
    }
    /// <p>Contains information about the Amazon Web Services resource associated with the activity that prompted GuardDuty to generate a finding.</p>
    pub fn resource(&self) -> std::option::Option<&crate::model::Resource> {
        self.resource.as_ref()
    }
    /// <p>The version of the schema used for the finding.</p>
    pub fn schema_version(&self) -> std::option::Option<&str> {
        self.schema_version.as_deref()
    }
    /// <p>Contains additional information about the generated finding.</p>
    pub fn service(&self) -> std::option::Option<&crate::model::Service> {
        self.service.as_ref()
    }
    /// <p>The severity of the finding.</p>
    pub fn severity(&self) -> f64 {
        self.severity
    }
    /// <p>The title of the finding.</p>
    pub fn title(&self) -> std::option::Option<&str> {
        self.title.as_deref()
    }
    /// <p>The type of finding.</p>
    pub fn r#type(&self) -> std::option::Option<&str> {
        self.r#type.as_deref()
    }
    /// <p>The time and date when the finding was last updated.</p>
    pub fn updated_at(&self) -> std::option::Option<&str> {
        self.updated_at.as_deref()
    }
}
/// See [`Finding`](crate::model::Finding).
pub mod finding {

    /// A builder for [`Finding`](crate::model::Finding).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) arn: std::option::Option<std::string::String>,
        pub(crate) confidence: std::option::Option<f64>,
        pub(crate) created_at: std::option::Option<std::string::String>,
        pub(crate) description: std::option::Option<std::string::String>,
        pub(crate) id: std::option::Option<std::string::String>,
        pub(crate) partition: std::option::Option<std::string::String>,
        pub(crate) region: std::option::Option<std::string::String>,
        pub(crate) resource: std::option::Option<crate::model::Resource>,
        pub(crate) schema_version: std::option::Option<std::string::String>,
        pub(crate) service: std::option::Option<crate::model::Service>,
        pub(crate) severity: std::option::Option<f64>,
        pub(crate) title: std::option::Option<std::string::String>,
        pub(crate) r#type: std::option::Option<std::string::String>,
        pub(crate) updated_at: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The ID of the account in which the finding was generated.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The ID of the account in which the finding was generated.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>The ARN of the finding.</p>
        pub fn arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.arn = Some(input.into());
            self
        }
        /// <p>The ARN of the finding.</p>
        pub fn set_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.arn = input;
            self
        }
        /// <p>The confidence score for the finding.</p>
        pub fn confidence(mut self, input: f64) -> Self {
            self.confidence = Some(input);
            self
        }
        /// <p>The confidence score for the finding.</p>
        pub fn set_confidence(mut self, input: std::option::Option<f64>) -> Self {
            self.confidence = input;
            self
        }
        /// <p>The time and date when the finding was created.</p>
        pub fn created_at(mut self, input: impl Into<std::string::String>) -> Self {
            self.created_at = Some(input.into());
            self
        }
        /// <p>The time and date when the finding was created.</p>
        pub fn set_created_at(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.created_at = input;
            self
        }
        /// <p>The description of the finding.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.description = Some(input.into());
            self
        }
        /// <p>The description of the finding.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.description = input;
            self
        }
        /// <p>The ID of the finding.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.id = Some(input.into());
            self
        }
        /// <p>The ID of the finding.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.id = input;
            self
        }
        /// <p>The partition associated with the finding.</p>
        pub fn partition(mut self, input: impl Into<std::string::String>) -> Self {
            self.partition = Some(input.into());
            self
        }
        /// <p>The partition associated with the finding.</p>
        pub fn set_partition(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.partition = input;
            self
        }
        /// <p>The Region where the finding was generated.</p>
        pub fn region(mut self, input: impl Into<std::string::String>) -> Self {
            self.region = Some(input.into());
            self
        }
        /// <p>The Region where the finding was generated.</p>
        pub fn set_region(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.region = input;
            self
        }
        /// <p>Contains information about the Amazon Web Services resource associated with the activity that prompted GuardDuty to generate a finding.</p>
        pub fn resource(mut self, input: crate::model::Resource) -> Self {
            self.resource = Some(input);
            self
        }
        /// <p>Contains information about the Amazon Web Services resource associated with the activity that prompted GuardDuty to generate a finding.</p>
        pub fn set_resource(mut self, input: std::option::Option<crate::model::Resource>) -> Self {
            self.resource = input;
            self
        }
        /// <p>The version of the schema used for the finding.</p>
        pub fn schema_version(mut self, input: impl Into<std::string::String>) -> Self {
            self.schema_version = Some(input.into());
            self
        }
        /// <p>The version of the schema used for the finding.</p>
        pub fn set_schema_version(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.schema_version = input;
            self
        }
        /// <p>Contains additional information about the generated finding.</p>
        pub fn service(mut self, input: crate::model::Service) -> Self {
            self.service = Some(input);
            self
        }
        /// <p>Contains additional information about the generated finding.</p>
        pub fn set_service(mut self, input: std::option::Option<crate::model::Service>) -> Self {
            self.service = input;
            self
        }
        /// <p>The severity of the finding.</p>
        pub fn severity(mut self, input: f64) -> Self {
            self.severity = Some(input);
            self
        }
        /// <p>The severity of the finding.</p>
        pub fn set_severity(mut self, input: std::option::Option<f64>) -> Self {
            self.severity = input;
            self
        }
        /// <p>The title of the finding.</p>
        pub fn title(mut self, input: impl Into<std::string::String>) -> Self {
            self.title = Some(input.into());
            self
        }
        /// <p>The title of the finding.</p>
        pub fn set_title(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.title = input;
            self
        }
        /// <p>The type of finding.</p>
        pub fn r#type(mut self, input: impl Into<std::string::String>) -> Self {
            self.r#type = Some(input.into());
            self
        }
        /// <p>The type of finding.</p>
        pub fn set_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.r#type = input;
            self
        }
        /// <p>The time and date when the finding was last updated.</p>
        pub fn updated_at(mut self, input: impl Into<std::string::String>) -> Self {
            self.updated_at = Some(input.into());
            self
        }
        /// <p>The time and date when the finding was last updated.</p>
        pub fn set_updated_at(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.updated_at = input;
            self
        }
        /// Consumes the builder and constructs a [`Finding`](crate::model::Finding).
        pub fn build(self) -> crate::model::Finding {
            crate::model::Finding {
                account_id: self.account_id,
                arn: self.arn,
                confidence: self.confidence.unwrap_or_default(),
                created_at: self.created_at,
                description: self.description,
                id: self.id,
                partition: self.partition,
                region: self.region,
                resource: self.resource,
                schema_version: self.schema_version,
                service: self.service,
                severity: self.severity.unwrap_or_default(),
                title: self.title,
                r#type: self.r#type,
                updated_at: self.updated_at,
            }
        }
    }
}
impl Finding {
    /// Creates a new builder-style object to manufacture [`Finding`](crate::model::Finding).
    pub fn builder() -> crate::model::finding::Builder {
        crate::model::finding::Builder::default()
    }
}

/// <p>Contains additional information about the generated finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Service {
    /// <p>Information about the activity that is described in a finding.</p>
    #[doc(hidden)]
    pub action: std::option::Option<crate::model::Action>,
    /// <p>An evidence object associated with the service.</p>
    #[doc(hidden)]
    pub evidence: std::option::Option<crate::model::Evidence>,
    /// <p>Indicates whether this finding is archived.</p>
    #[doc(hidden)]
    pub archived: bool,
    /// <p>The total count of the occurrences of this finding type.</p>
    #[doc(hidden)]
    pub count: i32,
    /// <p>The detector ID for the GuardDuty service.</p>
    #[doc(hidden)]
    pub detector_id: std::option::Option<std::string::String>,
    /// <p>The first-seen timestamp of the activity that prompted GuardDuty to generate this finding.</p>
    #[doc(hidden)]
    pub event_first_seen: std::option::Option<std::string::String>,
    /// <p>The last-seen timestamp of the activity that prompted GuardDuty to generate this finding.</p>
    #[doc(hidden)]
    pub event_last_seen: std::option::Option<std::string::String>,
    /// <p>The resource role information for this finding.</p>
    #[doc(hidden)]
    pub resource_role: std::option::Option<std::string::String>,
    /// <p>The name of the Amazon Web Services service (GuardDuty) that generated a finding.</p>
    #[doc(hidden)]
    pub service_name: std::option::Option<std::string::String>,
    /// <p>Feedback that was submitted about the finding.</p>
    #[doc(hidden)]
    pub user_feedback: std::option::Option<std::string::String>,
    /// <p>Contains additional information about the generated finding.</p>
    #[doc(hidden)]
    pub additional_info: std::option::Option<crate::model::ServiceAdditionalInfo>,
    /// <p>The name of the feature that generated a finding.</p>
    #[doc(hidden)]
    pub feature_name: std::option::Option<std::string::String>,
    /// <p>Returns details from the malware scan that created a finding.</p>
    #[doc(hidden)]
    pub ebs_volume_scan_details: std::option::Option<crate::model::EbsVolumeScanDetails>,
}
impl Service {
    /// <p>Information about the activity that is described in a finding.</p>
    pub fn action(&self) -> std::option::Option<&crate::model::Action> {
        self.action.as_ref()
    }
    /// <p>An evidence object associated with the service.</p>
    pub fn evidence(&self) -> std::option::Option<&crate::model::Evidence> {
        self.evidence.as_ref()
    }
    /// <p>Indicates whether this finding is archived.</p>
    pub fn archived(&self) -> bool {
        self.archived
    }
    /// <p>The total count of the occurrences of this finding type.</p>
    pub fn count(&self) -> i32 {
        self.count
    }
    /// <p>The detector ID for the GuardDuty service.</p>
    pub fn detector_id(&self) -> std::option::Option<&str> {
        self.detector_id.as_deref()
    }
    /// <p>The first-seen timestamp of the activity that prompted GuardDuty to generate this finding.</p>
    pub fn event_first_seen(&self) -> std::option::Option<&str> {
        self.event_first_seen.as_deref()
    }
    /// <p>The last-seen timestamp of the activity that prompted GuardDuty to generate this finding.</p>
    pub fn event_last_seen(&self) -> std::option::Option<&str> {
        self.event_last_seen.as_deref()
    }
    /// <p>The resource role information for this finding.</p>
    pub fn resource_role(&self) -> std::option::Option<&str> {
        self.resource_role.as_deref()
    }
    /// <p>The name of the Amazon Web Services service (GuardDuty) that generated a finding.</p>
    pub fn service_name(&self) -> std::option::Option<&str> {
        self.service_name.as_deref()
    }
    /// <p>Feedback that was submitted about the finding.</p>
    pub fn user_feedback(&self) -> std::option::Option<&str> {
        self.user_feedback.as_deref()
    }
    /// <p>Contains additional information about the generated finding.</p>
    pub fn additional_info(&self) -> std::option::Option<&crate::model::ServiceAdditionalInfo> {
        self.additional_info.as_ref()
    }
    /// <p>The name of the feature that generated a finding.</p>
    pub fn feature_name(&self) -> std::option::Option<&str> {
        self.feature_name.as_deref()
    }
    /// <p>Returns details from the malware scan that created a finding.</p>
    pub fn ebs_volume_scan_details(
        &self,
    ) -> std::option::Option<&crate::model::EbsVolumeScanDetails> {
        self.ebs_volume_scan_details.as_ref()
    }
}
/// See [`Service`](crate::model::Service).
pub mod service {

    /// A builder for [`Service`](crate::model::Service).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) action: std::option::Option<crate::model::Action>,
        pub(crate) evidence: std::option::Option<crate::model::Evidence>,
        pub(crate) archived: std::option::Option<bool>,
        pub(crate) count: std::option::Option<i32>,
        pub(crate) detector_id: std::option::Option<std::string::String>,
        pub(crate) event_first_seen: std::option::Option<std::string::String>,
        pub(crate) event_last_seen: std::option::Option<std::string::String>,
        pub(crate) resource_role: std::option::Option<std::string::String>,
        pub(crate) service_name: std::option::Option<std::string::String>,
        pub(crate) user_feedback: std::option::Option<std::string::String>,
        pub(crate) additional_info: std::option::Option<crate::model::ServiceAdditionalInfo>,
        pub(crate) feature_name: std::option::Option<std::string::String>,
        pub(crate) ebs_volume_scan_details: std::option::Option<crate::model::EbsVolumeScanDetails>,
    }
    impl Builder {
        /// <p>Information about the activity that is described in a finding.</p>
        pub fn action(mut self, input: crate::model::Action) -> Self {
            self.action = Some(input);
            self
        }
        /// <p>Information about the activity that is described in a finding.</p>
        pub fn set_action(mut self, input: std::option::Option<crate::model::Action>) -> Self {
            self.action = input;
            self
        }
        /// <p>An evidence object associated with the service.</p>
        pub fn evidence(mut self, input: crate::model::Evidence) -> Self {
            self.evidence = Some(input);
            self
        }
        /// <p>An evidence object associated with the service.</p>
        pub fn set_evidence(mut self, input: std::option::Option<crate::model::Evidence>) -> Self {
            self.evidence = input;
            self
        }
        /// <p>Indicates whether this finding is archived.</p>
        pub fn archived(mut self, input: bool) -> Self {
            self.archived = Some(input);
            self
        }
        /// <p>Indicates whether this finding is archived.</p>
        pub fn set_archived(mut self, input: std::option::Option<bool>) -> Self {
            self.archived = input;
            self
        }
        /// <p>The total count of the occurrences of this finding type.</p>
        pub fn count(mut self, input: i32) -> Self {
            self.count = Some(input);
            self
        }
        /// <p>The total count of the occurrences of this finding type.</p>
        pub fn set_count(mut self, input: std::option::Option<i32>) -> Self {
            self.count = input;
            self
        }
        /// <p>The detector ID for the GuardDuty service.</p>
        pub fn detector_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.detector_id = Some(input.into());
            self
        }
        /// <p>The detector ID for the GuardDuty service.</p>
        pub fn set_detector_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.detector_id = input;
            self
        }
        /// <p>The first-seen timestamp of the activity that prompted GuardDuty to generate this finding.</p>
        pub fn event_first_seen(mut self, input: impl Into<std::string::String>) -> Self {
            self.event_first_seen = Some(input.into());
            self
        }
        /// <p>The first-seen timestamp of the activity that prompted GuardDuty to generate this finding.</p>
        pub fn set_event_first_seen(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.event_first_seen = input;
            self
        }
        /// <p>The last-seen timestamp of the activity that prompted GuardDuty to generate this finding.</p>
        pub fn event_last_seen(mut self, input: impl Into<std::string::String>) -> Self {
            self.event_last_seen = Some(input.into());
            self
        }
        /// <p>The last-seen timestamp of the activity that prompted GuardDuty to generate this finding.</p>
        pub fn set_event_last_seen(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.event_last_seen = input;
            self
        }
        /// <p>The resource role information for this finding.</p>
        pub fn resource_role(mut self, input: impl Into<std::string::String>) -> Self {
            self.resource_role = Some(input.into());
            self
        }
        /// <p>The resource role information for this finding.</p>
        pub fn set_resource_role(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.resource_role = input;
            self
        }
        /// <p>The name of the Amazon Web Services service (GuardDuty) that generated a finding.</p>
        pub fn service_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.service_name = Some(input.into());
            self
        }
        /// <p>The name of the Amazon Web Services service (GuardDuty) that generated a finding.</p>
        pub fn set_service_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.service_name = input;
            self
        }
        /// <p>Feedback that was submitted about the finding.</p>
        pub fn user_feedback(mut self, input: impl Into<std::string::String>) -> Self {
            self.user_feedback = Some(input.into());
            self
        }
        /// <p>Feedback that was submitted about the finding.</p>
        pub fn set_user_feedback(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.user_feedback = input;
            self
        }
        /// <p>Contains additional information about the generated finding.</p>
        pub fn additional_info(mut self, input: crate::model::ServiceAdditionalInfo) -> Self {
            self.additional_info = Some(input);
            self
        }
        /// <p>Contains additional information about the generated finding.</p>
        pub fn set_additional_info(
            mut self,
            input: std::option::Option<crate::model::ServiceAdditionalInfo>,
        ) -> Self {
            self.additional_info = input;
            self
        }
        /// <p>The name of the feature that generated a finding.</p>
        pub fn feature_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.feature_name = Some(input.into());
            self
        }
        /// <p>The name of the feature that generated a finding.</p>
        pub fn set_feature_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.feature_name = input;
            self
        }
        /// <p>Returns details from the malware scan that created a finding.</p>
        pub fn ebs_volume_scan_details(
            mut self,
            input: crate::model::EbsVolumeScanDetails,
        ) -> Self {
            self.ebs_volume_scan_details = Some(input);
            self
        }
        /// <p>Returns details from the malware scan that created a finding.</p>
        pub fn set_ebs_volume_scan_details(
            mut self,
            input: std::option::Option<crate::model::EbsVolumeScanDetails>,
        ) -> Self {
            self.ebs_volume_scan_details = input;
            self
        }
        /// Consumes the builder and constructs a [`Service`](crate::model::Service).
        pub fn build(self) -> crate::model::Service {
            crate::model::Service {
                action: self.action,
                evidence: self.evidence,
                archived: self.archived.unwrap_or_default(),
                count: self.count.unwrap_or_default(),
                detector_id: self.detector_id,
                event_first_seen: self.event_first_seen,
                event_last_seen: self.event_last_seen,
                resource_role: self.resource_role,
                service_name: self.service_name,
                user_feedback: self.user_feedback,
                additional_info: self.additional_info,
                feature_name: self.feature_name,
                ebs_volume_scan_details: self.ebs_volume_scan_details,
            }
        }
    }
}
impl Service {
    /// Creates a new builder-style object to manufacture [`Service`](crate::model::Service).
    pub fn builder() -> crate::model::service::Builder {
        crate::model::service::Builder::default()
    }
}

/// <p>Contains details from the malware scan that created a finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct EbsVolumeScanDetails {
    /// <p>Unique Id of the malware scan that generated the finding.</p>
    #[doc(hidden)]
    pub scan_id: std::option::Option<std::string::String>,
    /// <p>Returns the start date and time of the malware scan.</p>
    #[doc(hidden)]
    pub scan_started_at: std::option::Option<aws_smithy_types::DateTime>,
    /// <p>Returns the completion date and time of the malware scan.</p>
    #[doc(hidden)]
    pub scan_completed_at: std::option::Option<aws_smithy_types::DateTime>,
    /// <p>GuardDuty finding ID that triggered a malware scan.</p>
    #[doc(hidden)]
    pub trigger_finding_id: std::option::Option<std::string::String>,
    /// <p>Contains list of threat intelligence sources used to detect threats.</p>
    #[doc(hidden)]
    pub sources: std::option::Option<std::vec::Vec<std::string::String>>,
    /// <p>Contains a complete view providing malware scan result details.</p>
    #[doc(hidden)]
    pub scan_detections: std::option::Option<crate::model::ScanDetections>,
}
impl EbsVolumeScanDetails {
    /// <p>Unique Id of the malware scan that generated the finding.</p>
    pub fn scan_id(&self) -> std::option::Option<&str> {
        self.scan_id.as_deref()
    }
    /// <p>Returns the start date and time of the malware scan.</p>
    pub fn scan_started_at(&self) -> std::option::Option<&aws_smithy_types::DateTime> {
        self.scan_started_at.as_ref()
    }
    /// <p>Returns the completion date and time of the malware scan.</p>
    pub fn scan_completed_at(&self) -> std::option::Option<&aws_smithy_types::DateTime> {
        self.scan_completed_at.as_ref()
    }
    /// <p>GuardDuty finding ID that triggered a malware scan.</p>
    pub fn trigger_finding_id(&self) -> std::option::Option<&str> {
        self.trigger_finding_id.as_deref()
    }
    /// <p>Contains list of threat intelligence sources used to detect threats.</p>
    pub fn sources(&self) -> std::option::Option<&[std::string::String]> {
        self.sources.as_deref()
    }
    /// <p>Contains a complete view providing malware scan result details.</p>
    pub fn scan_detections(&self) -> std::option::Option<&crate::model::ScanDetections> {
        self.scan_detections.as_ref()
    }
}
/// See [`EbsVolumeScanDetails`](crate::model::EbsVolumeScanDetails).
pub mod ebs_volume_scan_details {

    /// A builder for [`EbsVolumeScanDetails`](crate::model::EbsVolumeScanDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scan_id: std::option::Option<std::string::String>,
        pub(crate) scan_started_at: std::option::Option<aws_smithy_types::DateTime>,
        pub(crate) scan_completed_at: std::option::Option<aws_smithy_types::DateTime>,
        pub(crate) trigger_finding_id: std::option::Option<std::string::String>,
        pub(crate) sources: std::option::Option<std::vec::Vec<std::string::String>>,
        pub(crate) scan_detections: std::option::Option<crate::model::ScanDetections>,
    }
    impl Builder {
        /// <p>Unique Id of the malware scan that generated the finding.</p>
        pub fn scan_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.scan_id = Some(input.into());
            self
        }
        /// <p>Unique Id of the malware scan that generated the finding.</p>
        pub fn set_scan_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.scan_id = input;
            self
        }
        /// <p>Returns the start date and time of the malware scan.</p>
        pub fn scan_started_at(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.scan_started_at = Some(input);
            self
        }
        /// <p>Returns the start date and time of the malware scan.</p>
        pub fn set_scan_started_at(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.scan_started_at = input;
            self
        }
        /// <p>Returns the completion date and time of the malware scan.</p>
        pub fn scan_completed_at(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.scan_completed_at = Some(input);
            self
        }
        /// <p>Returns the completion date and time of the malware scan.</p>
        pub fn set_scan_completed_at(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.scan_completed_at = input;
            self
        }
        /// <p>GuardDuty finding ID that triggered a malware scan.</p>
        pub fn trigger_finding_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.trigger_finding_id = Some(input.into());
            self
        }
        /// <p>GuardDuty finding ID that triggered a malware scan.</p>
        pub fn set_trigger_finding_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.trigger_finding_id = input;
            self
        }
        /// Appends an item to `sources`.
        ///
        /// To override the contents of this collection use [`set_sources`](Self::set_sources).
        ///
        /// <p>Contains list of threat intelligence sources used to detect threats.</p>
        pub fn sources(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.sources.unwrap_or_default();
            v.push(input.into());
            self.sources = Some(v);
            self
        }
        /// <p>Contains list of threat intelligence sources used to detect threats.</p>
        pub fn set_sources(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.sources = input;
            self
        }
        /// <p>Contains a complete view providing malware scan result details.</p>
        pub fn scan_detections(mut self, input: crate::model::ScanDetections) -> Self {
            self.scan_detections = Some(input);
            self
        }
        /// <p>Contains a complete view providing malware scan result details.</p>
        pub fn set_scan_detections(
            mut self,
            input: std::option::Option<crate::model::ScanDetections>,
        ) -> Self {
            self.scan_detections = input;
            self
        }
        /// Consumes the builder and constructs a [`EbsVolumeScanDetails`](crate::model::EbsVolumeScanDetails).
        pub fn build(self) -> crate::model::EbsVolumeScanDetails {
            crate::model::EbsVolumeScanDetails {
                scan_id: self.scan_id,
                scan_started_at: self.scan_started_at,
                scan_completed_at: self.scan_completed_at,
                trigger_finding_id: self.trigger_finding_id,
                sources: self.sources,
                scan_detections: self.scan_detections,
            }
        }
    }
}
impl EbsVolumeScanDetails {
    /// Creates a new builder-style object to manufacture [`EbsVolumeScanDetails`](crate::model::EbsVolumeScanDetails).
    pub fn builder() -> crate::model::ebs_volume_scan_details::Builder {
        crate::model::ebs_volume_scan_details::Builder::default()
    }
}

/// <p>Contains a complete view providing malware scan result details.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanDetections {
    /// <p>Total number of scanned files.</p>
    #[doc(hidden)]
    pub scanned_item_count: std::option::Option<crate::model::ScannedItemCount>,
    /// <p>Total number of infected files.</p>
    #[doc(hidden)]
    pub threats_detected_item_count: std::option::Option<crate::model::ThreatsDetectedItemCount>,
    /// <p>Details of the highest severity threat detected during malware scan and number of infected files.</p>
    #[doc(hidden)]
    pub highest_severity_threat_details:
        std::option::Option<crate::model::HighestSeverityThreatDetails>,
    /// <p>Contains details about identified threats organized by threat name.</p>
    #[doc(hidden)]
    pub threat_detected_by_name: std::option::Option<crate::model::ThreatDetectedByName>,
}
impl ScanDetections {
    /// <p>Total number of scanned files.</p>
    pub fn scanned_item_count(&self) -> std::option::Option<&crate::model::ScannedItemCount> {
        self.scanned_item_count.as_ref()
    }
    /// <p>Total number of infected files.</p>
    pub fn threats_detected_item_count(
        &self,
    ) -> std::option::Option<&crate::model::ThreatsDetectedItemCount> {
        self.threats_detected_item_count.as_ref()
    }
    /// <p>Details of the highest severity threat detected during malware scan and number of infected files.</p>
    pub fn highest_severity_threat_details(
        &self,
    ) -> std::option::Option<&crate::model::HighestSeverityThreatDetails> {
        self.highest_severity_threat_details.as_ref()
    }
    /// <p>Contains details about identified threats organized by threat name.</p>
    pub fn threat_detected_by_name(
        &self,
    ) -> std::option::Option<&crate::model::ThreatDetectedByName> {
        self.threat_detected_by_name.as_ref()
    }
}
/// See [`ScanDetections`](crate::model::ScanDetections).
pub mod scan_detections {

    /// A builder for [`ScanDetections`](crate::model::ScanDetections).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scanned_item_count: std::option::Option<crate::model::ScannedItemCount>,
        pub(crate) threats_detected_item_count:
            std::option::Option<crate::model::ThreatsDetectedItemCount>,
        pub(crate) highest_severity_threat_details:
            std::option::Option<crate::model::HighestSeverityThreatDetails>,
        pub(crate) threat_detected_by_name: std::option::Option<crate::model::ThreatDetectedByName>,
    }
    impl Builder {
        /// <p>Total number of scanned files.</p>
        pub fn scanned_item_count(mut self, input: crate::model::ScannedItemCount) -> Self {
            self.scanned_item_count = Some(input);
            self
        }
        /// <p>Total number of scanned files.</p>
        pub fn set_scanned_item_count(
            mut self,
            input: std::option::Option<crate::model::ScannedItemCount>,
        ) -> Self {
            self.scanned_item_count = input;
            self
        }
        /// <p>Total number of infected files.</p>
        pub fn threats_detected_item_count(
            mut self,
            input: crate::model::ThreatsDetectedItemCount,
        ) -> Self {
            self.threats_detected_item_count = Some(input);
            self
        }
        /// <p>Total number of infected files.</p>
        pub fn set_threats_detected_item_count(
            mut self,
            input: std::option::Option<crate::model::ThreatsDetectedItemCount>,
        ) -> Self {
            self.threats_detected_item_count = input;
            self
        }
        /// <p>Details of the highest severity threat detected during malware scan and number of infected files.</p>
        pub fn highest_severity_threat_details(
            mut self,
            input: crate::model::HighestSeverityThreatDetails,
        ) -> Self {
            self.highest_severity_threat_details = Some(input);
            self
        }
        /// <p>Details of the highest severity threat detected during malware scan and number of infected files.</p>
        pub fn set_highest_severity_threat_details(
            mut self,
            input: std::option::Option<crate::model::HighestSeverityThreatDetails>,
        ) -> Self {
            self.highest_severity_threat_details = input;
            self
        }
        /// <p>Contains details about identified threats organized by threat name.</p>
        pub fn threat_detected_by_name(
            mut self,
            input: crate::model::ThreatDetectedByName,
        ) -> Self {
            self.threat_detected_by_name = Some(input);
            self
        }
        /// <p>Contains details about identified threats organized by threat name.</p>
        pub fn set_threat_detected_by_name(
            mut self,
            input: std::option::Option<crate::model::ThreatDetectedByName>,
        ) -> Self {
            self.threat_detected_by_name = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanDetections`](crate::model::ScanDetections).
        pub fn build(self) -> crate::model::ScanDetections {
            crate::model::ScanDetections {
                scanned_item_count: self.scanned_item_count,
                threats_detected_item_count: self.threats_detected_item_count,
                highest_severity_threat_details: self.highest_severity_threat_details,
                threat_detected_by_name: self.threat_detected_by_name,
            }
        }
    }
}
impl ScanDetections {
    /// Creates a new builder-style object to manufacture [`ScanDetections`](crate::model::ScanDetections).
    pub fn builder() -> crate::model::scan_detections::Builder {
        crate::model::scan_detections::Builder::default()
    }
}

/// <p>Contains details about identified threats organized by threat name.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ThreatDetectedByName {
    /// <p>Total number of infected files identified.</p>
    #[doc(hidden)]
    pub item_count: i32,
    /// <p>Total number of unique threats by name identified, as part of the malware scan.</p>
    #[doc(hidden)]
    pub unique_threat_name_count: i32,
    /// <p>Flag to determine if the finding contains every single infected file-path and/or every threat.</p>
    #[doc(hidden)]
    pub shortened: bool,
    /// <p>List of identified threats with details, organized by threat name.</p>
    #[doc(hidden)]
    pub threat_names: std::option::Option<std::vec::Vec<crate::model::ScanThreatName>>,
}
impl ThreatDetectedByName {
    /// <p>Total number of infected files identified.</p>
    pub fn item_count(&self) -> i32 {
        self.item_count
    }
    /// <p>Total number of unique threats by name identified, as part of the malware scan.</p>
    pub fn unique_threat_name_count(&self) -> i32 {
        self.unique_threat_name_count
    }
    /// <p>Flag to determine if the finding contains every single infected file-path and/or every threat.</p>
    pub fn shortened(&self) -> bool {
        self.shortened
    }
    /// <p>List of identified threats with details, organized by threat name.</p>
    pub fn threat_names(&self) -> std::option::Option<&[crate::model::ScanThreatName]> {
        self.threat_names.as_deref()
    }
}
/// See [`ThreatDetectedByName`](crate::model::ThreatDetectedByName).
pub mod threat_detected_by_name {

    /// A builder for [`ThreatDetectedByName`](crate::model::ThreatDetectedByName).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) item_count: std::option::Option<i32>,
        pub(crate) unique_threat_name_count: std::option::Option<i32>,
        pub(crate) shortened: std::option::Option<bool>,
        pub(crate) threat_names: std::option::Option<std::vec::Vec<crate::model::ScanThreatName>>,
    }
    impl Builder {
        /// <p>Total number of infected files identified.</p>
        pub fn item_count(mut self, input: i32) -> Self {
            self.item_count = Some(input);
            self
        }
        /// <p>Total number of infected files identified.</p>
        pub fn set_item_count(mut self, input: std::option::Option<i32>) -> Self {
            self.item_count = input;
            self
        }
        /// <p>Total number of unique threats by name identified, as part of the malware scan.</p>
        pub fn unique_threat_name_count(mut self, input: i32) -> Self {
            self.unique_threat_name_count = Some(input);
            self
        }
        /// <p>Total number of unique threats by name identified, as part of the malware scan.</p>
        pub fn set_unique_threat_name_count(mut self, input: std::option::Option<i32>) -> Self {
            self.unique_threat_name_count = input;
            self
        }
        /// <p>Flag to determine if the finding contains every single infected file-path and/or every threat.</p>
        pub fn shortened(mut self, input: bool) -> Self {
            self.shortened = Some(input);
            self
        }
        /// <p>Flag to determine if the finding contains every single infected file-path and/or every threat.</p>
        pub fn set_shortened(mut self, input: std::option::Option<bool>) -> Self {
            self.shortened = input;
            self
        }
        /// Appends an item to `threat_names`.
        ///
        /// To override the contents of this collection use [`set_threat_names`](Self::set_threat_names).
        ///
        /// <p>List of identified threats with details, organized by threat name.</p>
        pub fn threat_names(mut self, input: crate::model::ScanThreatName) -> Self {
            let mut v = self.threat_names.unwrap_or_default();
            v.push(input);
            self.threat_names = Some(v);
            self
        }
        /// <p>List of identified threats with details, organized by threat name.</p>
        pub fn set_threat_names(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ScanThreatName>>,
        ) -> Self {
            self.threat_names = input;
            self
        }
        /// Consumes the builder and constructs a [`ThreatDetectedByName`](crate::model::ThreatDetectedByName).
        pub fn build(self) -> crate::model::ThreatDetectedByName {
            crate::model::ThreatDetectedByName {
                item_count: self.item_count.unwrap_or_default(),
                unique_threat_name_count: self.unique_threat_name_count.unwrap_or_default(),
                shortened: self.shortened.unwrap_or_default(),
                threat_names: self.threat_names,
            }
        }
    }
}
impl ThreatDetectedByName {
    /// Creates a new builder-style object to manufacture [`ThreatDetectedByName`](crate::model::ThreatDetectedByName).
    pub fn builder() -> crate::model::threat_detected_by_name::Builder {
        crate::model::threat_detected_by_name::Builder::default()
    }
}

/// <p>Contains files infected with the given threat providing details of malware name and severity.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanThreatName {
    /// <p>The name of the identified threat.</p>
    #[doc(hidden)]
    pub name: std::option::Option<std::string::String>,
    /// <p>Severity of threat identified as part of the malware scan.</p>
    #[doc(hidden)]
    pub severity: std::option::Option<std::string::String>,
    /// <p>Total number of files infected with given threat.</p>
    #[doc(hidden)]
    pub item_count: i32,
    /// <p>List of infected files in EBS volume with details.</p>
    #[doc(hidden)]
    pub file_paths: std::option::Option<std::vec::Vec<crate::model::ScanFilePath>>,
}
impl ScanThreatName {
    /// <p>The name of the identified threat.</p>
    pub fn name(&self) -> std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>Severity of threat identified as part of the malware scan.</p>
    pub fn severity(&self) -> std::option::Option<&str> {
        self.severity.as_deref()
    }
    /// <p>Total number of files infected with given threat.</p>
    pub fn item_count(&self) -> i32 {
        self.item_count
    }
    /// <p>List of infected files in EBS volume with details.</p>
    pub fn file_paths(&self) -> std::option::Option<&[crate::model::ScanFilePath]> {
        self.file_paths.as_deref()
    }
}
/// See [`ScanThreatName`](crate::model::ScanThreatName).
pub mod scan_threat_name {

    /// A builder for [`ScanThreatName`](crate::model::ScanThreatName).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) name: std::option::Option<std::string::String>,
        pub(crate) severity: std::option::Option<std::string::String>,
        pub(crate) item_count: std::option::Option<i32>,
        pub(crate) file_paths: std::option::Option<std::vec::Vec<crate::model::ScanFilePath>>,
    }
    impl Builder {
        /// <p>The name of the identified threat.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.name = Some(input.into());
            self
        }
        /// <p>The name of the identified threat.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.name = input;
            self
        }
        /// <p>Severity of threat identified as part of the malware scan.</p>
        pub fn severity(mut self, input: impl Into<std::string::String>) -> Self {
            self.severity = Some(input.into());
            self
        }
        /// <p>Severity of threat identified as part of the malware scan.</p>
        pub fn set_severity(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.severity = input;
            self
        }
        /// <p>Total number of files infected with given threat.</p>
        pub fn item_count(mut self, input: i32) -> Self {
            self.item_count = Some(input);
            self
        }
        /// <p>Total number of files infected with given threat.</p>
        pub fn set_item_count(mut self, input: std::option::Option<i32>) -> Self {
            self.item_count = input;
            self
        }
        /// Appends an item to `file_paths`.
        ///
        /// To override the contents of this collection use [`set_file_paths`](Self::set_file_paths).
        ///
        /// <p>List of infected files in EBS volume with details.</p>
        pub fn file_paths(mut self, input: crate::model::ScanFilePath) -> Self {
            let mut v = self.file_paths.unwrap_or_default();
            v.push(input);
            self.file_paths = Some(v);
            self
        }
        /// <p>List of infected files in EBS volume with details.</p>
        pub fn set_file_paths(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ScanFilePath>>,
        ) -> Self {
            self.file_paths = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanThreatName`](crate::model::ScanThreatName).
        pub fn build(self) -> crate::model::ScanThreatName {
            crate::model::ScanThreatName {
                name: self.name,
                severity: self.severity,
                item_count: self.item_count.unwrap_or_default(),
                file_paths: self.file_paths,
            }
        }
    }
}
impl ScanThreatName {
    /// Creates a new builder-style object to manufacture [`ScanThreatName`](crate::model::ScanThreatName).
    pub fn builder() -> crate::model::scan_threat_name::Builder {
        crate::model::scan_threat_name::Builder::default()
    }
}

/// <p>Contains details of infected file including name, file path and hash.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanFilePath {
    /// <p>The file path of the infected file.</p>
    #[doc(hidden)]
    pub file_path: std::option::Option<std::string::String>,
    /// <p>EBS volume Arn details of the infected file.</p>
    #[doc(hidden)]
    pub volume_arn: std::option::Option<std::string::String>,
    /// <p>The hash value of the infected file.</p>
    #[doc(hidden)]
    pub hash: std::option::Option<std::string::String>,
    /// <p>File name of the infected file.</p>
    #[doc(hidden)]
    pub file_name: std::option::Option<std::string::String>,
}
impl ScanFilePath {
    /// <p>The file path of the infected file.</p>
    pub fn file_path(&self) -> std::option::Option<&str> {
        self.file_path.as_deref()
    }
    /// <p>EBS volume Arn details of the infected file.</p>
    pub fn volume_arn(&self) -> std::option::Option<&str> {
        self.volume_arn.as_deref()
    }
    /// <p>The hash value of the infected file.</p>
    pub fn hash(&self) -> std::option::Option<&str> {
        self.hash.as_deref()
    }
    /// <p>File name of the infected file.</p>
    pub fn file_name(&self) -> std::option::Option<&str> {
        self.file_name.as_deref()
    }
}
/// See [`ScanFilePath`](crate::model::ScanFilePath).
pub mod scan_file_path {

    /// A builder for [`ScanFilePath`](crate::model::ScanFilePath).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) file_path: std::option::Option<std::string::String>,
        pub(crate) volume_arn: std::option::Option<std::string::String>,
        pub(crate) hash: std::option::Option<std::string::String>,
        pub(crate) file_name: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The file path of the infected file.</p>
        pub fn file_path(mut self, input: impl Into<std::string::String>) -> Self {
            self.file_path = Some(input.into());
            self
        }
        /// <p>The file path of the infected file.</p>
        pub fn set_file_path(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.file_path = input;
            self
        }
        /// <p>EBS volume Arn details of the infected file.</p>
        pub fn volume_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.volume_arn = Some(input.into());
            self
        }
        /// <p>EBS volume Arn details of the infected file.</p>
        pub fn set_volume_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.volume_arn = input;
            self
        }
        /// <p>The hash value of the infected file.</p>
        pub fn hash(mut self, input: impl Into<std::string::String>) -> Self {
            self.hash = Some(input.into());
            self
        }
        /// <p>The hash value of the infected file.</p>
        pub fn set_hash(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.hash = input;
            self
        }
        /// <p>File name of the infected file.</p>
        pub fn file_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.file_name = Some(input.into());
            self
        }
        /// <p>File name of the infected file.</p>
        pub fn set_file_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.file_name = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanFilePath`](crate::model::ScanFilePath).
        pub fn build(self) -> crate::model::ScanFilePath {
            crate::model::ScanFilePath {
                file_path: self.file_path,
                volume_arn: self.volume_arn,
                hash: self.hash,
                file_name: self.file_name,
            }
        }
    }
}
impl ScanFilePath {
    /// Creates a new builder-style object to manufacture [`ScanFilePath`](crate::model::ScanFilePath).
    pub fn builder() -> crate::model::scan_file_path::Builder {
        crate::model::scan_file_path::Builder::default()
    }
}

/// <p>Contains details of the highest severity threat detected during scan and number of infected files.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct HighestSeverityThreatDetails {
    /// <p>Severity level of the highest severity threat detected.</p>
    #[doc(hidden)]
    pub severity: std::option::Option<std::string::String>,
    /// <p>Threat name of the highest severity threat detected as part of the malware scan.</p>
    #[doc(hidden)]
    pub threat_name: std::option::Option<std::string::String>,
    /// <p>Total number of infected files with the highest severity threat detected.</p>
    #[doc(hidden)]
    pub count: i32,
}
impl HighestSeverityThreatDetails {
    /// <p>Severity level of the highest severity threat detected.</p>
    pub fn severity(&self) -> std::option::Option<&str> {
        self.severity.as_deref()
    }
    /// <p>Threat name of the highest severity threat detected as part of the malware scan.</p>
    pub fn threat_name(&self) -> std::option::Option<&str> {
        self.threat_name.as_deref()
    }
    /// <p>Total number of infected files with the highest severity threat detected.</p>
    pub fn count(&self) -> i32 {
        self.count
    }
}
/// See [`HighestSeverityThreatDetails`](crate::model::HighestSeverityThreatDetails).
pub mod highest_severity_threat_details {

    /// A builder for [`HighestSeverityThreatDetails`](crate::model::HighestSeverityThreatDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) severity: std::option::Option<std::string::String>,
        pub(crate) threat_name: std::option::Option<std::string::String>,
        pub(crate) count: std::option::Option<i32>,
    }
    impl Builder {
        /// <p>Severity level of the highest severity threat detected.</p>
        pub fn severity(mut self, input: impl Into<std::string::String>) -> Self {
            self.severity = Some(input.into());
            self
        }
        /// <p>Severity level of the highest severity threat detected.</p>
        pub fn set_severity(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.severity = input;
            self
        }
        /// <p>Threat name of the highest severity threat detected as part of the malware scan.</p>
        pub fn threat_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.threat_name = Some(input.into());
            self
        }
        /// <p>Threat name of the highest severity threat detected as part of the malware scan.</p>
        pub fn set_threat_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.threat_name = input;
            self
        }
        /// <p>Total number of infected files with the highest severity threat detected.</p>
        pub fn count(mut self, input: i32) -> Self {
            self.count = Some(input);
            self
        }
        /// <p>Total number of infected files with the highest severity threat detected.</p>
        pub fn set_count(mut self, input: std::option::Option<i32>) -> Self {
            self.count = input;
            self
        }
        /// Consumes the builder and constructs a [`HighestSeverityThreatDetails`](crate::model::HighestSeverityThreatDetails).
        pub fn build(self) -> crate::model::HighestSeverityThreatDetails {
            crate::model::HighestSeverityThreatDetails {
                severity: self.severity,
                threat_name: self.threat_name,
                count: self.count.unwrap_or_default(),
            }
        }
    }
}
impl HighestSeverityThreatDetails {
    /// Creates a new builder-style object to manufacture [`HighestSeverityThreatDetails`](crate::model::HighestSeverityThreatDetails).
    pub fn builder() -> crate::model::highest_severity_threat_details::Builder {
        crate::model::highest_severity_threat_details::Builder::default()
    }
}

/// <p>Contains total number of infected files.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ThreatsDetectedItemCount {
    /// <p>Total number of infected files.</p>
    #[doc(hidden)]
    pub files: i32,
}
impl ThreatsDetectedItemCount {
    /// <p>Total number of infected files.</p>
    pub fn files(&self) -> i32 {
        self.files
    }
}
/// See [`ThreatsDetectedItemCount`](crate::model::ThreatsDetectedItemCount).
pub mod threats_detected_item_count {

    /// A builder for [`ThreatsDetectedItemCount`](crate::model::ThreatsDetectedItemCount).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) files: std::option::Option<i32>,
    }
    impl Builder {
        /// <p>Total number of infected files.</p>
        pub fn files(mut self, input: i32) -> Self {
            self.files = Some(input);
            self
        }
        /// <p>Total number of infected files.</p>
        pub fn set_files(mut self, input: std::option::Option<i32>) -> Self {
            self.files = input;
            self
        }
        /// Consumes the builder and constructs a [`ThreatsDetectedItemCount`](crate::model::ThreatsDetectedItemCount).
        pub fn build(self) -> crate::model::ThreatsDetectedItemCount {
            crate::model::ThreatsDetectedItemCount {
                files: self.files.unwrap_or_default(),
            }
        }
    }
}
impl ThreatsDetectedItemCount {
    /// Creates a new builder-style object to manufacture [`ThreatsDetectedItemCount`](crate::model::ThreatsDetectedItemCount).
    pub fn builder() -> crate::model::threats_detected_item_count::Builder {
        crate::model::threats_detected_item_count::Builder::default()
    }
}

/// <p>Total number of scanned files.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScannedItemCount {
    /// <p>Total GB of files scanned for malware.</p>
    #[doc(hidden)]
    pub total_gb: i32,
    /// <p>Number of files scanned.</p>
    #[doc(hidden)]
    pub files: i32,
    /// <p>Total number of scanned volumes.</p>
    #[doc(hidden)]
    pub volumes: i32,
}
impl ScannedItemCount {
    /// <p>Total GB of files scanned for malware.</p>
    pub fn total_gb(&self) -> i32 {
        self.total_gb
    }
    /// <p>Number of files scanned.</p>
    pub fn files(&self) -> i32 {
        self.files
    }
    /// <p>Total number of scanned volumes.</p>
    pub fn volumes(&self) -> i32 {
        self.volumes
    }
}
/// See [`ScannedItemCount`](crate::model::ScannedItemCount).
pub mod scanned_item_count {

    /// A builder for [`ScannedItemCount`](crate::model::ScannedItemCount).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) total_gb: std::option::Option<i32>,
        pub(crate) files: std::option::Option<i32>,
        pub(crate) volumes: std::option::Option<i32>,
    }
    impl Builder {
        /// <p>Total GB of files scanned for malware.</p>
        pub fn total_gb(mut self, input: i32) -> Self {
            self.total_gb = Some(input);
            self
        }
        /// <p>Total GB of files scanned for malware.</p>
        pub fn set_total_gb(mut self, input: std::option::Option<i32>) -> Self {
            self.total_gb = input;
            self
        }
        /// <p>Number of files scanned.</p>
        pub fn files(mut self, input: i32) -> Self {
            self.files = Some(input);
            self
        }
        /// <p>Number of files scanned.</p>
        pub fn set_files(mut self, input: std::option::Option<i32>) -> Self {
            self.files = input;
            self
        }
        /// <p>Total number of scanned volumes.</p>
        pub fn volumes(mut self, input: i32) -> Self {
            self.volumes = Some(input);
            self
        }
        /// <p>Total number of scanned volumes.</p>
        pub fn set_volumes(mut self, input: std::option::Option<i32>) -> Self {
            self.volumes = input;
            self
        }
        /// Consumes the builder and constructs a [`ScannedItemCount`](crate::model::ScannedItemCount).
        pub fn build(self) -> crate::model::ScannedItemCount {
            crate::model::ScannedItemCount {
                total_gb: self.total_gb.unwrap_or_default(),
                files: self.files.unwrap_or_default(),
                volumes: self.volumes.unwrap_or_default(),
            }
        }
    }
}
impl ScannedItemCount {
    /// Creates a new builder-style object to manufacture [`ScannedItemCount`](crate::model::ScannedItemCount).
    pub fn builder() -> crate::model::scanned_item_count::Builder {
        crate::model::scanned_item_count::Builder::default()
    }
}

/// <p>Additional information about the generated finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ServiceAdditionalInfo {
    /// <p>This field specifies the value of the additional information.</p>
    #[doc(hidden)]
    pub value: std::option::Option<std::string::String>,
    /// <p>Describes the type of the additional information.</p>
    #[doc(hidden)]
    pub r#type: std::option::Option<std::string::String>,
}
impl ServiceAdditionalInfo {
    /// <p>This field specifies the value of the additional information.</p>
    pub fn value(&self) -> std::option::Option<&str> {
        self.value.as_deref()
    }
    /// <p>Describes the type of the additional information.</p>
    pub fn r#type(&self) -> std::option::Option<&str> {
        self.r#type.as_deref()
    }
}
/// See [`ServiceAdditionalInfo`](crate::model::ServiceAdditionalInfo).
pub mod service_additional_info {

    /// A builder for [`ServiceAdditionalInfo`](crate::model::ServiceAdditionalInfo).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) value: std::option::Option<std::string::String>,
        pub(crate) r#type: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>This field specifies the value of the additional information.</p>
        pub fn value(mut self, input: impl Into<std::string::String>) -> Self {
            self.value = Some(input.into());
            self
        }
        /// <p>This field specifies the value of the additional information.</p>
        pub fn set_value(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.value = input;
            self
        }
        /// <p>Describes the type of the additional information.</p>
        pub fn r#type(mut self, input: impl Into<std::string::String>) -> Self {
            self.r#type = Some(input.into());
            self
        }
        /// <p>Describes the type of the additional information.</p>
        pub fn set_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.r#type = input;
            self
        }
        /// Consumes the builder and constructs a [`ServiceAdditionalInfo`](crate::model::ServiceAdditionalInfo).
        pub fn build(self) -> crate::model::ServiceAdditionalInfo {
            crate::model::ServiceAdditionalInfo {
                value: self.value,
                r#type: self.r#type,
            }
        }
    }
}
impl ServiceAdditionalInfo {
    /// Creates a new builder-style object to manufacture [`ServiceAdditionalInfo`](crate::model::ServiceAdditionalInfo).
    pub fn builder() -> crate::model::service_additional_info::Builder {
        crate::model::service_additional_info::Builder::default()
    }
}

/// <p>Contains information about the reason that the finding was generated.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Evidence {
    /// <p>A list of threat intelligence details related to the evidence.</p>
    #[doc(hidden)]
    pub threat_intelligence_details:
        std::option::Option<std::vec::Vec<crate::model::ThreatIntelligenceDetail>>,
}
impl Evidence {
    /// <p>A list of threat intelligence details related to the evidence.</p>
    pub fn threat_intelligence_details(
        &self,
    ) -> std::option::Option<&[crate::model::ThreatIntelligenceDetail]> {
        self.threat_intelligence_details.as_deref()
    }
}
/// See [`Evidence`](crate::model::Evidence).
pub mod evidence {

    /// A builder for [`Evidence`](crate::model::Evidence).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) threat_intelligence_details:
            std::option::Option<std::vec::Vec<crate::model::ThreatIntelligenceDetail>>,
    }
    impl Builder {
        /// Appends an item to `threat_intelligence_details`.
        ///
        /// To override the contents of this collection use [`set_threat_intelligence_details`](Self::set_threat_intelligence_details).
        ///
        /// <p>A list of threat intelligence details related to the evidence.</p>
        pub fn threat_intelligence_details(
            mut self,
            input: crate::model::ThreatIntelligenceDetail,
        ) -> Self {
            let mut v = self.threat_intelligence_details.unwrap_or_default();
            v.push(input);
            self.threat_intelligence_details = Some(v);
            self
        }
        /// <p>A list of threat intelligence details related to the evidence.</p>
        pub fn set_threat_intelligence_details(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ThreatIntelligenceDetail>>,
        ) -> Self {
            self.threat_intelligence_details = input;
            self
        }
        /// Consumes the builder and constructs a [`Evidence`](crate::model::Evidence).
        pub fn build(self) -> crate::model::Evidence {
            crate::model::Evidence {
                threat_intelligence_details: self.threat_intelligence_details,
            }
        }
    }
}
impl Evidence {
    /// Creates a new builder-style object to manufacture [`Evidence`](crate::model::Evidence).
    pub fn builder() -> crate::model::evidence::Builder {
        crate::model::evidence::Builder::default()
    }
}

/// <p>An instance of a threat intelligence detail that constitutes evidence for the finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ThreatIntelligenceDetail {
    /// <p>The name of the threat intelligence list that triggered the finding.</p>
    #[doc(hidden)]
    pub threat_list_name: std::option::Option<std::string::String>,
    /// <p>A list of names of the threats in the threat intelligence list that triggered the finding.</p>
    #[doc(hidden)]
    pub threat_names: std::option::Option<std::vec::Vec<std::string::String>>,
}
impl ThreatIntelligenceDetail {
    /// <p>The name of the threat intelligence list that triggered the finding.</p>
    pub fn threat_list_name(&self) -> std::option::Option<&str> {
        self.threat_list_name.as_deref()
    }
    /// <p>A list of names of the threats in the threat intelligence list that triggered the finding.</p>
    pub fn threat_names(&self) -> std::option::Option<&[std::string::String]> {
        self.threat_names.as_deref()
    }
}
/// See [`ThreatIntelligenceDetail`](crate::model::ThreatIntelligenceDetail).
pub mod threat_intelligence_detail {

    /// A builder for [`ThreatIntelligenceDetail`](crate::model::ThreatIntelligenceDetail).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) threat_list_name: std::option::Option<std::string::String>,
        pub(crate) threat_names: std::option::Option<std::vec::Vec<std::string::String>>,
    }
    impl Builder {
        /// <p>The name of the threat intelligence list that triggered the finding.</p>
        pub fn threat_list_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.threat_list_name = Some(input.into());
            self
        }
        /// <p>The name of the threat intelligence list that triggered the finding.</p>
        pub fn set_threat_list_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.threat_list_name = input;
            self
        }
        /// Appends an item to `threat_names`.
        ///
        /// To override the contents of this collection use [`set_threat_names`](Self::set_threat_names).
        ///
        /// <p>A list of names of the threats in the threat intelligence list that triggered the finding.</p>
        pub fn threat_names(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.threat_names.unwrap_or_default();
            v.push(input.into());
            self.threat_names = Some(v);
            self
        }
        /// <p>A list of names of the threats in the threat intelligence list that triggered the finding.</p>
        pub fn set_threat_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.threat_names = input;
            self
        }
        /// Consumes the builder and constructs a [`ThreatIntelligenceDetail`](crate::model::ThreatIntelligenceDetail).
        pub fn build(self) -> crate::model::ThreatIntelligenceDetail {
            crate::model::ThreatIntelligenceDetail {
                threat_list_name: self.threat_list_name,
                threat_names: self.threat_names,
            }
        }
    }
}
impl ThreatIntelligenceDetail {
    /// Creates a new builder-style object to manufacture [`ThreatIntelligenceDetail`](crate::model::ThreatIntelligenceDetail).
    pub fn builder() -> crate::model::threat_intelligence_detail::Builder {
        crate::model::threat_intelligence_detail::Builder::default()
    }
}

/// <p>Contains information about actions.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Action {
    /// <p>The GuardDuty finding activity type.</p>
    #[doc(hidden)]
    pub action_type: std::option::Option<std::string::String>,
    /// <p>Information about the AWS_API_CALL action described in this finding.</p>
    #[doc(hidden)]
    pub aws_api_call_action: std::option::Option<crate::model::AwsApiCallAction>,
    /// <p>Information about the DNS_REQUEST action described in this finding.</p>
    #[doc(hidden)]
    pub dns_request_action: std::option::Option<crate::model::DnsRequestAction>,
    /// <p>Information about the NETWORK_CONNECTION action described in this finding.</p>
    #[doc(hidden)]
    pub network_connection_action: std::option::Option<crate::model::NetworkConnectionAction>,
    /// <p>Information about the PORT_PROBE action described in this finding.</p>
    #[doc(hidden)]
    pub port_probe_action: std::option::Option<crate::model::PortProbeAction>,
    /// <p>Information about the Kubernetes API call action described in this finding.</p>
    #[doc(hidden)]
    pub kubernetes_api_call_action: std::option::Option<crate::model::KubernetesApiCallAction>,
}
impl Action {
    /// <p>The GuardDuty finding activity type.</p>
    pub fn action_type(&self) -> std::option::Option<&str> {
        self.action_type.as_deref()
    }
    /// <p>Information about the AWS_API_CALL action described in this finding.</p>
    pub fn aws_api_call_action(&self) -> std::option::Option<&crate::model::AwsApiCallAction> {
        self.aws_api_call_action.as_ref()
    }
    /// <p>Information about the DNS_REQUEST action described in this finding.</p>
    pub fn dns_request_action(&self) -> std::option::Option<&crate::model::DnsRequestAction> {
        self.dns_request_action.as_ref()
    }
    /// <p>Information about the NETWORK_CONNECTION action described in this finding.</p>
    pub fn network_connection_action(
        &self,
    ) -> std::option::Option<&crate::model::NetworkConnectionAction> {
        self.network_connection_action.as_ref()
    }
    /// <p>Information about the PORT_PROBE action described in this finding.</p>
    pub fn port_probe_action(&self) -> std::option::Option<&crate::model::PortProbeAction> {
        self.port_probe_action.as_ref()
    }
    /// <p>Information about the Kubernetes API call action described in this finding.</p>
    pub fn kubernetes_api_call_action(
        &self,
    ) -> std::option::Option<&crate::model::KubernetesApiCallAction> {
        self.kubernetes_api_call_action.as_ref()
    }
}
/// See [`Action`](crate::model::Action).
pub mod action {

    /// A builder for [`Action`](crate::model::Action).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) action_type: std::option::Option<std::string::String>,
        pub(crate) aws_api_call_action: std::option::Option<crate::model::AwsApiCallAction>,
        pub(crate) dns_request_action: std::option::Option<crate::model::DnsRequestAction>,
        pub(crate) network_connection_action:
            std::option::Option<crate::model::NetworkConnectionAction>,
        pub(crate) port_probe_action: std::option::Option<crate::model::PortProbeAction>,
        pub(crate) kubernetes_api_call_action:
            std::option::Option<crate::model::KubernetesApiCallAction>,
    }
    impl Builder {
        /// <p>The GuardDuty finding activity type.</p>
        pub fn action_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.action_type = Some(input.into());
            self
        }
        /// <p>The GuardDuty finding activity type.</p>
        pub fn set_action_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.action_type = input;
            self
        }
        /// <p>Information about the AWS_API_CALL action described in this finding.</p>
        pub fn aws_api_call_action(mut self, input: crate::model::AwsApiCallAction) -> Self {
            self.aws_api_call_action = Some(input);
            self
        }
        /// <p>Information about the AWS_API_CALL action described in this finding.</p>
        pub fn set_aws_api_call_action(
            mut self,
            input: std::option::Option<crate::model::AwsApiCallAction>,
        ) -> Self {
            self.aws_api_call_action = input;
            self
        }
        /// <p>Information about the DNS_REQUEST action described in this finding.</p>
        pub fn dns_request_action(mut self, input: crate::model::DnsRequestAction) -> Self {
            self.dns_request_action = Some(input);
            self
        }
        /// <p>Information about the DNS_REQUEST action described in this finding.</p>
        pub fn set_dns_request_action(
            mut self,
            input: std::option::Option<crate::model::DnsRequestAction>,
        ) -> Self {
            self.dns_request_action = input;
            self
        }
        /// <p>Information about the NETWORK_CONNECTION action described in this finding.</p>
        pub fn network_connection_action(
            mut self,
            input: crate::model::NetworkConnectionAction,
        ) -> Self {
            self.network_connection_action = Some(input);
            self
        }
        /// <p>Information about the NETWORK_CONNECTION action described in this finding.</p>
        pub fn set_network_connection_action(
            mut self,
            input: std::option::Option<crate::model::NetworkConnectionAction>,
        ) -> Self {
            self.network_connection_action = input;
            self
        }
        /// <p>Information about the PORT_PROBE action described in this finding.</p>
        pub fn port_probe_action(mut self, input: crate::model::PortProbeAction) -> Self {
            self.port_probe_action = Some(input);
            self
        }
        /// <p>Information about the PORT_PROBE action described in this finding.</p>
        pub fn set_port_probe_action(
            mut self,
            input: std::option::Option<crate::model::PortProbeAction>,
        ) -> Self {
            self.port_probe_action = input;
            self
        }
        /// <p>Information about the Kubernetes API call action described in this finding.</p>
        pub fn kubernetes_api_call_action(
            mut self,
            input: crate::model::KubernetesApiCallAction,
        ) -> Self {
            self.kubernetes_api_call_action = Some(input);
            self
        }
        /// <p>Information about the Kubernetes API call action described in this finding.</p>
        pub fn set_kubernetes_api_call_action(
            mut self,
            input: std::option::Option<crate::model::KubernetesApiCallAction>,
        ) -> Self {
            self.kubernetes_api_call_action = input;
            self
        }
        /// Consumes the builder and constructs a [`Action`](crate::model::Action).
        pub fn build(self) -> crate::model::Action {
            crate::model::Action {
                action_type: self.action_type,
                aws_api_call_action: self.aws_api_call_action,
                dns_request_action: self.dns_request_action,
                network_connection_action: self.network_connection_action,
                port_probe_action: self.port_probe_action,
                kubernetes_api_call_action: self.kubernetes_api_call_action,
            }
        }
    }
}
impl Action {
    /// Creates a new builder-style object to manufacture [`Action`](crate::model::Action).
    pub fn builder() -> crate::model::action::Builder {
        crate::model::action::Builder::default()
    }
}

/// <p>Information about the Kubernetes API call action described in this finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesApiCallAction {
    /// <p>The Kubernetes API request URI.</p>
    #[doc(hidden)]
    pub request_uri: std::option::Option<std::string::String>,
    /// <p>The Kubernetes API request HTTP verb.</p>
    #[doc(hidden)]
    pub verb: std::option::Option<std::string::String>,
    /// <p>The IP of the Kubernetes API caller and the IPs of any proxies or load balancers between the caller and the API endpoint.</p>
    #[doc(hidden)]
    pub source_ips: std::option::Option<std::vec::Vec<std::string::String>>,
    /// <p>The user agent of the caller of the Kubernetes API.</p>
    #[doc(hidden)]
    pub user_agent: std::option::Option<std::string::String>,
    /// <p>Contains information about the remote IP address of the connection.</p>
    #[doc(hidden)]
    pub remote_ip_details: std::option::Option<crate::model::RemoteIpDetails>,
    /// <p>The resulting HTTP response code of the Kubernetes API call action.</p>
    #[doc(hidden)]
    pub status_code: i32,
    /// <p>Parameters related to the Kubernetes API call action.</p>
    #[doc(hidden)]
    pub parameters: std::option::Option<std::string::String>,
}
impl KubernetesApiCallAction {
    /// <p>The Kubernetes API request URI.</p>
    pub fn request_uri(&self) -> std::option::Option<&str> {
        self.request_uri.as_deref()
    }
    /// <p>The Kubernetes API request HTTP verb.</p>
    pub fn verb(&self) -> std::option::Option<&str> {
        self.verb.as_deref()
    }
    /// <p>The IP of the Kubernetes API caller and the IPs of any proxies or load balancers between the caller and the API endpoint.</p>
    pub fn source_ips(&self) -> std::option::Option<&[std::string::String]> {
        self.source_ips.as_deref()
    }
    /// <p>The user agent of the caller of the Kubernetes API.</p>
    pub fn user_agent(&self) -> std::option::Option<&str> {
        self.user_agent.as_deref()
    }
    /// <p>Contains information about the remote IP address of the connection.</p>
    pub fn remote_ip_details(&self) -> std::option::Option<&crate::model::RemoteIpDetails> {
        self.remote_ip_details.as_ref()
    }
    /// <p>The resulting HTTP response code of the Kubernetes API call action.</p>
    pub fn status_code(&self) -> i32 {
        self.status_code
    }
    /// <p>Parameters related to the Kubernetes API call action.</p>
    pub fn parameters(&self) -> std::option::Option<&str> {
        self.parameters.as_deref()
    }
}
/// See [`KubernetesApiCallAction`](crate::model::KubernetesApiCallAction).
pub mod kubernetes_api_call_action {

    /// A builder for [`KubernetesApiCallAction`](crate::model::KubernetesApiCallAction).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) request_uri: std::option::Option<std::string::String>,
        pub(crate) verb: std::option::Option<std::string::String>,
        pub(crate) source_ips: std::option::Option<std::vec::Vec<std::string::String>>,
        pub(crate) user_agent: std::option::Option<std::string::String>,
        pub(crate) remote_ip_details: std::option::Option<crate::model::RemoteIpDetails>,
        pub(crate) status_code: std::option::Option<i32>,
        pub(crate) parameters: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The Kubernetes API request URI.</p>
        pub fn request_uri(mut self, input: impl Into<std::string::String>) -> Self {
            self.request_uri = Some(input.into());
            self
        }
        /// <p>The Kubernetes API request URI.</p>
        pub fn set_request_uri(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.request_uri = input;
            self
        }
        /// <p>The Kubernetes API request HTTP verb.</p>
        pub fn verb(mut self, input: impl Into<std::string::String>) -> Self {
            self.verb = Some(input.into());
            self
        }
        /// <p>The Kubernetes API request HTTP verb.</p>
        pub fn set_verb(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.verb = input;
            self
        }
        /// Appends an item to `source_ips`.
        ///
        /// To override the contents of this collection use [`set_source_ips`](Self::set_source_ips).
        ///
        /// <p>The IP of the Kubernetes API caller and the IPs of any proxies or load balancers between the caller and the API endpoint.</p>
        pub fn source_ips(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.source_ips.unwrap_or_default();
            v.push(input.into());
            self.source_ips = Some(v);
            self
        }
        /// <p>The IP of the Kubernetes API caller and the IPs of any proxies or load balancers between the caller and the API endpoint.</p>
        pub fn set_source_ips(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.source_ips = input;
            self
        }
        /// <p>The user agent of the caller of the Kubernetes API.</p>
        pub fn user_agent(mut self, input: impl Into<std::string::String>) -> Self {
            self.user_agent = Some(input.into());
            self
        }
        /// <p>The user agent of the caller of the Kubernetes API.</p>
        pub fn set_user_agent(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.user_agent = input;
            self
        }
        /// <p>Contains information about the remote IP address of the connection.</p>
        pub fn remote_ip_details(mut self, input: crate::model::RemoteIpDetails) -> Self {
            self.remote_ip_details = Some(input);
            self
        }
        /// <p>Contains information about the remote IP address of the connection.</p>
        pub fn set_remote_ip_details(
            mut self,
            input: std::option::Option<crate::model::RemoteIpDetails>,
        ) -> Self {
            self.remote_ip_details = input;
            self
        }
        /// <p>The resulting HTTP response code of the Kubernetes API call action.</p>
        pub fn status_code(mut self, input: i32) -> Self {
            self.status_code = Some(input);
            self
        }
        /// <p>The resulting HTTP response code of the Kubernetes API call action.</p>
        pub fn set_status_code(mut self, input: std::option::Option<i32>) -> Self {
            self.status_code = input;
            self
        }
        /// <p>Parameters related to the Kubernetes API call action.</p>
        pub fn parameters(mut self, input: impl Into<std::string::String>) -> Self {
            self.parameters = Some(input.into());
            self
        }
        /// <p>Parameters related to the Kubernetes API call action.</p>
        pub fn set_parameters(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.parameters = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesApiCallAction`](crate::model::KubernetesApiCallAction).
        pub fn build(self) -> crate::model::KubernetesApiCallAction {
            crate::model::KubernetesApiCallAction {
                request_uri: self.request_uri,
                verb: self.verb,
                source_ips: self.source_ips,
                user_agent: self.user_agent,
                remote_ip_details: self.remote_ip_details,
                status_code: self.status_code.unwrap_or_default(),
                parameters: self.parameters,
            }
        }
    }
}
impl KubernetesApiCallAction {
    /// Creates a new builder-style object to manufacture [`KubernetesApiCallAction`](crate::model::KubernetesApiCallAction).
    pub fn builder() -> crate::model::kubernetes_api_call_action::Builder {
        crate::model::kubernetes_api_call_action::Builder::default()
    }
}

/// <p>Contains information about the remote IP address of the connection.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct RemoteIpDetails {
    /// <p>The city information of the remote IP address.</p>
    #[doc(hidden)]
    pub city: std::option::Option<crate::model::City>,
    /// <p>The country code of the remote IP address.</p>
    #[doc(hidden)]
    pub country: std::option::Option<crate::model::Country>,
    /// <p>The location information of the remote IP address.</p>
    #[doc(hidden)]
    pub geo_location: std::option::Option<crate::model::GeoLocation>,
    /// <p>The IPv4 remote address of the connection.</p>
    #[doc(hidden)]
    pub ip_address_v4: std::option::Option<std::string::String>,
    /// <p>The ISP organization information of the remote IP address.</p>
    #[doc(hidden)]
    pub organization: std::option::Option<crate::model::Organization>,
}
impl RemoteIpDetails {
    /// <p>The city information of the remote IP address.</p>
    pub fn city(&self) -> std::option::Option<&crate::model::City> {
        self.city.as_ref()
    }
    /// <p>The country code of the remote IP address.</p>
    pub fn country(&self) -> std::option::Option<&crate::model::Country> {
        self.country.as_ref()
    }
    /// <p>The location information of the remote IP address.</p>
    pub fn geo_location(&self) -> std::option::Option<&crate::model::GeoLocation> {
        self.geo_location.as_ref()
    }
    /// <p>The IPv4 remote address of the connection.</p>
    pub fn ip_address_v4(&self) -> std::option::Option<&str> {
        self.ip_address_v4.as_deref()
    }
    /// <p>The ISP organization information of the remote IP address.</p>
    pub fn organization(&self) -> std::option::Option<&crate::model::Organization> {
        self.organization.as_ref()
    }
}
/// See [`RemoteIpDetails`](crate::model::RemoteIpDetails).
pub mod remote_ip_details {

    /// A builder for [`RemoteIpDetails`](crate::model::RemoteIpDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) city: std::option::Option<crate::model::City>,
        pub(crate) country: std::option::Option<crate::model::Country>,
        pub(crate) geo_location: std::option::Option<crate::model::GeoLocation>,
        pub(crate) ip_address_v4: std::option::Option<std::string::String>,
        pub(crate) organization: std::option::Option<crate::model::Organization>,
    }
    impl Builder {
        /// <p>The city information of the remote IP address.</p>
        pub fn city(mut self, input: crate::model::City) -> Self {
            self.city = Some(input);
            self
        }
        /// <p>The city information of the remote IP address.</p>
        pub fn set_city(mut self, input: std::option::Option<crate::model::City>) -> Self {
            self.city = input;
            self
        }
        /// <p>The country code of the remote IP address.</p>
        pub fn country(mut self, input: crate::model::Country) -> Self {
            self.country = Some(input);
            self
        }
        /// <p>The country code of the remote IP address.</p>
        pub fn set_country(mut self, input: std::option::Option<crate::model::Country>) -> Self {
            self.country = input;
            self
        }
        /// <p>The location information of the remote IP address.</p>
        pub fn geo_location(mut self, input: crate::model::GeoLocation) -> Self {
            self.geo_location = Some(input);
            self
        }
        /// <p>The location information of the remote IP address.</p>
        pub fn set_geo_location(
            mut self,
            input: std::option::Option<crate::model::GeoLocation>,
        ) -> Self {
            self.geo_location = input;
            self
        }
        /// <p>The IPv4 remote address of the connection.</p>
        pub fn ip_address_v4(mut self, input: impl Into<std::string::String>) -> Self {
            self.ip_address_v4 = Some(input.into());
            self
        }
        /// <p>The IPv4 remote address of the connection.</p>
        pub fn set_ip_address_v4(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.ip_address_v4 = input;
            self
        }
        /// <p>The ISP organization information of the remote IP address.</p>
        pub fn organization(mut self, input: crate::model::Organization) -> Self {
            self.organization = Some(input);
            self
        }
        /// <p>The ISP organization information of the remote IP address.</p>
        pub fn set_organization(
            mut self,
            input: std::option::Option<crate::model::Organization>,
        ) -> Self {
            self.organization = input;
            self
        }
        /// Consumes the builder and constructs a [`RemoteIpDetails`](crate::model::RemoteIpDetails).
        pub fn build(self) -> crate::model::RemoteIpDetails {
            crate::model::RemoteIpDetails {
                city: self.city,
                country: self.country,
                geo_location: self.geo_location,
                ip_address_v4: self.ip_address_v4,
                organization: self.organization,
            }
        }
    }
}
impl RemoteIpDetails {
    /// Creates a new builder-style object to manufacture [`RemoteIpDetails`](crate::model::RemoteIpDetails).
    pub fn builder() -> crate::model::remote_ip_details::Builder {
        crate::model::remote_ip_details::Builder::default()
    }
}

/// <p>Contains information about the ISP organization of the remote IP address.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Organization {
    /// <p>The Autonomous System Number (ASN) of the internet provider of the remote IP address.</p>
    #[doc(hidden)]
    pub asn: std::option::Option<std::string::String>,
    /// <p>The organization that registered this ASN.</p>
    #[doc(hidden)]
    pub asn_org: std::option::Option<std::string::String>,
    /// <p>The ISP information for the internet provider.</p>
    #[doc(hidden)]
    pub isp: std::option::Option<std::string::String>,
    /// <p>The name of the internet provider.</p>
    #[doc(hidden)]
    pub org: std::option::Option<std::string::String>,
}
impl Organization {
    /// <p>The Autonomous System Number (ASN) of the internet provider of the remote IP address.</p>
    pub fn asn(&self) -> std::option::Option<&str> {
        self.asn.as_deref()
    }
    /// <p>The organization that registered this ASN.</p>
    pub fn asn_org(&self) -> std::option::Option<&str> {
        self.asn_org.as_deref()
    }
    /// <p>The ISP information for the internet provider.</p>
    pub fn isp(&self) -> std::option::Option<&str> {
        self.isp.as_deref()
    }
    /// <p>The name of the internet provider.</p>
    pub fn org(&self) -> std::option::Option<&str> {
        self.org.as_deref()
    }
}
/// See [`Organization`](crate::model::Organization).
pub mod organization {

    /// A builder for [`Organization`](crate::model::Organization).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) asn: std::option::Option<std::string::String>,
        pub(crate) asn_org: std::option::Option<std::string::String>,
        pub(crate) isp: std::option::Option<std::string::String>,
        pub(crate) org: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The Autonomous System Number (ASN) of the internet provider of the remote IP address.</p>
        pub fn asn(mut self, input: impl Into<std::string::String>) -> Self {
            self.asn = Some(input.into());
            self
        }
        /// <p>The Autonomous System Number (ASN) of the internet provider of the remote IP address.</p>
        pub fn set_asn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.asn = input;
            self
        }
        /// <p>The organization that registered this ASN.</p>
        pub fn asn_org(mut self, input: impl Into<std::string::String>) -> Self {
            self.asn_org = Some(input.into());
            self
        }
        /// <p>The organization that registered this ASN.</p>
        pub fn set_asn_org(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.asn_org = input;
            self
        }
        /// <p>The ISP information for the internet provider.</p>
        pub fn isp(mut self, input: impl Into<std::string::String>) -> Self {
            self.isp = Some(input.into());
            self
        }
        /// <p>The ISP information for the internet provider.</p>
        pub fn set_isp(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.isp = input;
            self
        }
        /// <p>The name of the internet provider.</p>
        pub fn org(mut self, input: impl Into<std::string::String>) -> Self {
            self.org = Some(input.into());
            self
        }
        /// <p>The name of the internet provider.</p>
        pub fn set_org(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.org = input;
            self
        }
        /// Consumes the builder and constructs a [`Organization`](crate::model::Organization).
        pub fn build(self) -> crate::model::Organization {
            crate::model::Organization {
                asn: self.asn,
                asn_org: self.asn_org,
                isp: self.isp,
                org: self.org,
            }
        }
    }
}
impl Organization {
    /// Creates a new builder-style object to manufacture [`Organization`](crate::model::Organization).
    pub fn builder() -> crate::model::organization::Builder {
        crate::model::organization::Builder::default()
    }
}

/// <p>Contains information about the location of the remote IP address.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct GeoLocation {
    /// <p>The latitude information of the remote IP address.</p>
    #[doc(hidden)]
    pub lat: f64,
    /// <p>The longitude information of the remote IP address.</p>
    #[doc(hidden)]
    pub lon: f64,
}
impl GeoLocation {
    /// <p>The latitude information of the remote IP address.</p>
    pub fn lat(&self) -> f64 {
        self.lat
    }
    /// <p>The longitude information of the remote IP address.</p>
    pub fn lon(&self) -> f64 {
        self.lon
    }
}
/// See [`GeoLocation`](crate::model::GeoLocation).
pub mod geo_location {

    /// A builder for [`GeoLocation`](crate::model::GeoLocation).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) lat: std::option::Option<f64>,
        pub(crate) lon: std::option::Option<f64>,
    }
    impl Builder {
        /// <p>The latitude information of the remote IP address.</p>
        pub fn lat(mut self, input: f64) -> Self {
            self.lat = Some(input);
            self
        }
        /// <p>The latitude information of the remote IP address.</p>
        pub fn set_lat(mut self, input: std::option::Option<f64>) -> Self {
            self.lat = input;
            self
        }
        /// <p>The longitude information of the remote IP address.</p>
        pub fn lon(mut self, input: f64) -> Self {
            self.lon = Some(input);
            self
        }
        /// <p>The longitude information of the remote IP address.</p>
        pub fn set_lon(mut self, input: std::option::Option<f64>) -> Self {
            self.lon = input;
            self
        }
        /// Consumes the builder and constructs a [`GeoLocation`](crate::model::GeoLocation).
        pub fn build(self) -> crate::model::GeoLocation {
            crate::model::GeoLocation {
                lat: self.lat.unwrap_or_default(),
                lon: self.lon.unwrap_or_default(),
            }
        }
    }
}
impl GeoLocation {
    /// Creates a new builder-style object to manufacture [`GeoLocation`](crate::model::GeoLocation).
    pub fn builder() -> crate::model::geo_location::Builder {
        crate::model::geo_location::Builder::default()
    }
}

/// <p>Contains information about the country where the remote IP address is located.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Country {
    /// <p>The country code of the remote IP address.</p>
    #[doc(hidden)]
    pub country_code: std::option::Option<std::string::String>,
    /// <p>The country name of the remote IP address.</p>
    #[doc(hidden)]
    pub country_name: std::option::Option<std::string::String>,
}
impl Country {
    /// <p>The country code of the remote IP address.</p>
    pub fn country_code(&self) -> std::option::Option<&str> {
        self.country_code.as_deref()
    }
    /// <p>The country name of the remote IP address.</p>
    pub fn country_name(&self) -> std::option::Option<&str> {
        self.country_name.as_deref()
    }
}
/// See [`Country`](crate::model::Country).
pub mod country {

    /// A builder for [`Country`](crate::model::Country).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) country_code: std::option::Option<std::string::String>,
        pub(crate) country_name: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The country code of the remote IP address.</p>
        pub fn country_code(mut self, input: impl Into<std::string::String>) -> Self {
            self.country_code = Some(input.into());
            self
        }
        /// <p>The country code of the remote IP address.</p>
        pub fn set_country_code(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.country_code = input;
            self
        }
        /// <p>The country name of the remote IP address.</p>
        pub fn country_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.country_name = Some(input.into());
            self
        }
        /// <p>The country name of the remote IP address.</p>
        pub fn set_country_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.country_name = input;
            self
        }
        /// Consumes the builder and constructs a [`Country`](crate::model::Country).
        pub fn build(self) -> crate::model::Country {
            crate::model::Country {
                country_code: self.country_code,
                country_name: self.country_name,
            }
        }
    }
}
impl Country {
    /// Creates a new builder-style object to manufacture [`Country`](crate::model::Country).
    pub fn builder() -> crate::model::country::Builder {
        crate::model::country::Builder::default()
    }
}

/// <p>Contains information about the city associated with the IP address.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct City {
    /// <p>The city name of the remote IP address.</p>
    #[doc(hidden)]
    pub city_name: std::option::Option<std::string::String>,
}
impl City {
    /// <p>The city name of the remote IP address.</p>
    pub fn city_name(&self) -> std::option::Option<&str> {
        self.city_name.as_deref()
    }
}
/// See [`City`](crate::model::City).
pub mod city {

    /// A builder for [`City`](crate::model::City).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) city_name: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The city name of the remote IP address.</p>
        pub fn city_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.city_name = Some(input.into());
            self
        }
        /// <p>The city name of the remote IP address.</p>
        pub fn set_city_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.city_name = input;
            self
        }
        /// Consumes the builder and constructs a [`City`](crate::model::City).
        pub fn build(self) -> crate::model::City {
            crate::model::City {
                city_name: self.city_name,
            }
        }
    }
}
impl City {
    /// Creates a new builder-style object to manufacture [`City`](crate::model::City).
    pub fn builder() -> crate::model::city::Builder {
        crate::model::city::Builder::default()
    }
}

/// <p>Contains information about the PORT_PROBE action described in the finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct PortProbeAction {
    /// <p>Indicates whether EC2 blocked the port probe to the instance, such as with an ACL.</p>
    #[doc(hidden)]
    pub blocked: bool,
    /// <p>A list of objects related to port probe details.</p>
    #[doc(hidden)]
    pub port_probe_details: std::option::Option<std::vec::Vec<crate::model::PortProbeDetail>>,
}
impl PortProbeAction {
    /// <p>Indicates whether EC2 blocked the port probe to the instance, such as with an ACL.</p>
    pub fn blocked(&self) -> bool {
        self.blocked
    }
    /// <p>A list of objects related to port probe details.</p>
    pub fn port_probe_details(&self) -> std::option::Option<&[crate::model::PortProbeDetail]> {
        self.port_probe_details.as_deref()
    }
}
/// See [`PortProbeAction`](crate::model::PortProbeAction).
pub mod port_probe_action {

    /// A builder for [`PortProbeAction`](crate::model::PortProbeAction).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) blocked: std::option::Option<bool>,
        pub(crate) port_probe_details:
            std::option::Option<std::vec::Vec<crate::model::PortProbeDetail>>,
    }
    impl Builder {
        /// <p>Indicates whether EC2 blocked the port probe to the instance, such as with an ACL.</p>
        pub fn blocked(mut self, input: bool) -> Self {
            self.blocked = Some(input);
            self
        }
        /// <p>Indicates whether EC2 blocked the port probe to the instance, such as with an ACL.</p>
        pub fn set_blocked(mut self, input: std::option::Option<bool>) -> Self {
            self.blocked = input;
            self
        }
        /// Appends an item to `port_probe_details`.
        ///
        /// To override the contents of this collection use [`set_port_probe_details`](Self::set_port_probe_details).
        ///
        /// <p>A list of objects related to port probe details.</p>
        pub fn port_probe_details(mut self, input: crate::model::PortProbeDetail) -> Self {
            let mut v = self.port_probe_details.unwrap_or_default();
            v.push(input);
            self.port_probe_details = Some(v);
            self
        }
        /// <p>A list of objects related to port probe details.</p>
        pub fn set_port_probe_details(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::PortProbeDetail>>,
        ) -> Self {
            self.port_probe_details = input;
            self
        }
        /// Consumes the builder and constructs a [`PortProbeAction`](crate::model::PortProbeAction).
        pub fn build(self) -> crate::model::PortProbeAction {
            crate::model::PortProbeAction {
                blocked: self.blocked.unwrap_or_default(),
                port_probe_details: self.port_probe_details,
            }
        }
    }
}
impl PortProbeAction {
    /// Creates a new builder-style object to manufacture [`PortProbeAction`](crate::model::PortProbeAction).
    pub fn builder() -> crate::model::port_probe_action::Builder {
        crate::model::port_probe_action::Builder::default()
    }
}

/// <p>Contains information about the port probe details.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct PortProbeDetail {
    /// <p>The local port information of the connection.</p>
    #[doc(hidden)]
    pub local_port_details: std::option::Option<crate::model::LocalPortDetails>,
    /// <p>The local IP information of the connection.</p>
    #[doc(hidden)]
    pub local_ip_details: std::option::Option<crate::model::LocalIpDetails>,
    /// <p>The remote IP information of the connection.</p>
    #[doc(hidden)]
    pub remote_ip_details: std::option::Option<crate::model::RemoteIpDetails>,
}
impl PortProbeDetail {
    /// <p>The local port information of the connection.</p>
    pub fn local_port_details(&self) -> std::option::Option<&crate::model::LocalPortDetails> {
        self.local_port_details.as_ref()
    }
    /// <p>The local IP information of the connection.</p>
    pub fn local_ip_details(&self) -> std::option::Option<&crate::model::LocalIpDetails> {
        self.local_ip_details.as_ref()
    }
    /// <p>The remote IP information of the connection.</p>
    pub fn remote_ip_details(&self) -> std::option::Option<&crate::model::RemoteIpDetails> {
        self.remote_ip_details.as_ref()
    }
}
/// See [`PortProbeDetail`](crate::model::PortProbeDetail).
pub mod port_probe_detail {

    /// A builder for [`PortProbeDetail`](crate::model::PortProbeDetail).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) local_port_details: std::option::Option<crate::model::LocalPortDetails>,
        pub(crate) local_ip_details: std::option::Option<crate::model::LocalIpDetails>,
        pub(crate) remote_ip_details: std::option::Option<crate::model::RemoteIpDetails>,
    }
    impl Builder {
        /// <p>The local port information of the connection.</p>
        pub fn local_port_details(mut self, input: crate::model::LocalPortDetails) -> Self {
            self.local_port_details = Some(input);
            self
        }
        /// <p>The local port information of the connection.</p>
        pub fn set_local_port_details(
            mut self,
            input: std::option::Option<crate::model::LocalPortDetails>,
        ) -> Self {
            self.local_port_details = input;
            self
        }
        /// <p>The local IP information of the connection.</p>
        pub fn local_ip_details(mut self, input: crate::model::LocalIpDetails) -> Self {
            self.local_ip_details = Some(input);
            self
        }
        /// <p>The local IP information of the connection.</p>
        pub fn set_local_ip_details(
            mut self,
            input: std::option::Option<crate::model::LocalIpDetails>,
        ) -> Self {
            self.local_ip_details = input;
            self
        }
        /// <p>The remote IP information of the connection.</p>
        pub fn remote_ip_details(mut self, input: crate::model::RemoteIpDetails) -> Self {
            self.remote_ip_details = Some(input);
            self
        }
        /// <p>The remote IP information of the connection.</p>
        pub fn set_remote_ip_details(
            mut self,
            input: std::option::Option<crate::model::RemoteIpDetails>,
        ) -> Self {
            self.remote_ip_details = input;
            self
        }
        /// Consumes the builder and constructs a [`PortProbeDetail`](crate::model::PortProbeDetail).
        pub fn build(self) -> crate::model::PortProbeDetail {
            crate::model::PortProbeDetail {
                local_port_details: self.local_port_details,
                local_ip_details: self.local_ip_details,
                remote_ip_details: self.remote_ip_details,
            }
        }
    }
}
impl PortProbeDetail {
    /// Creates a new builder-style object to manufacture [`PortProbeDetail`](crate::model::PortProbeDetail).
    pub fn builder() -> crate::model::port_probe_detail::Builder {
        crate::model::port_probe_detail::Builder::default()
    }
}

/// <p>Contains information about the local IP address of the connection.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct LocalIpDetails {
    /// <p>The IPv4 local address of the connection.</p>
    #[doc(hidden)]
    pub ip_address_v4: std::option::Option<std::string::String>,
}
impl LocalIpDetails {
    /// <p>The IPv4 local address of the connection.</p>
    pub fn ip_address_v4(&self) -> std::option::Option<&str> {
        self.ip_address_v4.as_deref()
    }
}
/// See [`LocalIpDetails`](crate::model::LocalIpDetails).
pub mod local_ip_details {

    /// A builder for [`LocalIpDetails`](crate::model::LocalIpDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) ip_address_v4: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The IPv4 local address of the connection.</p>
        pub fn ip_address_v4(mut self, input: impl Into<std::string::String>) -> Self {
            self.ip_address_v4 = Some(input.into());
            self
        }
        /// <p>The IPv4 local address of the connection.</p>
        pub fn set_ip_address_v4(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.ip_address_v4 = input;
            self
        }
        /// Consumes the builder and constructs a [`LocalIpDetails`](crate::model::LocalIpDetails).
        pub fn build(self) -> crate::model::LocalIpDetails {
            crate::model::LocalIpDetails {
                ip_address_v4: self.ip_address_v4,
            }
        }
    }
}
impl LocalIpDetails {
    /// Creates a new builder-style object to manufacture [`LocalIpDetails`](crate::model::LocalIpDetails).
    pub fn builder() -> crate::model::local_ip_details::Builder {
        crate::model::local_ip_details::Builder::default()
    }
}

/// <p>Contains information about the port for the local connection.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct LocalPortDetails {
    /// <p>The port number of the local connection.</p>
    #[doc(hidden)]
    pub port: i32,
    /// <p>The port name of the local connection.</p>
    #[doc(hidden)]
    pub port_name: std::option::Option<std::string::String>,
}
impl LocalPortDetails {
    /// <p>The port number of the local connection.</p>
    pub fn port(&self) -> i32 {
        self.port
    }
    /// <p>The port name of the local connection.</p>
    pub fn port_name(&self) -> std::option::Option<&str> {
        self.port_name.as_deref()
    }
}
/// See [`LocalPortDetails`](crate::model::LocalPortDetails).
pub mod local_port_details {

    /// A builder for [`LocalPortDetails`](crate::model::LocalPortDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) port: std::option::Option<i32>,
        pub(crate) port_name: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The port number of the local connection.</p>
        pub fn port(mut self, input: i32) -> Self {
            self.port = Some(input);
            self
        }
        /// <p>The port number of the local connection.</p>
        pub fn set_port(mut self, input: std::option::Option<i32>) -> Self {
            self.port = input;
            self
        }
        /// <p>The port name of the local connection.</p>
        pub fn port_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.port_name = Some(input.into());
            self
        }
        /// <p>The port name of the local connection.</p>
        pub fn set_port_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.port_name = input;
            self
        }
        /// Consumes the builder and constructs a [`LocalPortDetails`](crate::model::LocalPortDetails).
        pub fn build(self) -> crate::model::LocalPortDetails {
            crate::model::LocalPortDetails {
                port: self.port.unwrap_or_default(),
                port_name: self.port_name,
            }
        }
    }
}
impl LocalPortDetails {
    /// Creates a new builder-style object to manufacture [`LocalPortDetails`](crate::model::LocalPortDetails).
    pub fn builder() -> crate::model::local_port_details::Builder {
        crate::model::local_port_details::Builder::default()
    }
}

/// <p>Contains information about the NETWORK_CONNECTION action described in the finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct NetworkConnectionAction {
    /// <p>Indicates whether EC2 blocked the network connection to your instance.</p>
    #[doc(hidden)]
    pub blocked: bool,
    /// <p>The network connection direction.</p>
    #[doc(hidden)]
    pub connection_direction: std::option::Option<std::string::String>,
    /// <p>The local port information of the connection.</p>
    #[doc(hidden)]
    pub local_port_details: std::option::Option<crate::model::LocalPortDetails>,
    /// <p>The network connection protocol.</p>
    #[doc(hidden)]
    pub protocol: std::option::Option<std::string::String>,
    /// <p>The local IP information of the connection.</p>
    #[doc(hidden)]
    pub local_ip_details: std::option::Option<crate::model::LocalIpDetails>,
    /// <p>The remote IP information of the connection.</p>
    #[doc(hidden)]
    pub remote_ip_details: std::option::Option<crate::model::RemoteIpDetails>,
    /// <p>The remote port information of the connection.</p>
    #[doc(hidden)]
    pub remote_port_details: std::option::Option<crate::model::RemotePortDetails>,
}
impl NetworkConnectionAction {
    /// <p>Indicates whether EC2 blocked the network connection to your instance.</p>
    pub fn blocked(&self) -> bool {
        self.blocked
    }
    /// <p>The network connection direction.</p>
    pub fn connection_direction(&self) -> std::option::Option<&str> {
        self.connection_direction.as_deref()
    }
    /// <p>The local port information of the connection.</p>
    pub fn local_port_details(&self) -> std::option::Option<&crate::model::LocalPortDetails> {
        self.local_port_details.as_ref()
    }
    /// <p>The network connection protocol.</p>
    pub fn protocol(&self) -> std::option::Option<&str> {
        self.protocol.as_deref()
    }
    /// <p>The local IP information of the connection.</p>
    pub fn local_ip_details(&self) -> std::option::Option<&crate::model::LocalIpDetails> {
        self.local_ip_details.as_ref()
    }
    /// <p>The remote IP information of the connection.</p>
    pub fn remote_ip_details(&self) -> std::option::Option<&crate::model::RemoteIpDetails> {
        self.remote_ip_details.as_ref()
    }
    /// <p>The remote port information of the connection.</p>
    pub fn remote_port_details(&self) -> std::option::Option<&crate::model::RemotePortDetails> {
        self.remote_port_details.as_ref()
    }
}
/// See [`NetworkConnectionAction`](crate::model::NetworkConnectionAction).
pub mod network_connection_action {

    /// A builder for [`NetworkConnectionAction`](crate::model::NetworkConnectionAction).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) blocked: std::option::Option<bool>,
        pub(crate) connection_direction: std::option::Option<std::string::String>,
        pub(crate) local_port_details: std::option::Option<crate::model::LocalPortDetails>,
        pub(crate) protocol: std::option::Option<std::string::String>,
        pub(crate) local_ip_details: std::option::Option<crate::model::LocalIpDetails>,
        pub(crate) remote_ip_details: std::option::Option<crate::model::RemoteIpDetails>,
        pub(crate) remote_port_details: std::option::Option<crate::model::RemotePortDetails>,
    }
    impl Builder {
        /// <p>Indicates whether EC2 blocked the network connection to your instance.</p>
        pub fn blocked(mut self, input: bool) -> Self {
            self.blocked = Some(input);
            self
        }
        /// <p>Indicates whether EC2 blocked the network connection to your instance.</p>
        pub fn set_blocked(mut self, input: std::option::Option<bool>) -> Self {
            self.blocked = input;
            self
        }
        /// <p>The network connection direction.</p>
        pub fn connection_direction(mut self, input: impl Into<std::string::String>) -> Self {
            self.connection_direction = Some(input.into());
            self
        }
        /// <p>The network connection direction.</p>
        pub fn set_connection_direction(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.connection_direction = input;
            self
        }
        /// <p>The local port information of the connection.</p>
        pub fn local_port_details(mut self, input: crate::model::LocalPortDetails) -> Self {
            self.local_port_details = Some(input);
            self
        }
        /// <p>The local port information of the connection.</p>
        pub fn set_local_port_details(
            mut self,
            input: std::option::Option<crate::model::LocalPortDetails>,
        ) -> Self {
            self.local_port_details = input;
            self
        }
        /// <p>The network connection protocol.</p>
        pub fn protocol(mut self, input: impl Into<std::string::String>) -> Self {
            self.protocol = Some(input.into());
            self
        }
        /// <p>The network connection protocol.</p>
        pub fn set_protocol(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.protocol = input;
            self
        }
        /// <p>The local IP information of the connection.</p>
        pub fn local_ip_details(mut self, input: crate::model::LocalIpDetails) -> Self {
            self.local_ip_details = Some(input);
            self
        }
        /// <p>The local IP information of the connection.</p>
        pub fn set_local_ip_details(
            mut self,
            input: std::option::Option<crate::model::LocalIpDetails>,
        ) -> Self {
            self.local_ip_details = input;
            self
        }
        /// <p>The remote IP information of the connection.</p>
        pub fn remote_ip_details(mut self, input: crate::model::RemoteIpDetails) -> Self {
            self.remote_ip_details = Some(input);
            self
        }
        /// <p>The remote IP information of the connection.</p>
        pub fn set_remote_ip_details(
            mut self,
            input: std::option::Option<crate::model::RemoteIpDetails>,
        ) -> Self {
            self.remote_ip_details = input;
            self
        }
        /// <p>The remote port information of the connection.</p>
        pub fn remote_port_details(mut self, input: crate::model::RemotePortDetails) -> Self {
            self.remote_port_details = Some(input);
            self
        }
        /// <p>The remote port information of the connection.</p>
        pub fn set_remote_port_details(
            mut self,
            input: std::option::Option<crate::model::RemotePortDetails>,
        ) -> Self {
            self.remote_port_details = input;
            self
        }
        /// Consumes the builder and constructs a [`NetworkConnectionAction`](crate::model::NetworkConnectionAction).
        pub fn build(self) -> crate::model::NetworkConnectionAction {
            crate::model::NetworkConnectionAction {
                blocked: self.blocked.unwrap_or_default(),
                connection_direction: self.connection_direction,
                local_port_details: self.local_port_details,
                protocol: self.protocol,
                local_ip_details: self.local_ip_details,
                remote_ip_details: self.remote_ip_details,
                remote_port_details: self.remote_port_details,
            }
        }
    }
}
impl NetworkConnectionAction {
    /// Creates a new builder-style object to manufacture [`NetworkConnectionAction`](crate::model::NetworkConnectionAction).
    pub fn builder() -> crate::model::network_connection_action::Builder {
        crate::model::network_connection_action::Builder::default()
    }
}

/// <p>Contains information about the remote port.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct RemotePortDetails {
    /// <p>The port number of the remote connection.</p>
    #[doc(hidden)]
    pub port: i32,
    /// <p>The port name of the remote connection.</p>
    #[doc(hidden)]
    pub port_name: std::option::Option<std::string::String>,
}
impl RemotePortDetails {
    /// <p>The port number of the remote connection.</p>
    pub fn port(&self) -> i32 {
        self.port
    }
    /// <p>The port name of the remote connection.</p>
    pub fn port_name(&self) -> std::option::Option<&str> {
        self.port_name.as_deref()
    }
}
/// See [`RemotePortDetails`](crate::model::RemotePortDetails).
pub mod remote_port_details {

    /// A builder for [`RemotePortDetails`](crate::model::RemotePortDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) port: std::option::Option<i32>,
        pub(crate) port_name: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The port number of the remote connection.</p>
        pub fn port(mut self, input: i32) -> Self {
            self.port = Some(input);
            self
        }
        /// <p>The port number of the remote connection.</p>
        pub fn set_port(mut self, input: std::option::Option<i32>) -> Self {
            self.port = input;
            self
        }
        /// <p>The port name of the remote connection.</p>
        pub fn port_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.port_name = Some(input.into());
            self
        }
        /// <p>The port name of the remote connection.</p>
        pub fn set_port_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.port_name = input;
            self
        }
        /// Consumes the builder and constructs a [`RemotePortDetails`](crate::model::RemotePortDetails).
        pub fn build(self) -> crate::model::RemotePortDetails {
            crate::model::RemotePortDetails {
                port: self.port.unwrap_or_default(),
                port_name: self.port_name,
            }
        }
    }
}
impl RemotePortDetails {
    /// Creates a new builder-style object to manufacture [`RemotePortDetails`](crate::model::RemotePortDetails).
    pub fn builder() -> crate::model::remote_port_details::Builder {
        crate::model::remote_port_details::Builder::default()
    }
}

/// <p>Contains information about the DNS_REQUEST action described in this finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DnsRequestAction {
    /// <p>The domain information for the API request.</p>
    #[doc(hidden)]
    pub domain: std::option::Option<std::string::String>,
    /// <p>The network connection protocol observed in the activity that prompted GuardDuty to generate the finding.</p>
    #[doc(hidden)]
    pub protocol: std::option::Option<std::string::String>,
    /// <p>Indicates whether the targeted port is blocked.</p>
    #[doc(hidden)]
    pub blocked: bool,
}
impl DnsRequestAction {
    /// <p>The domain information for the API request.</p>
    pub fn domain(&self) -> std::option::Option<&str> {
        self.domain.as_deref()
    }
    /// <p>The network connection protocol observed in the activity that prompted GuardDuty to generate the finding.</p>
    pub fn protocol(&self) -> std::option::Option<&str> {
        self.protocol.as_deref()
    }
    /// <p>Indicates whether the targeted port is blocked.</p>
    pub fn blocked(&self) -> bool {
        self.blocked
    }
}
/// See [`DnsRequestAction`](crate::model::DnsRequestAction).
pub mod dns_request_action {

    /// A builder for [`DnsRequestAction`](crate::model::DnsRequestAction).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) domain: std::option::Option<std::string::String>,
        pub(crate) protocol: std::option::Option<std::string::String>,
        pub(crate) blocked: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>The domain information for the API request.</p>
        pub fn domain(mut self, input: impl Into<std::string::String>) -> Self {
            self.domain = Some(input.into());
            self
        }
        /// <p>The domain information for the API request.</p>
        pub fn set_domain(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.domain = input;
            self
        }
        /// <p>The network connection protocol observed in the activity that prompted GuardDuty to generate the finding.</p>
        pub fn protocol(mut self, input: impl Into<std::string::String>) -> Self {
            self.protocol = Some(input.into());
            self
        }
        /// <p>The network connection protocol observed in the activity that prompted GuardDuty to generate the finding.</p>
        pub fn set_protocol(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.protocol = input;
            self
        }
        /// <p>Indicates whether the targeted port is blocked.</p>
        pub fn blocked(mut self, input: bool) -> Self {
            self.blocked = Some(input);
            self
        }
        /// <p>Indicates whether the targeted port is blocked.</p>
        pub fn set_blocked(mut self, input: std::option::Option<bool>) -> Self {
            self.blocked = input;
            self
        }
        /// Consumes the builder and constructs a [`DnsRequestAction`](crate::model::DnsRequestAction).
        pub fn build(self) -> crate::model::DnsRequestAction {
            crate::model::DnsRequestAction {
                domain: self.domain,
                protocol: self.protocol,
                blocked: self.blocked.unwrap_or_default(),
            }
        }
    }
}
impl DnsRequestAction {
    /// Creates a new builder-style object to manufacture [`DnsRequestAction`](crate::model::DnsRequestAction).
    pub fn builder() -> crate::model::dns_request_action::Builder {
        crate::model::dns_request_action::Builder::default()
    }
}

/// <p>Contains information about the API action.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct AwsApiCallAction {
    /// <p>The Amazon Web Services API name.</p>
    #[doc(hidden)]
    pub api: std::option::Option<std::string::String>,
    /// <p>The Amazon Web Services API caller type.</p>
    #[doc(hidden)]
    pub caller_type: std::option::Option<std::string::String>,
    /// <p>The domain information for the Amazon Web Services API call.</p>
    #[doc(hidden)]
    pub domain_details: std::option::Option<crate::model::DomainDetails>,
    /// <p>The error code of the failed Amazon Web Services API action.</p>
    #[doc(hidden)]
    pub error_code: std::option::Option<std::string::String>,
    /// <p>The agent through which the API request was made.</p>
    #[doc(hidden)]
    pub user_agent: std::option::Option<std::string::String>,
    /// <p>The remote IP information of the connection that initiated the Amazon Web Services API call.</p>
    #[doc(hidden)]
    pub remote_ip_details: std::option::Option<crate::model::RemoteIpDetails>,
    /// <p>The Amazon Web Services service name whose API was invoked.</p>
    #[doc(hidden)]
    pub service_name: std::option::Option<std::string::String>,
    /// <p>The details of the Amazon Web Services account that made the API call. This field appears if the call was made from outside your account.</p>
    #[doc(hidden)]
    pub remote_account_details: std::option::Option<crate::model::RemoteAccountDetails>,
    /// <p>The details of the Amazon Web Services account that made the API call. This field identifies the resources that were affected by this API call.</p>
    #[doc(hidden)]
    pub affected_resources:
        std::option::Option<std::collections::HashMap<std::string::String, std::string::String>>,
}
impl AwsApiCallAction {
    /// <p>The Amazon Web Services API name.</p>
    pub fn api(&self) -> std::option::Option<&str> {
        self.api.as_deref()
    }
    /// <p>The Amazon Web Services API caller type.</p>
    pub fn caller_type(&self) -> std::option::Option<&str> {
        self.caller_type.as_deref()
    }
    /// <p>The domain information for the Amazon Web Services API call.</p>
    pub fn domain_details(&self) -> std::option::Option<&crate::model::DomainDetails> {
        self.domain_details.as_ref()
    }
    /// <p>The error code of the failed Amazon Web Services API action.</p>
    pub fn error_code(&self) -> std::option::Option<&str> {
        self.error_code.as_deref()
    }
    /// <p>The agent through which the API request was made.</p>
    pub fn user_agent(&self) -> std::option::Option<&str> {
        self.user_agent.as_deref()
    }
    /// <p>The remote IP information of the connection that initiated the Amazon Web Services API call.</p>
    pub fn remote_ip_details(&self) -> std::option::Option<&crate::model::RemoteIpDetails> {
        self.remote_ip_details.as_ref()
    }
    /// <p>The Amazon Web Services service name whose API was invoked.</p>
    pub fn service_name(&self) -> std::option::Option<&str> {
        self.service_name.as_deref()
    }
    /// <p>The details of the Amazon Web Services account that made the API call. This field appears if the call was made from outside your account.</p>
    pub fn remote_account_details(
        &self,
    ) -> std::option::Option<&crate::model::RemoteAccountDetails> {
        self.remote_account_details.as_ref()
    }
    /// <p>The details of the Amazon Web Services account that made the API call. This field identifies the resources that were affected by this API call.</p>
    pub fn affected_resources(
        &self,
    ) -> std::option::Option<&std::collections::HashMap<std::string::String, std::string::String>>
    {
        self.affected_resources.as_ref()
    }
}
/// See [`AwsApiCallAction`](crate::model::AwsApiCallAction).
pub mod aws_api_call_action {

    /// A builder for [`AwsApiCallAction`](crate::model::AwsApiCallAction).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) api: std::option::Option<std::string::String>,
        pub(crate) caller_type: std::option::Option<std::string::String>,
        pub(crate) domain_details: std::option::Option<crate::model::DomainDetails>,
        pub(crate) error_code: std::option::Option<std::string::String>,
        pub(crate) user_agent: std::option::Option<std::string::String>,
        pub(crate) remote_ip_details: std::option::Option<crate::model::RemoteIpDetails>,
        pub(crate) service_name: std::option::Option<std::string::String>,
        pub(crate) remote_account_details: std::option::Option<crate::model::RemoteAccountDetails>,
        pub(crate) affected_resources: std::option::Option<
            std::collections::HashMap<std::string::String, std::string::String>,
        >,
    }
    impl Builder {
        /// <p>The Amazon Web Services API name.</p>
        pub fn api(mut self, input: impl Into<std::string::String>) -> Self {
            self.api = Some(input.into());
            self
        }
        /// <p>The Amazon Web Services API name.</p>
        pub fn set_api(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.api = input;
            self
        }
        /// <p>The Amazon Web Services API caller type.</p>
        pub fn caller_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.caller_type = Some(input.into());
            self
        }
        /// <p>The Amazon Web Services API caller type.</p>
        pub fn set_caller_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.caller_type = input;
            self
        }
        /// <p>The domain information for the Amazon Web Services API call.</p>
        pub fn domain_details(mut self, input: crate::model::DomainDetails) -> Self {
            self.domain_details = Some(input);
            self
        }
        /// <p>The domain information for the Amazon Web Services API call.</p>
        pub fn set_domain_details(
            mut self,
            input: std::option::Option<crate::model::DomainDetails>,
        ) -> Self {
            self.domain_details = input;
            self
        }
        /// <p>The error code of the failed Amazon Web Services API action.</p>
        pub fn error_code(mut self, input: impl Into<std::string::String>) -> Self {
            self.error_code = Some(input.into());
            self
        }
        /// <p>The error code of the failed Amazon Web Services API action.</p>
        pub fn set_error_code(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.error_code = input;
            self
        }
        /// <p>The agent through which the API request was made.</p>
        pub fn user_agent(mut self, input: impl Into<std::string::String>) -> Self {
            self.user_agent = Some(input.into());
            self
        }
        /// <p>The agent through which the API request was made.</p>
        pub fn set_user_agent(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.user_agent = input;
            self
        }
        /// <p>The remote IP information of the connection that initiated the Amazon Web Services API call.</p>
        pub fn remote_ip_details(mut self, input: crate::model::RemoteIpDetails) -> Self {
            self.remote_ip_details = Some(input);
            self
        }
        /// <p>The remote IP information of the connection that initiated the Amazon Web Services API call.</p>
        pub fn set_remote_ip_details(
            mut self,
            input: std::option::Option<crate::model::RemoteIpDetails>,
        ) -> Self {
            self.remote_ip_details = input;
            self
        }
        /// <p>The Amazon Web Services service name whose API was invoked.</p>
        pub fn service_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.service_name = Some(input.into());
            self
        }
        /// <p>The Amazon Web Services service name whose API was invoked.</p>
        pub fn set_service_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.service_name = input;
            self
        }
        /// <p>The details of the Amazon Web Services account that made the API call. This field appears if the call was made from outside your account.</p>
        pub fn remote_account_details(mut self, input: crate::model::RemoteAccountDetails) -> Self {
            self.remote_account_details = Some(input);
            self
        }
        /// <p>The details of the Amazon Web Services account that made the API call. This field appears if the call was made from outside your account.</p>
        pub fn set_remote_account_details(
            mut self,
            input: std::option::Option<crate::model::RemoteAccountDetails>,
        ) -> Self {
            self.remote_account_details = input;
            self
        }
        /// Adds a key-value pair to `affected_resources`.
        ///
        /// To override the contents of this collection use [`set_affected_resources`](Self::set_affected_resources).
        ///
        /// <p>The details of the Amazon Web Services account that made the API call. This field identifies the resources that were affected by this API call.</p>
        pub fn affected_resources(
            mut self,
            k: impl Into<std::string::String>,
            v: impl Into<std::string::String>,
        ) -> Self {
            let mut hash_map = self.affected_resources.unwrap_or_default();
            hash_map.insert(k.into(), v.into());
            self.affected_resources = Some(hash_map);
            self
        }
        /// <p>The details of the Amazon Web Services account that made the API call. This field identifies the resources that were affected by this API call.</p>
        pub fn set_affected_resources(
            mut self,
            input: std::option::Option<
                std::collections::HashMap<std::string::String, std::string::String>,
            >,
        ) -> Self {
            self.affected_resources = input;
            self
        }
        /// Consumes the builder and constructs a [`AwsApiCallAction`](crate::model::AwsApiCallAction).
        pub fn build(self) -> crate::model::AwsApiCallAction {
            crate::model::AwsApiCallAction {
                api: self.api,
                caller_type: self.caller_type,
                domain_details: self.domain_details,
                error_code: self.error_code,
                user_agent: self.user_agent,
                remote_ip_details: self.remote_ip_details,
                service_name: self.service_name,
                remote_account_details: self.remote_account_details,
                affected_resources: self.affected_resources,
            }
        }
    }
}
impl AwsApiCallAction {
    /// Creates a new builder-style object to manufacture [`AwsApiCallAction`](crate::model::AwsApiCallAction).
    pub fn builder() -> crate::model::aws_api_call_action::Builder {
        crate::model::aws_api_call_action::Builder::default()
    }
}

/// <p>Contains details about the remote Amazon Web Services account that made the API call.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct RemoteAccountDetails {
    /// <p>The Amazon Web Services account ID of the remote API caller.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>Details on whether the Amazon Web Services account of the remote API caller is related to your GuardDuty environment. If this value is <code>True</code> the API caller is affiliated to your account in some way. If it is <code>False</code> the API caller is from outside your environment.</p>
    #[doc(hidden)]
    pub affiliated: bool,
}
impl RemoteAccountDetails {
    /// <p>The Amazon Web Services account ID of the remote API caller.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>Details on whether the Amazon Web Services account of the remote API caller is related to your GuardDuty environment. If this value is <code>True</code> the API caller is affiliated to your account in some way. If it is <code>False</code> the API caller is from outside your environment.</p>
    pub fn affiliated(&self) -> bool {
        self.affiliated
    }
}
/// See [`RemoteAccountDetails`](crate::model::RemoteAccountDetails).
pub mod remote_account_details {

    /// A builder for [`RemoteAccountDetails`](crate::model::RemoteAccountDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) affiliated: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>The Amazon Web Services account ID of the remote API caller.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The Amazon Web Services account ID of the remote API caller.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>Details on whether the Amazon Web Services account of the remote API caller is related to your GuardDuty environment. If this value is <code>True</code> the API caller is affiliated to your account in some way. If it is <code>False</code> the API caller is from outside your environment.</p>
        pub fn affiliated(mut self, input: bool) -> Self {
            self.affiliated = Some(input);
            self
        }
        /// <p>Details on whether the Amazon Web Services account of the remote API caller is related to your GuardDuty environment. If this value is <code>True</code> the API caller is affiliated to your account in some way. If it is <code>False</code> the API caller is from outside your environment.</p>
        pub fn set_affiliated(mut self, input: std::option::Option<bool>) -> Self {
            self.affiliated = input;
            self
        }
        /// Consumes the builder and constructs a [`RemoteAccountDetails`](crate::model::RemoteAccountDetails).
        pub fn build(self) -> crate::model::RemoteAccountDetails {
            crate::model::RemoteAccountDetails {
                account_id: self.account_id,
                affiliated: self.affiliated.unwrap_or_default(),
            }
        }
    }
}
impl RemoteAccountDetails {
    /// Creates a new builder-style object to manufacture [`RemoteAccountDetails`](crate::model::RemoteAccountDetails).
    pub fn builder() -> crate::model::remote_account_details::Builder {
        crate::model::remote_account_details::Builder::default()
    }
}

/// <p>Contains information about the domain.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DomainDetails {
    /// <p>The domain information for the Amazon Web Services API call.</p>
    #[doc(hidden)]
    pub domain: std::option::Option<std::string::String>,
}
impl DomainDetails {
    /// <p>The domain information for the Amazon Web Services API call.</p>
    pub fn domain(&self) -> std::option::Option<&str> {
        self.domain.as_deref()
    }
}
/// See [`DomainDetails`](crate::model::DomainDetails).
pub mod domain_details {

    /// A builder for [`DomainDetails`](crate::model::DomainDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) domain: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The domain information for the Amazon Web Services API call.</p>
        pub fn domain(mut self, input: impl Into<std::string::String>) -> Self {
            self.domain = Some(input.into());
            self
        }
        /// <p>The domain information for the Amazon Web Services API call.</p>
        pub fn set_domain(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.domain = input;
            self
        }
        /// Consumes the builder and constructs a [`DomainDetails`](crate::model::DomainDetails).
        pub fn build(self) -> crate::model::DomainDetails {
            crate::model::DomainDetails {
                domain: self.domain,
            }
        }
    }
}
impl DomainDetails {
    /// Creates a new builder-style object to manufacture [`DomainDetails`](crate::model::DomainDetails).
    pub fn builder() -> crate::model::domain_details::Builder {
        crate::model::domain_details::Builder::default()
    }
}

/// <p>Contains information about the Amazon Web Services resource associated with the activity that prompted GuardDuty to generate a finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Resource {
    /// <p>The IAM access key details (IAM user information) of a user that engaged in the activity that prompted GuardDuty to generate a finding.</p>
    #[doc(hidden)]
    pub access_key_details: std::option::Option<crate::model::AccessKeyDetails>,
    /// <p>Contains information on the S3 bucket.</p>
    #[doc(hidden)]
    pub s3_bucket_details: std::option::Option<std::vec::Vec<crate::model::S3BucketDetail>>,
    /// <p>The information about the EC2 instance associated with the activity that prompted GuardDuty to generate a finding.</p>
    #[doc(hidden)]
    pub instance_details: std::option::Option<crate::model::InstanceDetails>,
    /// <p>Details about the EKS cluster involved in a Kubernetes finding.</p>
    #[doc(hidden)]
    pub eks_cluster_details: std::option::Option<crate::model::EksClusterDetails>,
    /// <p>Details about the Kubernetes user and workload involved in a Kubernetes finding.</p>
    #[doc(hidden)]
    pub kubernetes_details: std::option::Option<crate::model::KubernetesDetails>,
    /// <p>The type of Amazon Web Services resource.</p>
    #[doc(hidden)]
    pub resource_type: std::option::Option<std::string::String>,
    /// <p>Contains list of scanned and skipped EBS volumes with details.</p>
    #[doc(hidden)]
    pub ebs_volume_details: std::option::Option<crate::model::EbsVolumeDetails>,
    /// <p>Contains information about the details of the ECS Cluster.</p>
    #[doc(hidden)]
    pub ecs_cluster_details: std::option::Option<crate::model::EcsClusterDetails>,
    /// <p>Details of a container.</p>
    #[doc(hidden)]
    pub container_details: std::option::Option<crate::model::Container>,
}
impl Resource {
    /// <p>The IAM access key details (IAM user information) of a user that engaged in the activity that prompted GuardDuty to generate a finding.</p>
    pub fn access_key_details(&self) -> std::option::Option<&crate::model::AccessKeyDetails> {
        self.access_key_details.as_ref()
    }
    /// <p>Contains information on the S3 bucket.</p>
    pub fn s3_bucket_details(&self) -> std::option::Option<&[crate::model::S3BucketDetail]> {
        self.s3_bucket_details.as_deref()
    }
    /// <p>The information about the EC2 instance associated with the activity that prompted GuardDuty to generate a finding.</p>
    pub fn instance_details(&self) -> std::option::Option<&crate::model::InstanceDetails> {
        self.instance_details.as_ref()
    }
    /// <p>Details about the EKS cluster involved in a Kubernetes finding.</p>
    pub fn eks_cluster_details(&self) -> std::option::Option<&crate::model::EksClusterDetails> {
        self.eks_cluster_details.as_ref()
    }
    /// <p>Details about the Kubernetes user and workload involved in a Kubernetes finding.</p>
    pub fn kubernetes_details(&self) -> std::option::Option<&crate::model::KubernetesDetails> {
        self.kubernetes_details.as_ref()
    }
    /// <p>The type of Amazon Web Services resource.</p>
    pub fn resource_type(&self) -> std::option::Option<&str> {
        self.resource_type.as_deref()
    }
    /// <p>Contains list of scanned and skipped EBS volumes with details.</p>
    pub fn ebs_volume_details(&self) -> std::option::Option<&crate::model::EbsVolumeDetails> {
        self.ebs_volume_details.as_ref()
    }
    /// <p>Contains information about the details of the ECS Cluster.</p>
    pub fn ecs_cluster_details(&self) -> std::option::Option<&crate::model::EcsClusterDetails> {
        self.ecs_cluster_details.as_ref()
    }
    /// <p>Details of a container.</p>
    pub fn container_details(&self) -> std::option::Option<&crate::model::Container> {
        self.container_details.as_ref()
    }
}
/// See [`Resource`](crate::model::Resource).
pub mod resource {

    /// A builder for [`Resource`](crate::model::Resource).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) access_key_details: std::option::Option<crate::model::AccessKeyDetails>,
        pub(crate) s3_bucket_details:
            std::option::Option<std::vec::Vec<crate::model::S3BucketDetail>>,
        pub(crate) instance_details: std::option::Option<crate::model::InstanceDetails>,
        pub(crate) eks_cluster_details: std::option::Option<crate::model::EksClusterDetails>,
        pub(crate) kubernetes_details: std::option::Option<crate::model::KubernetesDetails>,
        pub(crate) resource_type: std::option::Option<std::string::String>,
        pub(crate) ebs_volume_details: std::option::Option<crate::model::EbsVolumeDetails>,
        pub(crate) ecs_cluster_details: std::option::Option<crate::model::EcsClusterDetails>,
        pub(crate) container_details: std::option::Option<crate::model::Container>,
    }
    impl Builder {
        /// <p>The IAM access key details (IAM user information) of a user that engaged in the activity that prompted GuardDuty to generate a finding.</p>
        pub fn access_key_details(mut self, input: crate::model::AccessKeyDetails) -> Self {
            self.access_key_details = Some(input);
            self
        }
        /// <p>The IAM access key details (IAM user information) of a user that engaged in the activity that prompted GuardDuty to generate a finding.</p>
        pub fn set_access_key_details(
            mut self,
            input: std::option::Option<crate::model::AccessKeyDetails>,
        ) -> Self {
            self.access_key_details = input;
            self
        }
        /// Appends an item to `s3_bucket_details`.
        ///
        /// To override the contents of this collection use [`set_s3_bucket_details`](Self::set_s3_bucket_details).
        ///
        /// <p>Contains information on the S3 bucket.</p>
        pub fn s3_bucket_details(mut self, input: crate::model::S3BucketDetail) -> Self {
            let mut v = self.s3_bucket_details.unwrap_or_default();
            v.push(input);
            self.s3_bucket_details = Some(v);
            self
        }
        /// <p>Contains information on the S3 bucket.</p>
        pub fn set_s3_bucket_details(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::S3BucketDetail>>,
        ) -> Self {
            self.s3_bucket_details = input;
            self
        }
        /// <p>The information about the EC2 instance associated with the activity that prompted GuardDuty to generate a finding.</p>
        pub fn instance_details(mut self, input: crate::model::InstanceDetails) -> Self {
            self.instance_details = Some(input);
            self
        }
        /// <p>The information about the EC2 instance associated with the activity that prompted GuardDuty to generate a finding.</p>
        pub fn set_instance_details(
            mut self,
            input: std::option::Option<crate::model::InstanceDetails>,
        ) -> Self {
            self.instance_details = input;
            self
        }
        /// <p>Details about the EKS cluster involved in a Kubernetes finding.</p>
        pub fn eks_cluster_details(mut self, input: crate::model::EksClusterDetails) -> Self {
            self.eks_cluster_details = Some(input);
            self
        }
        /// <p>Details about the EKS cluster involved in a Kubernetes finding.</p>
        pub fn set_eks_cluster_details(
            mut self,
            input: std::option::Option<crate::model::EksClusterDetails>,
        ) -> Self {
            self.eks_cluster_details = input;
            self
        }
        /// <p>Details about the Kubernetes user and workload involved in a Kubernetes finding.</p>
        pub fn kubernetes_details(mut self, input: crate::model::KubernetesDetails) -> Self {
            self.kubernetes_details = Some(input);
            self
        }
        /// <p>Details about the Kubernetes user and workload involved in a Kubernetes finding.</p>
        pub fn set_kubernetes_details(
            mut self,
            input: std::option::Option<crate::model::KubernetesDetails>,
        ) -> Self {
            self.kubernetes_details = input;
            self
        }
        /// <p>The type of Amazon Web Services resource.</p>
        pub fn resource_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.resource_type = Some(input.into());
            self
        }
        /// <p>The type of Amazon Web Services resource.</p>
        pub fn set_resource_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.resource_type = input;
            self
        }
        /// <p>Contains list of scanned and skipped EBS volumes with details.</p>
        pub fn ebs_volume_details(mut self, input: crate::model::EbsVolumeDetails) -> Self {
            self.ebs_volume_details = Some(input);
            self
        }
        /// <p>Contains list of scanned and skipped EBS volumes with details.</p>
        pub fn set_ebs_volume_details(
            mut self,
            input: std::option::Option<crate::model::EbsVolumeDetails>,
        ) -> Self {
            self.ebs_volume_details = input;
            self
        }
        /// <p>Contains information about the details of the ECS Cluster.</p>
        pub fn ecs_cluster_details(mut self, input: crate::model::EcsClusterDetails) -> Self {
            self.ecs_cluster_details = Some(input);
            self
        }
        /// <p>Contains information about the details of the ECS Cluster.</p>
        pub fn set_ecs_cluster_details(
            mut self,
            input: std::option::Option<crate::model::EcsClusterDetails>,
        ) -> Self {
            self.ecs_cluster_details = input;
            self
        }
        /// <p>Details of a container.</p>
        pub fn container_details(mut self, input: crate::model::Container) -> Self {
            self.container_details = Some(input);
            self
        }
        /// <p>Details of a container.</p>
        pub fn set_container_details(
            mut self,
            input: std::option::Option<crate::model::Container>,
        ) -> Self {
            self.container_details = input;
            self
        }
        /// Consumes the builder and constructs a [`Resource`](crate::model::Resource).
        pub fn build(self) -> crate::model::Resource {
            crate::model::Resource {
                access_key_details: self.access_key_details,
                s3_bucket_details: self.s3_bucket_details,
                instance_details: self.instance_details,
                eks_cluster_details: self.eks_cluster_details,
                kubernetes_details: self.kubernetes_details,
                resource_type: self.resource_type,
                ebs_volume_details: self.ebs_volume_details,
                ecs_cluster_details: self.ecs_cluster_details,
                container_details: self.container_details,
            }
        }
    }
}
impl Resource {
    /// Creates a new builder-style object to manufacture [`Resource`](crate::model::Resource).
    pub fn builder() -> crate::model::resource::Builder {
        crate::model::resource::Builder::default()
    }
}

/// <p>Details of a container.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Container {
    /// <p>The container runtime (such as, Docker or containerd) used to run the container.</p>
    #[doc(hidden)]
    pub container_runtime: std::option::Option<std::string::String>,
    /// <p>Container ID.</p>
    #[doc(hidden)]
    pub id: std::option::Option<std::string::String>,
    /// <p>Container name.</p>
    #[doc(hidden)]
    pub name: std::option::Option<std::string::String>,
    /// <p>Container image.</p>
    #[doc(hidden)]
    pub image: std::option::Option<std::string::String>,
    /// <p>Part of the image name before the last slash. For example, imagePrefix for public.ecr.aws/amazonlinux/amazonlinux:latest would be public.ecr.aws/amazonlinux. If the image name is relative and does not have a slash, this field is empty.</p>
    #[doc(hidden)]
    pub image_prefix: std::option::Option<std::string::String>,
    /// <p>Container volume mounts.</p>
    #[doc(hidden)]
    pub volume_mounts: std::option::Option<std::vec::Vec<crate::model::VolumeMount>>,
    /// <p>Container security context.</p>
    #[doc(hidden)]
    pub security_context: std::option::Option<crate::model::SecurityContext>,
}
impl Container {
    /// <p>The container runtime (such as, Docker or containerd) used to run the container.</p>
    pub fn container_runtime(&self) -> std::option::Option<&str> {
        self.container_runtime.as_deref()
    }
    /// <p>Container ID.</p>
    pub fn id(&self) -> std::option::Option<&str> {
        self.id.as_deref()
    }
    /// <p>Container name.</p>
    pub fn name(&self) -> std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>Container image.</p>
    pub fn image(&self) -> std::option::Option<&str> {
        self.image.as_deref()
    }
    /// <p>Part of the image name before the last slash. For example, imagePrefix for public.ecr.aws/amazonlinux/amazonlinux:latest would be public.ecr.aws/amazonlinux. If the image name is relative and does not have a slash, this field is empty.</p>
    pub fn image_prefix(&self) -> std::option::Option<&str> {
        self.image_prefix.as_deref()
    }
    /// <p>Container volume mounts.</p>
    pub fn volume_mounts(&self) -> std::option::Option<&[crate::model::VolumeMount]> {
        self.volume_mounts.as_deref()
    }
    /// <p>Container security context.</p>
    pub fn security_context(&self) -> std::option::Option<&crate::model::SecurityContext> {
        self.security_context.as_ref()
    }
}
/// See [`Container`](crate::model::Container).
pub mod container {

    /// A builder for [`Container`](crate::model::Container).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) container_runtime: std::option::Option<std::string::String>,
        pub(crate) id: std::option::Option<std::string::String>,
        pub(crate) name: std::option::Option<std::string::String>,
        pub(crate) image: std::option::Option<std::string::String>,
        pub(crate) image_prefix: std::option::Option<std::string::String>,
        pub(crate) volume_mounts: std::option::Option<std::vec::Vec<crate::model::VolumeMount>>,
        pub(crate) security_context: std::option::Option<crate::model::SecurityContext>,
    }
    impl Builder {
        /// <p>The container runtime (such as, Docker or containerd) used to run the container.</p>
        pub fn container_runtime(mut self, input: impl Into<std::string::String>) -> Self {
            self.container_runtime = Some(input.into());
            self
        }
        /// <p>The container runtime (such as, Docker or containerd) used to run the container.</p>
        pub fn set_container_runtime(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.container_runtime = input;
            self
        }
        /// <p>Container ID.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.id = Some(input.into());
            self
        }
        /// <p>Container ID.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.id = input;
            self
        }
        /// <p>Container name.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.name = Some(input.into());
            self
        }
        /// <p>Container name.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.name = input;
            self
        }
        /// <p>Container image.</p>
        pub fn image(mut self, input: impl Into<std::string::String>) -> Self {
            self.image = Some(input.into());
            self
        }
        /// <p>Container image.</p>
        pub fn set_image(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.image = input;
            self
        }
        /// <p>Part of the image name before the last slash. For example, imagePrefix for public.ecr.aws/amazonlinux/amazonlinux:latest would be public.ecr.aws/amazonlinux. If the image name is relative and does not have a slash, this field is empty.</p>
        pub fn image_prefix(mut self, input: impl Into<std::string::String>) -> Self {
            self.image_prefix = Some(input.into());
            self
        }
        /// <p>Part of the image name before the last slash. For example, imagePrefix for public.ecr.aws/amazonlinux/amazonlinux:latest would be public.ecr.aws/amazonlinux. If the image name is relative and does not have a slash, this field is empty.</p>
        pub fn set_image_prefix(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.image_prefix = input;
            self
        }
        /// Appends an item to `volume_mounts`.
        ///
        /// To override the contents of this collection use [`set_volume_mounts`](Self::set_volume_mounts).
        ///
        /// <p>Container volume mounts.</p>
        pub fn volume_mounts(mut self, input: crate::model::VolumeMount) -> Self {
            let mut v = self.volume_mounts.unwrap_or_default();
            v.push(input);
            self.volume_mounts = Some(v);
            self
        }
        /// <p>Container volume mounts.</p>
        pub fn set_volume_mounts(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::VolumeMount>>,
        ) -> Self {
            self.volume_mounts = input;
            self
        }
        /// <p>Container security context.</p>
        pub fn security_context(mut self, input: crate::model::SecurityContext) -> Self {
            self.security_context = Some(input);
            self
        }
        /// <p>Container security context.</p>
        pub fn set_security_context(
            mut self,
            input: std::option::Option<crate::model::SecurityContext>,
        ) -> Self {
            self.security_context = input;
            self
        }
        /// Consumes the builder and constructs a [`Container`](crate::model::Container).
        pub fn build(self) -> crate::model::Container {
            crate::model::Container {
                container_runtime: self.container_runtime,
                id: self.id,
                name: self.name,
                image: self.image,
                image_prefix: self.image_prefix,
                volume_mounts: self.volume_mounts,
                security_context: self.security_context,
            }
        }
    }
}
impl Container {
    /// Creates a new builder-style object to manufacture [`Container`](crate::model::Container).
    pub fn builder() -> crate::model::container::Builder {
        crate::model::container::Builder::default()
    }
}

/// <p>Container security context.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct SecurityContext {
    /// <p>Whether the container is privileged.</p>
    #[doc(hidden)]
    pub privileged: bool,
}
impl SecurityContext {
    /// <p>Whether the container is privileged.</p>
    pub fn privileged(&self) -> bool {
        self.privileged
    }
}
/// See [`SecurityContext`](crate::model::SecurityContext).
pub mod security_context {

    /// A builder for [`SecurityContext`](crate::model::SecurityContext).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) privileged: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>Whether the container is privileged.</p>
        pub fn privileged(mut self, input: bool) -> Self {
            self.privileged = Some(input);
            self
        }
        /// <p>Whether the container is privileged.</p>
        pub fn set_privileged(mut self, input: std::option::Option<bool>) -> Self {
            self.privileged = input;
            self
        }
        /// Consumes the builder and constructs a [`SecurityContext`](crate::model::SecurityContext).
        pub fn build(self) -> crate::model::SecurityContext {
            crate::model::SecurityContext {
                privileged: self.privileged.unwrap_or_default(),
            }
        }
    }
}
impl SecurityContext {
    /// Creates a new builder-style object to manufacture [`SecurityContext`](crate::model::SecurityContext).
    pub fn builder() -> crate::model::security_context::Builder {
        crate::model::security_context::Builder::default()
    }
}

/// <p>Container volume mount.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct VolumeMount {
    /// <p>Volume mount name.</p>
    #[doc(hidden)]
    pub name: std::option::Option<std::string::String>,
    /// <p>Volume mount path.</p>
    #[doc(hidden)]
    pub mount_path: std::option::Option<std::string::String>,
}
impl VolumeMount {
    /// <p>Volume mount name.</p>
    pub fn name(&self) -> std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>Volume mount path.</p>
    pub fn mount_path(&self) -> std::option::Option<&str> {
        self.mount_path.as_deref()
    }
}
/// See [`VolumeMount`](crate::model::VolumeMount).
pub mod volume_mount {

    /// A builder for [`VolumeMount`](crate::model::VolumeMount).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) name: std::option::Option<std::string::String>,
        pub(crate) mount_path: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>Volume mount name.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.name = Some(input.into());
            self
        }
        /// <p>Volume mount name.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.name = input;
            self
        }
        /// <p>Volume mount path.</p>
        pub fn mount_path(mut self, input: impl Into<std::string::String>) -> Self {
            self.mount_path = Some(input.into());
            self
        }
        /// <p>Volume mount path.</p>
        pub fn set_mount_path(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.mount_path = input;
            self
        }
        /// Consumes the builder and constructs a [`VolumeMount`](crate::model::VolumeMount).
        pub fn build(self) -> crate::model::VolumeMount {
            crate::model::VolumeMount {
                name: self.name,
                mount_path: self.mount_path,
            }
        }
    }
}
impl VolumeMount {
    /// Creates a new builder-style object to manufacture [`VolumeMount`](crate::model::VolumeMount).
    pub fn builder() -> crate::model::volume_mount::Builder {
        crate::model::volume_mount::Builder::default()
    }
}

/// <p>Contains information about the details of the ECS Cluster.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct EcsClusterDetails {
    /// <p>The name of the ECS Cluster.</p>
    #[doc(hidden)]
    pub name: std::option::Option<std::string::String>,
    /// <p>The Amazon Resource Name (ARN) that identifies the cluster.</p>
    #[doc(hidden)]
    pub arn: std::option::Option<std::string::String>,
    /// <p>The status of the ECS cluster.</p>
    #[doc(hidden)]
    pub status: std::option::Option<std::string::String>,
    /// <p>The number of services that are running on the cluster in an ACTIVE state.</p>
    #[doc(hidden)]
    pub active_services_count: i32,
    /// <p>The number of container instances registered into the cluster.</p>
    #[doc(hidden)]
    pub registered_container_instances_count: i32,
    /// <p>The number of tasks in the cluster that are in the RUNNING state.</p>
    #[doc(hidden)]
    pub running_tasks_count: i32,
    /// <p>The tags of the ECS Cluster.</p>
    #[doc(hidden)]
    pub tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
    /// <p>Contains information about the details of the ECS Task.</p>
    #[doc(hidden)]
    pub task_details: std::option::Option<crate::model::EcsTaskDetails>,
}
impl EcsClusterDetails {
    /// <p>The name of the ECS Cluster.</p>
    pub fn name(&self) -> std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>The Amazon Resource Name (ARN) that identifies the cluster.</p>
    pub fn arn(&self) -> std::option::Option<&str> {
        self.arn.as_deref()
    }
    /// <p>The status of the ECS cluster.</p>
    pub fn status(&self) -> std::option::Option<&str> {
        self.status.as_deref()
    }
    /// <p>The number of services that are running on the cluster in an ACTIVE state.</p>
    pub fn active_services_count(&self) -> i32 {
        self.active_services_count
    }
    /// <p>The number of container instances registered into the cluster.</p>
    pub fn registered_container_instances_count(&self) -> i32 {
        self.registered_container_instances_count
    }
    /// <p>The number of tasks in the cluster that are in the RUNNING state.</p>
    pub fn running_tasks_count(&self) -> i32 {
        self.running_tasks_count
    }
    /// <p>The tags of the ECS Cluster.</p>
    pub fn tags(&self) -> std::option::Option<&[crate::model::Tag]> {
        self.tags.as_deref()
    }
    /// <p>Contains information about the details of the ECS Task.</p>
    pub fn task_details(&self) -> std::option::Option<&crate::model::EcsTaskDetails> {
        self.task_details.as_ref()
    }
}
/// See [`EcsClusterDetails`](crate::model::EcsClusterDetails).
pub mod ecs_cluster_details {

    /// A builder for [`EcsClusterDetails`](crate::model::EcsClusterDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) name: std::option::Option<std::string::String>,
        pub(crate) arn: std::option::Option<std::string::String>,
        pub(crate) status: std::option::Option<std::string::String>,
        pub(crate) active_services_count: std::option::Option<i32>,
        pub(crate) registered_container_instances_count: std::option::Option<i32>,
        pub(crate) running_tasks_count: std::option::Option<i32>,
        pub(crate) tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        pub(crate) task_details: std::option::Option<crate::model::EcsTaskDetails>,
    }
    impl Builder {
        /// <p>The name of the ECS Cluster.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.name = Some(input.into());
            self
        }
        /// <p>The name of the ECS Cluster.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.name = input;
            self
        }
        /// <p>The Amazon Resource Name (ARN) that identifies the cluster.</p>
        pub fn arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.arn = Some(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) that identifies the cluster.</p>
        pub fn set_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.arn = input;
            self
        }
        /// <p>The status of the ECS cluster.</p>
        pub fn status(mut self, input: impl Into<std::string::String>) -> Self {
            self.status = Some(input.into());
            self
        }
        /// <p>The status of the ECS cluster.</p>
        pub fn set_status(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.status = input;
            self
        }
        /// <p>The number of services that are running on the cluster in an ACTIVE state.</p>
        pub fn active_services_count(mut self, input: i32) -> Self {
            self.active_services_count = Some(input);
            self
        }
        /// <p>The number of services that are running on the cluster in an ACTIVE state.</p>
        pub fn set_active_services_count(mut self, input: std::option::Option<i32>) -> Self {
            self.active_services_count = input;
            self
        }
        /// <p>The number of container instances registered into the cluster.</p>
        pub fn registered_container_instances_count(mut self, input: i32) -> Self {
            self.registered_container_instances_count = Some(input);
            self
        }
        /// <p>The number of container instances registered into the cluster.</p>
        pub fn set_registered_container_instances_count(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.registered_container_instances_count = input;
            self
        }
        /// <p>The number of tasks in the cluster that are in the RUNNING state.</p>
        pub fn running_tasks_count(mut self, input: i32) -> Self {
            self.running_tasks_count = Some(input);
            self
        }
        /// <p>The number of tasks in the cluster that are in the RUNNING state.</p>
        pub fn set_running_tasks_count(mut self, input: std::option::Option<i32>) -> Self {
            self.running_tasks_count = input;
            self
        }
        /// Appends an item to `tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>The tags of the ECS Cluster.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            let mut v = self.tags.unwrap_or_default();
            v.push(input);
            self.tags = Some(v);
            self
        }
        /// <p>The tags of the ECS Cluster.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        ) -> Self {
            self.tags = input;
            self
        }
        /// <p>Contains information about the details of the ECS Task.</p>
        pub fn task_details(mut self, input: crate::model::EcsTaskDetails) -> Self {
            self.task_details = Some(input);
            self
        }
        /// <p>Contains information about the details of the ECS Task.</p>
        pub fn set_task_details(
            mut self,
            input: std::option::Option<crate::model::EcsTaskDetails>,
        ) -> Self {
            self.task_details = input;
            self
        }
        /// Consumes the builder and constructs a [`EcsClusterDetails`](crate::model::EcsClusterDetails).
        pub fn build(self) -> crate::model::EcsClusterDetails {
            crate::model::EcsClusterDetails {
                name: self.name,
                arn: self.arn,
                status: self.status,
                active_services_count: self.active_services_count.unwrap_or_default(),
                registered_container_instances_count: self
                    .registered_container_instances_count
                    .unwrap_or_default(),
                running_tasks_count: self.running_tasks_count.unwrap_or_default(),
                tags: self.tags,
                task_details: self.task_details,
            }
        }
    }
}
impl EcsClusterDetails {
    /// Creates a new builder-style object to manufacture [`EcsClusterDetails`](crate::model::EcsClusterDetails).
    pub fn builder() -> crate::model::ecs_cluster_details::Builder {
        crate::model::ecs_cluster_details::Builder::default()
    }
}

/// <p>Contains information about the task in an ECS cluster.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct EcsTaskDetails {
    /// <p>The Amazon Resource Name (ARN) of the task.</p>
    #[doc(hidden)]
    pub arn: std::option::Option<std::string::String>,
    /// <p>The ARN of the task definition that creates the task.</p>
    #[doc(hidden)]
    pub definition_arn: std::option::Option<std::string::String>,
    /// <p>The version counter for the task.</p>
    #[doc(hidden)]
    pub version: std::option::Option<std::string::String>,
    /// <p>The Unix timestamp for the time when the task was created.</p>
    #[doc(hidden)]
    pub task_created_at: std::option::Option<aws_smithy_types::DateTime>,
    /// <p>The Unix timestamp for the time when the task started.</p>
    #[doc(hidden)]
    pub started_at: std::option::Option<aws_smithy_types::DateTime>,
    /// <p>Contains the tag specified when a task is started.</p>
    #[doc(hidden)]
    pub started_by: std::option::Option<std::string::String>,
    /// <p>The tags of the ECS Task.</p>
    #[doc(hidden)]
    pub tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
    /// <p>The list of data volume definitions for the task.</p>
    #[doc(hidden)]
    pub volumes: std::option::Option<std::vec::Vec<crate::model::Volume>>,
    /// <p>The containers that's associated with the task.</p>
    #[doc(hidden)]
    pub containers: std::option::Option<std::vec::Vec<crate::model::Container>>,
    /// <p>The name of the task group that's associated with the task.</p>
    #[doc(hidden)]
    pub group: std::option::Option<std::string::String>,
}
impl EcsTaskDetails {
    /// <p>The Amazon Resource Name (ARN) of the task.</p>
    pub fn arn(&self) -> std::option::Option<&str> {
        self.arn.as_deref()
    }
    /// <p>The ARN of the task definition that creates the task.</p>
    pub fn definition_arn(&self) -> std::option::Option<&str> {
        self.definition_arn.as_deref()
    }
    /// <p>The version counter for the task.</p>
    pub fn version(&self) -> std::option::Option<&str> {
        self.version.as_deref()
    }
    /// <p>The Unix timestamp for the time when the task was created.</p>
    pub fn task_created_at(&self) -> std::option::Option<&aws_smithy_types::DateTime> {
        self.task_created_at.as_ref()
    }
    /// <p>The Unix timestamp for the time when the task started.</p>
    pub fn started_at(&self) -> std::option::Option<&aws_smithy_types::DateTime> {
        self.started_at.as_ref()
    }
    /// <p>Contains the tag specified when a task is started.</p>
    pub fn started_by(&self) -> std::option::Option<&str> {
        self.started_by.as_deref()
    }
    /// <p>The tags of the ECS Task.</p>
    pub fn tags(&self) -> std::option::Option<&[crate::model::Tag]> {
        self.tags.as_deref()
    }
    /// <p>The list of data volume definitions for the task.</p>
    pub fn volumes(&self) -> std::option::Option<&[crate::model::Volume]> {
        self.volumes.as_deref()
    }
    /// <p>The containers that's associated with the task.</p>
    pub fn containers(&self) -> std::option::Option<&[crate::model::Container]> {
        self.containers.as_deref()
    }
    /// <p>The name of the task group that's associated with the task.</p>
    pub fn group(&self) -> std::option::Option<&str> {
        self.group.as_deref()
    }
}
/// See [`EcsTaskDetails`](crate::model::EcsTaskDetails).
pub mod ecs_task_details {

    /// A builder for [`EcsTaskDetails`](crate::model::EcsTaskDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) arn: std::option::Option<std::string::String>,
        pub(crate) definition_arn: std::option::Option<std::string::String>,
        pub(crate) version: std::option::Option<std::string::String>,
        pub(crate) task_created_at: std::option::Option<aws_smithy_types::DateTime>,
        pub(crate) started_at: std::option::Option<aws_smithy_types::DateTime>,
        pub(crate) started_by: std::option::Option<std::string::String>,
        pub(crate) tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        pub(crate) volumes: std::option::Option<std::vec::Vec<crate::model::Volume>>,
        pub(crate) containers: std::option::Option<std::vec::Vec<crate::model::Container>>,
        pub(crate) group: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The Amazon Resource Name (ARN) of the task.</p>
        pub fn arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.arn = Some(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the task.</p>
        pub fn set_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.arn = input;
            self
        }
        /// <p>The ARN of the task definition that creates the task.</p>
        pub fn definition_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.definition_arn = Some(input.into());
            self
        }
        /// <p>The ARN of the task definition that creates the task.</p>
        pub fn set_definition_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.definition_arn = input;
            self
        }
        /// <p>The version counter for the task.</p>
        pub fn version(mut self, input: impl Into<std::string::String>) -> Self {
            self.version = Some(input.into());
            self
        }
        /// <p>The version counter for the task.</p>
        pub fn set_version(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.version = input;
            self
        }
        /// <p>The Unix timestamp for the time when the task was created.</p>
        pub fn task_created_at(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.task_created_at = Some(input);
            self
        }
        /// <p>The Unix timestamp for the time when the task was created.</p>
        pub fn set_task_created_at(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.task_created_at = input;
            self
        }
        /// <p>The Unix timestamp for the time when the task started.</p>
        pub fn started_at(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.started_at = Some(input);
            self
        }
        /// <p>The Unix timestamp for the time when the task started.</p>
        pub fn set_started_at(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.started_at = input;
            self
        }
        /// <p>Contains the tag specified when a task is started.</p>
        pub fn started_by(mut self, input: impl Into<std::string::String>) -> Self {
            self.started_by = Some(input.into());
            self
        }
        /// <p>Contains the tag specified when a task is started.</p>
        pub fn set_started_by(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.started_by = input;
            self
        }
        /// Appends an item to `tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>The tags of the ECS Task.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            let mut v = self.tags.unwrap_or_default();
            v.push(input);
            self.tags = Some(v);
            self
        }
        /// <p>The tags of the ECS Task.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        ) -> Self {
            self.tags = input;
            self
        }
        /// Appends an item to `volumes`.
        ///
        /// To override the contents of this collection use [`set_volumes`](Self::set_volumes).
        ///
        /// <p>The list of data volume definitions for the task.</p>
        pub fn volumes(mut self, input: crate::model::Volume) -> Self {
            let mut v = self.volumes.unwrap_or_default();
            v.push(input);
            self.volumes = Some(v);
            self
        }
        /// <p>The list of data volume definitions for the task.</p>
        pub fn set_volumes(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Volume>>,
        ) -> Self {
            self.volumes = input;
            self
        }
        /// Appends an item to `containers`.
        ///
        /// To override the contents of this collection use [`set_containers`](Self::set_containers).
        ///
        /// <p>The containers that's associated with the task.</p>
        pub fn containers(mut self, input: crate::model::Container) -> Self {
            let mut v = self.containers.unwrap_or_default();
            v.push(input);
            self.containers = Some(v);
            self
        }
        /// <p>The containers that's associated with the task.</p>
        pub fn set_containers(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Container>>,
        ) -> Self {
            self.containers = input;
            self
        }
        /// <p>The name of the task group that's associated with the task.</p>
        pub fn group(mut self, input: impl Into<std::string::String>) -> Self {
            self.group = Some(input.into());
            self
        }
        /// <p>The name of the task group that's associated with the task.</p>
        pub fn set_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.group = input;
            self
        }
        /// Consumes the builder and constructs a [`EcsTaskDetails`](crate::model::EcsTaskDetails).
        pub fn build(self) -> crate::model::EcsTaskDetails {
            crate::model::EcsTaskDetails {
                arn: self.arn,
                definition_arn: self.definition_arn,
                version: self.version,
                task_created_at: self.task_created_at,
                started_at: self.started_at,
                started_by: self.started_by,
                tags: self.tags,
                volumes: self.volumes,
                containers: self.containers,
                group: self.group,
            }
        }
    }
}
impl EcsTaskDetails {
    /// Creates a new builder-style object to manufacture [`EcsTaskDetails`](crate::model::EcsTaskDetails).
    pub fn builder() -> crate::model::ecs_task_details::Builder {
        crate::model::ecs_task_details::Builder::default()
    }
}

/// <p>Volume used by the Kubernetes workload.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Volume {
    /// <p>Volume name.</p>
    #[doc(hidden)]
    pub name: std::option::Option<std::string::String>,
    /// <p>Represents a pre-existing file or directory on the host machine that the volume maps to.</p>
    #[doc(hidden)]
    pub host_path: std::option::Option<crate::model::HostPath>,
}
impl Volume {
    /// <p>Volume name.</p>
    pub fn name(&self) -> std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>Represents a pre-existing file or directory on the host machine that the volume maps to.</p>
    pub fn host_path(&self) -> std::option::Option<&crate::model::HostPath> {
        self.host_path.as_ref()
    }
}
/// See [`Volume`](crate::model::Volume).
pub mod volume {

    /// A builder for [`Volume`](crate::model::Volume).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) name: std::option::Option<std::string::String>,
        pub(crate) host_path: std::option::Option<crate::model::HostPath>,
    }
    impl Builder {
        /// <p>Volume name.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.name = Some(input.into());
            self
        }
        /// <p>Volume name.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.name = input;
            self
        }
        /// <p>Represents a pre-existing file or directory on the host machine that the volume maps to.</p>
        pub fn host_path(mut self, input: crate::model::HostPath) -> Self {
            self.host_path = Some(input);
            self
        }
        /// <p>Represents a pre-existing file or directory on the host machine that the volume maps to.</p>
        pub fn set_host_path(mut self, input: std::option::Option<crate::model::HostPath>) -> Self {
            self.host_path = input;
            self
        }
        /// Consumes the builder and constructs a [`Volume`](crate::model::Volume).
        pub fn build(self) -> crate::model::Volume {
            crate::model::Volume {
                name: self.name,
                host_path: self.host_path,
            }
        }
    }
}
impl Volume {
    /// Creates a new builder-style object to manufacture [`Volume`](crate::model::Volume).
    pub fn builder() -> crate::model::volume::Builder {
        crate::model::volume::Builder::default()
    }
}

/// <p>Represents a pre-existing file or directory on the host machine that the volume maps to.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct HostPath {
    /// <p>Path of the file or directory on the host that the volume maps to.</p>
    #[doc(hidden)]
    pub path: std::option::Option<std::string::String>,
}
impl HostPath {
    /// <p>Path of the file or directory on the host that the volume maps to.</p>
    pub fn path(&self) -> std::option::Option<&str> {
        self.path.as_deref()
    }
}
/// See [`HostPath`](crate::model::HostPath).
pub mod host_path {

    /// A builder for [`HostPath`](crate::model::HostPath).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) path: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>Path of the file or directory on the host that the volume maps to.</p>
        pub fn path(mut self, input: impl Into<std::string::String>) -> Self {
            self.path = Some(input.into());
            self
        }
        /// <p>Path of the file or directory on the host that the volume maps to.</p>
        pub fn set_path(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.path = input;
            self
        }
        /// Consumes the builder and constructs a [`HostPath`](crate::model::HostPath).
        pub fn build(self) -> crate::model::HostPath {
            crate::model::HostPath { path: self.path }
        }
    }
}
impl HostPath {
    /// Creates a new builder-style object to manufacture [`HostPath`](crate::model::HostPath).
    pub fn builder() -> crate::model::host_path::Builder {
        crate::model::host_path::Builder::default()
    }
}

/// <p>Contains information about a tag associated with the EC2 instance.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Tag {
    /// <p>The EC2 instance tag key.</p>
    #[doc(hidden)]
    pub key: std::option::Option<std::string::String>,
    /// <p>The EC2 instance tag value.</p>
    #[doc(hidden)]
    pub value: std::option::Option<std::string::String>,
}
impl Tag {
    /// <p>The EC2 instance tag key.</p>
    pub fn key(&self) -> std::option::Option<&str> {
        self.key.as_deref()
    }
    /// <p>The EC2 instance tag value.</p>
    pub fn value(&self) -> std::option::Option<&str> {
        self.value.as_deref()
    }
}
/// See [`Tag`](crate::model::Tag).
pub mod tag {

    /// A builder for [`Tag`](crate::model::Tag).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) key: std::option::Option<std::string::String>,
        pub(crate) value: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The EC2 instance tag key.</p>
        pub fn key(mut self, input: impl Into<std::string::String>) -> Self {
            self.key = Some(input.into());
            self
        }
        /// <p>The EC2 instance tag key.</p>
        pub fn set_key(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.key = input;
            self
        }
        /// <p>The EC2 instance tag value.</p>
        pub fn value(mut self, input: impl Into<std::string::String>) -> Self {
            self.value = Some(input.into());
            self
        }
        /// <p>The EC2 instance tag value.</p>
        pub fn set_value(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.value = input;
            self
        }
        /// Consumes the builder and constructs a [`Tag`](crate::model::Tag).
        pub fn build(self) -> crate::model::Tag {
            crate::model::Tag {
                key: self.key,
                value: self.value,
            }
        }
    }
}
impl Tag {
    /// Creates a new builder-style object to manufacture [`Tag`](crate::model::Tag).
    pub fn builder() -> crate::model::tag::Builder {
        crate::model::tag::Builder::default()
    }
}

/// <p>Contains list of scanned and skipped EBS volumes with details.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct EbsVolumeDetails {
    /// <p>List of EBS volumes that were scanned.</p>
    #[doc(hidden)]
    pub scanned_volume_details: std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
    /// <p>List of EBS volumes that were skipped from the malware scan.</p>
    #[doc(hidden)]
    pub skipped_volume_details: std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
}
impl EbsVolumeDetails {
    /// <p>List of EBS volumes that were scanned.</p>
    pub fn scanned_volume_details(&self) -> std::option::Option<&[crate::model::VolumeDetail]> {
        self.scanned_volume_details.as_deref()
    }
    /// <p>List of EBS volumes that were skipped from the malware scan.</p>
    pub fn skipped_volume_details(&self) -> std::option::Option<&[crate::model::VolumeDetail]> {
        self.skipped_volume_details.as_deref()
    }
}
/// See [`EbsVolumeDetails`](crate::model::EbsVolumeDetails).
pub mod ebs_volume_details {

    /// A builder for [`EbsVolumeDetails`](crate::model::EbsVolumeDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scanned_volume_details:
            std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
        pub(crate) skipped_volume_details:
            std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
    }
    impl Builder {
        /// Appends an item to `scanned_volume_details`.
        ///
        /// To override the contents of this collection use [`set_scanned_volume_details`](Self::set_scanned_volume_details).
        ///
        /// <p>List of EBS volumes that were scanned.</p>
        pub fn scanned_volume_details(mut self, input: crate::model::VolumeDetail) -> Self {
            let mut v = self.scanned_volume_details.unwrap_or_default();
            v.push(input);
            self.scanned_volume_details = Some(v);
            self
        }
        /// <p>List of EBS volumes that were scanned.</p>
        pub fn set_scanned_volume_details(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
        ) -> Self {
            self.scanned_volume_details = input;
            self
        }
        /// Appends an item to `skipped_volume_details`.
        ///
        /// To override the contents of this collection use [`set_skipped_volume_details`](Self::set_skipped_volume_details).
        ///
        /// <p>List of EBS volumes that were skipped from the malware scan.</p>
        pub fn skipped_volume_details(mut self, input: crate::model::VolumeDetail) -> Self {
            let mut v = self.skipped_volume_details.unwrap_or_default();
            v.push(input);
            self.skipped_volume_details = Some(v);
            self
        }
        /// <p>List of EBS volumes that were skipped from the malware scan.</p>
        pub fn set_skipped_volume_details(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
        ) -> Self {
            self.skipped_volume_details = input;
            self
        }
        /// Consumes the builder and constructs a [`EbsVolumeDetails`](crate::model::EbsVolumeDetails).
        pub fn build(self) -> crate::model::EbsVolumeDetails {
            crate::model::EbsVolumeDetails {
                scanned_volume_details: self.scanned_volume_details,
                skipped_volume_details: self.skipped_volume_details,
            }
        }
    }
}
impl EbsVolumeDetails {
    /// Creates a new builder-style object to manufacture [`EbsVolumeDetails`](crate::model::EbsVolumeDetails).
    pub fn builder() -> crate::model::ebs_volume_details::Builder {
        crate::model::ebs_volume_details::Builder::default()
    }
}

/// <p>Contains EBS volume details.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct VolumeDetail {
    /// <p>EBS volume Arn information.</p>
    #[doc(hidden)]
    pub volume_arn: std::option::Option<std::string::String>,
    /// <p>The EBS volume type.</p>
    #[doc(hidden)]
    pub volume_type: std::option::Option<std::string::String>,
    /// <p>The device name for the EBS volume.</p>
    #[doc(hidden)]
    pub device_name: std::option::Option<std::string::String>,
    /// <p>EBS volume size in GB.</p>
    #[doc(hidden)]
    pub volume_size_in_gb: i32,
    /// <p>EBS volume encryption type.</p>
    #[doc(hidden)]
    pub encryption_type: std::option::Option<std::string::String>,
    /// <p>Snapshot Arn of the EBS volume.</p>
    #[doc(hidden)]
    pub snapshot_arn: std::option::Option<std::string::String>,
    /// <p>KMS key Arn used to encrypt the EBS volume.</p>
    #[doc(hidden)]
    pub kms_key_arn: std::option::Option<std::string::String>,
}
impl VolumeDetail {
    /// <p>EBS volume Arn information.</p>
    pub fn volume_arn(&self) -> std::option::Option<&str> {
        self.volume_arn.as_deref()
    }
    /// <p>The EBS volume type.</p>
    pub fn volume_type(&self) -> std::option::Option<&str> {
        self.volume_type.as_deref()
    }
    /// <p>The device name for the EBS volume.</p>
    pub fn device_name(&self) -> std::option::Option<&str> {
        self.device_name.as_deref()
    }
    /// <p>EBS volume size in GB.</p>
    pub fn volume_size_in_gb(&self) -> i32 {
        self.volume_size_in_gb
    }
    /// <p>EBS volume encryption type.</p>
    pub fn encryption_type(&self) -> std::option::Option<&str> {
        self.encryption_type.as_deref()
    }
    /// <p>Snapshot Arn of the EBS volume.</p>
    pub fn snapshot_arn(&self) -> std::option::Option<&str> {
        self.snapshot_arn.as_deref()
    }
    /// <p>KMS key Arn used to encrypt the EBS volume.</p>
    pub fn kms_key_arn(&self) -> std::option::Option<&str> {
        self.kms_key_arn.as_deref()
    }
}
/// See [`VolumeDetail`](crate::model::VolumeDetail).
pub mod volume_detail {

    /// A builder for [`VolumeDetail`](crate::model::VolumeDetail).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) volume_arn: std::option::Option<std::string::String>,
        pub(crate) volume_type: std::option::Option<std::string::String>,
        pub(crate) device_name: std::option::Option<std::string::String>,
        pub(crate) volume_size_in_gb: std::option::Option<i32>,
        pub(crate) encryption_type: std::option::Option<std::string::String>,
        pub(crate) snapshot_arn: std::option::Option<std::string::String>,
        pub(crate) kms_key_arn: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>EBS volume Arn information.</p>
        pub fn volume_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.volume_arn = Some(input.into());
            self
        }
        /// <p>EBS volume Arn information.</p>
        pub fn set_volume_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.volume_arn = input;
            self
        }
        /// <p>The EBS volume type.</p>
        pub fn volume_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.volume_type = Some(input.into());
            self
        }
        /// <p>The EBS volume type.</p>
        pub fn set_volume_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.volume_type = input;
            self
        }
        /// <p>The device name for the EBS volume.</p>
        pub fn device_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.device_name = Some(input.into());
            self
        }
        /// <p>The device name for the EBS volume.</p>
        pub fn set_device_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.device_name = input;
            self
        }
        /// <p>EBS volume size in GB.</p>
        pub fn volume_size_in_gb(mut self, input: i32) -> Self {
            self.volume_size_in_gb = Some(input);
            self
        }
        /// <p>EBS volume size in GB.</p>
        pub fn set_volume_size_in_gb(mut self, input: std::option::Option<i32>) -> Self {
            self.volume_size_in_gb = input;
            self
        }
        /// <p>EBS volume encryption type.</p>
        pub fn encryption_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.encryption_type = Some(input.into());
            self
        }
        /// <p>EBS volume encryption type.</p>
        pub fn set_encryption_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.encryption_type = input;
            self
        }
        /// <p>Snapshot Arn of the EBS volume.</p>
        pub fn snapshot_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.snapshot_arn = Some(input.into());
            self
        }
        /// <p>Snapshot Arn of the EBS volume.</p>
        pub fn set_snapshot_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.snapshot_arn = input;
            self
        }
        /// <p>KMS key Arn used to encrypt the EBS volume.</p>
        pub fn kms_key_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.kms_key_arn = Some(input.into());
            self
        }
        /// <p>KMS key Arn used to encrypt the EBS volume.</p>
        pub fn set_kms_key_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.kms_key_arn = input;
            self
        }
        /// Consumes the builder and constructs a [`VolumeDetail`](crate::model::VolumeDetail).
        pub fn build(self) -> crate::model::VolumeDetail {
            crate::model::VolumeDetail {
                volume_arn: self.volume_arn,
                volume_type: self.volume_type,
                device_name: self.device_name,
                volume_size_in_gb: self.volume_size_in_gb.unwrap_or_default(),
                encryption_type: self.encryption_type,
                snapshot_arn: self.snapshot_arn,
                kms_key_arn: self.kms_key_arn,
            }
        }
    }
}
impl VolumeDetail {
    /// Creates a new builder-style object to manufacture [`VolumeDetail`](crate::model::VolumeDetail).
    pub fn builder() -> crate::model::volume_detail::Builder {
        crate::model::volume_detail::Builder::default()
    }
}

/// <p>Details about Kubernetes resources such as a Kubernetes user or workload resource involved in a Kubernetes finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesDetails {
    /// <p>Details about the Kubernetes user involved in a Kubernetes finding.</p>
    #[doc(hidden)]
    pub kubernetes_user_details: std::option::Option<crate::model::KubernetesUserDetails>,
    /// <p>Details about the Kubernetes workload involved in a Kubernetes finding.</p>
    #[doc(hidden)]
    pub kubernetes_workload_details: std::option::Option<crate::model::KubernetesWorkloadDetails>,
}
impl KubernetesDetails {
    /// <p>Details about the Kubernetes user involved in a Kubernetes finding.</p>
    pub fn kubernetes_user_details(
        &self,
    ) -> std::option::Option<&crate::model::KubernetesUserDetails> {
        self.kubernetes_user_details.as_ref()
    }
    /// <p>Details about the Kubernetes workload involved in a Kubernetes finding.</p>
    pub fn kubernetes_workload_details(
        &self,
    ) -> std::option::Option<&crate::model::KubernetesWorkloadDetails> {
        self.kubernetes_workload_details.as_ref()
    }
}
/// See [`KubernetesDetails`](crate::model::KubernetesDetails).
pub mod kubernetes_details {

    /// A builder for [`KubernetesDetails`](crate::model::KubernetesDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) kubernetes_user_details:
            std::option::Option<crate::model::KubernetesUserDetails>,
        pub(crate) kubernetes_workload_details:
            std::option::Option<crate::model::KubernetesWorkloadDetails>,
    }
    impl Builder {
        /// <p>Details about the Kubernetes user involved in a Kubernetes finding.</p>
        pub fn kubernetes_user_details(
            mut self,
            input: crate::model::KubernetesUserDetails,
        ) -> Self {
            self.kubernetes_user_details = Some(input);
            self
        }
        /// <p>Details about the Kubernetes user involved in a Kubernetes finding.</p>
        pub fn set_kubernetes_user_details(
            mut self,
            input: std::option::Option<crate::model::KubernetesUserDetails>,
        ) -> Self {
            self.kubernetes_user_details = input;
            self
        }
        /// <p>Details about the Kubernetes workload involved in a Kubernetes finding.</p>
        pub fn kubernetes_workload_details(
            mut self,
            input: crate::model::KubernetesWorkloadDetails,
        ) -> Self {
            self.kubernetes_workload_details = Some(input);
            self
        }
        /// <p>Details about the Kubernetes workload involved in a Kubernetes finding.</p>
        pub fn set_kubernetes_workload_details(
            mut self,
            input: std::option::Option<crate::model::KubernetesWorkloadDetails>,
        ) -> Self {
            self.kubernetes_workload_details = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesDetails`](crate::model::KubernetesDetails).
        pub fn build(self) -> crate::model::KubernetesDetails {
            crate::model::KubernetesDetails {
                kubernetes_user_details: self.kubernetes_user_details,
                kubernetes_workload_details: self.kubernetes_workload_details,
            }
        }
    }
}
impl KubernetesDetails {
    /// Creates a new builder-style object to manufacture [`KubernetesDetails`](crate::model::KubernetesDetails).
    pub fn builder() -> crate::model::kubernetes_details::Builder {
        crate::model::kubernetes_details::Builder::default()
    }
}

/// <p>Details about the Kubernetes workload involved in a Kubernetes finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesWorkloadDetails {
    /// <p>Kubernetes workload name.</p>
    #[doc(hidden)]
    pub name: std::option::Option<std::string::String>,
    /// <p>Kubernetes workload type (e.g. Pod, Deployment, etc.).</p>
    #[doc(hidden)]
    pub r#type: std::option::Option<std::string::String>,
    /// <p>Kubernetes workload ID.</p>
    #[doc(hidden)]
    pub uid: std::option::Option<std::string::String>,
    /// <p>Kubernetes namespace that the workload is part of.</p>
    #[doc(hidden)]
    pub namespace: std::option::Option<std::string::String>,
    /// <p>Whether the hostNetwork flag is enabled for the pods included in the workload.</p>
    #[doc(hidden)]
    pub host_network: bool,
    /// <p>Containers running as part of the Kubernetes workload.</p>
    #[doc(hidden)]
    pub containers: std::option::Option<std::vec::Vec<crate::model::Container>>,
    /// <p>Volumes used by the Kubernetes workload.</p>
    #[doc(hidden)]
    pub volumes: std::option::Option<std::vec::Vec<crate::model::Volume>>,
}
impl KubernetesWorkloadDetails {
    /// <p>Kubernetes workload name.</p>
    pub fn name(&self) -> std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>Kubernetes workload type (e.g. Pod, Deployment, etc.).</p>
    pub fn r#type(&self) -> std::option::Option<&str> {
        self.r#type.as_deref()
    }
    /// <p>Kubernetes workload ID.</p>
    pub fn uid(&self) -> std::option::Option<&str> {
        self.uid.as_deref()
    }
    /// <p>Kubernetes namespace that the workload is part of.</p>
    pub fn namespace(&self) -> std::option::Option<&str> {
        self.namespace.as_deref()
    }
    /// <p>Whether the hostNetwork flag is enabled for the pods included in the workload.</p>
    pub fn host_network(&self) -> bool {
        self.host_network
    }
    /// <p>Containers running as part of the Kubernetes workload.</p>
    pub fn containers(&self) -> std::option::Option<&[crate::model::Container]> {
        self.containers.as_deref()
    }
    /// <p>Volumes used by the Kubernetes workload.</p>
    pub fn volumes(&self) -> std::option::Option<&[crate::model::Volume]> {
        self.volumes.as_deref()
    }
}
/// See [`KubernetesWorkloadDetails`](crate::model::KubernetesWorkloadDetails).
pub mod kubernetes_workload_details {

    /// A builder for [`KubernetesWorkloadDetails`](crate::model::KubernetesWorkloadDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) name: std::option::Option<std::string::String>,
        pub(crate) r#type: std::option::Option<std::string::String>,
        pub(crate) uid: std::option::Option<std::string::String>,
        pub(crate) namespace: std::option::Option<std::string::String>,
        pub(crate) host_network: std::option::Option<bool>,
        pub(crate) containers: std::option::Option<std::vec::Vec<crate::model::Container>>,
        pub(crate) volumes: std::option::Option<std::vec::Vec<crate::model::Volume>>,
    }
    impl Builder {
        /// <p>Kubernetes workload name.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.name = Some(input.into());
            self
        }
        /// <p>Kubernetes workload name.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.name = input;
            self
        }
        /// <p>Kubernetes workload type (e.g. Pod, Deployment, etc.).</p>
        pub fn r#type(mut self, input: impl Into<std::string::String>) -> Self {
            self.r#type = Some(input.into());
            self
        }
        /// <p>Kubernetes workload type (e.g. Pod, Deployment, etc.).</p>
        pub fn set_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.r#type = input;
            self
        }
        /// <p>Kubernetes workload ID.</p>
        pub fn uid(mut self, input: impl Into<std::string::String>) -> Self {
            self.uid = Some(input.into());
            self
        }
        /// <p>Kubernetes workload ID.</p>
        pub fn set_uid(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.uid = input;
            self
        }
        /// <p>Kubernetes namespace that the workload is part of.</p>
        pub fn namespace(mut self, input: impl Into<std::string::String>) -> Self {
            self.namespace = Some(input.into());
            self
        }
        /// <p>Kubernetes namespace that the workload is part of.</p>
        pub fn set_namespace(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.namespace = input;
            self
        }
        /// <p>Whether the hostNetwork flag is enabled for the pods included in the workload.</p>
        pub fn host_network(mut self, input: bool) -> Self {
            self.host_network = Some(input);
            self
        }
        /// <p>Whether the hostNetwork flag is enabled for the pods included in the workload.</p>
        pub fn set_host_network(mut self, input: std::option::Option<bool>) -> Self {
            self.host_network = input;
            self
        }
        /// Appends an item to `containers`.
        ///
        /// To override the contents of this collection use [`set_containers`](Self::set_containers).
        ///
        /// <p>Containers running as part of the Kubernetes workload.</p>
        pub fn containers(mut self, input: crate::model::Container) -> Self {
            let mut v = self.containers.unwrap_or_default();
            v.push(input);
            self.containers = Some(v);
            self
        }
        /// <p>Containers running as part of the Kubernetes workload.</p>
        pub fn set_containers(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Container>>,
        ) -> Self {
            self.containers = input;
            self
        }
        /// Appends an item to `volumes`.
        ///
        /// To override the contents of this collection use [`set_volumes`](Self::set_volumes).
        ///
        /// <p>Volumes used by the Kubernetes workload.</p>
        pub fn volumes(mut self, input: crate::model::Volume) -> Self {
            let mut v = self.volumes.unwrap_or_default();
            v.push(input);
            self.volumes = Some(v);
            self
        }
        /// <p>Volumes used by the Kubernetes workload.</p>
        pub fn set_volumes(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Volume>>,
        ) -> Self {
            self.volumes = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesWorkloadDetails`](crate::model::KubernetesWorkloadDetails).
        pub fn build(self) -> crate::model::KubernetesWorkloadDetails {
            crate::model::KubernetesWorkloadDetails {
                name: self.name,
                r#type: self.r#type,
                uid: self.uid,
                namespace: self.namespace,
                host_network: self.host_network.unwrap_or_default(),
                containers: self.containers,
                volumes: self.volumes,
            }
        }
    }
}
impl KubernetesWorkloadDetails {
    /// Creates a new builder-style object to manufacture [`KubernetesWorkloadDetails`](crate::model::KubernetesWorkloadDetails).
    pub fn builder() -> crate::model::kubernetes_workload_details::Builder {
        crate::model::kubernetes_workload_details::Builder::default()
    }
}

/// <p>Details about the Kubernetes user involved in a Kubernetes finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct KubernetesUserDetails {
    /// <p>The username of the user who called the Kubernetes API.</p>
    #[doc(hidden)]
    pub username: std::option::Option<std::string::String>,
    /// <p>The user ID of the user who called the Kubernetes API.</p>
    #[doc(hidden)]
    pub uid: std::option::Option<std::string::String>,
    /// <p>The groups that include the user who called the Kubernetes API.</p>
    #[doc(hidden)]
    pub groups: std::option::Option<std::vec::Vec<std::string::String>>,
}
impl KubernetesUserDetails {
    /// <p>The username of the user who called the Kubernetes API.</p>
    pub fn username(&self) -> std::option::Option<&str> {
        self.username.as_deref()
    }
    /// <p>The user ID of the user who called the Kubernetes API.</p>
    pub fn uid(&self) -> std::option::Option<&str> {
        self.uid.as_deref()
    }
    /// <p>The groups that include the user who called the Kubernetes API.</p>
    pub fn groups(&self) -> std::option::Option<&[std::string::String]> {
        self.groups.as_deref()
    }
}
/// See [`KubernetesUserDetails`](crate::model::KubernetesUserDetails).
pub mod kubernetes_user_details {

    /// A builder for [`KubernetesUserDetails`](crate::model::KubernetesUserDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) username: std::option::Option<std::string::String>,
        pub(crate) uid: std::option::Option<std::string::String>,
        pub(crate) groups: std::option::Option<std::vec::Vec<std::string::String>>,
    }
    impl Builder {
        /// <p>The username of the user who called the Kubernetes API.</p>
        pub fn username(mut self, input: impl Into<std::string::String>) -> Self {
            self.username = Some(input.into());
            self
        }
        /// <p>The username of the user who called the Kubernetes API.</p>
        pub fn set_username(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.username = input;
            self
        }
        /// <p>The user ID of the user who called the Kubernetes API.</p>
        pub fn uid(mut self, input: impl Into<std::string::String>) -> Self {
            self.uid = Some(input.into());
            self
        }
        /// <p>The user ID of the user who called the Kubernetes API.</p>
        pub fn set_uid(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.uid = input;
            self
        }
        /// Appends an item to `groups`.
        ///
        /// To override the contents of this collection use [`set_groups`](Self::set_groups).
        ///
        /// <p>The groups that include the user who called the Kubernetes API.</p>
        pub fn groups(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.groups.unwrap_or_default();
            v.push(input.into());
            self.groups = Some(v);
            self
        }
        /// <p>The groups that include the user who called the Kubernetes API.</p>
        pub fn set_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.groups = input;
            self
        }
        /// Consumes the builder and constructs a [`KubernetesUserDetails`](crate::model::KubernetesUserDetails).
        pub fn build(self) -> crate::model::KubernetesUserDetails {
            crate::model::KubernetesUserDetails {
                username: self.username,
                uid: self.uid,
                groups: self.groups,
            }
        }
    }
}
impl KubernetesUserDetails {
    /// Creates a new builder-style object to manufacture [`KubernetesUserDetails`](crate::model::KubernetesUserDetails).
    pub fn builder() -> crate::model::kubernetes_user_details::Builder {
        crate::model::kubernetes_user_details::Builder::default()
    }
}

/// <p>Details about the EKS cluster involved in a Kubernetes finding.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct EksClusterDetails {
    /// <p>EKS cluster name.</p>
    #[doc(hidden)]
    pub name: std::option::Option<std::string::String>,
    /// <p>EKS cluster ARN.</p>
    #[doc(hidden)]
    pub arn: std::option::Option<std::string::String>,
    /// <p>The VPC ID to which the EKS cluster is attached.</p>
    #[doc(hidden)]
    pub vpc_id: std::option::Option<std::string::String>,
    /// <p>The EKS cluster status.</p>
    #[doc(hidden)]
    pub status: std::option::Option<std::string::String>,
    /// <p>The EKS cluster tags.</p>
    #[doc(hidden)]
    pub tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
    /// <p>The timestamp when the EKS cluster was created.</p>
    #[doc(hidden)]
    pub created_at: std::option::Option<aws_smithy_types::DateTime>,
}
impl EksClusterDetails {
    /// <p>EKS cluster name.</p>
    pub fn name(&self) -> std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>EKS cluster ARN.</p>
    pub fn arn(&self) -> std::option::Option<&str> {
        self.arn.as_deref()
    }
    /// <p>The VPC ID to which the EKS cluster is attached.</p>
    pub fn vpc_id(&self) -> std::option::Option<&str> {
        self.vpc_id.as_deref()
    }
    /// <p>The EKS cluster status.</p>
    pub fn status(&self) -> std::option::Option<&str> {
        self.status.as_deref()
    }
    /// <p>The EKS cluster tags.</p>
    pub fn tags(&self) -> std::option::Option<&[crate::model::Tag]> {
        self.tags.as_deref()
    }
    /// <p>The timestamp when the EKS cluster was created.</p>
    pub fn created_at(&self) -> std::option::Option<&aws_smithy_types::DateTime> {
        self.created_at.as_ref()
    }
}
/// See [`EksClusterDetails`](crate::model::EksClusterDetails).
pub mod eks_cluster_details {

    /// A builder for [`EksClusterDetails`](crate::model::EksClusterDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) name: std::option::Option<std::string::String>,
        pub(crate) arn: std::option::Option<std::string::String>,
        pub(crate) vpc_id: std::option::Option<std::string::String>,
        pub(crate) status: std::option::Option<std::string::String>,
        pub(crate) tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        pub(crate) created_at: std::option::Option<aws_smithy_types::DateTime>,
    }
    impl Builder {
        /// <p>EKS cluster name.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.name = Some(input.into());
            self
        }
        /// <p>EKS cluster name.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.name = input;
            self
        }
        /// <p>EKS cluster ARN.</p>
        pub fn arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.arn = Some(input.into());
            self
        }
        /// <p>EKS cluster ARN.</p>
        pub fn set_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.arn = input;
            self
        }
        /// <p>The VPC ID to which the EKS cluster is attached.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.vpc_id = Some(input.into());
            self
        }
        /// <p>The VPC ID to which the EKS cluster is attached.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.vpc_id = input;
            self
        }
        /// <p>The EKS cluster status.</p>
        pub fn status(mut self, input: impl Into<std::string::String>) -> Self {
            self.status = Some(input.into());
            self
        }
        /// <p>The EKS cluster status.</p>
        pub fn set_status(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.status = input;
            self
        }
        /// Appends an item to `tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>The EKS cluster tags.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            let mut v = self.tags.unwrap_or_default();
            v.push(input);
            self.tags = Some(v);
            self
        }
        /// <p>The EKS cluster tags.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        ) -> Self {
            self.tags = input;
            self
        }
        /// <p>The timestamp when the EKS cluster was created.</p>
        pub fn created_at(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.created_at = Some(input);
            self
        }
        /// <p>The timestamp when the EKS cluster was created.</p>
        pub fn set_created_at(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.created_at = input;
            self
        }
        /// Consumes the builder and constructs a [`EksClusterDetails`](crate::model::EksClusterDetails).
        pub fn build(self) -> crate::model::EksClusterDetails {
            crate::model::EksClusterDetails {
                name: self.name,
                arn: self.arn,
                vpc_id: self.vpc_id,
                status: self.status,
                tags: self.tags,
                created_at: self.created_at,
            }
        }
    }
}
impl EksClusterDetails {
    /// Creates a new builder-style object to manufacture [`EksClusterDetails`](crate::model::EksClusterDetails).
    pub fn builder() -> crate::model::eks_cluster_details::Builder {
        crate::model::eks_cluster_details::Builder::default()
    }
}

/// <p>Contains information about the details of an instance.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct InstanceDetails {
    /// <p>The Availability Zone of the EC2 instance.</p>
    #[doc(hidden)]
    pub availability_zone: std::option::Option<std::string::String>,
    /// <p>The profile information of the EC2 instance.</p>
    #[doc(hidden)]
    pub iam_instance_profile: std::option::Option<crate::model::IamInstanceProfile>,
    /// <p>The image description of the EC2 instance.</p>
    #[doc(hidden)]
    pub image_description: std::option::Option<std::string::String>,
    /// <p>The image ID of the EC2 instance.</p>
    #[doc(hidden)]
    pub image_id: std::option::Option<std::string::String>,
    /// <p>The ID of the EC2 instance.</p>
    #[doc(hidden)]
    pub instance_id: std::option::Option<std::string::String>,
    /// <p>The state of the EC2 instance.</p>
    #[doc(hidden)]
    pub instance_state: std::option::Option<std::string::String>,
    /// <p>The type of the EC2 instance.</p>
    #[doc(hidden)]
    pub instance_type: std::option::Option<std::string::String>,
    /// <p>The Amazon Resource Name (ARN) of the Amazon Web Services Outpost. Only applicable to Amazon Web Services Outposts instances.</p>
    #[doc(hidden)]
    pub outpost_arn: std::option::Option<std::string::String>,
    /// <p>The launch time of the EC2 instance.</p>
    #[doc(hidden)]
    pub launch_time: std::option::Option<std::string::String>,
    /// <p>The elastic network interface information of the EC2 instance.</p>
    #[doc(hidden)]
    pub network_interfaces: std::option::Option<std::vec::Vec<crate::model::NetworkInterface>>,
    /// <p>The platform of the EC2 instance.</p>
    #[doc(hidden)]
    pub platform: std::option::Option<std::string::String>,
    /// <p>The product code of the EC2 instance.</p>
    #[doc(hidden)]
    pub product_codes: std::option::Option<std::vec::Vec<crate::model::ProductCode>>,
    /// <p>The tags of the EC2 instance.</p>
    #[doc(hidden)]
    pub tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
}
impl InstanceDetails {
    /// <p>The Availability Zone of the EC2 instance.</p>
    pub fn availability_zone(&self) -> std::option::Option<&str> {
        self.availability_zone.as_deref()
    }
    /// <p>The profile information of the EC2 instance.</p>
    pub fn iam_instance_profile(&self) -> std::option::Option<&crate::model::IamInstanceProfile> {
        self.iam_instance_profile.as_ref()
    }
    /// <p>The image description of the EC2 instance.</p>
    pub fn image_description(&self) -> std::option::Option<&str> {
        self.image_description.as_deref()
    }
    /// <p>The image ID of the EC2 instance.</p>
    pub fn image_id(&self) -> std::option::Option<&str> {
        self.image_id.as_deref()
    }
    /// <p>The ID of the EC2 instance.</p>
    pub fn instance_id(&self) -> std::option::Option<&str> {
        self.instance_id.as_deref()
    }
    /// <p>The state of the EC2 instance.</p>
    pub fn instance_state(&self) -> std::option::Option<&str> {
        self.instance_state.as_deref()
    }
    /// <p>The type of the EC2 instance.</p>
    pub fn instance_type(&self) -> std::option::Option<&str> {
        self.instance_type.as_deref()
    }
    /// <p>The Amazon Resource Name (ARN) of the Amazon Web Services Outpost. Only applicable to Amazon Web Services Outposts instances.</p>
    pub fn outpost_arn(&self) -> std::option::Option<&str> {
        self.outpost_arn.as_deref()
    }
    /// <p>The launch time of the EC2 instance.</p>
    pub fn launch_time(&self) -> std::option::Option<&str> {
        self.launch_time.as_deref()
    }
    /// <p>The elastic network interface information of the EC2 instance.</p>
    pub fn network_interfaces(&self) -> std::option::Option<&[crate::model::NetworkInterface]> {
        self.network_interfaces.as_deref()
    }
    /// <p>The platform of the EC2 instance.</p>
    pub fn platform(&self) -> std::option::Option<&str> {
        self.platform.as_deref()
    }
    /// <p>The product code of the EC2 instance.</p>
    pub fn product_codes(&self) -> std::option::Option<&[crate::model::ProductCode]> {
        self.product_codes.as_deref()
    }
    /// <p>The tags of the EC2 instance.</p>
    pub fn tags(&self) -> std::option::Option<&[crate::model::Tag]> {
        self.tags.as_deref()
    }
}
/// See [`InstanceDetails`](crate::model::InstanceDetails).
pub mod instance_details {

    /// A builder for [`InstanceDetails`](crate::model::InstanceDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) availability_zone: std::option::Option<std::string::String>,
        pub(crate) iam_instance_profile: std::option::Option<crate::model::IamInstanceProfile>,
        pub(crate) image_description: std::option::Option<std::string::String>,
        pub(crate) image_id: std::option::Option<std::string::String>,
        pub(crate) instance_id: std::option::Option<std::string::String>,
        pub(crate) instance_state: std::option::Option<std::string::String>,
        pub(crate) instance_type: std::option::Option<std::string::String>,
        pub(crate) outpost_arn: std::option::Option<std::string::String>,
        pub(crate) launch_time: std::option::Option<std::string::String>,
        pub(crate) network_interfaces:
            std::option::Option<std::vec::Vec<crate::model::NetworkInterface>>,
        pub(crate) platform: std::option::Option<std::string::String>,
        pub(crate) product_codes: std::option::Option<std::vec::Vec<crate::model::ProductCode>>,
        pub(crate) tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
    }
    impl Builder {
        /// <p>The Availability Zone of the EC2 instance.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.availability_zone = Some(input.into());
            self
        }
        /// <p>The Availability Zone of the EC2 instance.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.availability_zone = input;
            self
        }
        /// <p>The profile information of the EC2 instance.</p>
        pub fn iam_instance_profile(mut self, input: crate::model::IamInstanceProfile) -> Self {
            self.iam_instance_profile = Some(input);
            self
        }
        /// <p>The profile information of the EC2 instance.</p>
        pub fn set_iam_instance_profile(
            mut self,
            input: std::option::Option<crate::model::IamInstanceProfile>,
        ) -> Self {
            self.iam_instance_profile = input;
            self
        }
        /// <p>The image description of the EC2 instance.</p>
        pub fn image_description(mut self, input: impl Into<std::string::String>) -> Self {
            self.image_description = Some(input.into());
            self
        }
        /// <p>The image description of the EC2 instance.</p>
        pub fn set_image_description(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.image_description = input;
            self
        }
        /// <p>The image ID of the EC2 instance.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.image_id = Some(input.into());
            self
        }
        /// <p>The image ID of the EC2 instance.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.image_id = input;
            self
        }
        /// <p>The ID of the EC2 instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.instance_id = Some(input.into());
            self
        }
        /// <p>The ID of the EC2 instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.instance_id = input;
            self
        }
        /// <p>The state of the EC2 instance.</p>
        pub fn instance_state(mut self, input: impl Into<std::string::String>) -> Self {
            self.instance_state = Some(input.into());
            self
        }
        /// <p>The state of the EC2 instance.</p>
        pub fn set_instance_state(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.instance_state = input;
            self
        }
        /// <p>The type of the EC2 instance.</p>
        pub fn instance_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.instance_type = Some(input.into());
            self
        }
        /// <p>The type of the EC2 instance.</p>
        pub fn set_instance_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.instance_type = input;
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Amazon Web Services Outpost. Only applicable to Amazon Web Services Outposts instances.</p>
        pub fn outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.outpost_arn = Some(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Amazon Web Services Outpost. Only applicable to Amazon Web Services Outposts instances.</p>
        pub fn set_outpost_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.outpost_arn = input;
            self
        }
        /// <p>The launch time of the EC2 instance.</p>
        pub fn launch_time(mut self, input: impl Into<std::string::String>) -> Self {
            self.launch_time = Some(input.into());
            self
        }
        /// <p>The launch time of the EC2 instance.</p>
        pub fn set_launch_time(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.launch_time = input;
            self
        }
        /// Appends an item to `network_interfaces`.
        ///
        /// To override the contents of this collection use [`set_network_interfaces`](Self::set_network_interfaces).
        ///
        /// <p>The elastic network interface information of the EC2 instance.</p>
        pub fn network_interfaces(mut self, input: crate::model::NetworkInterface) -> Self {
            let mut v = self.network_interfaces.unwrap_or_default();
            v.push(input);
            self.network_interfaces = Some(v);
            self
        }
        /// <p>The elastic network interface information of the EC2 instance.</p>
        pub fn set_network_interfaces(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::NetworkInterface>>,
        ) -> Self {
            self.network_interfaces = input;
            self
        }
        /// <p>The platform of the EC2 instance.</p>
        pub fn platform(mut self, input: impl Into<std::string::String>) -> Self {
            self.platform = Some(input.into());
            self
        }
        /// <p>The platform of the EC2 instance.</p>
        pub fn set_platform(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.platform = input;
            self
        }
        /// Appends an item to `product_codes`.
        ///
        /// To override the contents of this collection use [`set_product_codes`](Self::set_product_codes).
        ///
        /// <p>The product code of the EC2 instance.</p>
        pub fn product_codes(mut self, input: crate::model::ProductCode) -> Self {
            let mut v = self.product_codes.unwrap_or_default();
            v.push(input);
            self.product_codes = Some(v);
            self
        }
        /// <p>The product code of the EC2 instance.</p>
        pub fn set_product_codes(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ProductCode>>,
        ) -> Self {
            self.product_codes = input;
            self
        }
        /// Appends an item to `tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>The tags of the EC2 instance.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            let mut v = self.tags.unwrap_or_default();
            v.push(input);
            self.tags = Some(v);
            self
        }
        /// <p>The tags of the EC2 instance.</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        ) -> Self {
            self.tags = input;
            self
        }
        /// Consumes the builder and constructs a [`InstanceDetails`](crate::model::InstanceDetails).
        pub fn build(self) -> crate::model::InstanceDetails {
            crate::model::InstanceDetails {
                availability_zone: self.availability_zone,
                iam_instance_profile: self.iam_instance_profile,
                image_description: self.image_description,
                image_id: self.image_id,
                instance_id: self.instance_id,
                instance_state: self.instance_state,
                instance_type: self.instance_type,
                outpost_arn: self.outpost_arn,
                launch_time: self.launch_time,
                network_interfaces: self.network_interfaces,
                platform: self.platform,
                product_codes: self.product_codes,
                tags: self.tags,
            }
        }
    }
}
impl InstanceDetails {
    /// Creates a new builder-style object to manufacture [`InstanceDetails`](crate::model::InstanceDetails).
    pub fn builder() -> crate::model::instance_details::Builder {
        crate::model::instance_details::Builder::default()
    }
}

/// <p>Contains information about the product code for the EC2 instance.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ProductCode {
    /// <p>The product code information.</p>
    #[doc(hidden)]
    pub code: std::option::Option<std::string::String>,
    /// <p>The product code type.</p>
    #[doc(hidden)]
    pub product_type: std::option::Option<std::string::String>,
}
impl ProductCode {
    /// <p>The product code information.</p>
    pub fn code(&self) -> std::option::Option<&str> {
        self.code.as_deref()
    }
    /// <p>The product code type.</p>
    pub fn product_type(&self) -> std::option::Option<&str> {
        self.product_type.as_deref()
    }
}
/// See [`ProductCode`](crate::model::ProductCode).
pub mod product_code {

    /// A builder for [`ProductCode`](crate::model::ProductCode).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) code: std::option::Option<std::string::String>,
        pub(crate) product_type: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The product code information.</p>
        pub fn code(mut self, input: impl Into<std::string::String>) -> Self {
            self.code = Some(input.into());
            self
        }
        /// <p>The product code information.</p>
        pub fn set_code(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.code = input;
            self
        }
        /// <p>The product code type.</p>
        pub fn product_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.product_type = Some(input.into());
            self
        }
        /// <p>The product code type.</p>
        pub fn set_product_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.product_type = input;
            self
        }
        /// Consumes the builder and constructs a [`ProductCode`](crate::model::ProductCode).
        pub fn build(self) -> crate::model::ProductCode {
            crate::model::ProductCode {
                code: self.code,
                product_type: self.product_type,
            }
        }
    }
}
impl ProductCode {
    /// Creates a new builder-style object to manufacture [`ProductCode`](crate::model::ProductCode).
    pub fn builder() -> crate::model::product_code::Builder {
        crate::model::product_code::Builder::default()
    }
}

/// <p>Contains information about the elastic network interface of the EC2 instance.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct NetworkInterface {
    /// <p>A list of IPv6 addresses for the EC2 instance.</p>
    #[doc(hidden)]
    pub ipv6_addresses: std::option::Option<std::vec::Vec<std::string::String>>,
    /// <p>The ID of the network interface.</p>
    #[doc(hidden)]
    pub network_interface_id: std::option::Option<std::string::String>,
    /// <p>The private DNS name of the EC2 instance.</p>
    #[doc(hidden)]
    pub private_dns_name: std::option::Option<std::string::String>,
    /// <p>The private IP address of the EC2 instance.</p>
    #[doc(hidden)]
    pub private_ip_address: std::option::Option<std::string::String>,
    /// <p>Other private IP address information of the EC2 instance.</p>
    #[doc(hidden)]
    pub private_ip_addresses:
        std::option::Option<std::vec::Vec<crate::model::PrivateIpAddressDetails>>,
    /// <p>The public DNS name of the EC2 instance.</p>
    #[doc(hidden)]
    pub public_dns_name: std::option::Option<std::string::String>,
    /// <p>The public IP address of the EC2 instance.</p>
    #[doc(hidden)]
    pub public_ip: std::option::Option<std::string::String>,
    /// <p>The security groups associated with the EC2 instance.</p>
    #[doc(hidden)]
    pub security_groups: std::option::Option<std::vec::Vec<crate::model::SecurityGroup>>,
    /// <p>The subnet ID of the EC2 instance.</p>
    #[doc(hidden)]
    pub subnet_id: std::option::Option<std::string::String>,
    /// <p>The VPC ID of the EC2 instance.</p>
    #[doc(hidden)]
    pub vpc_id: std::option::Option<std::string::String>,
}
impl NetworkInterface {
    /// <p>A list of IPv6 addresses for the EC2 instance.</p>
    pub fn ipv6_addresses(&self) -> std::option::Option<&[std::string::String]> {
        self.ipv6_addresses.as_deref()
    }
    /// <p>The ID of the network interface.</p>
    pub fn network_interface_id(&self) -> std::option::Option<&str> {
        self.network_interface_id.as_deref()
    }
    /// <p>The private DNS name of the EC2 instance.</p>
    pub fn private_dns_name(&self) -> std::option::Option<&str> {
        self.private_dns_name.as_deref()
    }
    /// <p>The private IP address of the EC2 instance.</p>
    pub fn private_ip_address(&self) -> std::option::Option<&str> {
        self.private_ip_address.as_deref()
    }
    /// <p>Other private IP address information of the EC2 instance.</p>
    pub fn private_ip_addresses(
        &self,
    ) -> std::option::Option<&[crate::model::PrivateIpAddressDetails]> {
        self.private_ip_addresses.as_deref()
    }
    /// <p>The public DNS name of the EC2 instance.</p>
    pub fn public_dns_name(&self) -> std::option::Option<&str> {
        self.public_dns_name.as_deref()
    }
    /// <p>The public IP address of the EC2 instance.</p>
    pub fn public_ip(&self) -> std::option::Option<&str> {
        self.public_ip.as_deref()
    }
    /// <p>The security groups associated with the EC2 instance.</p>
    pub fn security_groups(&self) -> std::option::Option<&[crate::model::SecurityGroup]> {
        self.security_groups.as_deref()
    }
    /// <p>The subnet ID of the EC2 instance.</p>
    pub fn subnet_id(&self) -> std::option::Option<&str> {
        self.subnet_id.as_deref()
    }
    /// <p>The VPC ID of the EC2 instance.</p>
    pub fn vpc_id(&self) -> std::option::Option<&str> {
        self.vpc_id.as_deref()
    }
}
/// See [`NetworkInterface`](crate::model::NetworkInterface).
pub mod network_interface {

    /// A builder for [`NetworkInterface`](crate::model::NetworkInterface).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) ipv6_addresses: std::option::Option<std::vec::Vec<std::string::String>>,
        pub(crate) network_interface_id: std::option::Option<std::string::String>,
        pub(crate) private_dns_name: std::option::Option<std::string::String>,
        pub(crate) private_ip_address: std::option::Option<std::string::String>,
        pub(crate) private_ip_addresses:
            std::option::Option<std::vec::Vec<crate::model::PrivateIpAddressDetails>>,
        pub(crate) public_dns_name: std::option::Option<std::string::String>,
        pub(crate) public_ip: std::option::Option<std::string::String>,
        pub(crate) security_groups: std::option::Option<std::vec::Vec<crate::model::SecurityGroup>>,
        pub(crate) subnet_id: std::option::Option<std::string::String>,
        pub(crate) vpc_id: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// Appends an item to `ipv6_addresses`.
        ///
        /// To override the contents of this collection use [`set_ipv6_addresses`](Self::set_ipv6_addresses).
        ///
        /// <p>A list of IPv6 addresses for the EC2 instance.</p>
        pub fn ipv6_addresses(mut self, input: impl Into<std::string::String>) -> Self {
            let mut v = self.ipv6_addresses.unwrap_or_default();
            v.push(input.into());
            self.ipv6_addresses = Some(v);
            self
        }
        /// <p>A list of IPv6 addresses for the EC2 instance.</p>
        pub fn set_ipv6_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.ipv6_addresses = input;
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.network_interface_id = Some(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.network_interface_id = input;
            self
        }
        /// <p>The private DNS name of the EC2 instance.</p>
        pub fn private_dns_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.private_dns_name = Some(input.into());
            self
        }
        /// <p>The private DNS name of the EC2 instance.</p>
        pub fn set_private_dns_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.private_dns_name = input;
            self
        }
        /// <p>The private IP address of the EC2 instance.</p>
        pub fn private_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.private_ip_address = Some(input.into());
            self
        }
        /// <p>The private IP address of the EC2 instance.</p>
        pub fn set_private_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.private_ip_address = input;
            self
        }
        /// Appends an item to `private_ip_addresses`.
        ///
        /// To override the contents of this collection use [`set_private_ip_addresses`](Self::set_private_ip_addresses).
        ///
        /// <p>Other private IP address information of the EC2 instance.</p>
        pub fn private_ip_addresses(
            mut self,
            input: crate::model::PrivateIpAddressDetails,
        ) -> Self {
            let mut v = self.private_ip_addresses.unwrap_or_default();
            v.push(input);
            self.private_ip_addresses = Some(v);
            self
        }
        /// <p>Other private IP address information of the EC2 instance.</p>
        pub fn set_private_ip_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::PrivateIpAddressDetails>>,
        ) -> Self {
            self.private_ip_addresses = input;
            self
        }
        /// <p>The public DNS name of the EC2 instance.</p>
        pub fn public_dns_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.public_dns_name = Some(input.into());
            self
        }
        /// <p>The public DNS name of the EC2 instance.</p>
        pub fn set_public_dns_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.public_dns_name = input;
            self
        }
        /// <p>The public IP address of the EC2 instance.</p>
        pub fn public_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.public_ip = Some(input.into());
            self
        }
        /// <p>The public IP address of the EC2 instance.</p>
        pub fn set_public_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.public_ip = input;
            self
        }
        /// Appends an item to `security_groups`.
        ///
        /// To override the contents of this collection use [`set_security_groups`](Self::set_security_groups).
        ///
        /// <p>The security groups associated with the EC2 instance.</p>
        pub fn security_groups(mut self, input: crate::model::SecurityGroup) -> Self {
            let mut v = self.security_groups.unwrap_or_default();
            v.push(input);
            self.security_groups = Some(v);
            self
        }
        /// <p>The security groups associated with the EC2 instance.</p>
        pub fn set_security_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::SecurityGroup>>,
        ) -> Self {
            self.security_groups = input;
            self
        }
        /// <p>The subnet ID of the EC2 instance.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.subnet_id = Some(input.into());
            self
        }
        /// <p>The subnet ID of the EC2 instance.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.subnet_id = input;
            self
        }
        /// <p>The VPC ID of the EC2 instance.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.vpc_id = Some(input.into());
            self
        }
        /// <p>The VPC ID of the EC2 instance.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.vpc_id = input;
            self
        }
        /// Consumes the builder and constructs a [`NetworkInterface`](crate::model::NetworkInterface).
        pub fn build(self) -> crate::model::NetworkInterface {
            crate::model::NetworkInterface {
                ipv6_addresses: self.ipv6_addresses,
                network_interface_id: self.network_interface_id,
                private_dns_name: self.private_dns_name,
                private_ip_address: self.private_ip_address,
                private_ip_addresses: self.private_ip_addresses,
                public_dns_name: self.public_dns_name,
                public_ip: self.public_ip,
                security_groups: self.security_groups,
                subnet_id: self.subnet_id,
                vpc_id: self.vpc_id,
            }
        }
    }
}
impl NetworkInterface {
    /// Creates a new builder-style object to manufacture [`NetworkInterface`](crate::model::NetworkInterface).
    pub fn builder() -> crate::model::network_interface::Builder {
        crate::model::network_interface::Builder::default()
    }
}

/// <p>Contains information about the security groups associated with the EC2 instance.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct SecurityGroup {
    /// <p>The security group ID of the EC2 instance.</p>
    #[doc(hidden)]
    pub group_id: std::option::Option<std::string::String>,
    /// <p>The security group name of the EC2 instance.</p>
    #[doc(hidden)]
    pub group_name: std::option::Option<std::string::String>,
}
impl SecurityGroup {
    /// <p>The security group ID of the EC2 instance.</p>
    pub fn group_id(&self) -> std::option::Option<&str> {
        self.group_id.as_deref()
    }
    /// <p>The security group name of the EC2 instance.</p>
    pub fn group_name(&self) -> std::option::Option<&str> {
        self.group_name.as_deref()
    }
}
/// See [`SecurityGroup`](crate::model::SecurityGroup).
pub mod security_group {

    /// A builder for [`SecurityGroup`](crate::model::SecurityGroup).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) group_id: std::option::Option<std::string::String>,
        pub(crate) group_name: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The security group ID of the EC2 instance.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.group_id = Some(input.into());
            self
        }
        /// <p>The security group ID of the EC2 instance.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.group_id = input;
            self
        }
        /// <p>The security group name of the EC2 instance.</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.group_name = Some(input.into());
            self
        }
        /// <p>The security group name of the EC2 instance.</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.group_name = input;
            self
        }
        /// Consumes the builder and constructs a [`SecurityGroup`](crate::model::SecurityGroup).
        pub fn build(self) -> crate::model::SecurityGroup {
            crate::model::SecurityGroup {
                group_id: self.group_id,
                group_name: self.group_name,
            }
        }
    }
}
impl SecurityGroup {
    /// Creates a new builder-style object to manufacture [`SecurityGroup`](crate::model::SecurityGroup).
    pub fn builder() -> crate::model::security_group::Builder {
        crate::model::security_group::Builder::default()
    }
}

/// <p>Contains other private IP address information of the EC2 instance.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct PrivateIpAddressDetails {
    /// <p>The private DNS name of the EC2 instance.</p>
    #[doc(hidden)]
    pub private_dns_name: std::option::Option<std::string::String>,
    /// <p>The private IP address of the EC2 instance.</p>
    #[doc(hidden)]
    pub private_ip_address: std::option::Option<std::string::String>,
}
impl PrivateIpAddressDetails {
    /// <p>The private DNS name of the EC2 instance.</p>
    pub fn private_dns_name(&self) -> std::option::Option<&str> {
        self.private_dns_name.as_deref()
    }
    /// <p>The private IP address of the EC2 instance.</p>
    pub fn private_ip_address(&self) -> std::option::Option<&str> {
        self.private_ip_address.as_deref()
    }
}
/// See [`PrivateIpAddressDetails`](crate::model::PrivateIpAddressDetails).
pub mod private_ip_address_details {

    /// A builder for [`PrivateIpAddressDetails`](crate::model::PrivateIpAddressDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) private_dns_name: std::option::Option<std::string::String>,
        pub(crate) private_ip_address: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The private DNS name of the EC2 instance.</p>
        pub fn private_dns_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.private_dns_name = Some(input.into());
            self
        }
        /// <p>The private DNS name of the EC2 instance.</p>
        pub fn set_private_dns_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.private_dns_name = input;
            self
        }
        /// <p>The private IP address of the EC2 instance.</p>
        pub fn private_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.private_ip_address = Some(input.into());
            self
        }
        /// <p>The private IP address of the EC2 instance.</p>
        pub fn set_private_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.private_ip_address = input;
            self
        }
        /// Consumes the builder and constructs a [`PrivateIpAddressDetails`](crate::model::PrivateIpAddressDetails).
        pub fn build(self) -> crate::model::PrivateIpAddressDetails {
            crate::model::PrivateIpAddressDetails {
                private_dns_name: self.private_dns_name,
                private_ip_address: self.private_ip_address,
            }
        }
    }
}
impl PrivateIpAddressDetails {
    /// Creates a new builder-style object to manufacture [`PrivateIpAddressDetails`](crate::model::PrivateIpAddressDetails).
    pub fn builder() -> crate::model::private_ip_address_details::Builder {
        crate::model::private_ip_address_details::Builder::default()
    }
}

/// <p>Contains information about the EC2 instance profile.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct IamInstanceProfile {
    /// <p>The profile ARN of the EC2 instance.</p>
    #[doc(hidden)]
    pub arn: std::option::Option<std::string::String>,
    /// <p>The profile ID of the EC2 instance.</p>
    #[doc(hidden)]
    pub id: std::option::Option<std::string::String>,
}
impl IamInstanceProfile {
    /// <p>The profile ARN of the EC2 instance.</p>
    pub fn arn(&self) -> std::option::Option<&str> {
        self.arn.as_deref()
    }
    /// <p>The profile ID of the EC2 instance.</p>
    pub fn id(&self) -> std::option::Option<&str> {
        self.id.as_deref()
    }
}
/// See [`IamInstanceProfile`](crate::model::IamInstanceProfile).
pub mod iam_instance_profile {

    /// A builder for [`IamInstanceProfile`](crate::model::IamInstanceProfile).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) arn: std::option::Option<std::string::String>,
        pub(crate) id: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The profile ARN of the EC2 instance.</p>
        pub fn arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.arn = Some(input.into());
            self
        }
        /// <p>The profile ARN of the EC2 instance.</p>
        pub fn set_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.arn = input;
            self
        }
        /// <p>The profile ID of the EC2 instance.</p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.id = Some(input.into());
            self
        }
        /// <p>The profile ID of the EC2 instance.</p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.id = input;
            self
        }
        /// Consumes the builder and constructs a [`IamInstanceProfile`](crate::model::IamInstanceProfile).
        pub fn build(self) -> crate::model::IamInstanceProfile {
            crate::model::IamInstanceProfile {
                arn: self.arn,
                id: self.id,
            }
        }
    }
}
impl IamInstanceProfile {
    /// Creates a new builder-style object to manufacture [`IamInstanceProfile`](crate::model::IamInstanceProfile).
    pub fn builder() -> crate::model::iam_instance_profile::Builder {
        crate::model::iam_instance_profile::Builder::default()
    }
}

/// <p>Contains information on the S3 bucket.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct S3BucketDetail {
    /// <p>The Amazon Resource Name (ARN) of the S3 bucket.</p>
    #[doc(hidden)]
    pub arn: std::option::Option<std::string::String>,
    /// <p>The name of the S3 bucket.</p>
    #[doc(hidden)]
    pub name: std::option::Option<std::string::String>,
    /// <p>Describes whether the bucket is a source or destination bucket.</p>
    #[doc(hidden)]
    pub r#type: std::option::Option<std::string::String>,
    /// <p>The date and time the bucket was created at.</p>
    #[doc(hidden)]
    pub created_at: std::option::Option<aws_smithy_types::DateTime>,
    /// <p>The owner of the S3 bucket.</p>
    #[doc(hidden)]
    pub owner: std::option::Option<crate::model::Owner>,
    /// <p>All tags attached to the S3 bucket</p>
    #[doc(hidden)]
    pub tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
    /// <p>Describes the server side encryption method used in the S3 bucket.</p>
    #[doc(hidden)]
    pub default_server_side_encryption:
        std::option::Option<crate::model::DefaultServerSideEncryption>,
    /// <p>Describes the public access policies that apply to the S3 bucket.</p>
    #[doc(hidden)]
    pub public_access: std::option::Option<crate::model::PublicAccess>,
}
impl S3BucketDetail {
    /// <p>The Amazon Resource Name (ARN) of the S3 bucket.</p>
    pub fn arn(&self) -> std::option::Option<&str> {
        self.arn.as_deref()
    }
    /// <p>The name of the S3 bucket.</p>
    pub fn name(&self) -> std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>Describes whether the bucket is a source or destination bucket.</p>
    pub fn r#type(&self) -> std::option::Option<&str> {
        self.r#type.as_deref()
    }
    /// <p>The date and time the bucket was created at.</p>
    pub fn created_at(&self) -> std::option::Option<&aws_smithy_types::DateTime> {
        self.created_at.as_ref()
    }
    /// <p>The owner of the S3 bucket.</p>
    pub fn owner(&self) -> std::option::Option<&crate::model::Owner> {
        self.owner.as_ref()
    }
    /// <p>All tags attached to the S3 bucket</p>
    pub fn tags(&self) -> std::option::Option<&[crate::model::Tag]> {
        self.tags.as_deref()
    }
    /// <p>Describes the server side encryption method used in the S3 bucket.</p>
    pub fn default_server_side_encryption(
        &self,
    ) -> std::option::Option<&crate::model::DefaultServerSideEncryption> {
        self.default_server_side_encryption.as_ref()
    }
    /// <p>Describes the public access policies that apply to the S3 bucket.</p>
    pub fn public_access(&self) -> std::option::Option<&crate::model::PublicAccess> {
        self.public_access.as_ref()
    }
}
/// See [`S3BucketDetail`](crate::model::S3BucketDetail).
pub mod s3_bucket_detail {

    /// A builder for [`S3BucketDetail`](crate::model::S3BucketDetail).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) arn: std::option::Option<std::string::String>,
        pub(crate) name: std::option::Option<std::string::String>,
        pub(crate) r#type: std::option::Option<std::string::String>,
        pub(crate) created_at: std::option::Option<aws_smithy_types::DateTime>,
        pub(crate) owner: std::option::Option<crate::model::Owner>,
        pub(crate) tags: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        pub(crate) default_server_side_encryption:
            std::option::Option<crate::model::DefaultServerSideEncryption>,
        pub(crate) public_access: std::option::Option<crate::model::PublicAccess>,
    }
    impl Builder {
        /// <p>The Amazon Resource Name (ARN) of the S3 bucket.</p>
        pub fn arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.arn = Some(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the S3 bucket.</p>
        pub fn set_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.arn = input;
            self
        }
        /// <p>The name of the S3 bucket.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.name = Some(input.into());
            self
        }
        /// <p>The name of the S3 bucket.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.name = input;
            self
        }
        /// <p>Describes whether the bucket is a source or destination bucket.</p>
        pub fn r#type(mut self, input: impl Into<std::string::String>) -> Self {
            self.r#type = Some(input.into());
            self
        }
        /// <p>Describes whether the bucket is a source or destination bucket.</p>
        pub fn set_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.r#type = input;
            self
        }
        /// <p>The date and time the bucket was created at.</p>
        pub fn created_at(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.created_at = Some(input);
            self
        }
        /// <p>The date and time the bucket was created at.</p>
        pub fn set_created_at(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.created_at = input;
            self
        }
        /// <p>The owner of the S3 bucket.</p>
        pub fn owner(mut self, input: crate::model::Owner) -> Self {
            self.owner = Some(input);
            self
        }
        /// <p>The owner of the S3 bucket.</p>
        pub fn set_owner(mut self, input: std::option::Option<crate::model::Owner>) -> Self {
            self.owner = input;
            self
        }
        /// Appends an item to `tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>All tags attached to the S3 bucket</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            let mut v = self.tags.unwrap_or_default();
            v.push(input);
            self.tags = Some(v);
            self
        }
        /// <p>All tags attached to the S3 bucket</p>
        pub fn set_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Tag>>,
        ) -> Self {
            self.tags = input;
            self
        }
        /// <p>Describes the server side encryption method used in the S3 bucket.</p>
        pub fn default_server_side_encryption(
            mut self,
            input: crate::model::DefaultServerSideEncryption,
        ) -> Self {
            self.default_server_side_encryption = Some(input);
            self
        }
        /// <p>Describes the server side encryption method used in the S3 bucket.</p>
        pub fn set_default_server_side_encryption(
            mut self,
            input: std::option::Option<crate::model::DefaultServerSideEncryption>,
        ) -> Self {
            self.default_server_side_encryption = input;
            self
        }
        /// <p>Describes the public access policies that apply to the S3 bucket.</p>
        pub fn public_access(mut self, input: crate::model::PublicAccess) -> Self {
            self.public_access = Some(input);
            self
        }
        /// <p>Describes the public access policies that apply to the S3 bucket.</p>
        pub fn set_public_access(
            mut self,
            input: std::option::Option<crate::model::PublicAccess>,
        ) -> Self {
            self.public_access = input;
            self
        }
        /// Consumes the builder and constructs a [`S3BucketDetail`](crate::model::S3BucketDetail).
        pub fn build(self) -> crate::model::S3BucketDetail {
            crate::model::S3BucketDetail {
                arn: self.arn,
                name: self.name,
                r#type: self.r#type,
                created_at: self.created_at,
                owner: self.owner,
                tags: self.tags,
                default_server_side_encryption: self.default_server_side_encryption,
                public_access: self.public_access,
            }
        }
    }
}
impl S3BucketDetail {
    /// Creates a new builder-style object to manufacture [`S3BucketDetail`](crate::model::S3BucketDetail).
    pub fn builder() -> crate::model::s3_bucket_detail::Builder {
        crate::model::s3_bucket_detail::Builder::default()
    }
}

/// <p>Describes the public access policies that apply to the S3 bucket.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct PublicAccess {
    /// <p>Contains information about how permissions are configured for the S3 bucket.</p>
    #[doc(hidden)]
    pub permission_configuration: std::option::Option<crate::model::PermissionConfiguration>,
    /// <p>Describes the effective permission on this bucket after factoring all attached policies.</p>
    #[doc(hidden)]
    pub effective_permission: std::option::Option<std::string::String>,
}
impl PublicAccess {
    /// <p>Contains information about how permissions are configured for the S3 bucket.</p>
    pub fn permission_configuration(
        &self,
    ) -> std::option::Option<&crate::model::PermissionConfiguration> {
        self.permission_configuration.as_ref()
    }
    /// <p>Describes the effective permission on this bucket after factoring all attached policies.</p>
    pub fn effective_permission(&self) -> std::option::Option<&str> {
        self.effective_permission.as_deref()
    }
}
/// See [`PublicAccess`](crate::model::PublicAccess).
pub mod public_access {

    /// A builder for [`PublicAccess`](crate::model::PublicAccess).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) permission_configuration:
            std::option::Option<crate::model::PermissionConfiguration>,
        pub(crate) effective_permission: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>Contains information about how permissions are configured for the S3 bucket.</p>
        pub fn permission_configuration(
            mut self,
            input: crate::model::PermissionConfiguration,
        ) -> Self {
            self.permission_configuration = Some(input);
            self
        }
        /// <p>Contains information about how permissions are configured for the S3 bucket.</p>
        pub fn set_permission_configuration(
            mut self,
            input: std::option::Option<crate::model::PermissionConfiguration>,
        ) -> Self {
            self.permission_configuration = input;
            self
        }
        /// <p>Describes the effective permission on this bucket after factoring all attached policies.</p>
        pub fn effective_permission(mut self, input: impl Into<std::string::String>) -> Self {
            self.effective_permission = Some(input.into());
            self
        }
        /// <p>Describes the effective permission on this bucket after factoring all attached policies.</p>
        pub fn set_effective_permission(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.effective_permission = input;
            self
        }
        /// Consumes the builder and constructs a [`PublicAccess`](crate::model::PublicAccess).
        pub fn build(self) -> crate::model::PublicAccess {
            crate::model::PublicAccess {
                permission_configuration: self.permission_configuration,
                effective_permission: self.effective_permission,
            }
        }
    }
}
impl PublicAccess {
    /// Creates a new builder-style object to manufacture [`PublicAccess`](crate::model::PublicAccess).
    pub fn builder() -> crate::model::public_access::Builder {
        crate::model::public_access::Builder::default()
    }
}

/// <p>Contains information about how permissions are configured for the S3 bucket.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct PermissionConfiguration {
    /// <p>Contains information about the bucket level permissions for the S3 bucket.</p>
    #[doc(hidden)]
    pub bucket_level_permissions: std::option::Option<crate::model::BucketLevelPermissions>,
    /// <p>Contains information about the account level permissions on the S3 bucket.</p>
    #[doc(hidden)]
    pub account_level_permissions: std::option::Option<crate::model::AccountLevelPermissions>,
}
impl PermissionConfiguration {
    /// <p>Contains information about the bucket level permissions for the S3 bucket.</p>
    pub fn bucket_level_permissions(
        &self,
    ) -> std::option::Option<&crate::model::BucketLevelPermissions> {
        self.bucket_level_permissions.as_ref()
    }
    /// <p>Contains information about the account level permissions on the S3 bucket.</p>
    pub fn account_level_permissions(
        &self,
    ) -> std::option::Option<&crate::model::AccountLevelPermissions> {
        self.account_level_permissions.as_ref()
    }
}
/// See [`PermissionConfiguration`](crate::model::PermissionConfiguration).
pub mod permission_configuration {

    /// A builder for [`PermissionConfiguration`](crate::model::PermissionConfiguration).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) bucket_level_permissions:
            std::option::Option<crate::model::BucketLevelPermissions>,
        pub(crate) account_level_permissions:
            std::option::Option<crate::model::AccountLevelPermissions>,
    }
    impl Builder {
        /// <p>Contains information about the bucket level permissions for the S3 bucket.</p>
        pub fn bucket_level_permissions(
            mut self,
            input: crate::model::BucketLevelPermissions,
        ) -> Self {
            self.bucket_level_permissions = Some(input);
            self
        }
        /// <p>Contains information about the bucket level permissions for the S3 bucket.</p>
        pub fn set_bucket_level_permissions(
            mut self,
            input: std::option::Option<crate::model::BucketLevelPermissions>,
        ) -> Self {
            self.bucket_level_permissions = input;
            self
        }
        /// <p>Contains information about the account level permissions on the S3 bucket.</p>
        pub fn account_level_permissions(
            mut self,
            input: crate::model::AccountLevelPermissions,
        ) -> Self {
            self.account_level_permissions = Some(input);
            self
        }
        /// <p>Contains information about the account level permissions on the S3 bucket.</p>
        pub fn set_account_level_permissions(
            mut self,
            input: std::option::Option<crate::model::AccountLevelPermissions>,
        ) -> Self {
            self.account_level_permissions = input;
            self
        }
        /// Consumes the builder and constructs a [`PermissionConfiguration`](crate::model::PermissionConfiguration).
        pub fn build(self) -> crate::model::PermissionConfiguration {
            crate::model::PermissionConfiguration {
                bucket_level_permissions: self.bucket_level_permissions,
                account_level_permissions: self.account_level_permissions,
            }
        }
    }
}
impl PermissionConfiguration {
    /// Creates a new builder-style object to manufacture [`PermissionConfiguration`](crate::model::PermissionConfiguration).
    pub fn builder() -> crate::model::permission_configuration::Builder {
        crate::model::permission_configuration::Builder::default()
    }
}

/// <p>Contains information about the account level permissions on the S3 bucket.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct AccountLevelPermissions {
    /// <p>Describes the S3 Block Public Access settings of the bucket's parent account.</p>
    #[doc(hidden)]
    pub block_public_access: std::option::Option<crate::model::BlockPublicAccess>,
}
impl AccountLevelPermissions {
    /// <p>Describes the S3 Block Public Access settings of the bucket's parent account.</p>
    pub fn block_public_access(&self) -> std::option::Option<&crate::model::BlockPublicAccess> {
        self.block_public_access.as_ref()
    }
}
/// See [`AccountLevelPermissions`](crate::model::AccountLevelPermissions).
pub mod account_level_permissions {

    /// A builder for [`AccountLevelPermissions`](crate::model::AccountLevelPermissions).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) block_public_access: std::option::Option<crate::model::BlockPublicAccess>,
    }
    impl Builder {
        /// <p>Describes the S3 Block Public Access settings of the bucket's parent account.</p>
        pub fn block_public_access(mut self, input: crate::model::BlockPublicAccess) -> Self {
            self.block_public_access = Some(input);
            self
        }
        /// <p>Describes the S3 Block Public Access settings of the bucket's parent account.</p>
        pub fn set_block_public_access(
            mut self,
            input: std::option::Option<crate::model::BlockPublicAccess>,
        ) -> Self {
            self.block_public_access = input;
            self
        }
        /// Consumes the builder and constructs a [`AccountLevelPermissions`](crate::model::AccountLevelPermissions).
        pub fn build(self) -> crate::model::AccountLevelPermissions {
            crate::model::AccountLevelPermissions {
                block_public_access: self.block_public_access,
            }
        }
    }
}
impl AccountLevelPermissions {
    /// Creates a new builder-style object to manufacture [`AccountLevelPermissions`](crate::model::AccountLevelPermissions).
    pub fn builder() -> crate::model::account_level_permissions::Builder {
        crate::model::account_level_permissions::Builder::default()
    }
}

/// <p>Contains information on how the bucker owner's S3 Block Public Access settings are being applied to the S3 bucket. See <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html">S3 Block Public Access</a> for more information. </p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct BlockPublicAccess {
    /// <p>Indicates if S3 Block Public Access is set to <code>IgnorePublicAcls</code>.</p>
    #[doc(hidden)]
    pub ignore_public_acls: bool,
    /// <p>Indicates if S3 Block Public Access is set to <code>RestrictPublicBuckets</code>.</p>
    #[doc(hidden)]
    pub restrict_public_buckets: bool,
    /// <p>Indicates if S3 Block Public Access is set to <code>BlockPublicAcls</code>.</p>
    #[doc(hidden)]
    pub block_public_acls: bool,
    /// <p>Indicates if S3 Block Public Access is set to <code>BlockPublicPolicy</code>.</p>
    #[doc(hidden)]
    pub block_public_policy: bool,
}
impl BlockPublicAccess {
    /// <p>Indicates if S3 Block Public Access is set to <code>IgnorePublicAcls</code>.</p>
    pub fn ignore_public_acls(&self) -> bool {
        self.ignore_public_acls
    }
    /// <p>Indicates if S3 Block Public Access is set to <code>RestrictPublicBuckets</code>.</p>
    pub fn restrict_public_buckets(&self) -> bool {
        self.restrict_public_buckets
    }
    /// <p>Indicates if S3 Block Public Access is set to <code>BlockPublicAcls</code>.</p>
    pub fn block_public_acls(&self) -> bool {
        self.block_public_acls
    }
    /// <p>Indicates if S3 Block Public Access is set to <code>BlockPublicPolicy</code>.</p>
    pub fn block_public_policy(&self) -> bool {
        self.block_public_policy
    }
}
/// See [`BlockPublicAccess`](crate::model::BlockPublicAccess).
pub mod block_public_access {

    /// A builder for [`BlockPublicAccess`](crate::model::BlockPublicAccess).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) ignore_public_acls: std::option::Option<bool>,
        pub(crate) restrict_public_buckets: std::option::Option<bool>,
        pub(crate) block_public_acls: std::option::Option<bool>,
        pub(crate) block_public_policy: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>Indicates if S3 Block Public Access is set to <code>IgnorePublicAcls</code>.</p>
        pub fn ignore_public_acls(mut self, input: bool) -> Self {
            self.ignore_public_acls = Some(input);
            self
        }
        /// <p>Indicates if S3 Block Public Access is set to <code>IgnorePublicAcls</code>.</p>
        pub fn set_ignore_public_acls(mut self, input: std::option::Option<bool>) -> Self {
            self.ignore_public_acls = input;
            self
        }
        /// <p>Indicates if S3 Block Public Access is set to <code>RestrictPublicBuckets</code>.</p>
        pub fn restrict_public_buckets(mut self, input: bool) -> Self {
            self.restrict_public_buckets = Some(input);
            self
        }
        /// <p>Indicates if S3 Block Public Access is set to <code>RestrictPublicBuckets</code>.</p>
        pub fn set_restrict_public_buckets(mut self, input: std::option::Option<bool>) -> Self {
            self.restrict_public_buckets = input;
            self
        }
        /// <p>Indicates if S3 Block Public Access is set to <code>BlockPublicAcls</code>.</p>
        pub fn block_public_acls(mut self, input: bool) -> Self {
            self.block_public_acls = Some(input);
            self
        }
        /// <p>Indicates if S3 Block Public Access is set to <code>BlockPublicAcls</code>.</p>
        pub fn set_block_public_acls(mut self, input: std::option::Option<bool>) -> Self {
            self.block_public_acls = input;
            self
        }
        /// <p>Indicates if S3 Block Public Access is set to <code>BlockPublicPolicy</code>.</p>
        pub fn block_public_policy(mut self, input: bool) -> Self {
            self.block_public_policy = Some(input);
            self
        }
        /// <p>Indicates if S3 Block Public Access is set to <code>BlockPublicPolicy</code>.</p>
        pub fn set_block_public_policy(mut self, input: std::option::Option<bool>) -> Self {
            self.block_public_policy = input;
            self
        }
        /// Consumes the builder and constructs a [`BlockPublicAccess`](crate::model::BlockPublicAccess).
        pub fn build(self) -> crate::model::BlockPublicAccess {
            crate::model::BlockPublicAccess {
                ignore_public_acls: self.ignore_public_acls.unwrap_or_default(),
                restrict_public_buckets: self.restrict_public_buckets.unwrap_or_default(),
                block_public_acls: self.block_public_acls.unwrap_or_default(),
                block_public_policy: self.block_public_policy.unwrap_or_default(),
            }
        }
    }
}
impl BlockPublicAccess {
    /// Creates a new builder-style object to manufacture [`BlockPublicAccess`](crate::model::BlockPublicAccess).
    pub fn builder() -> crate::model::block_public_access::Builder {
        crate::model::block_public_access::Builder::default()
    }
}

/// <p>Contains information about the bucket level permissions for the S3 bucket.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct BucketLevelPermissions {
    /// <p>Contains information on how Access Control Policies are applied to the bucket.</p>
    #[doc(hidden)]
    pub access_control_list: std::option::Option<crate::model::AccessControlList>,
    /// <p>Contains information on the bucket policies for the S3 bucket.</p>
    #[doc(hidden)]
    pub bucket_policy: std::option::Option<crate::model::BucketPolicy>,
    /// <p>Contains information on which account level S3 Block Public Access settings are applied to the S3 bucket.</p>
    #[doc(hidden)]
    pub block_public_access: std::option::Option<crate::model::BlockPublicAccess>,
}
impl BucketLevelPermissions {
    /// <p>Contains information on how Access Control Policies are applied to the bucket.</p>
    pub fn access_control_list(&self) -> std::option::Option<&crate::model::AccessControlList> {
        self.access_control_list.as_ref()
    }
    /// <p>Contains information on the bucket policies for the S3 bucket.</p>
    pub fn bucket_policy(&self) -> std::option::Option<&crate::model::BucketPolicy> {
        self.bucket_policy.as_ref()
    }
    /// <p>Contains information on which account level S3 Block Public Access settings are applied to the S3 bucket.</p>
    pub fn block_public_access(&self) -> std::option::Option<&crate::model::BlockPublicAccess> {
        self.block_public_access.as_ref()
    }
}
/// See [`BucketLevelPermissions`](crate::model::BucketLevelPermissions).
pub mod bucket_level_permissions {

    /// A builder for [`BucketLevelPermissions`](crate::model::BucketLevelPermissions).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) access_control_list: std::option::Option<crate::model::AccessControlList>,
        pub(crate) bucket_policy: std::option::Option<crate::model::BucketPolicy>,
        pub(crate) block_public_access: std::option::Option<crate::model::BlockPublicAccess>,
    }
    impl Builder {
        /// <p>Contains information on how Access Control Policies are applied to the bucket.</p>
        pub fn access_control_list(mut self, input: crate::model::AccessControlList) -> Self {
            self.access_control_list = Some(input);
            self
        }
        /// <p>Contains information on how Access Control Policies are applied to the bucket.</p>
        pub fn set_access_control_list(
            mut self,
            input: std::option::Option<crate::model::AccessControlList>,
        ) -> Self {
            self.access_control_list = input;
            self
        }
        /// <p>Contains information on the bucket policies for the S3 bucket.</p>
        pub fn bucket_policy(mut self, input: crate::model::BucketPolicy) -> Self {
            self.bucket_policy = Some(input);
            self
        }
        /// <p>Contains information on the bucket policies for the S3 bucket.</p>
        pub fn set_bucket_policy(
            mut self,
            input: std::option::Option<crate::model::BucketPolicy>,
        ) -> Self {
            self.bucket_policy = input;
            self
        }
        /// <p>Contains information on which account level S3 Block Public Access settings are applied to the S3 bucket.</p>
        pub fn block_public_access(mut self, input: crate::model::BlockPublicAccess) -> Self {
            self.block_public_access = Some(input);
            self
        }
        /// <p>Contains information on which account level S3 Block Public Access settings are applied to the S3 bucket.</p>
        pub fn set_block_public_access(
            mut self,
            input: std::option::Option<crate::model::BlockPublicAccess>,
        ) -> Self {
            self.block_public_access = input;
            self
        }
        /// Consumes the builder and constructs a [`BucketLevelPermissions`](crate::model::BucketLevelPermissions).
        pub fn build(self) -> crate::model::BucketLevelPermissions {
            crate::model::BucketLevelPermissions {
                access_control_list: self.access_control_list,
                bucket_policy: self.bucket_policy,
                block_public_access: self.block_public_access,
            }
        }
    }
}
impl BucketLevelPermissions {
    /// Creates a new builder-style object to manufacture [`BucketLevelPermissions`](crate::model::BucketLevelPermissions).
    pub fn builder() -> crate::model::bucket_level_permissions::Builder {
        crate::model::bucket_level_permissions::Builder::default()
    }
}

/// <p>Contains information on the current bucket policies for the S3 bucket.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct BucketPolicy {
    /// <p>A value that indicates whether public read access for the bucket is enabled through a bucket policy.</p>
    #[doc(hidden)]
    pub allows_public_read_access: bool,
    /// <p>A value that indicates whether public write access for the bucket is enabled through a bucket policy.</p>
    #[doc(hidden)]
    pub allows_public_write_access: bool,
}
impl BucketPolicy {
    /// <p>A value that indicates whether public read access for the bucket is enabled through a bucket policy.</p>
    pub fn allows_public_read_access(&self) -> bool {
        self.allows_public_read_access
    }
    /// <p>A value that indicates whether public write access for the bucket is enabled through a bucket policy.</p>
    pub fn allows_public_write_access(&self) -> bool {
        self.allows_public_write_access
    }
}
/// See [`BucketPolicy`](crate::model::BucketPolicy).
pub mod bucket_policy {

    /// A builder for [`BucketPolicy`](crate::model::BucketPolicy).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) allows_public_read_access: std::option::Option<bool>,
        pub(crate) allows_public_write_access: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>A value that indicates whether public read access for the bucket is enabled through a bucket policy.</p>
        pub fn allows_public_read_access(mut self, input: bool) -> Self {
            self.allows_public_read_access = Some(input);
            self
        }
        /// <p>A value that indicates whether public read access for the bucket is enabled through a bucket policy.</p>
        pub fn set_allows_public_read_access(mut self, input: std::option::Option<bool>) -> Self {
            self.allows_public_read_access = input;
            self
        }
        /// <p>A value that indicates whether public write access for the bucket is enabled through a bucket policy.</p>
        pub fn allows_public_write_access(mut self, input: bool) -> Self {
            self.allows_public_write_access = Some(input);
            self
        }
        /// <p>A value that indicates whether public write access for the bucket is enabled through a bucket policy.</p>
        pub fn set_allows_public_write_access(mut self, input: std::option::Option<bool>) -> Self {
            self.allows_public_write_access = input;
            self
        }
        /// Consumes the builder and constructs a [`BucketPolicy`](crate::model::BucketPolicy).
        pub fn build(self) -> crate::model::BucketPolicy {
            crate::model::BucketPolicy {
                allows_public_read_access: self.allows_public_read_access.unwrap_or_default(),
                allows_public_write_access: self.allows_public_write_access.unwrap_or_default(),
            }
        }
    }
}
impl BucketPolicy {
    /// Creates a new builder-style object to manufacture [`BucketPolicy`](crate::model::BucketPolicy).
    pub fn builder() -> crate::model::bucket_policy::Builder {
        crate::model::bucket_policy::Builder::default()
    }
}

/// <p>Contains information on the current access control policies for the bucket.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct AccessControlList {
    /// <p>A value that indicates whether public read access for the bucket is enabled through an Access Control List (ACL).</p>
    #[doc(hidden)]
    pub allows_public_read_access: bool,
    /// <p>A value that indicates whether public write access for the bucket is enabled through an Access Control List (ACL).</p>
    #[doc(hidden)]
    pub allows_public_write_access: bool,
}
impl AccessControlList {
    /// <p>A value that indicates whether public read access for the bucket is enabled through an Access Control List (ACL).</p>
    pub fn allows_public_read_access(&self) -> bool {
        self.allows_public_read_access
    }
    /// <p>A value that indicates whether public write access for the bucket is enabled through an Access Control List (ACL).</p>
    pub fn allows_public_write_access(&self) -> bool {
        self.allows_public_write_access
    }
}
/// See [`AccessControlList`](crate::model::AccessControlList).
pub mod access_control_list {

    /// A builder for [`AccessControlList`](crate::model::AccessControlList).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) allows_public_read_access: std::option::Option<bool>,
        pub(crate) allows_public_write_access: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>A value that indicates whether public read access for the bucket is enabled through an Access Control List (ACL).</p>
        pub fn allows_public_read_access(mut self, input: bool) -> Self {
            self.allows_public_read_access = Some(input);
            self
        }
        /// <p>A value that indicates whether public read access for the bucket is enabled through an Access Control List (ACL).</p>
        pub fn set_allows_public_read_access(mut self, input: std::option::Option<bool>) -> Self {
            self.allows_public_read_access = input;
            self
        }
        /// <p>A value that indicates whether public write access for the bucket is enabled through an Access Control List (ACL).</p>
        pub fn allows_public_write_access(mut self, input: bool) -> Self {
            self.allows_public_write_access = Some(input);
            self
        }
        /// <p>A value that indicates whether public write access for the bucket is enabled through an Access Control List (ACL).</p>
        pub fn set_allows_public_write_access(mut self, input: std::option::Option<bool>) -> Self {
            self.allows_public_write_access = input;
            self
        }
        /// Consumes the builder and constructs a [`AccessControlList`](crate::model::AccessControlList).
        pub fn build(self) -> crate::model::AccessControlList {
            crate::model::AccessControlList {
                allows_public_read_access: self.allows_public_read_access.unwrap_or_default(),
                allows_public_write_access: self.allows_public_write_access.unwrap_or_default(),
            }
        }
    }
}
impl AccessControlList {
    /// Creates a new builder-style object to manufacture [`AccessControlList`](crate::model::AccessControlList).
    pub fn builder() -> crate::model::access_control_list::Builder {
        crate::model::access_control_list::Builder::default()
    }
}

/// <p>Contains information on the server side encryption method used in the S3 bucket. See <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html">S3 Server-Side Encryption</a> for more information.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct DefaultServerSideEncryption {
    /// <p>The type of encryption used for objects within the S3 bucket.</p>
    #[doc(hidden)]
    pub encryption_type: std::option::Option<std::string::String>,
    /// <p>The Amazon Resource Name (ARN) of the KMS encryption key. Only available if the bucket <code>EncryptionType</code> is <code>aws:kms</code>.</p>
    #[doc(hidden)]
    pub kms_master_key_arn: std::option::Option<std::string::String>,
}
impl DefaultServerSideEncryption {
    /// <p>The type of encryption used for objects within the S3 bucket.</p>
    pub fn encryption_type(&self) -> std::option::Option<&str> {
        self.encryption_type.as_deref()
    }
    /// <p>The Amazon Resource Name (ARN) of the KMS encryption key. Only available if the bucket <code>EncryptionType</code> is <code>aws:kms</code>.</p>
    pub fn kms_master_key_arn(&self) -> std::option::Option<&str> {
        self.kms_master_key_arn.as_deref()
    }
}
/// See [`DefaultServerSideEncryption`](crate::model::DefaultServerSideEncryption).
pub mod default_server_side_encryption {

    /// A builder for [`DefaultServerSideEncryption`](crate::model::DefaultServerSideEncryption).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) encryption_type: std::option::Option<std::string::String>,
        pub(crate) kms_master_key_arn: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The type of encryption used for objects within the S3 bucket.</p>
        pub fn encryption_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.encryption_type = Some(input.into());
            self
        }
        /// <p>The type of encryption used for objects within the S3 bucket.</p>
        pub fn set_encryption_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.encryption_type = input;
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the KMS encryption key. Only available if the bucket <code>EncryptionType</code> is <code>aws:kms</code>.</p>
        pub fn kms_master_key_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.kms_master_key_arn = Some(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the KMS encryption key. Only available if the bucket <code>EncryptionType</code> is <code>aws:kms</code>.</p>
        pub fn set_kms_master_key_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.kms_master_key_arn = input;
            self
        }
        /// Consumes the builder and constructs a [`DefaultServerSideEncryption`](crate::model::DefaultServerSideEncryption).
        pub fn build(self) -> crate::model::DefaultServerSideEncryption {
            crate::model::DefaultServerSideEncryption {
                encryption_type: self.encryption_type,
                kms_master_key_arn: self.kms_master_key_arn,
            }
        }
    }
}
impl DefaultServerSideEncryption {
    /// Creates a new builder-style object to manufacture [`DefaultServerSideEncryption`](crate::model::DefaultServerSideEncryption).
    pub fn builder() -> crate::model::default_server_side_encryption::Builder {
        crate::model::default_server_side_encryption::Builder::default()
    }
}

/// <p>Contains information on the owner of the bucket.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Owner {
    /// <p>The canonical user ID of the bucket owner. For information about locating your canonical user ID see <a href="https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingCanonicalId">Finding Your Account Canonical User ID.</a> </p>
    #[doc(hidden)]
    pub id: std::option::Option<std::string::String>,
}
impl Owner {
    /// <p>The canonical user ID of the bucket owner. For information about locating your canonical user ID see <a href="https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingCanonicalId">Finding Your Account Canonical User ID.</a> </p>
    pub fn id(&self) -> std::option::Option<&str> {
        self.id.as_deref()
    }
}
/// See [`Owner`](crate::model::Owner).
pub mod owner {

    /// A builder for [`Owner`](crate::model::Owner).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) id: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The canonical user ID of the bucket owner. For information about locating your canonical user ID see <a href="https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingCanonicalId">Finding Your Account Canonical User ID.</a> </p>
        pub fn id(mut self, input: impl Into<std::string::String>) -> Self {
            self.id = Some(input.into());
            self
        }
        /// <p>The canonical user ID of the bucket owner. For information about locating your canonical user ID see <a href="https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingCanonicalId">Finding Your Account Canonical User ID.</a> </p>
        pub fn set_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.id = input;
            self
        }
        /// Consumes the builder and constructs a [`Owner`](crate::model::Owner).
        pub fn build(self) -> crate::model::Owner {
            crate::model::Owner { id: self.id }
        }
    }
}
impl Owner {
    /// Creates a new builder-style object to manufacture [`Owner`](crate::model::Owner).
    pub fn builder() -> crate::model::owner::Builder {
        crate::model::owner::Builder::default()
    }
}

/// <p>Contains information about the access keys.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct AccessKeyDetails {
    /// <p>The access key ID of the user.</p>
    #[doc(hidden)]
    pub access_key_id: std::option::Option<std::string::String>,
    /// <p>The principal ID of the user.</p>
    #[doc(hidden)]
    pub principal_id: std::option::Option<std::string::String>,
    /// <p>The name of the user.</p>
    #[doc(hidden)]
    pub user_name: std::option::Option<std::string::String>,
    /// <p>The type of the user.</p>
    #[doc(hidden)]
    pub user_type: std::option::Option<std::string::String>,
}
impl AccessKeyDetails {
    /// <p>The access key ID of the user.</p>
    pub fn access_key_id(&self) -> std::option::Option<&str> {
        self.access_key_id.as_deref()
    }
    /// <p>The principal ID of the user.</p>
    pub fn principal_id(&self) -> std::option::Option<&str> {
        self.principal_id.as_deref()
    }
    /// <p>The name of the user.</p>
    pub fn user_name(&self) -> std::option::Option<&str> {
        self.user_name.as_deref()
    }
    /// <p>The type of the user.</p>
    pub fn user_type(&self) -> std::option::Option<&str> {
        self.user_type.as_deref()
    }
}
/// See [`AccessKeyDetails`](crate::model::AccessKeyDetails).
pub mod access_key_details {

    /// A builder for [`AccessKeyDetails`](crate::model::AccessKeyDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) access_key_id: std::option::Option<std::string::String>,
        pub(crate) principal_id: std::option::Option<std::string::String>,
        pub(crate) user_name: std::option::Option<std::string::String>,
        pub(crate) user_type: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The access key ID of the user.</p>
        pub fn access_key_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.access_key_id = Some(input.into());
            self
        }
        /// <p>The access key ID of the user.</p>
        pub fn set_access_key_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.access_key_id = input;
            self
        }
        /// <p>The principal ID of the user.</p>
        pub fn principal_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.principal_id = Some(input.into());
            self
        }
        /// <p>The principal ID of the user.</p>
        pub fn set_principal_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.principal_id = input;
            self
        }
        /// <p>The name of the user.</p>
        pub fn user_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.user_name = Some(input.into());
            self
        }
        /// <p>The name of the user.</p>
        pub fn set_user_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.user_name = input;
            self
        }
        /// <p>The type of the user.</p>
        pub fn user_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.user_type = Some(input.into());
            self
        }
        /// <p>The type of the user.</p>
        pub fn set_user_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.user_type = input;
            self
        }
        /// Consumes the builder and constructs a [`AccessKeyDetails`](crate::model::AccessKeyDetails).
        pub fn build(self) -> crate::model::AccessKeyDetails {
            crate::model::AccessKeyDetails {
                access_key_id: self.access_key_id,
                principal_id: self.principal_id,
                user_name: self.user_name,
                user_type: self.user_type,
            }
        }
    }
}
impl AccessKeyDetails {
    /// Creates a new builder-style object to manufacture [`AccessKeyDetails`](crate::model::AccessKeyDetails).
    pub fn builder() -> crate::model::access_key_details::Builder {
        crate::model::access_key_details::Builder::default()
    }
}

/// When writing a match expression against `DetectorStatus`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let detectorstatus = unimplemented!();
/// match detectorstatus {
///     DetectorStatus::Disabled => { /* ... */ },
///     DetectorStatus::Enabled => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `detectorstatus` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `DetectorStatus::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `DetectorStatus::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `DetectorStatus::NewFeature` is defined.
/// Specifically, when `detectorstatus` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `DetectorStatus::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum DetectorStatus {
    #[allow(missing_docs)] // documentation missing in model
    Disabled,
    #[allow(missing_docs)] // documentation missing in model
    Enabled,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for DetectorStatus {
    fn from(s: &str) -> Self {
        match s {
            "DISABLED" => DetectorStatus::Disabled,
            "ENABLED" => DetectorStatus::Enabled,
            other => DetectorStatus::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for DetectorStatus {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(DetectorStatus::from(s))
    }
}
impl DetectorStatus {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            DetectorStatus::Disabled => "DISABLED",
            DetectorStatus::Enabled => "ENABLED",
            DetectorStatus::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["DISABLED", "ENABLED"]
    }
}
impl AsRef<str> for DetectorStatus {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information about the administrator account and invitation.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Administrator {
    /// <p>The ID of the account used as the administrator account.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>The value that is used to validate the administrator account to the member account.</p>
    #[doc(hidden)]
    pub invitation_id: std::option::Option<std::string::String>,
    /// <p>The status of the relationship between the administrator and member accounts.</p>
    #[doc(hidden)]
    pub relationship_status: std::option::Option<std::string::String>,
    /// <p>The timestamp when the invitation was sent.</p>
    #[doc(hidden)]
    pub invited_at: std::option::Option<std::string::String>,
}
impl Administrator {
    /// <p>The ID of the account used as the administrator account.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>The value that is used to validate the administrator account to the member account.</p>
    pub fn invitation_id(&self) -> std::option::Option<&str> {
        self.invitation_id.as_deref()
    }
    /// <p>The status of the relationship between the administrator and member accounts.</p>
    pub fn relationship_status(&self) -> std::option::Option<&str> {
        self.relationship_status.as_deref()
    }
    /// <p>The timestamp when the invitation was sent.</p>
    pub fn invited_at(&self) -> std::option::Option<&str> {
        self.invited_at.as_deref()
    }
}
/// See [`Administrator`](crate::model::Administrator).
pub mod administrator {

    /// A builder for [`Administrator`](crate::model::Administrator).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) invitation_id: std::option::Option<std::string::String>,
        pub(crate) relationship_status: std::option::Option<std::string::String>,
        pub(crate) invited_at: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The ID of the account used as the administrator account.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The ID of the account used as the administrator account.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>The value that is used to validate the administrator account to the member account.</p>
        pub fn invitation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.invitation_id = Some(input.into());
            self
        }
        /// <p>The value that is used to validate the administrator account to the member account.</p>
        pub fn set_invitation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.invitation_id = input;
            self
        }
        /// <p>The status of the relationship between the administrator and member accounts.</p>
        pub fn relationship_status(mut self, input: impl Into<std::string::String>) -> Self {
            self.relationship_status = Some(input.into());
            self
        }
        /// <p>The status of the relationship between the administrator and member accounts.</p>
        pub fn set_relationship_status(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.relationship_status = input;
            self
        }
        /// <p>The timestamp when the invitation was sent.</p>
        pub fn invited_at(mut self, input: impl Into<std::string::String>) -> Self {
            self.invited_at = Some(input.into());
            self
        }
        /// <p>The timestamp when the invitation was sent.</p>
        pub fn set_invited_at(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.invited_at = input;
            self
        }
        /// Consumes the builder and constructs a [`Administrator`](crate::model::Administrator).
        pub fn build(self) -> crate::model::Administrator {
            crate::model::Administrator {
                account_id: self.account_id,
                invitation_id: self.invitation_id,
                relationship_status: self.relationship_status,
                invited_at: self.invited_at,
            }
        }
    }
}
impl Administrator {
    /// Creates a new builder-style object to manufacture [`Administrator`](crate::model::Administrator).
    pub fn builder() -> crate::model::administrator::Builder {
        crate::model::administrator::Builder::default()
    }
}

/// <p>An object that contains information on which data sources are automatically enabled for new members within the organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationDataSourceConfigurationsResult {
    /// <p>Describes whether S3 data event logs are enabled as a data source.</p>
    #[doc(hidden)]
    pub s3_logs: std::option::Option<crate::model::OrganizationS3LogsConfigurationResult>,
    /// <p>Describes the configuration of Kubernetes data sources.</p>
    #[doc(hidden)]
    pub kubernetes: std::option::Option<crate::model::OrganizationKubernetesConfigurationResult>,
    /// <p>Describes the configuration of Malware Protection data source for an organization.</p>
    #[doc(hidden)]
    pub malware_protection:
        std::option::Option<crate::model::OrganizationMalwareProtectionConfigurationResult>,
}
impl OrganizationDataSourceConfigurationsResult {
    /// <p>Describes whether S3 data event logs are enabled as a data source.</p>
    pub fn s3_logs(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationS3LogsConfigurationResult> {
        self.s3_logs.as_ref()
    }
    /// <p>Describes the configuration of Kubernetes data sources.</p>
    pub fn kubernetes(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationKubernetesConfigurationResult> {
        self.kubernetes.as_ref()
    }
    /// <p>Describes the configuration of Malware Protection data source for an organization.</p>
    pub fn malware_protection(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationMalwareProtectionConfigurationResult> {
        self.malware_protection.as_ref()
    }
}
/// See [`OrganizationDataSourceConfigurationsResult`](crate::model::OrganizationDataSourceConfigurationsResult).
pub mod organization_data_source_configurations_result {

    /// A builder for [`OrganizationDataSourceConfigurationsResult`](crate::model::OrganizationDataSourceConfigurationsResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) s3_logs:
            std::option::Option<crate::model::OrganizationS3LogsConfigurationResult>,
        pub(crate) kubernetes:
            std::option::Option<crate::model::OrganizationKubernetesConfigurationResult>,
        pub(crate) malware_protection:
            std::option::Option<crate::model::OrganizationMalwareProtectionConfigurationResult>,
    }
    impl Builder {
        /// <p>Describes whether S3 data event logs are enabled as a data source.</p>
        pub fn s3_logs(
            mut self,
            input: crate::model::OrganizationS3LogsConfigurationResult,
        ) -> Self {
            self.s3_logs = Some(input);
            self
        }
        /// <p>Describes whether S3 data event logs are enabled as a data source.</p>
        pub fn set_s3_logs(
            mut self,
            input: std::option::Option<crate::model::OrganizationS3LogsConfigurationResult>,
        ) -> Self {
            self.s3_logs = input;
            self
        }
        /// <p>Describes the configuration of Kubernetes data sources.</p>
        pub fn kubernetes(
            mut self,
            input: crate::model::OrganizationKubernetesConfigurationResult,
        ) -> Self {
            self.kubernetes = Some(input);
            self
        }
        /// <p>Describes the configuration of Kubernetes data sources.</p>
        pub fn set_kubernetes(
            mut self,
            input: std::option::Option<crate::model::OrganizationKubernetesConfigurationResult>,
        ) -> Self {
            self.kubernetes = input;
            self
        }
        /// <p>Describes the configuration of Malware Protection data source for an organization.</p>
        pub fn malware_protection(
            mut self,
            input: crate::model::OrganizationMalwareProtectionConfigurationResult,
        ) -> Self {
            self.malware_protection = Some(input);
            self
        }
        /// <p>Describes the configuration of Malware Protection data source for an organization.</p>
        pub fn set_malware_protection(
            mut self,
            input: std::option::Option<
                crate::model::OrganizationMalwareProtectionConfigurationResult,
            >,
        ) -> Self {
            self.malware_protection = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationDataSourceConfigurationsResult`](crate::model::OrganizationDataSourceConfigurationsResult).
        pub fn build(self) -> crate::model::OrganizationDataSourceConfigurationsResult {
            crate::model::OrganizationDataSourceConfigurationsResult {
                s3_logs: self.s3_logs,
                kubernetes: self.kubernetes,
                malware_protection: self.malware_protection,
            }
        }
    }
}
impl OrganizationDataSourceConfigurationsResult {
    /// Creates a new builder-style object to manufacture [`OrganizationDataSourceConfigurationsResult`](crate::model::OrganizationDataSourceConfigurationsResult).
    pub fn builder() -> crate::model::organization_data_source_configurations_result::Builder {
        crate::model::organization_data_source_configurations_result::Builder::default()
    }
}

/// <p>An object that contains information on the status of all Malware Protection data source for an organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationMalwareProtectionConfigurationResult {
    /// <p>Describes the configuration for scanning EC2 instances with findings for an organization.</p>
    #[doc(hidden)]
    pub scan_ec2_instance_with_findings:
        std::option::Option<crate::model::OrganizationScanEc2InstanceWithFindingsResult>,
}
impl OrganizationMalwareProtectionConfigurationResult {
    /// <p>Describes the configuration for scanning EC2 instances with findings for an organization.</p>
    pub fn scan_ec2_instance_with_findings(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationScanEc2InstanceWithFindingsResult> {
        self.scan_ec2_instance_with_findings.as_ref()
    }
}
/// See [`OrganizationMalwareProtectionConfigurationResult`](crate::model::OrganizationMalwareProtectionConfigurationResult).
pub mod organization_malware_protection_configuration_result {

    /// A builder for [`OrganizationMalwareProtectionConfigurationResult`](crate::model::OrganizationMalwareProtectionConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scan_ec2_instance_with_findings:
            std::option::Option<crate::model::OrganizationScanEc2InstanceWithFindingsResult>,
    }
    impl Builder {
        /// <p>Describes the configuration for scanning EC2 instances with findings for an organization.</p>
        pub fn scan_ec2_instance_with_findings(
            mut self,
            input: crate::model::OrganizationScanEc2InstanceWithFindingsResult,
        ) -> Self {
            self.scan_ec2_instance_with_findings = Some(input);
            self
        }
        /// <p>Describes the configuration for scanning EC2 instances with findings for an organization.</p>
        pub fn set_scan_ec2_instance_with_findings(
            mut self,
            input: std::option::Option<crate::model::OrganizationScanEc2InstanceWithFindingsResult>,
        ) -> Self {
            self.scan_ec2_instance_with_findings = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationMalwareProtectionConfigurationResult`](crate::model::OrganizationMalwareProtectionConfigurationResult).
        pub fn build(self) -> crate::model::OrganizationMalwareProtectionConfigurationResult {
            crate::model::OrganizationMalwareProtectionConfigurationResult {
                scan_ec2_instance_with_findings: self.scan_ec2_instance_with_findings,
            }
        }
    }
}
impl OrganizationMalwareProtectionConfigurationResult {
    /// Creates a new builder-style object to manufacture [`OrganizationMalwareProtectionConfigurationResult`](crate::model::OrganizationMalwareProtectionConfigurationResult).
    pub fn builder() -> crate::model::organization_malware_protection_configuration_result::Builder
    {
        crate::model::organization_malware_protection_configuration_result::Builder::default()
    }
}

/// <p>An object that contains information on the status of scanning EC2 instances with findings for an organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationScanEc2InstanceWithFindingsResult {
    /// <p>Describes the configuration for scanning EBS volumes for an organization.</p>
    #[doc(hidden)]
    pub ebs_volumes: std::option::Option<crate::model::OrganizationEbsVolumesResult>,
}
impl OrganizationScanEc2InstanceWithFindingsResult {
    /// <p>Describes the configuration for scanning EBS volumes for an organization.</p>
    pub fn ebs_volumes(&self) -> std::option::Option<&crate::model::OrganizationEbsVolumesResult> {
        self.ebs_volumes.as_ref()
    }
}
/// See [`OrganizationScanEc2InstanceWithFindingsResult`](crate::model::OrganizationScanEc2InstanceWithFindingsResult).
pub mod organization_scan_ec2_instance_with_findings_result {

    /// A builder for [`OrganizationScanEc2InstanceWithFindingsResult`](crate::model::OrganizationScanEc2InstanceWithFindingsResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) ebs_volumes: std::option::Option<crate::model::OrganizationEbsVolumesResult>,
    }
    impl Builder {
        /// <p>Describes the configuration for scanning EBS volumes for an organization.</p>
        pub fn ebs_volumes(mut self, input: crate::model::OrganizationEbsVolumesResult) -> Self {
            self.ebs_volumes = Some(input);
            self
        }
        /// <p>Describes the configuration for scanning EBS volumes for an organization.</p>
        pub fn set_ebs_volumes(
            mut self,
            input: std::option::Option<crate::model::OrganizationEbsVolumesResult>,
        ) -> Self {
            self.ebs_volumes = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationScanEc2InstanceWithFindingsResult`](crate::model::OrganizationScanEc2InstanceWithFindingsResult).
        pub fn build(self) -> crate::model::OrganizationScanEc2InstanceWithFindingsResult {
            crate::model::OrganizationScanEc2InstanceWithFindingsResult {
                ebs_volumes: self.ebs_volumes,
            }
        }
    }
}
impl OrganizationScanEc2InstanceWithFindingsResult {
    /// Creates a new builder-style object to manufacture [`OrganizationScanEc2InstanceWithFindingsResult`](crate::model::OrganizationScanEc2InstanceWithFindingsResult).
    pub fn builder() -> crate::model::organization_scan_ec2_instance_with_findings_result::Builder {
        crate::model::organization_scan_ec2_instance_with_findings_result::Builder::default()
    }
}

/// <p>An object that contains information on the status of whether EBS volumes scanning will be enabled as a data source for an organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationEbsVolumesResult {
    /// <p>An object that contains the status of whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
    #[doc(hidden)]
    pub auto_enable: bool,
}
impl OrganizationEbsVolumesResult {
    /// <p>An object that contains the status of whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
    pub fn auto_enable(&self) -> bool {
        self.auto_enable
    }
}
/// See [`OrganizationEbsVolumesResult`](crate::model::OrganizationEbsVolumesResult).
pub mod organization_ebs_volumes_result {

    /// A builder for [`OrganizationEbsVolumesResult`](crate::model::OrganizationEbsVolumesResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) auto_enable: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>An object that contains the status of whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
        pub fn auto_enable(mut self, input: bool) -> Self {
            self.auto_enable = Some(input);
            self
        }
        /// <p>An object that contains the status of whether scanning EBS volumes should be auto-enabled for new members joining the organization.</p>
        pub fn set_auto_enable(mut self, input: std::option::Option<bool>) -> Self {
            self.auto_enable = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationEbsVolumesResult`](crate::model::OrganizationEbsVolumesResult).
        pub fn build(self) -> crate::model::OrganizationEbsVolumesResult {
            crate::model::OrganizationEbsVolumesResult {
                auto_enable: self.auto_enable.unwrap_or_default(),
            }
        }
    }
}
impl OrganizationEbsVolumesResult {
    /// Creates a new builder-style object to manufacture [`OrganizationEbsVolumesResult`](crate::model::OrganizationEbsVolumesResult).
    pub fn builder() -> crate::model::organization_ebs_volumes_result::Builder {
        crate::model::organization_ebs_volumes_result::Builder::default()
    }
}

/// <p>The current configuration of all Kubernetes data sources for the organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationKubernetesConfigurationResult {
    /// <p>The current configuration of Kubernetes audit logs as a data source for the organization.</p>
    #[doc(hidden)]
    pub audit_logs:
        std::option::Option<crate::model::OrganizationKubernetesAuditLogsConfigurationResult>,
}
impl OrganizationKubernetesConfigurationResult {
    /// <p>The current configuration of Kubernetes audit logs as a data source for the organization.</p>
    pub fn audit_logs(
        &self,
    ) -> std::option::Option<&crate::model::OrganizationKubernetesAuditLogsConfigurationResult>
    {
        self.audit_logs.as_ref()
    }
}
/// See [`OrganizationKubernetesConfigurationResult`](crate::model::OrganizationKubernetesConfigurationResult).
pub mod organization_kubernetes_configuration_result {

    /// A builder for [`OrganizationKubernetesConfigurationResult`](crate::model::OrganizationKubernetesConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) audit_logs:
            std::option::Option<crate::model::OrganizationKubernetesAuditLogsConfigurationResult>,
    }
    impl Builder {
        /// <p>The current configuration of Kubernetes audit logs as a data source for the organization.</p>
        pub fn audit_logs(
            mut self,
            input: crate::model::OrganizationKubernetesAuditLogsConfigurationResult,
        ) -> Self {
            self.audit_logs = Some(input);
            self
        }
        /// <p>The current configuration of Kubernetes audit logs as a data source for the organization.</p>
        pub fn set_audit_logs(
            mut self,
            input: std::option::Option<
                crate::model::OrganizationKubernetesAuditLogsConfigurationResult,
            >,
        ) -> Self {
            self.audit_logs = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationKubernetesConfigurationResult`](crate::model::OrganizationKubernetesConfigurationResult).
        pub fn build(self) -> crate::model::OrganizationKubernetesConfigurationResult {
            crate::model::OrganizationKubernetesConfigurationResult {
                audit_logs: self.audit_logs,
            }
        }
    }
}
impl OrganizationKubernetesConfigurationResult {
    /// Creates a new builder-style object to manufacture [`OrganizationKubernetesConfigurationResult`](crate::model::OrganizationKubernetesConfigurationResult).
    pub fn builder() -> crate::model::organization_kubernetes_configuration_result::Builder {
        crate::model::organization_kubernetes_configuration_result::Builder::default()
    }
}

/// <p>The current configuration of Kubernetes audit logs as a data source for the organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationKubernetesAuditLogsConfigurationResult {
    /// <p>Whether Kubernetes audit logs data source should be auto-enabled for new members joining the organization.</p>
    #[doc(hidden)]
    pub auto_enable: bool,
}
impl OrganizationKubernetesAuditLogsConfigurationResult {
    /// <p>Whether Kubernetes audit logs data source should be auto-enabled for new members joining the organization.</p>
    pub fn auto_enable(&self) -> bool {
        self.auto_enable
    }
}
/// See [`OrganizationKubernetesAuditLogsConfigurationResult`](crate::model::OrganizationKubernetesAuditLogsConfigurationResult).
pub mod organization_kubernetes_audit_logs_configuration_result {

    /// A builder for [`OrganizationKubernetesAuditLogsConfigurationResult`](crate::model::OrganizationKubernetesAuditLogsConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) auto_enable: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>Whether Kubernetes audit logs data source should be auto-enabled for new members joining the organization.</p>
        pub fn auto_enable(mut self, input: bool) -> Self {
            self.auto_enable = Some(input);
            self
        }
        /// <p>Whether Kubernetes audit logs data source should be auto-enabled for new members joining the organization.</p>
        pub fn set_auto_enable(mut self, input: std::option::Option<bool>) -> Self {
            self.auto_enable = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationKubernetesAuditLogsConfigurationResult`](crate::model::OrganizationKubernetesAuditLogsConfigurationResult).
        pub fn build(self) -> crate::model::OrganizationKubernetesAuditLogsConfigurationResult {
            crate::model::OrganizationKubernetesAuditLogsConfigurationResult {
                auto_enable: self.auto_enable.unwrap_or_default(),
            }
        }
    }
}
impl OrganizationKubernetesAuditLogsConfigurationResult {
    /// Creates a new builder-style object to manufacture [`OrganizationKubernetesAuditLogsConfigurationResult`](crate::model::OrganizationKubernetesAuditLogsConfigurationResult).
    pub fn builder(
    ) -> crate::model::organization_kubernetes_audit_logs_configuration_result::Builder {
        crate::model::organization_kubernetes_audit_logs_configuration_result::Builder::default()
    }
}

/// <p>The current configuration of S3 data event logs as a data source for the organization.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct OrganizationS3LogsConfigurationResult {
    /// <p>A value that describes whether S3 data event logs are automatically enabled for new members of the organization.</p>
    #[doc(hidden)]
    pub auto_enable: bool,
}
impl OrganizationS3LogsConfigurationResult {
    /// <p>A value that describes whether S3 data event logs are automatically enabled for new members of the organization.</p>
    pub fn auto_enable(&self) -> bool {
        self.auto_enable
    }
}
/// See [`OrganizationS3LogsConfigurationResult`](crate::model::OrganizationS3LogsConfigurationResult).
pub mod organization_s3_logs_configuration_result {

    /// A builder for [`OrganizationS3LogsConfigurationResult`](crate::model::OrganizationS3LogsConfigurationResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) auto_enable: std::option::Option<bool>,
    }
    impl Builder {
        /// <p>A value that describes whether S3 data event logs are automatically enabled for new members of the organization.</p>
        pub fn auto_enable(mut self, input: bool) -> Self {
            self.auto_enable = Some(input);
            self
        }
        /// <p>A value that describes whether S3 data event logs are automatically enabled for new members of the organization.</p>
        pub fn set_auto_enable(mut self, input: std::option::Option<bool>) -> Self {
            self.auto_enable = input;
            self
        }
        /// Consumes the builder and constructs a [`OrganizationS3LogsConfigurationResult`](crate::model::OrganizationS3LogsConfigurationResult).
        pub fn build(self) -> crate::model::OrganizationS3LogsConfigurationResult {
            crate::model::OrganizationS3LogsConfigurationResult {
                auto_enable: self.auto_enable.unwrap_or_default(),
            }
        }
    }
}
impl OrganizationS3LogsConfigurationResult {
    /// Creates a new builder-style object to manufacture [`OrganizationS3LogsConfigurationResult`](crate::model::OrganizationS3LogsConfigurationResult).
    pub fn builder() -> crate::model::organization_s3_logs_configuration_result::Builder {
        crate::model::organization_s3_logs_configuration_result::Builder::default()
    }
}

/// <p>Contains information about a malware scan.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct Scan {
    /// <p>The unique ID of the detector that the request is associated with.</p>
    #[doc(hidden)]
    pub detector_id: std::option::Option<std::string::String>,
    /// <p>The unique detector ID of the administrator account that the request is associated with. Note that this value will be the same as the one used for <code>DetectorId</code> if the account is an administrator.</p>
    #[doc(hidden)]
    pub admin_detector_id: std::option::Option<std::string::String>,
    /// <p>The unique scan ID associated with a scan entry.</p>
    #[doc(hidden)]
    pub scan_id: std::option::Option<std::string::String>,
    /// <p>An enum value representing possible scan statuses.</p>
    #[doc(hidden)]
    pub scan_status: std::option::Option<crate::model::ScanStatus>,
    /// <p>Represents the reason for FAILED scan status.</p>
    #[doc(hidden)]
    pub failure_reason: std::option::Option<std::string::String>,
    /// <p>The timestamp of when the scan was triggered.</p>
    #[doc(hidden)]
    pub scan_start_time: std::option::Option<aws_smithy_types::DateTime>,
    /// <p>The timestamp of when the scan was finished.</p>
    #[doc(hidden)]
    pub scan_end_time: std::option::Option<aws_smithy_types::DateTime>,
    /// <p>Specifies the reason why the scan was initiated.</p>
    #[doc(hidden)]
    pub trigger_details: std::option::Option<crate::model::TriggerDetails>,
    /// <p>Represents the resources that were scanned in the scan entry.</p>
    #[doc(hidden)]
    pub resource_details: std::option::Option<crate::model::ResourceDetails>,
    /// <p>Represents the result of the scan.</p>
    #[doc(hidden)]
    pub scan_result_details: std::option::Option<crate::model::ScanResultDetails>,
    /// <p>The ID for the account that belongs to the scan.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>Represents total bytes that were scanned.</p>
    #[doc(hidden)]
    pub total_bytes: i64,
    /// <p>Represents the number of files that were scanned.</p>
    #[doc(hidden)]
    pub file_count: i64,
    /// <p>List of volumes that were attached to the original instance to be scanned.</p>
    #[doc(hidden)]
    pub attached_volumes: std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
}
impl Scan {
    /// <p>The unique ID of the detector that the request is associated with.</p>
    pub fn detector_id(&self) -> std::option::Option<&str> {
        self.detector_id.as_deref()
    }
    /// <p>The unique detector ID of the administrator account that the request is associated with. Note that this value will be the same as the one used for <code>DetectorId</code> if the account is an administrator.</p>
    pub fn admin_detector_id(&self) -> std::option::Option<&str> {
        self.admin_detector_id.as_deref()
    }
    /// <p>The unique scan ID associated with a scan entry.</p>
    pub fn scan_id(&self) -> std::option::Option<&str> {
        self.scan_id.as_deref()
    }
    /// <p>An enum value representing possible scan statuses.</p>
    pub fn scan_status(&self) -> std::option::Option<&crate::model::ScanStatus> {
        self.scan_status.as_ref()
    }
    /// <p>Represents the reason for FAILED scan status.</p>
    pub fn failure_reason(&self) -> std::option::Option<&str> {
        self.failure_reason.as_deref()
    }
    /// <p>The timestamp of when the scan was triggered.</p>
    pub fn scan_start_time(&self) -> std::option::Option<&aws_smithy_types::DateTime> {
        self.scan_start_time.as_ref()
    }
    /// <p>The timestamp of when the scan was finished.</p>
    pub fn scan_end_time(&self) -> std::option::Option<&aws_smithy_types::DateTime> {
        self.scan_end_time.as_ref()
    }
    /// <p>Specifies the reason why the scan was initiated.</p>
    pub fn trigger_details(&self) -> std::option::Option<&crate::model::TriggerDetails> {
        self.trigger_details.as_ref()
    }
    /// <p>Represents the resources that were scanned in the scan entry.</p>
    pub fn resource_details(&self) -> std::option::Option<&crate::model::ResourceDetails> {
        self.resource_details.as_ref()
    }
    /// <p>Represents the result of the scan.</p>
    pub fn scan_result_details(&self) -> std::option::Option<&crate::model::ScanResultDetails> {
        self.scan_result_details.as_ref()
    }
    /// <p>The ID for the account that belongs to the scan.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>Represents total bytes that were scanned.</p>
    pub fn total_bytes(&self) -> i64 {
        self.total_bytes
    }
    /// <p>Represents the number of files that were scanned.</p>
    pub fn file_count(&self) -> i64 {
        self.file_count
    }
    /// <p>List of volumes that were attached to the original instance to be scanned.</p>
    pub fn attached_volumes(&self) -> std::option::Option<&[crate::model::VolumeDetail]> {
        self.attached_volumes.as_deref()
    }
}
/// See [`Scan`](crate::model::Scan).
pub mod scan {

    /// A builder for [`Scan`](crate::model::Scan).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) detector_id: std::option::Option<std::string::String>,
        pub(crate) admin_detector_id: std::option::Option<std::string::String>,
        pub(crate) scan_id: std::option::Option<std::string::String>,
        pub(crate) scan_status: std::option::Option<crate::model::ScanStatus>,
        pub(crate) failure_reason: std::option::Option<std::string::String>,
        pub(crate) scan_start_time: std::option::Option<aws_smithy_types::DateTime>,
        pub(crate) scan_end_time: std::option::Option<aws_smithy_types::DateTime>,
        pub(crate) trigger_details: std::option::Option<crate::model::TriggerDetails>,
        pub(crate) resource_details: std::option::Option<crate::model::ResourceDetails>,
        pub(crate) scan_result_details: std::option::Option<crate::model::ScanResultDetails>,
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) total_bytes: std::option::Option<i64>,
        pub(crate) file_count: std::option::Option<i64>,
        pub(crate) attached_volumes: std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
    }
    impl Builder {
        /// <p>The unique ID of the detector that the request is associated with.</p>
        pub fn detector_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.detector_id = Some(input.into());
            self
        }
        /// <p>The unique ID of the detector that the request is associated with.</p>
        pub fn set_detector_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.detector_id = input;
            self
        }
        /// <p>The unique detector ID of the administrator account that the request is associated with. Note that this value will be the same as the one used for <code>DetectorId</code> if the account is an administrator.</p>
        pub fn admin_detector_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.admin_detector_id = Some(input.into());
            self
        }
        /// <p>The unique detector ID of the administrator account that the request is associated with. Note that this value will be the same as the one used for <code>DetectorId</code> if the account is an administrator.</p>
        pub fn set_admin_detector_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.admin_detector_id = input;
            self
        }
        /// <p>The unique scan ID associated with a scan entry.</p>
        pub fn scan_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.scan_id = Some(input.into());
            self
        }
        /// <p>The unique scan ID associated with a scan entry.</p>
        pub fn set_scan_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.scan_id = input;
            self
        }
        /// <p>An enum value representing possible scan statuses.</p>
        pub fn scan_status(mut self, input: crate::model::ScanStatus) -> Self {
            self.scan_status = Some(input);
            self
        }
        /// <p>An enum value representing possible scan statuses.</p>
        pub fn set_scan_status(
            mut self,
            input: std::option::Option<crate::model::ScanStatus>,
        ) -> Self {
            self.scan_status = input;
            self
        }
        /// <p>Represents the reason for FAILED scan status.</p>
        pub fn failure_reason(mut self, input: impl Into<std::string::String>) -> Self {
            self.failure_reason = Some(input.into());
            self
        }
        /// <p>Represents the reason for FAILED scan status.</p>
        pub fn set_failure_reason(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.failure_reason = input;
            self
        }
        /// <p>The timestamp of when the scan was triggered.</p>
        pub fn scan_start_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.scan_start_time = Some(input);
            self
        }
        /// <p>The timestamp of when the scan was triggered.</p>
        pub fn set_scan_start_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.scan_start_time = input;
            self
        }
        /// <p>The timestamp of when the scan was finished.</p>
        pub fn scan_end_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.scan_end_time = Some(input);
            self
        }
        /// <p>The timestamp of when the scan was finished.</p>
        pub fn set_scan_end_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.scan_end_time = input;
            self
        }
        /// <p>Specifies the reason why the scan was initiated.</p>
        pub fn trigger_details(mut self, input: crate::model::TriggerDetails) -> Self {
            self.trigger_details = Some(input);
            self
        }
        /// <p>Specifies the reason why the scan was initiated.</p>
        pub fn set_trigger_details(
            mut self,
            input: std::option::Option<crate::model::TriggerDetails>,
        ) -> Self {
            self.trigger_details = input;
            self
        }
        /// <p>Represents the resources that were scanned in the scan entry.</p>
        pub fn resource_details(mut self, input: crate::model::ResourceDetails) -> Self {
            self.resource_details = Some(input);
            self
        }
        /// <p>Represents the resources that were scanned in the scan entry.</p>
        pub fn set_resource_details(
            mut self,
            input: std::option::Option<crate::model::ResourceDetails>,
        ) -> Self {
            self.resource_details = input;
            self
        }
        /// <p>Represents the result of the scan.</p>
        pub fn scan_result_details(mut self, input: crate::model::ScanResultDetails) -> Self {
            self.scan_result_details = Some(input);
            self
        }
        /// <p>Represents the result of the scan.</p>
        pub fn set_scan_result_details(
            mut self,
            input: std::option::Option<crate::model::ScanResultDetails>,
        ) -> Self {
            self.scan_result_details = input;
            self
        }
        /// <p>The ID for the account that belongs to the scan.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The ID for the account that belongs to the scan.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>Represents total bytes that were scanned.</p>
        pub fn total_bytes(mut self, input: i64) -> Self {
            self.total_bytes = Some(input);
            self
        }
        /// <p>Represents total bytes that were scanned.</p>
        pub fn set_total_bytes(mut self, input: std::option::Option<i64>) -> Self {
            self.total_bytes = input;
            self
        }
        /// <p>Represents the number of files that were scanned.</p>
        pub fn file_count(mut self, input: i64) -> Self {
            self.file_count = Some(input);
            self
        }
        /// <p>Represents the number of files that were scanned.</p>
        pub fn set_file_count(mut self, input: std::option::Option<i64>) -> Self {
            self.file_count = input;
            self
        }
        /// Appends an item to `attached_volumes`.
        ///
        /// To override the contents of this collection use [`set_attached_volumes`](Self::set_attached_volumes).
        ///
        /// <p>List of volumes that were attached to the original instance to be scanned.</p>
        pub fn attached_volumes(mut self, input: crate::model::VolumeDetail) -> Self {
            let mut v = self.attached_volumes.unwrap_or_default();
            v.push(input);
            self.attached_volumes = Some(v);
            self
        }
        /// <p>List of volumes that were attached to the original instance to be scanned.</p>
        pub fn set_attached_volumes(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::VolumeDetail>>,
        ) -> Self {
            self.attached_volumes = input;
            self
        }
        /// Consumes the builder and constructs a [`Scan`](crate::model::Scan).
        pub fn build(self) -> crate::model::Scan {
            crate::model::Scan {
                detector_id: self.detector_id,
                admin_detector_id: self.admin_detector_id,
                scan_id: self.scan_id,
                scan_status: self.scan_status,
                failure_reason: self.failure_reason,
                scan_start_time: self.scan_start_time,
                scan_end_time: self.scan_end_time,
                trigger_details: self.trigger_details,
                resource_details: self.resource_details,
                scan_result_details: self.scan_result_details,
                account_id: self.account_id,
                total_bytes: self.total_bytes.unwrap_or_default(),
                file_count: self.file_count.unwrap_or_default(),
                attached_volumes: self.attached_volumes,
            }
        }
    }
}
impl Scan {
    /// Creates a new builder-style object to manufacture [`Scan`](crate::model::Scan).
    pub fn builder() -> crate::model::scan::Builder {
        crate::model::scan::Builder::default()
    }
}

/// <p>Represents the result of the scan.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ScanResultDetails {
    /// <p>An enum value representing possible scan results.</p>
    #[doc(hidden)]
    pub scan_result: std::option::Option<crate::model::ScanResult>,
}
impl ScanResultDetails {
    /// <p>An enum value representing possible scan results.</p>
    pub fn scan_result(&self) -> std::option::Option<&crate::model::ScanResult> {
        self.scan_result.as_ref()
    }
}
/// See [`ScanResultDetails`](crate::model::ScanResultDetails).
pub mod scan_result_details {

    /// A builder for [`ScanResultDetails`](crate::model::ScanResultDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) scan_result: std::option::Option<crate::model::ScanResult>,
    }
    impl Builder {
        /// <p>An enum value representing possible scan results.</p>
        pub fn scan_result(mut self, input: crate::model::ScanResult) -> Self {
            self.scan_result = Some(input);
            self
        }
        /// <p>An enum value representing possible scan results.</p>
        pub fn set_scan_result(
            mut self,
            input: std::option::Option<crate::model::ScanResult>,
        ) -> Self {
            self.scan_result = input;
            self
        }
        /// Consumes the builder and constructs a [`ScanResultDetails`](crate::model::ScanResultDetails).
        pub fn build(self) -> crate::model::ScanResultDetails {
            crate::model::ScanResultDetails {
                scan_result: self.scan_result,
            }
        }
    }
}
impl ScanResultDetails {
    /// Creates a new builder-style object to manufacture [`ScanResultDetails`](crate::model::ScanResultDetails).
    pub fn builder() -> crate::model::scan_result_details::Builder {
        crate::model::scan_result_details::Builder::default()
    }
}

/// When writing a match expression against `ScanResult`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let scanresult = unimplemented!();
/// match scanresult {
///     ScanResult::Clean => { /* ... */ },
///     ScanResult::Infected => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `scanresult` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `ScanResult::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `ScanResult::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `ScanResult::NewFeature` is defined.
/// Specifically, when `scanresult` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `ScanResult::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum ScanResult {
    #[allow(missing_docs)] // documentation missing in model
    Clean,
    #[allow(missing_docs)] // documentation missing in model
    Infected,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for ScanResult {
    fn from(s: &str) -> Self {
        match s {
            "CLEAN" => ScanResult::Clean,
            "INFECTED" => ScanResult::Infected,
            other => ScanResult::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for ScanResult {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(ScanResult::from(s))
    }
}
impl ScanResult {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            ScanResult::Clean => "CLEAN",
            ScanResult::Infected => "INFECTED",
            ScanResult::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["CLEAN", "INFECTED"]
    }
}
impl AsRef<str> for ScanResult {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Represents the resources that were scanned in the scan entry.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct ResourceDetails {
    /// <p>InstanceArn that was scanned in the scan entry.</p>
    #[doc(hidden)]
    pub instance_arn: std::option::Option<std::string::String>,
}
impl ResourceDetails {
    /// <p>InstanceArn that was scanned in the scan entry.</p>
    pub fn instance_arn(&self) -> std::option::Option<&str> {
        self.instance_arn.as_deref()
    }
}
/// See [`ResourceDetails`](crate::model::ResourceDetails).
pub mod resource_details {

    /// A builder for [`ResourceDetails`](crate::model::ResourceDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) instance_arn: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>InstanceArn that was scanned in the scan entry.</p>
        pub fn instance_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.instance_arn = Some(input.into());
            self
        }
        /// <p>InstanceArn that was scanned in the scan entry.</p>
        pub fn set_instance_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.instance_arn = input;
            self
        }
        /// Consumes the builder and constructs a [`ResourceDetails`](crate::model::ResourceDetails).
        pub fn build(self) -> crate::model::ResourceDetails {
            crate::model::ResourceDetails {
                instance_arn: self.instance_arn,
            }
        }
    }
}
impl ResourceDetails {
    /// Creates a new builder-style object to manufacture [`ResourceDetails`](crate::model::ResourceDetails).
    pub fn builder() -> crate::model::resource_details::Builder {
        crate::model::resource_details::Builder::default()
    }
}

/// <p>Represents the reason the scan was triggered.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct TriggerDetails {
    /// <p>The ID of the GuardDuty finding that triggered the BirdDog scan.</p>
    #[doc(hidden)]
    pub guard_duty_finding_id: std::option::Option<std::string::String>,
    /// <p>The description of the scan trigger.</p>
    #[doc(hidden)]
    pub description: std::option::Option<std::string::String>,
}
impl TriggerDetails {
    /// <p>The ID of the GuardDuty finding that triggered the BirdDog scan.</p>
    pub fn guard_duty_finding_id(&self) -> std::option::Option<&str> {
        self.guard_duty_finding_id.as_deref()
    }
    /// <p>The description of the scan trigger.</p>
    pub fn description(&self) -> std::option::Option<&str> {
        self.description.as_deref()
    }
}
/// See [`TriggerDetails`](crate::model::TriggerDetails).
pub mod trigger_details {

    /// A builder for [`TriggerDetails`](crate::model::TriggerDetails).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) guard_duty_finding_id: std::option::Option<std::string::String>,
        pub(crate) description: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The ID of the GuardDuty finding that triggered the BirdDog scan.</p>
        pub fn guard_duty_finding_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.guard_duty_finding_id = Some(input.into());
            self
        }
        /// <p>The ID of the GuardDuty finding that triggered the BirdDog scan.</p>
        pub fn set_guard_duty_finding_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.guard_duty_finding_id = input;
            self
        }
        /// <p>The description of the scan trigger.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.description = Some(input.into());
            self
        }
        /// <p>The description of the scan trigger.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.description = input;
            self
        }
        /// Consumes the builder and constructs a [`TriggerDetails`](crate::model::TriggerDetails).
        pub fn build(self) -> crate::model::TriggerDetails {
            crate::model::TriggerDetails {
                guard_duty_finding_id: self.guard_duty_finding_id,
                description: self.description,
            }
        }
    }
}
impl TriggerDetails {
    /// Creates a new builder-style object to manufacture [`TriggerDetails`](crate::model::TriggerDetails).
    pub fn builder() -> crate::model::trigger_details::Builder {
        crate::model::trigger_details::Builder::default()
    }
}

/// When writing a match expression against `ScanStatus`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let scanstatus = unimplemented!();
/// match scanstatus {
///     ScanStatus::Completed => { /* ... */ },
///     ScanStatus::Failed => { /* ... */ },
///     ScanStatus::Running => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `scanstatus` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `ScanStatus::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `ScanStatus::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `ScanStatus::NewFeature` is defined.
/// Specifically, when `scanstatus` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `ScanStatus::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum ScanStatus {
    #[allow(missing_docs)] // documentation missing in model
    Completed,
    #[allow(missing_docs)] // documentation missing in model
    Failed,
    #[allow(missing_docs)] // documentation missing in model
    Running,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for ScanStatus {
    fn from(s: &str) -> Self {
        match s {
            "COMPLETED" => ScanStatus::Completed,
            "FAILED" => ScanStatus::Failed,
            "RUNNING" => ScanStatus::Running,
            other => ScanStatus::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for ScanStatus {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(ScanStatus::from(s))
    }
}
impl ScanStatus {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            ScanStatus::Completed => "COMPLETED",
            ScanStatus::Failed => "FAILED",
            ScanStatus::Running => "RUNNING",
            ScanStatus::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &["COMPLETED", "FAILED", "RUNNING"]
    }
}
impl AsRef<str> for ScanStatus {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Represents the criteria to be used in the filter for describing scan entries.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct FilterCriteria {
    /// <p>Represents a condition that when matched will be added to the response of the operation.</p>
    #[doc(hidden)]
    pub filter_criterion: std::option::Option<std::vec::Vec<crate::model::FilterCriterion>>,
}
impl FilterCriteria {
    /// <p>Represents a condition that when matched will be added to the response of the operation.</p>
    pub fn filter_criterion(&self) -> std::option::Option<&[crate::model::FilterCriterion]> {
        self.filter_criterion.as_deref()
    }
}
/// See [`FilterCriteria`](crate::model::FilterCriteria).
pub mod filter_criteria {

    /// A builder for [`FilterCriteria`](crate::model::FilterCriteria).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) filter_criterion:
            std::option::Option<std::vec::Vec<crate::model::FilterCriterion>>,
    }
    impl Builder {
        /// Appends an item to `filter_criterion`.
        ///
        /// To override the contents of this collection use [`set_filter_criterion`](Self::set_filter_criterion).
        ///
        /// <p>Represents a condition that when matched will be added to the response of the operation.</p>
        pub fn filter_criterion(mut self, input: crate::model::FilterCriterion) -> Self {
            let mut v = self.filter_criterion.unwrap_or_default();
            v.push(input);
            self.filter_criterion = Some(v);
            self
        }
        /// <p>Represents a condition that when matched will be added to the response of the operation.</p>
        pub fn set_filter_criterion(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::FilterCriterion>>,
        ) -> Self {
            self.filter_criterion = input;
            self
        }
        /// Consumes the builder and constructs a [`FilterCriteria`](crate::model::FilterCriteria).
        pub fn build(self) -> crate::model::FilterCriteria {
            crate::model::FilterCriteria {
                filter_criterion: self.filter_criterion,
            }
        }
    }
}
impl FilterCriteria {
    /// Creates a new builder-style object to manufacture [`FilterCriteria`](crate::model::FilterCriteria).
    pub fn builder() -> crate::model::filter_criteria::Builder {
        crate::model::filter_criteria::Builder::default()
    }
}

/// <p>Represents a condition that when matched will be added to the response of the operation. Irrespective of using any filter criteria, an administrator account can view the scan entries for all of its member accounts. However, each member account can view the scan entries only for their own account.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct FilterCriterion {
    /// <p>An enum value representing possible scan properties to match with given scan entries.</p>
    #[doc(hidden)]
    pub criterion_key: std::option::Option<crate::model::CriterionKey>,
    /// <p>Contains information about the condition.</p>
    #[doc(hidden)]
    pub filter_condition: std::option::Option<crate::model::FilterCondition>,
}
impl FilterCriterion {
    /// <p>An enum value representing possible scan properties to match with given scan entries.</p>
    pub fn criterion_key(&self) -> std::option::Option<&crate::model::CriterionKey> {
        self.criterion_key.as_ref()
    }
    /// <p>Contains information about the condition.</p>
    pub fn filter_condition(&self) -> std::option::Option<&crate::model::FilterCondition> {
        self.filter_condition.as_ref()
    }
}
/// See [`FilterCriterion`](crate::model::FilterCriterion).
pub mod filter_criterion {

    /// A builder for [`FilterCriterion`](crate::model::FilterCriterion).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) criterion_key: std::option::Option<crate::model::CriterionKey>,
        pub(crate) filter_condition: std::option::Option<crate::model::FilterCondition>,
    }
    impl Builder {
        /// <p>An enum value representing possible scan properties to match with given scan entries.</p>
        pub fn criterion_key(mut self, input: crate::model::CriterionKey) -> Self {
            self.criterion_key = Some(input);
            self
        }
        /// <p>An enum value representing possible scan properties to match with given scan entries.</p>
        pub fn set_criterion_key(
            mut self,
            input: std::option::Option<crate::model::CriterionKey>,
        ) -> Self {
            self.criterion_key = input;
            self
        }
        /// <p>Contains information about the condition.</p>
        pub fn filter_condition(mut self, input: crate::model::FilterCondition) -> Self {
            self.filter_condition = Some(input);
            self
        }
        /// <p>Contains information about the condition.</p>
        pub fn set_filter_condition(
            mut self,
            input: std::option::Option<crate::model::FilterCondition>,
        ) -> Self {
            self.filter_condition = input;
            self
        }
        /// Consumes the builder and constructs a [`FilterCriterion`](crate::model::FilterCriterion).
        pub fn build(self) -> crate::model::FilterCriterion {
            crate::model::FilterCriterion {
                criterion_key: self.criterion_key,
                filter_condition: self.filter_condition,
            }
        }
    }
}
impl FilterCriterion {
    /// Creates a new builder-style object to manufacture [`FilterCriterion`](crate::model::FilterCriterion).
    pub fn builder() -> crate::model::filter_criterion::Builder {
        crate::model::filter_criterion::Builder::default()
    }
}

/// <p>Contains information about the condition.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct FilterCondition {
    /// <p>Represents an <i>equal</i> <b></b> condition to be applied to a single field when querying for scan entries.</p>
    #[doc(hidden)]
    pub equals_value: std::option::Option<std::string::String>,
    /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for scan entries.</p>
    #[doc(hidden)]
    pub greater_than: i64,
    /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for scan entries.</p>
    #[doc(hidden)]
    pub less_than: i64,
}
impl FilterCondition {
    /// <p>Represents an <i>equal</i> <b></b> condition to be applied to a single field when querying for scan entries.</p>
    pub fn equals_value(&self) -> std::option::Option<&str> {
        self.equals_value.as_deref()
    }
    /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for scan entries.</p>
    pub fn greater_than(&self) -> i64 {
        self.greater_than
    }
    /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for scan entries.</p>
    pub fn less_than(&self) -> i64 {
        self.less_than
    }
}
/// See [`FilterCondition`](crate::model::FilterCondition).
pub mod filter_condition {

    /// A builder for [`FilterCondition`](crate::model::FilterCondition).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) equals_value: std::option::Option<std::string::String>,
        pub(crate) greater_than: std::option::Option<i64>,
        pub(crate) less_than: std::option::Option<i64>,
    }
    impl Builder {
        /// <p>Represents an <i>equal</i> <b></b> condition to be applied to a single field when querying for scan entries.</p>
        pub fn equals_value(mut self, input: impl Into<std::string::String>) -> Self {
            self.equals_value = Some(input.into());
            self
        }
        /// <p>Represents an <i>equal</i> <b></b> condition to be applied to a single field when querying for scan entries.</p>
        pub fn set_equals_value(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.equals_value = input;
            self
        }
        /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for scan entries.</p>
        pub fn greater_than(mut self, input: i64) -> Self {
            self.greater_than = Some(input);
            self
        }
        /// <p>Represents a <i>greater than</i> condition to be applied to a single field when querying for scan entries.</p>
        pub fn set_greater_than(mut self, input: std::option::Option<i64>) -> Self {
            self.greater_than = input;
            self
        }
        /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for scan entries.</p>
        pub fn less_than(mut self, input: i64) -> Self {
            self.less_than = Some(input);
            self
        }
        /// <p>Represents a <i>less than</i> condition to be applied to a single field when querying for scan entries.</p>
        pub fn set_less_than(mut self, input: std::option::Option<i64>) -> Self {
            self.less_than = input;
            self
        }
        /// Consumes the builder and constructs a [`FilterCondition`](crate::model::FilterCondition).
        pub fn build(self) -> crate::model::FilterCondition {
            crate::model::FilterCondition {
                equals_value: self.equals_value,
                greater_than: self.greater_than.unwrap_or_default(),
                less_than: self.less_than.unwrap_or_default(),
            }
        }
    }
}
impl FilterCondition {
    /// Creates a new builder-style object to manufacture [`FilterCondition`](crate::model::FilterCondition).
    pub fn builder() -> crate::model::filter_condition::Builder {
        crate::model::filter_condition::Builder::default()
    }
}

/// When writing a match expression against `CriterionKey`, it is important to ensure
/// your code is forward-compatible. That is, if a match arm handles a case for a
/// feature that is supported by the service but has not been represented as an enum
/// variant in a current version of SDK, your code should continue to work when you
/// upgrade SDK to a future version in which the enum does include a variant for that
/// feature.
///
/// Here is an example of how you can make a match expression forward-compatible:
///
/// ```text
/// # let criterionkey = unimplemented!();
/// match criterionkey {
///     CriterionKey::AccountId => { /* ... */ },
///     CriterionKey::Ec2InstanceArn => { /* ... */ },
///     CriterionKey::GuarddutyFindingId => { /* ... */ },
///     CriterionKey::ScanId => { /* ... */ },
///     CriterionKey::ScanStartTime => { /* ... */ },
///     CriterionKey::ScanStatus => { /* ... */ },
///     other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
///     _ => { /* ... */ },
/// }
/// ```
/// The above code demonstrates that when `criterionkey` represents
/// `NewFeature`, the execution path will lead to the second last match arm,
/// even though the enum does not contain a variant `CriterionKey::NewFeature`
/// in the current version of SDK. The reason is that the variable `other`,
/// created by the `@` operator, is bound to
/// `CriterionKey::Unknown(UnknownVariantValue("NewFeature".to_owned()))`
/// and calling `as_str` on it yields `"NewFeature"`.
/// This match expression is forward-compatible when executed with a newer
/// version of SDK where the variant `CriterionKey::NewFeature` is defined.
/// Specifically, when `criterionkey` represents `NewFeature`,
/// the execution path will hit the second last match arm as before by virtue of
/// calling `as_str` on `CriterionKey::NewFeature` also yielding `"NewFeature"`.
///
/// Explicitly matching on the `Unknown` variant should
/// be avoided for two reasons:
/// - The inner data `UnknownVariantValue` is opaque, and no further information can be extracted.
/// - It might inadvertently shadow other intended match arms.
#[allow(missing_docs)] // documentation missing in model
#[non_exhaustive]
#[derive(
    std::clone::Clone,
    std::cmp::Eq,
    std::cmp::Ord,
    std::cmp::PartialEq,
    std::cmp::PartialOrd,
    std::fmt::Debug,
    std::hash::Hash,
)]
pub enum CriterionKey {
    #[allow(missing_docs)] // documentation missing in model
    AccountId,
    #[allow(missing_docs)] // documentation missing in model
    Ec2InstanceArn,
    #[allow(missing_docs)] // documentation missing in model
    GuarddutyFindingId,
    #[allow(missing_docs)] // documentation missing in model
    ScanId,
    #[allow(missing_docs)] // documentation missing in model
    ScanStartTime,
    #[allow(missing_docs)] // documentation missing in model
    ScanStatus,
    /// `Unknown` contains new variants that have been added since this code was generated.
    Unknown(crate::types::UnknownVariantValue),
}
impl std::convert::From<&str> for CriterionKey {
    fn from(s: &str) -> Self {
        match s {
            "ACCOUNT_ID" => CriterionKey::AccountId,
            "EC2_INSTANCE_ARN" => CriterionKey::Ec2InstanceArn,
            "GUARDDUTY_FINDING_ID" => CriterionKey::GuarddutyFindingId,
            "SCAN_ID" => CriterionKey::ScanId,
            "SCAN_START_TIME" => CriterionKey::ScanStartTime,
            "SCAN_STATUS" => CriterionKey::ScanStatus,
            other => CriterionKey::Unknown(crate::types::UnknownVariantValue(other.to_owned())),
        }
    }
}
impl std::str::FromStr for CriterionKey {
    type Err = std::convert::Infallible;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(CriterionKey::from(s))
    }
}
impl CriterionKey {
    /// Returns the `&str` value of the enum member.
    pub fn as_str(&self) -> &str {
        match self {
            CriterionKey::AccountId => "ACCOUNT_ID",
            CriterionKey::Ec2InstanceArn => "EC2_INSTANCE_ARN",
            CriterionKey::GuarddutyFindingId => "GUARDDUTY_FINDING_ID",
            CriterionKey::ScanId => "SCAN_ID",
            CriterionKey::ScanStartTime => "SCAN_START_TIME",
            CriterionKey::ScanStatus => "SCAN_STATUS",
            CriterionKey::Unknown(value) => value.as_str(),
        }
    }
    /// Returns all the `&str` values of the enum members.
    pub const fn values() -> &'static [&'static str] {
        &[
            "ACCOUNT_ID",
            "EC2_INSTANCE_ARN",
            "GUARDDUTY_FINDING_ID",
            "SCAN_ID",
            "SCAN_START_TIME",
            "SCAN_STATUS",
        ]
    }
}
impl AsRef<str> for CriterionKey {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

/// <p>Contains information about the account.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct AccountDetail {
    /// <p>The member account ID.</p>
    #[doc(hidden)]
    pub account_id: std::option::Option<std::string::String>,
    /// <p>The email address of the member account.</p>
    #[doc(hidden)]
    pub email: std::option::Option<std::string::String>,
}
impl AccountDetail {
    /// <p>The member account ID.</p>
    pub fn account_id(&self) -> std::option::Option<&str> {
        self.account_id.as_deref()
    }
    /// <p>The email address of the member account.</p>
    pub fn email(&self) -> std::option::Option<&str> {
        self.email.as_deref()
    }
}
/// See [`AccountDetail`](crate::model::AccountDetail).
pub mod account_detail {

    /// A builder for [`AccountDetail`](crate::model::AccountDetail).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) account_id: std::option::Option<std::string::String>,
        pub(crate) email: std::option::Option<std::string::String>,
    }
    impl Builder {
        /// <p>The member account ID.</p>
        pub fn account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.account_id = Some(input.into());
            self
        }
        /// <p>The member account ID.</p>
        pub fn set_account_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.account_id = input;
            self
        }
        /// <p>The email address of the member account.</p>
        pub fn email(mut self, input: impl Into<std::string::String>) -> Self {
            self.email = Some(input.into());
            self
        }
        /// <p>The email address of the member account.</p>
        pub fn set_email(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.email = input;
            self
        }
        /// Consumes the builder and constructs a [`AccountDetail`](crate::model::AccountDetail).
        pub fn build(self) -> crate::model::AccountDetail {
            crate::model::AccountDetail {
                account_id: self.account_id,
                email: self.email,
            }
        }
    }
}
impl AccountDetail {
    /// Creates a new builder-style object to manufacture [`AccountDetail`](crate::model::AccountDetail).
    pub fn builder() -> crate::model::account_detail::Builder {
        crate::model::account_detail::Builder::default()
    }
}

/// <p>Specifies the names of the data sources that couldn't be enabled.</p>
#[non_exhaustive]
#[derive(std::clone::Clone, std::cmp::PartialEq, std::fmt::Debug)]
pub struct UnprocessedDataSourcesResult {
    /// <p>An object that contains information on the status of all Malware Protection data sources.</p>
    #[doc(hidden)]
    pub malware_protection: std::option::Option<crate::model::MalwareProtectionConfigurationResult>,
}
impl UnprocessedDataSourcesResult {
    /// <p>An object that contains information on the status of all Malware Protection data sources.</p>
    pub fn malware_protection(
        &self,
    ) -> std::option::Option<&crate::model::MalwareProtectionConfigurationResult> {
        self.malware_protection.as_ref()
    }
}
/// See [`UnprocessedDataSourcesResult`](crate::model::UnprocessedDataSourcesResult).
pub mod unprocessed_data_sources_result {

    /// A builder for [`UnprocessedDataSourcesResult`](crate::model::UnprocessedDataSourcesResult).
    #[derive(std::clone::Clone, std::cmp::PartialEq, std::default::Default, std::fmt::Debug)]
    pub struct Builder {
        pub(crate) malware_protection:
            std::option::Option<crate::model::MalwareProtectionConfigurationResult>,
    }
    impl Builder {
        /// <p>An object that contains information on the status of all Malware Protection data sources.</p>
        pub fn malware_protection(
            mut self,
            input: crate::model::MalwareProtectionConfigurationResult,
        ) -> Self {
            self.malware_protection = Some(input);
            self
        }
        /// <p>An object that contains information on the status of all Malware Protection data sources.</p>
        pub fn set_malware_protection(
            mut self,
            input: std::option::Option<crate::model::MalwareProtectionConfigurationResult>,
        ) -> Self {
            self.malware_protection = input;
            self
        }
        /// Consumes the builder and constructs a [`UnprocessedDataSourcesResult`](crate::model::UnprocessedDataSourcesResult).
        pub fn build(self) -> crate::model::UnprocessedDataSourcesResult {
            crate::model::UnprocessedDataSourcesResult {
                malware_protection: self.malware_protection,
            }
        }
    }
}
impl UnprocessedDataSourcesResult {
    /// Creates a new builder-style object to manufacture [`UnprocessedDataSourcesResult`](crate::model::UnprocessedDataSourcesResult).
    pub fn builder() -> crate::model::unprocessed_data_sources_result::Builder {
        crate::model::unprocessed_data_sources_result::Builder::default()
    }
}