// This file is @generated by prost-build.
/// Represents a particular Security Command Center service. This includes
/// settings information such as top-level enablement in addition to individual
/// module settings. Service settings can be configured at the organization,
/// folder, or project level. Service settings at the organization or folder
/// level are inherited by those in descendant folders and projects.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SecurityCenterService {
    /// Identifier. The name of the service, in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}/securityCenterServices/{service}`
    /// * `folders/{folder}/locations/{location}/securityCenterServices/{service}`
    /// * `projects/{project}/locations/{location}/securityCenterServices/{service}`
    ///
    /// The following values are valid for `{service}`:
    ///
    /// * `container-threat-detection`
    /// * `event-threat-detection`
    /// * `security-health-analytics`
    /// * `vm-threat-detection`
    /// * `web-security-scanner`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// Optional. The intended enablement state for the service at its level of the
    /// resource hierarchy. A `DISABLED` state will override all module enablement
    /// states to `DISABLED`.
    #[prost(enumeration = "security_center_service::EnablementState", tag = "2")]
    pub intended_enablement_state: i32,
    /// Output only. The effective enablement state for the service at its level of
    /// the resource hierarchy. If the intended state is set to `INHERITED`, the
    /// effective state will be inherited from the enablement state of an ancestor.
    /// This state may differ from the intended enablement state due to billing
    /// eligibility or onboarding status.
    #[prost(enumeration = "security_center_service::EnablementState", tag = "3")]
    pub effective_enablement_state: i32,
    /// Optional. The module configurations, including the enablement state for the
    /// service's modules. The absence of a module in the map implies that its
    /// configuration is inherited from its parents.
    #[prost(map = "string, message", tag = "4")]
    pub modules: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        security_center_service::ModuleSettings,
    >,
    /// Output only. The time the service was last updated. This could be due to an
    /// explicit user update or due to a side effect of another system change, such
    /// as billing subscription expiry.
    #[prost(message, optional, tag = "5")]
    pub update_time: ::core::option::Option<::prost_types::Timestamp>,
    /// Optional. Additional service-specific configuration. Not all services will
    /// utilize this field.
    #[prost(message, optional, tag = "6")]
    pub service_config: ::core::option::Option<::prost_types::Struct>,
}
/// Nested message and enum types in `SecurityCenterService`.
pub mod security_center_service {
    /// The settings for individual modules.
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct ModuleSettings {
        /// Optional. The intended enablement state for the module at its level of
        /// the resource hierarchy.
        #[prost(enumeration = "EnablementState", tag = "1")]
        pub intended_enablement_state: i32,
        /// Output only. The effective enablement state for the module at its level
        /// of the resource hierarchy. If the intended state is set to `INHERITED`,
        /// the effective state will be inherited from the enablement state of an
        /// ancestor. This state may differ from the intended enablement state due to
        /// billing eligibility or onboarding status.
        #[prost(enumeration = "EnablementState", tag = "2")]
        pub effective_enablement_state: i32,
    }
    /// Represents the possible enablement states for a service or module.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum EnablementState {
        /// Default value. This value is unused.
        Unspecified = 0,
        /// State is inherited from the parent resource. Valid as an intended
        /// enablement state, but not as an effective enablement state.
        Inherited = 1,
        /// State is enabled.
        Enabled = 2,
        /// State is disabled.
        Disabled = 3,
        /// Security Command Center is configured to ingest findings from this
        /// service, but not to enable this service. This state indicates that
        /// Security Command Center is misconfigured. You can't set this state
        /// yourself.
        IngestOnly = 4,
    }
    impl EnablementState {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "ENABLEMENT_STATE_UNSPECIFIED",
                Self::Inherited => "INHERITED",
                Self::Enabled => "ENABLED",
                Self::Disabled => "DISABLED",
                Self::IngestOnly => "INGEST_ONLY",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "ENABLEMENT_STATE_UNSPECIFIED" => Some(Self::Unspecified),
                "INHERITED" => Some(Self::Inherited),
                "ENABLED" => Some(Self::Enabled),
                "DISABLED" => Some(Self::Disabled),
                "INGEST_ONLY" => Some(Self::IngestOnly),
                _ => None,
            }
        }
    }
}
/// The representation of a Security Health Analytics custom module at a
/// specified level of the resource hierarchy: organization, folder, or project.
/// If a custom module is inherited from an ancestor organization or folder, then
/// the enablement state is set to the value that is effective in the parent, not
/// to `INHERITED`. For example, if the module is enabled in an organization or
/// folder, then the effective enablement state for the module is `ENABLED` in
/// all descendant folders or projects.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EffectiveSecurityHealthAnalyticsCustomModule {
    /// Identifier. The full resource name of the custom module, in one of the
    /// following formats:
    ///
    /// * `organizations/organization/{location}/effectiveSecurityHealthAnalyticsCustomModules/{custom_module}`
    /// * `folders/folder/{location}/effectiveSecurityHealthAnalyticsCustomModules/{custom_module}`
    /// * `projects/project/{location}/effectiveSecurityHealthAnalyticsCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// Output only. The user-specified configuration for the module.
    #[prost(message, optional, tag = "2")]
    pub custom_config: ::core::option::Option<CustomConfig>,
    /// Output only. The effective enablement state for the module at the given
    /// level of the hierarchy.
    #[prost(
        enumeration = "effective_security_health_analytics_custom_module::EnablementState",
        tag = "3"
    )]
    pub enablement_state: i32,
    /// Output only. The display name for the custom module. The name must be
    /// between 1 and 128 characters, start with a lowercase letter, and contain
    /// alphanumeric characters or underscores only.
    #[prost(string, tag = "4")]
    pub display_name: ::prost::alloc::string::String,
}
/// Nested message and enum types in `EffectiveSecurityHealthAnalyticsCustomModule`.
pub mod effective_security_health_analytics_custom_module {
    /// The enablement state of the module.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum EnablementState {
        /// Default value. This value is unused.
        Unspecified = 0,
        /// The module is enabled at the given level.
        Enabled = 1,
        /// The module is disabled at the given level.
        Disabled = 2,
    }
    impl EnablementState {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "ENABLEMENT_STATE_UNSPECIFIED",
                Self::Enabled => "ENABLED",
                Self::Disabled => "DISABLED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "ENABLEMENT_STATE_UNSPECIFIED" => Some(Self::Unspecified),
                "ENABLED" => Some(Self::Enabled),
                "DISABLED" => Some(Self::Disabled),
                _ => None,
            }
        }
    }
}
/// Request message for
/// \[SecurityCenterManagement.ListEffectiveSecurityHealthAnalyticsCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListEffectiveSecurityHealthAnalyticsCustomModules\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ListEffectiveSecurityHealthAnalyticsCustomModulesRequest {
    /// Required. Name of parent to list effective custom modules, in one of the
    /// following formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Optional. The maximum number of results to return in a single response.
    /// Default is 10, minimum is 1, maximum is 1000.
    #[prost(int32, tag = "2")]
    pub page_size: i32,
    /// Optional. A pagination token returned from a previous request. Provide this
    /// token to retrieve the next page of results.
    ///
    /// When paginating, the rest of the request must match the request that
    /// generated the page token.
    #[prost(string, tag = "3")]
    pub page_token: ::prost::alloc::string::String,
}
/// Response message for
/// \[SecurityCenterManagement.ListEffectiveSecurityHealthAnalyticsCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListEffectiveSecurityHealthAnalyticsCustomModules\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListEffectiveSecurityHealthAnalyticsCustomModulesResponse {
    /// The list of effective Security Health Analytics custom modules.
    #[prost(message, repeated, tag = "1")]
    pub effective_security_health_analytics_custom_modules: ::prost::alloc::vec::Vec<
        EffectiveSecurityHealthAnalyticsCustomModule,
    >,
    /// A pagination token. To retrieve the next page of results, call the method
    /// again with this token.
    #[prost(string, tag = "2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.GetEffectiveSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.GetEffectiveSecurityHealthAnalyticsCustomModule\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetEffectiveSecurityHealthAnalyticsCustomModuleRequest {
    /// Required. The full resource name of the custom module, specified in one of
    /// the following formats:
    ///
    /// * `organizations/organization/{location}/effectiveSecurityHealthAnalyticsCustomModules/{custom_module}`
    /// * `folders/folder/{location}/effectiveSecurityHealthAnalyticsCustomModules/{custom_module}`
    /// * `projects/project/{location}/effectiveSecurityHealthAnalyticsCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
}
/// Represents an instance of a Security Health Analytics custom module,
/// including its full module name, display name, enablement state, and last
/// updated time. You can create a custom module at the organization, folder, or
/// project level. Custom modules that you create at the organization or folder
/// level are inherited by the descendant folders and projects.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SecurityHealthAnalyticsCustomModule {
    /// Identifier. The full resource name of the custom module, in one of the
    /// following formats:
    ///
    /// * `organizations/{organization}/locations/{location}/securityHealthAnalyticsCustomModules/{custom_module}`
    /// * `folders/{folder}/locations/{location}/securityHealthAnalyticsCustomModules/{custom_module}`
    /// * `projects/{project}/locations/{location}/securityHealthAnalyticsCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// Optional. The display name of the Security Health Analytics custom module.
    /// This display name becomes the finding category for all findings that are
    /// returned by this custom module. The display name must be between 1 and 128
    /// characters, start with a lowercase letter, and contain alphanumeric
    /// characters or underscores only.
    #[prost(string, tag = "2")]
    pub display_name: ::prost::alloc::string::String,
    /// Optional. The enablement state of the custom module.
    #[prost(
        enumeration = "security_health_analytics_custom_module::EnablementState",
        tag = "3"
    )]
    pub enablement_state: i32,
    /// Output only. The time at which the custom module was last updated.
    #[prost(message, optional, tag = "4")]
    pub update_time: ::core::option::Option<::prost_types::Timestamp>,
    /// Output only. The editor that last updated the custom module.
    #[prost(string, tag = "5")]
    pub last_editor: ::prost::alloc::string::String,
    /// Output only. Specifies the organization or folder from which the custom
    /// module is inherited. If empty, indicates that the custom module was created
    /// in the organization, folder, or project in which you are viewing the custom
    /// module.
    #[prost(string, tag = "6")]
    pub ancestor_module: ::prost::alloc::string::String,
    /// Optional. The user-specified custom configuration for the module.
    #[prost(message, optional, tag = "7")]
    pub custom_config: ::core::option::Option<CustomConfig>,
}
/// Nested message and enum types in `SecurityHealthAnalyticsCustomModule`.
pub mod security_health_analytics_custom_module {
    /// Possible enablement states of a custom module.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum EnablementState {
        /// Default value. This value is unused.
        Unspecified = 0,
        /// The module is enabled at the given organization, folder, or project.
        Enabled = 1,
        /// The module is disabled at the given organization, folder, or project.
        Disabled = 2,
        /// State is inherited from an ancestor module. The module will either
        /// be effectively `ENABLED` or `DISABLED` based on its closest non-inherited
        /// ancestor module in the resource hierarchy. If you try to set a top-level
        /// module (a module with no parent) to the `INHERITED` state, you receive an
        /// `INVALID_ARGUMENT` error.
        Inherited = 3,
    }
    impl EnablementState {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "ENABLEMENT_STATE_UNSPECIFIED",
                Self::Enabled => "ENABLED",
                Self::Disabled => "DISABLED",
                Self::Inherited => "INHERITED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "ENABLEMENT_STATE_UNSPECIFIED" => Some(Self::Unspecified),
                "ENABLED" => Some(Self::Enabled),
                "DISABLED" => Some(Self::Disabled),
                "INHERITED" => Some(Self::Inherited),
                _ => None,
            }
        }
    }
}
/// Defines the properties in a custom module configuration for Security
/// Health Analytics. Use the custom module configuration to create custom
/// detectors that generate custom findings for resources that you specify.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CustomConfig {
    /// Optional. The Common Expression Language (CEL) expression to evaluate to
    /// produce findings. When the expression evaluates to `true` against a
    /// resource, a finding is generated.
    #[prost(message, optional, tag = "1")]
    pub predicate: ::core::option::Option<super::super::super::r#type::Expr>,
    /// Optional. Custom output properties.
    #[prost(message, optional, tag = "2")]
    pub custom_output: ::core::option::Option<custom_config::CustomOutputSpec>,
    /// Optional. The Cloud Asset Inventory resource types that the custom module
    /// operates on. For information about resource types, see [Supported asset
    /// types](<https://cloud.google.com/asset-inventory/docs/supported-asset-types>).
    /// Each custom module can specify up to 5 resource types.
    #[prost(message, optional, tag = "3")]
    pub resource_selector: ::core::option::Option<custom_config::ResourceSelector>,
    /// Optional. The severity to assign to findings generated by the module.
    #[prost(enumeration = "custom_config::Severity", tag = "4")]
    pub severity: i32,
    /// Optional. Text that describes the vulnerability or misconfiguration that
    /// the custom module detects. This explanation is returned with each finding
    /// instance to help investigators understand the detected issue. The text must
    /// be enclosed in quotation marks.
    #[prost(string, tag = "5")]
    pub description: ::prost::alloc::string::String,
    /// Optional. An explanation of the recommended steps that security teams can
    /// take to resolve the detected issue. This explanation is returned with each
    /// finding generated by this module.
    #[prost(string, tag = "6")]
    pub recommendation: ::prost::alloc::string::String,
}
/// Nested message and enum types in `CustomConfig`.
pub mod custom_config {
    /// A set of optional name-value pairs that define custom source properties to
    /// return with each finding that is generated by the custom module. The custom
    /// source properties that are defined here are included in the finding.
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct CustomOutputSpec {
        /// Optional. A list of custom output properties to add to the finding.
        #[prost(message, repeated, tag = "1")]
        pub properties: ::prost::alloc::vec::Vec<custom_output_spec::Property>,
    }
    /// Nested message and enum types in `CustomOutputSpec`.
    pub mod custom_output_spec {
        /// An individual name-value pair that defines a custom source property.
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Property {
            /// Optional. Name of the property for the custom output.
            #[prost(string, tag = "1")]
            pub name: ::prost::alloc::string::String,
            /// Optional. The CEL expression for the custom output. A resource property
            /// can be specified to return the value of the property or a text string
            /// enclosed in quotation marks.
            #[prost(message, optional, tag = "2")]
            pub value_expression: ::core::option::Option<
                super::super::super::super::super::r#type::Expr,
            >,
        }
    }
    /// Resource for selecting resource type.
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct ResourceSelector {
        /// Optional. The resource types to run the detector on.
        #[prost(string, repeated, tag = "1")]
        pub resource_types: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    }
    /// Defines the valid value options for the severity of a finding.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Severity {
        /// Default value. This value is unused.
        Unspecified = 0,
        /// Critical severity.
        Critical = 1,
        /// High severity.
        High = 2,
        /// Medium severity.
        Medium = 3,
        /// Low severity.
        Low = 4,
    }
    impl Severity {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "SEVERITY_UNSPECIFIED",
                Self::Critical => "CRITICAL",
                Self::High => "HIGH",
                Self::Medium => "MEDIUM",
                Self::Low => "LOW",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "SEVERITY_UNSPECIFIED" => Some(Self::Unspecified),
                "CRITICAL" => Some(Self::Critical),
                "HIGH" => Some(Self::High),
                "MEDIUM" => Some(Self::Medium),
                "LOW" => Some(Self::Low),
                _ => None,
            }
        }
    }
}
/// Request message for
/// \[SecurityCenterManagement.ListSecurityHealthAnalyticsCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListSecurityHealthAnalyticsCustomModules\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ListSecurityHealthAnalyticsCustomModulesRequest {
    /// Required. Name of the parent organization, folder, or project in which to
    /// list custom modules, in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Optional. The maximum number of results to return in a single response.
    /// Default is 10, minimum is 1, maximum is 1000.
    #[prost(int32, tag = "2")]
    pub page_size: i32,
    /// Optional. A pagination token returned from a previous request. Provide this
    /// token to retrieve the next page of results.
    ///
    /// When paginating, the rest of the request must match the request that
    /// generated the page token.
    #[prost(string, tag = "3")]
    pub page_token: ::prost::alloc::string::String,
}
/// Response message for
/// \[SecurityCenterManagement.ListSecurityHealthAnalyticsCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListSecurityHealthAnalyticsCustomModules\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListSecurityHealthAnalyticsCustomModulesResponse {
    /// The list of Security Health Analytics custom modules.
    #[prost(message, repeated, tag = "1")]
    pub security_health_analytics_custom_modules: ::prost::alloc::vec::Vec<
        SecurityHealthAnalyticsCustomModule,
    >,
    /// A pagination token. To retrieve the next page of results, call the method
    /// again with this token.
    #[prost(string, tag = "2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.ListDescendantSecurityHealthAnalyticsCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListDescendantSecurityHealthAnalyticsCustomModules\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ListDescendantSecurityHealthAnalyticsCustomModulesRequest {
    /// Required. Name of the parent organization, folder, or project in which to
    /// list custom modules, in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Optional. The maximum number of results to return in a single response.
    /// Default is 10, minimum is 1, maximum is 1000.
    #[prost(int32, tag = "2")]
    pub page_size: i32,
    /// Optional. A pagination token returned from a previous request. Provide this
    /// token to retrieve the next page of results.
    ///
    /// When paginating, the rest of the request must match the request that
    /// generated the page token.
    #[prost(string, tag = "3")]
    pub page_token: ::prost::alloc::string::String,
}
/// Response message for
/// \[SecurityCenterManagement.ListDescendantSecurityHealthAnalyticsCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListDescendantSecurityHealthAnalyticsCustomModules\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListDescendantSecurityHealthAnalyticsCustomModulesResponse {
    /// The list of SecurityHealthAnalyticsCustomModules
    #[prost(message, repeated, tag = "1")]
    pub security_health_analytics_custom_modules: ::prost::alloc::vec::Vec<
        SecurityHealthAnalyticsCustomModule,
    >,
    /// A pagination token. To retrieve the next page of results, call the method
    /// again with this token.
    #[prost(string, tag = "2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.GetSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.GetSecurityHealthAnalyticsCustomModule\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetSecurityHealthAnalyticsCustomModuleRequest {
    /// Required. Name of the resource, in the format
    /// `projects/{project}/locations/{location}/securityHealthAnalyticsCustomModules/{custom_module}`.
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.CreateSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.CreateSecurityHealthAnalyticsCustomModule\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateSecurityHealthAnalyticsCustomModuleRequest {
    /// Required. Name of the parent organization, folder, or project of the
    /// module, in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Required. The resource being created.
    #[prost(message, optional, tag = "2")]
    pub security_health_analytics_custom_module: ::core::option::Option<
        SecurityHealthAnalyticsCustomModule,
    >,
    /// Optional. When set to `true`, the request will be validated (including IAM
    /// checks), but no module will be created. An `OK` response indicates that the
    /// request is valid, while an error response indicates that the request is
    /// invalid.
    ///
    /// If the request is valid, a subsequent request to create the module could
    /// still fail for one of the following reasons:
    ///
    /// * The state of your cloud resources changed; for example, you lost a
    ///   required IAM permission
    /// * An error occurred during creation of the module
    ///
    /// Defaults to `false`.
    #[prost(bool, tag = "3")]
    pub validate_only: bool,
}
/// Request message for
/// \[SecurityCenterManagement.UpdateSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.UpdateSecurityHealthAnalyticsCustomModule\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateSecurityHealthAnalyticsCustomModuleRequest {
    /// Required. The fields to update. The following values are valid:
    ///
    /// * `custom_config`
    /// * `enablement_state`
    ///
    /// If you omit this field or set it to the wildcard value `*`, then all
    /// eligible fields are updated.
    #[prost(message, optional, tag = "1")]
    pub update_mask: ::core::option::Option<::prost_types::FieldMask>,
    /// Required. The resource being updated.
    #[prost(message, optional, tag = "2")]
    pub security_health_analytics_custom_module: ::core::option::Option<
        SecurityHealthAnalyticsCustomModule,
    >,
    /// Optional. When set to `true`, the request will be validated (including IAM
    /// checks), but no module will be updated. An `OK` response indicates that the
    /// request is valid, while an error response indicates that the request is
    /// invalid.
    ///
    /// If the request is valid, a subsequent request to update the module could
    /// still fail for one of the following reasons:
    ///
    /// * The state of your cloud resources changed; for example, you lost a
    ///   required IAM permission
    /// * An error occurred during creation of the module
    ///
    /// Defaults to `false`.
    #[prost(bool, tag = "3")]
    pub validate_only: bool,
}
/// Request message for
/// \[SecurityCenterManagement.DeleteSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.DeleteSecurityHealthAnalyticsCustomModule\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DeleteSecurityHealthAnalyticsCustomModuleRequest {
    /// Required. The resource name of the SHA custom module, in one of the
    /// following formats:
    ///
    /// * `organizations/{organization}/locations/{location}/securityHealthAnalyticsCustomModules/{custom_module}`
    /// * `folders/{folder}/locations/{location}/securityHealthAnalyticsCustomModules/{custom_module}`
    /// * `projects/{project}/locations/{location}/securityHealthAnalyticsCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// Optional. When set to `true`, the request will be validated (including IAM
    /// checks), but no module will be deleted. An `OK` response indicates that the
    /// request is valid, while an error response indicates that the request is
    /// invalid.
    ///
    /// If the request is valid, a subsequent request to delete the module could
    /// still fail for one of the following reasons:
    ///
    /// * The state of your cloud resources changed; for example, you lost a
    ///   required IAM permission
    /// * An error occurred during deletion of the module
    ///
    /// Defaults to `false`.
    #[prost(bool, tag = "2")]
    pub validate_only: bool,
}
/// Request message for
/// \[SecurityCenterManagement.SimulateSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.SimulateSecurityHealthAnalyticsCustomModule\].
/// The maximum size of the request is 4 MiB.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SimulateSecurityHealthAnalyticsCustomModuleRequest {
    /// Required. The relative resource name of the organization, project, or
    /// folder. For more information about relative resource names, see [AIP-122:
    /// Resource names](<https://google.aip.dev/122>). Example:
    /// `organizations/{organization_id}`.
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Required. The custom configuration that you need to test.
    #[prost(message, optional, tag = "2")]
    pub custom_config: ::core::option::Option<CustomConfig>,
    /// Required. Resource data to simulate custom module against.
    #[prost(message, optional, tag = "3")]
    pub resource: ::core::option::Option<
        simulate_security_health_analytics_custom_module_request::SimulatedResource,
    >,
}
/// Nested message and enum types in `SimulateSecurityHealthAnalyticsCustomModuleRequest`.
pub mod simulate_security_health_analytics_custom_module_request {
    /// Manually constructed information about a resource.
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct SimulatedResource {
        /// Required. The type of the resource. For example,
        /// `compute.googleapis.com/Disk`.
        #[prost(string, tag = "1")]
        pub resource_type: ::prost::alloc::string::String,
        /// Optional. A representation of the Google Cloud resource. Should match the
        /// Google Cloud resource JSON format.
        ///
        /// If the custom module evaluates only the IAM allow policy, then you can
        /// omit this field.
        #[prost(message, optional, tag = "2")]
        pub resource_data: ::core::option::Option<::prost_types::Struct>,
        /// Optional. A representation of the IAM allow policy.
        ///
        /// If the custom module evaluates only the resource data, then you can omit
        /// this field.
        #[prost(message, optional, tag = "3")]
        pub iam_policy_data: ::core::option::Option<
            super::super::super::super::iam::v1::Policy,
        >,
    }
}
/// The minimum set of fields needed to represent a simulated finding from a
/// Security Health Analytics custom module.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SimulatedFinding {
    /// Identifier. The [relative resource name](<https://google.aip.dev/122>) of the
    /// finding, in one of the following formats:
    ///
    /// * `organizations/{organization_id}/sources/{source_id}/findings/{finding_id}`
    /// * `folders/{folder_id}/sources/{source_id}/findings/{finding_id}`
    /// * `projects/{project_id}/sources/{source_id}/findings/{finding_id}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// The [relative resource name](<https://google.aip.dev/122>) of the source the
    /// finding belongs to. For example,
    /// `organizations/{organization_id}/sources/{source_id}`. This field is
    /// immutable after creation time.
    #[prost(string, tag = "2")]
    pub parent: ::prost::alloc::string::String,
    /// For findings on Google Cloud resources, the
    /// [full resource name](<https://google.aip.dev/122#full-resource-names>) of the
    /// Google Cloud resource this finding is for. When the finding is for a
    /// non-Google Cloud resource, the value can be a customer or partner defined
    /// string. This field is immutable after creation time.
    #[prost(string, tag = "3")]
    pub resource_name: ::prost::alloc::string::String,
    /// The additional taxonomy group within findings from a given source. For
    /// example, `XSS_FLASH_INJECTION`. This field is immutable after creation
    /// time.
    #[prost(string, tag = "4")]
    pub category: ::prost::alloc::string::String,
    /// Output only. The state of the finding.
    #[prost(enumeration = "simulated_finding::State", tag = "5")]
    pub state: i32,
    /// Source-specific properties. These properties are managed by the source
    /// that writes the finding. The key names must be between 1 and 255
    /// characters; they must start with a letter and contain alphanumeric
    /// characters or underscores only.
    #[prost(map = "string, message", tag = "6")]
    pub source_properties: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        ::prost_types::Value,
    >,
    /// The time the finding was first detected. If an existing finding is updated,
    /// then this is the time the update occurred. If the finding is later
    /// resolved, then this time reflects when the finding was resolved.
    ///
    /// For example, if the finding represents an open firewall, this property
    /// captures the time the detector believes the firewall became open. The
    /// accuracy is determined by the detector.
    ///
    /// The event time must not be set to a value greater than the current
    /// timestamp.
    #[prost(message, optional, tag = "7")]
    pub event_time: ::core::option::Option<::prost_types::Timestamp>,
    /// The severity of the finding. This field is managed by the source that
    /// writes the finding.
    #[prost(enumeration = "simulated_finding::Severity", tag = "8")]
    pub severity: i32,
    /// The class of the finding.
    #[prost(enumeration = "simulated_finding::FindingClass", tag = "9")]
    pub finding_class: i32,
}
/// Nested message and enum types in `SimulatedFinding`.
pub mod simulated_finding {
    /// The state of the finding.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum State {
        /// Default value. This value is unused.
        Unspecified = 0,
        /// The finding requires attention and has not been addressed yet.
        Active = 1,
        /// The finding has been fixed, triaged as a non-issue, or otherwise
        /// addressed and is no longer active.
        Inactive = 2,
    }
    impl State {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "STATE_UNSPECIFIED",
                Self::Active => "ACTIVE",
                Self::Inactive => "INACTIVE",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "STATE_UNSPECIFIED" => Some(Self::Unspecified),
                "ACTIVE" => Some(Self::Active),
                "INACTIVE" => Some(Self::Inactive),
                _ => None,
            }
        }
    }
    /// The severity of the finding.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Severity {
        /// Default value. This value is unused.
        Unspecified = 0,
        /// For vulnerabilities: A critical vulnerability is easily discoverable by
        /// an external actor, exploitable, and results in the direct ability to
        /// execute arbitrary code, exfiltrate data, and otherwise gain additional
        /// access and privileges to cloud resources and workloads. Examples include
        /// publicly accessible unprotected user data and public SSH access with weak
        /// or no passwords.
        ///
        /// For threats: Indicates a threat that is able to access, modify, or delete
        /// data or execute unauthorized code within existing resources.
        Critical = 1,
        /// For vulnerabilities: A high-risk vulnerability can be easily discovered
        /// and exploited in combination with other vulnerabilities in order to gain
        /// direct access and the ability to execute arbitrary code, exfiltrate data,
        /// and otherwise gain additional access and privileges to cloud resources
        /// and workloads. An example is a database with weak or no passwords that is
        /// only accessible internally. This database could easily be compromised by
        /// an actor that had access to the internal network.
        ///
        /// For threats: Indicates a threat that is able to create new computational
        /// resources in an environment but not able to access data or execute code
        /// in existing resources.
        High = 2,
        /// For vulnerabilities: A medium-risk vulnerability could be used by an
        /// actor to gain access to resources or privileges that enable them to
        /// eventually (through multiple steps or a complex exploit) gain access and
        /// the ability to execute arbitrary code or exfiltrate data. An example is a
        /// service account with access to more projects than it should have. If an
        /// actor gains access to the service account, they could potentially use
        /// that access to manipulate a project the service account was not intended
        /// to.
        ///
        /// For threats: Indicates a threat that is able to cause operational impact
        /// but may not access data or execute unauthorized code.
        Medium = 3,
        /// For vulnerabilities: A low-risk vulnerability hampers a security
        /// organization's ability to detect vulnerabilities or active threats in
        /// their deployment, or prevents the root cause investigation of security
        /// issues. An example is monitoring and logs being disabled for resource
        /// configurations and access.
        ///
        /// For threats: Indicates a threat that has obtained minimal access to an
        /// environment but is not able to access data, execute code, or create
        /// resources.
        Low = 4,
    }
    impl Severity {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "SEVERITY_UNSPECIFIED",
                Self::Critical => "CRITICAL",
                Self::High => "HIGH",
                Self::Medium => "MEDIUM",
                Self::Low => "LOW",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "SEVERITY_UNSPECIFIED" => Some(Self::Unspecified),
                "CRITICAL" => Some(Self::Critical),
                "HIGH" => Some(Self::High),
                "MEDIUM" => Some(Self::Medium),
                "LOW" => Some(Self::Low),
                _ => None,
            }
        }
    }
    /// Represents what kind of finding it is.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum FindingClass {
        /// Default value. This value is unused.
        Unspecified = 0,
        /// Describes unwanted or malicious activity.
        Threat = 1,
        /// Describes a potential weakness in software that increases risk to
        /// confidentiality, integrity, and availability.
        Vulnerability = 2,
        /// Describes a potential weakness in cloud resource or asset configuration
        /// that increases risk.
        Misconfiguration = 3,
        /// Describes a security observation that is for informational purposes.
        Observation = 4,
        /// Describes an error that prevents Security Command Center from working
        /// correctly.
        SccError = 5,
        /// Describes a potential security risk due to a change in the security
        /// posture.
        PostureViolation = 6,
        /// Describes a combination of security issues that represent a more severe
        /// security problem when taken together.
        ToxicCombination = 7,
    }
    impl FindingClass {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "FINDING_CLASS_UNSPECIFIED",
                Self::Threat => "THREAT",
                Self::Vulnerability => "VULNERABILITY",
                Self::Misconfiguration => "MISCONFIGURATION",
                Self::Observation => "OBSERVATION",
                Self::SccError => "SCC_ERROR",
                Self::PostureViolation => "POSTURE_VIOLATION",
                Self::ToxicCombination => "TOXIC_COMBINATION",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "FINDING_CLASS_UNSPECIFIED" => Some(Self::Unspecified),
                "THREAT" => Some(Self::Threat),
                "VULNERABILITY" => Some(Self::Vulnerability),
                "MISCONFIGURATION" => Some(Self::Misconfiguration),
                "OBSERVATION" => Some(Self::Observation),
                "SCC_ERROR" => Some(Self::SccError),
                "POSTURE_VIOLATION" => Some(Self::PostureViolation),
                "TOXIC_COMBINATION" => Some(Self::ToxicCombination),
                _ => None,
            }
        }
    }
}
/// Response message for
/// \[SecurityCenterManagement.SimulateSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.SimulateSecurityHealthAnalyticsCustomModule\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SimulateSecurityHealthAnalyticsCustomModuleResponse {
    /// Result for test case in the corresponding request.
    #[prost(message, optional, tag = "1")]
    pub result: ::core::option::Option<
        simulate_security_health_analytics_custom_module_response::SimulatedResult,
    >,
}
/// Nested message and enum types in `SimulateSecurityHealthAnalyticsCustomModuleResponse`.
pub mod simulate_security_health_analytics_custom_module_response {
    /// Possible test result.
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct SimulatedResult {
        /// The result of the simulation.
        #[prost(oneof = "simulated_result::Result", tags = "1, 2, 3")]
        pub result: ::core::option::Option<simulated_result::Result>,
    }
    /// Nested message and enum types in `SimulatedResult`.
    pub mod simulated_result {
        /// The result of the simulation.
        #[derive(Clone, PartialEq, ::prost::Oneof)]
        pub enum Result {
            /// Finding that would be published for the test case if a violation is
            /// detected.
            #[prost(message, tag = "1")]
            Finding(super::super::SimulatedFinding),
            /// Indicates that the test case does not trigger any violation.
            #[prost(message, tag = "2")]
            NoViolation(()),
            /// Error encountered during the test.
            #[prost(message, tag = "3")]
            Error(super::super::super::super::super::rpc::Status),
        }
    }
}
/// The representation of an
/// \[EventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.EventThreatDetectionCustomModule\]
/// at a given level, taking hierarchy into account and resolving various fields
/// accordingly. For example, if the module is enabled at the ancestor level,
/// then effective modules at all descendant levels will have their enablement
/// state set to `ENABLED`. Similarly, if `module.inherited` is set, then the
/// effective module's configuration will reflect the ancestor's configuration.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EffectiveEventThreatDetectionCustomModule {
    /// Identifier. The resource name of the Event Threat Detection custom module,
    /// in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}/effectiveEventThreatDetectionCustomModules/{custom_module}`
    /// * `folders/{folder}/locations/{location}/effectiveEventThreatDetectionCustomModules/{custom_module}`
    /// * `projects/{project}/locations/{location}/effectiveEventThreatDetectionCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// Output only. Configuration for the effective module.
    #[prost(message, optional, tag = "2")]
    pub config: ::core::option::Option<::prost_types::Struct>,
    /// Output only. The effective state of enablement for the module at the given
    /// level of the hierarchy.
    #[prost(
        enumeration = "effective_event_threat_detection_custom_module::EnablementState",
        tag = "3"
    )]
    pub enablement_state: i32,
    /// Output only. Type for the module (for example, `CONFIGURABLE_BAD_IP`).
    #[prost(string, tag = "4")]
    pub r#type: ::prost::alloc::string::String,
    /// Output only. The human-readable name of the module.
    #[prost(string, tag = "5")]
    pub display_name: ::prost::alloc::string::String,
    /// Output only. A description of the module.
    #[prost(string, tag = "6")]
    pub description: ::prost::alloc::string::String,
}
/// Nested message and enum types in `EffectiveEventThreatDetectionCustomModule`.
pub mod effective_event_threat_detection_custom_module {
    /// The enablement state of the module.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum EnablementState {
        /// Default value. This value is unused.
        Unspecified = 0,
        /// The module is enabled at the given level.
        Enabled = 1,
        /// The module is disabled at the given level.
        Disabled = 2,
    }
    impl EnablementState {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "ENABLEMENT_STATE_UNSPECIFIED",
                Self::Enabled => "ENABLED",
                Self::Disabled => "DISABLED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "ENABLEMENT_STATE_UNSPECIFIED" => Some(Self::Unspecified),
                "ENABLED" => Some(Self::Enabled),
                "DISABLED" => Some(Self::Disabled),
                _ => None,
            }
        }
    }
}
/// Request message for
/// \[SecurityCenterManagement.ListEffectiveEventThreatDetectionCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListEffectiveEventThreatDetectionCustomModules\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ListEffectiveEventThreatDetectionCustomModulesRequest {
    /// Required. Name of parent to list effective custom modules, in one of the
    /// following formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Optional. The maximum number of results to return in a single response.
    /// Default is 10, minimum is 1, maximum is 1000.
    #[prost(int32, tag = "2")]
    pub page_size: i32,
    /// Optional. A pagination token returned from a previous request. Provide this
    /// token to retrieve the next page of results.
    ///
    /// When paginating, the rest of the request must match the request that
    /// generated the page token.
    #[prost(string, tag = "3")]
    pub page_token: ::prost::alloc::string::String,
}
/// Response message for
/// \[SecurityCenterManagement.ListEffectiveEventThreatDetectionCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListEffectiveEventThreatDetectionCustomModules\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListEffectiveEventThreatDetectionCustomModulesResponse {
    /// The list of effective Event Threat Detection custom modules.
    #[prost(message, repeated, tag = "1")]
    pub effective_event_threat_detection_custom_modules: ::prost::alloc::vec::Vec<
        EffectiveEventThreatDetectionCustomModule,
    >,
    /// A pagination token. To retrieve the next page of results, call the method
    /// again with this token.
    #[prost(string, tag = "2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.GetEffectiveEventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.GetEffectiveEventThreatDetectionCustomModule\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetEffectiveEventThreatDetectionCustomModuleRequest {
    /// Required. The resource name of the Event Threat Detection custom module, in
    /// one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}/effectiveEventThreatDetectionCustomModules/{custom_module}`
    /// * `folders/{folder}/locations/{location}/effectiveEventThreatDetectionCustomModules/{custom_module}`
    /// * `projects/{project}/locations/{location}/effectiveEventThreatDetectionCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
}
/// A Security Command Center resource that contains the configuration and
/// enablement state of a custom module, which enables Event Threat Detection to
/// write certain findings to Security Command Center.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EventThreatDetectionCustomModule {
    /// Identifier. The resource name of the Event Threat Detection custom module,
    /// in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    /// * `folders/{folder}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    /// * `projects/{project}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// Optional. Configuration for the module. For the resident module, its
    /// configuration value is defined at this level. For the inherited module, its
    /// configuration value is inherited from the ancestor module.
    #[prost(message, optional, tag = "2")]
    pub config: ::core::option::Option<::prost_types::Struct>,
    /// Output only. The closest ancestor module that this module inherits the
    /// enablement state from. If empty, indicates that the custom module was
    /// created in the requesting parent organization, folder, or project. The
    /// format is the same as the custom module's resource name.
    #[prost(string, tag = "3")]
    pub ancestor_module: ::prost::alloc::string::String,
    /// Optional. The state of enablement for the module at the given level of the
    /// hierarchy.
    #[prost(
        enumeration = "event_threat_detection_custom_module::EnablementState",
        tag = "4"
    )]
    pub enablement_state: i32,
    /// Optional. Type for the module. For example, `CONFIGURABLE_BAD_IP`.
    #[prost(string, tag = "5")]
    pub r#type: ::prost::alloc::string::String,
    /// Optional. The human-readable name of the module.
    #[prost(string, tag = "6")]
    pub display_name: ::prost::alloc::string::String,
    /// Optional. A description of the module.
    #[prost(string, tag = "7")]
    pub description: ::prost::alloc::string::String,
    /// Output only. The time the module was last updated.
    #[prost(message, optional, tag = "8")]
    pub update_time: ::core::option::Option<::prost_types::Timestamp>,
    /// Output only. The editor the module was last updated by.
    #[prost(string, tag = "9")]
    pub last_editor: ::prost::alloc::string::String,
}
/// Nested message and enum types in `EventThreatDetectionCustomModule`.
pub mod event_threat_detection_custom_module {
    /// The enablement state of the module.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum EnablementState {
        /// Unspecified enablement state.
        Unspecified = 0,
        /// The module is enabled at the given level.
        Enabled = 1,
        /// The module is disabled at the given level.
        Disabled = 2,
        /// State is inherited from an ancestor module. The module will either be
        /// effectively `ENABLED` or `DISABLED` based on its closest non-inherited
        /// ancestor module in the CRM hierarchy. If you try to set a top-level
        /// module (a module with no parent) to the `INHERITED` state, you receive an
        /// `INVALID_ARGUMENT` error.
        Inherited = 3,
    }
    impl EnablementState {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unspecified => "ENABLEMENT_STATE_UNSPECIFIED",
                Self::Enabled => "ENABLED",
                Self::Disabled => "DISABLED",
                Self::Inherited => "INHERITED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "ENABLEMENT_STATE_UNSPECIFIED" => Some(Self::Unspecified),
                "ENABLED" => Some(Self::Enabled),
                "DISABLED" => Some(Self::Disabled),
                "INHERITED" => Some(Self::Inherited),
                _ => None,
            }
        }
    }
}
/// Request message for
/// \[SecurityCenterManagement.ListEventThreatDetectionCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListEventThreatDetectionCustomModules\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ListEventThreatDetectionCustomModulesRequest {
    /// Required. Name of parent to list custom modules, in one of the following
    /// formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Optional. The maximum number of modules to return. The service may return
    /// fewer than this value. If unspecified, at most 10 modules will be returned.
    /// The maximum value is 1000; values above 1000 will be coerced to 1000.
    #[prost(int32, tag = "2")]
    pub page_size: i32,
    /// Optional. A pagination token returned from a previous request. Provide this
    /// token to retrieve the next page of results.
    ///
    /// When paginating, the rest of the request must match the request that
    /// generated the page token.
    #[prost(string, tag = "3")]
    pub page_token: ::prost::alloc::string::String,
}
/// Response message for
/// \[SecurityCenterManagement.ListEventThreatDetectionCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListEventThreatDetectionCustomModules\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListEventThreatDetectionCustomModulesResponse {
    /// The list of custom modules.
    #[prost(message, repeated, tag = "1")]
    pub event_threat_detection_custom_modules: ::prost::alloc::vec::Vec<
        EventThreatDetectionCustomModule,
    >,
    /// A pagination token. To retrieve the next page of results, call the method
    /// again with this token.
    #[prost(string, tag = "2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.ListDescendantEventThreatDetectionCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListDescendantEventThreatDetectionCustomModules\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ListDescendantEventThreatDetectionCustomModulesRequest {
    /// Required. Name of parent to list custom modules, in one of the following
    /// formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Optional. The maximum number of modules to return. The service may return
    /// fewer than this value. If unspecified, at most 10 configs will be returned.
    /// The maximum value is 1000; values above 1000 will be coerced to 1000.
    #[prost(int32, tag = "2")]
    pub page_size: i32,
    /// Optional. A pagination token returned from a previous request. Provide this
    /// token to retrieve the next page of results.
    ///
    /// When paginating, the rest of the request must match the request that
    /// generated the page token.
    #[prost(string, tag = "3")]
    pub page_token: ::prost::alloc::string::String,
}
/// Response message for
/// \[SecurityCenterManagement.ListDescendantEventThreatDetectionCustomModules\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListDescendantEventThreatDetectionCustomModules\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListDescendantEventThreatDetectionCustomModulesResponse {
    /// The list of custom modules.
    #[prost(message, repeated, tag = "1")]
    pub event_threat_detection_custom_modules: ::prost::alloc::vec::Vec<
        EventThreatDetectionCustomModule,
    >,
    /// A pagination token. To retrieve the next page of results, call the method
    /// again with this token.
    #[prost(string, tag = "2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.GetEventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.GetEventThreatDetectionCustomModule\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetEventThreatDetectionCustomModuleRequest {
    /// Required. The resource name of the Event Threat Detection custom module, in
    /// one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    /// * `folders/{folder}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    /// * `projects/{project}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.CreateEventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.CreateEventThreatDetectionCustomModule\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateEventThreatDetectionCustomModuleRequest {
    /// Required. Name of parent for the module, in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Required. The module to create. The
    /// \[EventThreatDetectionCustomModule.name\]\[google.cloud.securitycentermanagement.v1.EventThreatDetectionCustomModule.name\]
    /// field is ignored; Security Command Center generates the name.
    #[prost(message, optional, tag = "3")]
    pub event_threat_detection_custom_module: ::core::option::Option<
        EventThreatDetectionCustomModule,
    >,
    /// Optional. When set to `true`, the request will be validated (including IAM
    /// checks), but no module will be created. An `OK` response indicates that the
    /// request is valid, while an error response indicates that the request is
    /// invalid.
    ///
    /// If the request is valid, a subsequent request to create the module could
    /// still fail for one of the following reasons:
    ///
    /// * The state of your cloud resources changed; for example, you lost a
    ///   required IAM permission
    /// * An error occurred during creation of the module
    ///
    /// Defaults to `false`.
    #[prost(bool, tag = "4")]
    pub validate_only: bool,
}
/// Message for updating a EventThreatDetectionCustomModule
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateEventThreatDetectionCustomModuleRequest {
    /// Required. The fields to update. If omitted, then all fields are updated.
    #[prost(message, optional, tag = "1")]
    pub update_mask: ::core::option::Option<::prost_types::FieldMask>,
    /// Required. The module being updated.
    #[prost(message, optional, tag = "2")]
    pub event_threat_detection_custom_module: ::core::option::Option<
        EventThreatDetectionCustomModule,
    >,
    /// Optional. When set to `true`, the request will be validated (including IAM
    /// checks), but no module will be updated. An `OK` response indicates that the
    /// request is valid, while an error response indicates that the request is
    /// invalid.
    ///
    /// If the request is valid, a subsequent request to update the module could
    /// still fail for one of the following reasons:
    ///
    /// * The state of your cloud resources changed; for example, you lost a
    ///   required IAM permission
    /// * An error occurred during creation of the module
    ///
    /// Defaults to `false`.
    #[prost(bool, tag = "3")]
    pub validate_only: bool,
}
/// Request message for
/// \[SecurityCenterManagement.DeleteEventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.DeleteEventThreatDetectionCustomModule\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DeleteEventThreatDetectionCustomModuleRequest {
    /// Required. The resource name of the Event Threat Detection custom module, in
    /// one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    /// * `folders/{folder}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    /// * `projects/{project}/locations/{location}/eventThreatDetectionCustomModules/{custom_module}`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// Optional. When set to `true`, the request will be validated (including IAM
    /// checks), but no module will be deleted. An `OK` response indicates that the
    /// request is valid, while an error response indicates that the request is
    /// invalid.
    ///
    /// If the request is valid, a subsequent request to delete the module could
    /// still fail for one of the following reasons:
    ///
    /// * The state of your cloud resources changed; for example, you lost a
    ///   required IAM permission
    /// * An error occurred during creation of the module
    ///
    /// Defaults to `false`.
    #[prost(bool, tag = "2")]
    pub validate_only: bool,
}
/// Request message for
/// \[SecurityCenterManagement.ValidateEventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ValidateEventThreatDetectionCustomModule\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ValidateEventThreatDetectionCustomModuleRequest {
    /// Required. Resource name of the parent to validate the custom modules under,
    /// in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Required. The raw text of the module's contents. Used to generate error
    /// messages.
    #[prost(string, tag = "2")]
    pub raw_text: ::prost::alloc::string::String,
    /// Required. The type of the module. For example, `CONFIGURABLE_BAD_IP`.
    #[prost(string, tag = "3")]
    pub r#type: ::prost::alloc::string::String,
}
/// Response message for
/// \[SecurityCenterManagement.ValidateEventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ValidateEventThreatDetectionCustomModule\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ValidateEventThreatDetectionCustomModuleResponse {
    /// A list of errors returned by the validator. If the list is empty, there
    /// were no errors.
    #[prost(message, repeated, tag = "2")]
    pub errors: ::prost::alloc::vec::Vec<
        validate_event_threat_detection_custom_module_response::CustomModuleValidationError,
    >,
}
/// Nested message and enum types in `ValidateEventThreatDetectionCustomModuleResponse`.
pub mod validate_event_threat_detection_custom_module_response {
    /// An error encountered while validating the uploaded configuration of an
    /// Event Threat Detection custom module.
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct CustomModuleValidationError {
        /// A human-readable description of the error.
        #[prost(string, tag = "1")]
        pub description: ::prost::alloc::string::String,
        /// The path, in [RFC 6901: JSON
        /// Pointer](<https://datatracker.ietf.org/doc/html/rfc6901>) format, to the
        /// field that failed validation. Omitted if no specific field is affected.
        #[prost(string, tag = "2")]
        pub field_path: ::prost::alloc::string::String,
        /// The initial position of the error in the uploaded text version of the
        /// module. Omitted if no specific position applies, or if the position could
        /// not be computed.
        #[prost(message, optional, tag = "3")]
        pub start: ::core::option::Option<Position>,
        /// The end position of the error in the uploaded text version of the module.
        /// Omitted if no specific position applies, or if the position could not be
        /// computed.
        #[prost(message, optional, tag = "4")]
        pub end: ::core::option::Option<Position>,
    }
    /// A position in the uploaded text version of a module.
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Position {
        /// The line position in the text.
        #[prost(int32, tag = "1")]
        pub line_number: i32,
        /// The column position in the line.
        #[prost(int32, tag = "2")]
        pub column_number: i32,
    }
}
/// Request message for
/// \[SecurityCenterManagement.GetSecurityCenterService\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.GetSecurityCenterService\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetSecurityCenterServiceRequest {
    /// Required. The Security Command Center service to retrieve, in one of the
    /// following formats:
    ///
    /// * organizations/{organization}/locations/{location}/securityCenterServices/{service}
    /// * folders/{folder}/locations/{location}/securityCenterServices/{service}
    /// * projects/{project}/locations/{location}/securityCenterServices/{service}
    ///
    /// The following values are valid for `{service}`:
    ///
    /// * `container-threat-detection`
    /// * `event-threat-detection`
    /// * `security-health-analytics`
    /// * `vm-threat-detection`
    /// * `web-security-scanner`
    #[prost(string, tag = "1")]
    pub name: ::prost::alloc::string::String,
    /// Set to `true` to show only modules that are in scope. By default, all
    /// modules are shown.
    #[prost(bool, tag = "2")]
    pub show_eligible_modules_only: bool,
}
/// Request message for
/// \[SecurityCenterManagement.ListSecurityCenterServices\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListSecurityCenterServices\].
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ListSecurityCenterServicesRequest {
    /// Required. The name of the parent to list Security Command Center services,
    /// in one of the following formats:
    ///
    /// * `organizations/{organization}/locations/{location}`
    /// * `folders/{folder}/locations/{location}`
    /// * `projects/{project}/locations/{location}`
    #[prost(string, tag = "1")]
    pub parent: ::prost::alloc::string::String,
    /// Optional. The maximum number of results to return in a single response.
    /// Default is 10, minimum is 1, maximum is 1000.
    #[prost(int32, tag = "2")]
    pub page_size: i32,
    /// Optional. A pagination token returned from a previous request. Provide this
    /// token to retrieve the next page of results.
    ///
    /// When paginating, the rest of the request must match the request that
    /// generated the page token.
    #[prost(string, tag = "3")]
    pub page_token: ::prost::alloc::string::String,
    /// Flag that, when set, is used to filter the module settings that are shown.
    /// The default setting is that all modules are shown.
    #[prost(bool, tag = "4")]
    pub show_eligible_modules_only: bool,
}
/// Response message for
/// \[SecurityCenterManagement.ListSecurityCenterServices\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.ListSecurityCenterServices\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListSecurityCenterServicesResponse {
    /// The list of services.
    #[prost(message, repeated, tag = "1")]
    pub security_center_services: ::prost::alloc::vec::Vec<SecurityCenterService>,
    /// A pagination token. To retrieve the next page of results, call the method
    /// again with this token.
    #[prost(string, tag = "2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// Request message for
/// \[SecurityCenterManagement.UpdateSecurityCenterService\]\[google.cloud.securitycentermanagement.v1.SecurityCenterManagement.UpdateSecurityCenterService\].
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateSecurityCenterServiceRequest {
    /// Required. The updated service.
    #[prost(message, optional, tag = "1")]
    pub security_center_service: ::core::option::Option<SecurityCenterService>,
    /// Required. The fields to update. Accepts the following values:
    ///
    /// * `intended_enablement_state`
    /// * `modules`
    ///
    /// If omitted, then all eligible fields are updated.
    #[prost(message, optional, tag = "2")]
    pub update_mask: ::core::option::Option<::prost_types::FieldMask>,
    /// Optional. When set to `true`, the request will be validated (including IAM
    /// checks), but no service will be updated. An `OK` response indicates that
    /// the request is valid, while an error response indicates that the request is
    /// invalid.
    ///
    /// If the request is valid, a subsequent request to update the service could
    /// still fail for one of the following reasons:
    ///
    /// * The state of your cloud resources changed; for example, you lost a
    ///   required IAM permission
    /// * An error occurred during update of the service
    ///
    /// Defaults to `false`.
    #[prost(bool, tag = "3")]
    pub validate_only: bool,
}
/// Generated client implementations.
pub mod security_center_management_client {
    #![allow(
        unused_variables,
        dead_code,
        missing_docs,
        clippy::wildcard_imports,
        clippy::let_unit_value,
    )]
    use tonic::codegen::*;
    use tonic::codegen::http::Uri;
    /// Service describing handlers for resources
    #[derive(Debug, Clone)]
    pub struct SecurityCenterManagementClient<T> {
        inner: tonic::client::Grpc<T>,
    }
    impl SecurityCenterManagementClient<tonic::transport::Channel> {
        /// Attempt to create a new client by connecting to a given endpoint.
        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
        where
            D: TryInto<tonic::transport::Endpoint>,
            D::Error: Into<StdError>,
        {
            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
            Ok(Self::new(conn))
        }
    }
    impl<T> SecurityCenterManagementClient<T>
    where
        T: tonic::client::GrpcService<tonic::body::Body>,
        T::Error: Into<StdError>,
        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
    {
        pub fn new(inner: T) -> Self {
            let inner = tonic::client::Grpc::new(inner);
            Self { inner }
        }
        pub fn with_origin(inner: T, origin: Uri) -> Self {
            let inner = tonic::client::Grpc::with_origin(inner, origin);
            Self { inner }
        }
        pub fn with_interceptor<F>(
            inner: T,
            interceptor: F,
        ) -> SecurityCenterManagementClient<InterceptedService<T, F>>
        where
            F: tonic::service::Interceptor,
            T::ResponseBody: Default,
            T: tonic::codegen::Service<
                http::Request<tonic::body::Body>,
                Response = http::Response<
                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
                >,
            >,
            <T as tonic::codegen::Service<
                http::Request<tonic::body::Body>,
            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
        {
            SecurityCenterManagementClient::new(
                InterceptedService::new(inner, interceptor),
            )
        }
        /// Compress requests with the given encoding.
        ///
        /// This requires the server to support it otherwise it might respond with an
        /// error.
        #[must_use]
        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
            self.inner = self.inner.send_compressed(encoding);
            self
        }
        /// Enable decompressing responses.
        #[must_use]
        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
            self.inner = self.inner.accept_compressed(encoding);
            self
        }
        /// Limits the maximum size of a decoded message.
        ///
        /// Default: `4MB`
        #[must_use]
        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
            self.inner = self.inner.max_decoding_message_size(limit);
            self
        }
        /// Limits the maximum size of an encoded message.
        ///
        /// Default: `usize::MAX`
        #[must_use]
        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
            self.inner = self.inner.max_encoding_message_size(limit);
            self
        }
        /// Returns a list of all
        /// \[EffectiveSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.EffectiveSecurityHealthAnalyticsCustomModule\]
        /// resources for the given parent. This includes resident modules defined at
        /// the scope of the parent, and inherited modules, inherited from ancestor
        /// organizations, folders, and projects (no descendants).
        pub async fn list_effective_security_health_analytics_custom_modules(
            &mut self,
            request: impl tonic::IntoRequest<
                super::ListEffectiveSecurityHealthAnalyticsCustomModulesRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<
                super::ListEffectiveSecurityHealthAnalyticsCustomModulesResponse,
            >,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/ListEffectiveSecurityHealthAnalyticsCustomModules",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "ListEffectiveSecurityHealthAnalyticsCustomModules",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Gets details of a single
        /// \[EffectiveSecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.EffectiveSecurityHealthAnalyticsCustomModule\].
        pub async fn get_effective_security_health_analytics_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::GetEffectiveSecurityHealthAnalyticsCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::EffectiveSecurityHealthAnalyticsCustomModule>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/GetEffectiveSecurityHealthAnalyticsCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "GetEffectiveSecurityHealthAnalyticsCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Returns a list of all
        /// \[SecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityHealthAnalyticsCustomModule\]
        /// resources for the given parent. This includes resident modules defined at
        /// the scope of the parent, and inherited modules, inherited from ancestor
        /// organizations, folders, and projects (no descendants).
        pub async fn list_security_health_analytics_custom_modules(
            &mut self,
            request: impl tonic::IntoRequest<
                super::ListSecurityHealthAnalyticsCustomModulesRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::ListSecurityHealthAnalyticsCustomModulesResponse>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/ListSecurityHealthAnalyticsCustomModules",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "ListSecurityHealthAnalyticsCustomModules",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Returns a list of all resident
        /// \[SecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityHealthAnalyticsCustomModule\]
        /// resources under the given organization, folder, or project and all of its
        /// descendants.
        pub async fn list_descendant_security_health_analytics_custom_modules(
            &mut self,
            request: impl tonic::IntoRequest<
                super::ListDescendantSecurityHealthAnalyticsCustomModulesRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<
                super::ListDescendantSecurityHealthAnalyticsCustomModulesResponse,
            >,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/ListDescendantSecurityHealthAnalyticsCustomModules",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "ListDescendantSecurityHealthAnalyticsCustomModules",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Retrieves a
        /// \[SecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityHealthAnalyticsCustomModule\].
        pub async fn get_security_health_analytics_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::GetSecurityHealthAnalyticsCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::SecurityHealthAnalyticsCustomModule>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/GetSecurityHealthAnalyticsCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "GetSecurityHealthAnalyticsCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Creates a resident
        /// \[SecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityHealthAnalyticsCustomModule\]
        /// at the scope of the given organization, folder, or project, and also
        /// creates inherited `SecurityHealthAnalyticsCustomModule` resources for all
        /// folders and projects that are descendants of the given parent. These
        /// modules are enabled by default.
        pub async fn create_security_health_analytics_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::CreateSecurityHealthAnalyticsCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::SecurityHealthAnalyticsCustomModule>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/CreateSecurityHealthAnalyticsCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "CreateSecurityHealthAnalyticsCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Updates the
        /// \[SecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityHealthAnalyticsCustomModule\]
        /// under the given name based on the given update mask. Updating the
        /// enablement state is supported on both resident and inherited modules
        /// (though resident modules cannot have an enablement state of "inherited").
        /// Updating the display name and custom configuration of a module is supported
        /// on resident modules only.
        pub async fn update_security_health_analytics_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::UpdateSecurityHealthAnalyticsCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::SecurityHealthAnalyticsCustomModule>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/UpdateSecurityHealthAnalyticsCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "UpdateSecurityHealthAnalyticsCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Deletes the specified
        /// \[SecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityHealthAnalyticsCustomModule\]
        /// and all of its descendants in the resource hierarchy. This method is only
        /// supported for resident custom modules.
        pub async fn delete_security_health_analytics_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::DeleteSecurityHealthAnalyticsCustomModuleRequest,
            >,
        ) -> std::result::Result<tonic::Response<()>, tonic::Status> {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/DeleteSecurityHealthAnalyticsCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "DeleteSecurityHealthAnalyticsCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Simulates the result of using a
        /// \[SecurityHealthAnalyticsCustomModule\]\[google.cloud.securitycentermanagement.v1.SecurityHealthAnalyticsCustomModule\]
        /// to check a resource.
        pub async fn simulate_security_health_analytics_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::SimulateSecurityHealthAnalyticsCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::SimulateSecurityHealthAnalyticsCustomModuleResponse>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/SimulateSecurityHealthAnalyticsCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "SimulateSecurityHealthAnalyticsCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Lists all effective Event Threat Detection custom modules for the
        /// given parent. This includes resident modules defined at the scope of the
        /// parent along with modules inherited from its ancestors.
        pub async fn list_effective_event_threat_detection_custom_modules(
            &mut self,
            request: impl tonic::IntoRequest<
                super::ListEffectiveEventThreatDetectionCustomModulesRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<
                super::ListEffectiveEventThreatDetectionCustomModulesResponse,
            >,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/ListEffectiveEventThreatDetectionCustomModules",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "ListEffectiveEventThreatDetectionCustomModules",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Gets the effective Event Threat Detection custom module at the given level.
        ///
        /// The difference between an
        /// \[EffectiveEventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.EffectiveEventThreatDetectionCustomModule\]
        /// and an
        /// \[EventThreatDetectionCustomModule\]\[google.cloud.securitycentermanagement.v1.EventThreatDetectionCustomModule\]
        /// is that the fields for an `EffectiveEventThreatDetectionCustomModule` are
        /// computed from ancestors if needed. For example, the enablement state for an
        /// `EventThreatDetectionCustomModule` can be `ENABLED`, `DISABLED`, or
        /// `INHERITED`. In contrast, the enablement state for an
        /// `EffectiveEventThreatDetectionCustomModule` is always computed as `ENABLED`
        /// or `DISABLED`.
        pub async fn get_effective_event_threat_detection_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::GetEffectiveEventThreatDetectionCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::EffectiveEventThreatDetectionCustomModule>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/GetEffectiveEventThreatDetectionCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "GetEffectiveEventThreatDetectionCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Lists all Event Threat Detection custom modules for the given organization,
        /// folder, or project. This includes resident modules defined at the scope of
        /// the parent along with modules inherited from ancestors.
        pub async fn list_event_threat_detection_custom_modules(
            &mut self,
            request: impl tonic::IntoRequest<
                super::ListEventThreatDetectionCustomModulesRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::ListEventThreatDetectionCustomModulesResponse>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/ListEventThreatDetectionCustomModules",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "ListEventThreatDetectionCustomModules",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Lists all resident Event Threat Detection custom modules for the given
        /// organization, folder, or project and its descendants.
        pub async fn list_descendant_event_threat_detection_custom_modules(
            &mut self,
            request: impl tonic::IntoRequest<
                super::ListDescendantEventThreatDetectionCustomModulesRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<
                super::ListDescendantEventThreatDetectionCustomModulesResponse,
            >,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/ListDescendantEventThreatDetectionCustomModules",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "ListDescendantEventThreatDetectionCustomModules",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Gets an Event Threat Detection custom module.
        pub async fn get_event_threat_detection_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::GetEventThreatDetectionCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::EventThreatDetectionCustomModule>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/GetEventThreatDetectionCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "GetEventThreatDetectionCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Creates a resident Event Threat Detection custom module at the scope of the
        /// given organization, folder, or project, and creates inherited custom
        /// modules for all descendants of the given parent. These modules are enabled
        /// by default.
        pub async fn create_event_threat_detection_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::CreateEventThreatDetectionCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::EventThreatDetectionCustomModule>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/CreateEventThreatDetectionCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "CreateEventThreatDetectionCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Updates the Event Threat Detection custom module with the given name based
        /// on the given update mask. Updating the enablement state is supported for
        /// both resident and inherited modules (though resident modules cannot have an
        /// enablement state of "inherited"). Updating the display name or
        /// configuration of a module is supported for resident modules only. The type
        /// of a module cannot be changed.
        pub async fn update_event_threat_detection_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::UpdateEventThreatDetectionCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::EventThreatDetectionCustomModule>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/UpdateEventThreatDetectionCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "UpdateEventThreatDetectionCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Deletes the specified Event Threat Detection custom module and all of its
        /// descendants in the resource hierarchy. This method is only supported for
        /// resident custom modules.
        pub async fn delete_event_threat_detection_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::DeleteEventThreatDetectionCustomModuleRequest,
            >,
        ) -> std::result::Result<tonic::Response<()>, tonic::Status> {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/DeleteEventThreatDetectionCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "DeleteEventThreatDetectionCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Validates the given Event Threat Detection custom module.
        pub async fn validate_event_threat_detection_custom_module(
            &mut self,
            request: impl tonic::IntoRequest<
                super::ValidateEventThreatDetectionCustomModuleRequest,
            >,
        ) -> std::result::Result<
            tonic::Response<super::ValidateEventThreatDetectionCustomModuleResponse>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/ValidateEventThreatDetectionCustomModule",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "ValidateEventThreatDetectionCustomModule",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Gets service settings for the specified Security Command Center service.
        pub async fn get_security_center_service(
            &mut self,
            request: impl tonic::IntoRequest<super::GetSecurityCenterServiceRequest>,
        ) -> std::result::Result<
            tonic::Response<super::SecurityCenterService>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/GetSecurityCenterService",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "GetSecurityCenterService",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Returns a list of all Security Command Center services for the given
        /// parent.
        pub async fn list_security_center_services(
            &mut self,
            request: impl tonic::IntoRequest<super::ListSecurityCenterServicesRequest>,
        ) -> std::result::Result<
            tonic::Response<super::ListSecurityCenterServicesResponse>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/ListSecurityCenterServices",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "ListSecurityCenterServices",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
        /// Updates a Security Command Center service using the given update mask.
        pub async fn update_security_center_service(
            &mut self,
            request: impl tonic::IntoRequest<super::UpdateSecurityCenterServiceRequest>,
        ) -> std::result::Result<
            tonic::Response<super::SecurityCenterService>,
            tonic::Status,
        > {
            self.inner
                .ready()
                .await
                .map_err(|e| {
                    tonic::Status::unknown(
                        format!("Service was not ready: {}", e.into()),
                    )
                })?;
            let codec = tonic_prost::ProstCodec::default();
            let path = http::uri::PathAndQuery::from_static(
                "/google.cloud.securitycentermanagement.v1.SecurityCenterManagement/UpdateSecurityCenterService",
            );
            let mut req = request.into_request();
            req.extensions_mut()
                .insert(
                    GrpcMethod::new(
                        "google.cloud.securitycentermanagement.v1.SecurityCenterManagement",
                        "UpdateSecurityCenterService",
                    ),
                );
            self.inner.unary(req, path, codec).await
        }
    }
}
