# frozen_string_literal: true

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!

require "google/cloud/errors"
require "google/cloud/securitycenter/v1p1beta1/securitycenter_service_pb"

module Google
  module Cloud
    module SecurityCenter
      module V1p1beta1
        module SecurityCenter
          ##
          # Client for the SecurityCenter service.
          #
          # V1p1Beta1 APIs for Security Center service.
          #
          class Client
            # @private
            API_VERSION = ""

            # @private
            DEFAULT_ENDPOINT_TEMPLATE = "securitycenter.$UNIVERSE_DOMAIN$"

            include Paths

            # @private
            attr_reader :security_center_stub

            ##
            # Configure the SecurityCenter Client class.
            #
            # See {::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client::Configuration}
            # for a description of the configuration fields.
            #
            # @example
            #
            #   # Modify the configuration for all SecurityCenter clients
            #   ::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.configure do |config|
            #     config.timeout = 10.0
            #   end
            #
            # @yield [config] Configure the Client client.
            # @yieldparam config [Client::Configuration]
            #
            # @return [Client::Configuration]
            #
            def self.configure
              @configure ||= begin
                namespace = ["Google", "Cloud", "SecurityCenter", "V1p1beta1"]
                parent_config = while namespace.any?
                                  parent_name = namespace.join "::"
                                  parent_const = const_get parent_name
                                  break parent_const.configure if parent_const.respond_to? :configure
                                  namespace.pop
                                end
                default_config = Client::Configuration.new parent_config

                default_config.rpcs.create_source.timeout = 60.0

                default_config.rpcs.create_finding.timeout = 60.0

                default_config.rpcs.create_notification_config.timeout = 60.0

                default_config.rpcs.delete_notification_config.timeout = 60.0

                default_config.rpcs.get_iam_policy.timeout = 60.0
                default_config.rpcs.get_iam_policy.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.get_notification_config.timeout = 60.0
                default_config.rpcs.get_notification_config.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.get_organization_settings.timeout = 60.0
                default_config.rpcs.get_organization_settings.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.get_source.timeout = 60.0
                default_config.rpcs.get_source.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.group_assets.timeout = 480.0
                default_config.rpcs.group_assets.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.group_findings.timeout = 480.0
                default_config.rpcs.group_findings.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.list_assets.timeout = 480.0
                default_config.rpcs.list_assets.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.list_findings.timeout = 480.0
                default_config.rpcs.list_findings.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.list_notification_configs.timeout = 60.0
                default_config.rpcs.list_notification_configs.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.list_sources.timeout = 60.0
                default_config.rpcs.list_sources.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.run_asset_discovery.timeout = 60.0

                default_config.rpcs.set_finding_state.timeout = 60.0

                default_config.rpcs.set_iam_policy.timeout = 60.0

                default_config.rpcs.test_iam_permissions.timeout = 60.0
                default_config.rpcs.test_iam_permissions.retry_policy = {
                  initial_delay: 0.1, max_delay: 60.0, multiplier: 1.3, retry_codes: [4, 14]
                }

                default_config.rpcs.update_finding.timeout = 60.0

                default_config.rpcs.update_notification_config.timeout = 60.0

                default_config.rpcs.update_organization_settings.timeout = 60.0

                default_config.rpcs.update_source.timeout = 60.0

                default_config.rpcs.update_security_marks.timeout = 480.0

                default_config
              end
              yield @configure if block_given?
              @configure
            end

            ##
            # Configure the SecurityCenter Client instance.
            #
            # The configuration is set to the derived mode, meaning that values can be changed,
            # but structural changes (adding new fields, etc.) are not allowed. Structural changes
            # should be made on {Client.configure}.
            #
            # See {::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client::Configuration}
            # for a description of the configuration fields.
            #
            # @yield [config] Configure the Client client.
            # @yieldparam config [Client::Configuration]
            #
            # @return [Client::Configuration]
            #
            def configure
              yield @config if block_given?
              @config
            end

            ##
            # The effective universe domain
            #
            # @return [String]
            #
            def universe_domain
              @security_center_stub.universe_domain
            end

            ##
            # Create a new SecurityCenter client object.
            #
            # @example
            #
            #   # Create a client using the default configuration
            #   client = ::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a client using a custom configuration
            #   client = ::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new do |config|
            #     config.timeout = 10.0
            #   end
            #
            # @yield [config] Configure the SecurityCenter client.
            # @yieldparam config [Client::Configuration]
            #
            def initialize
              # These require statements are intentionally placed here to initialize
              # the gRPC module only when it's required.
              # See https://github.com/googleapis/toolkit/issues/446
              require "gapic/grpc"
              require "google/cloud/securitycenter/v1p1beta1/securitycenter_service_services_pb"

              # Create the configuration object
              @config = Configuration.new Client.configure

              # Yield the configuration if needed
              yield @config if block_given?

              # Create credentials
              credentials = @config.credentials
              # Use self-signed JWT if the endpoint is unchanged from default,
              # but only if the default endpoint does not have a region prefix.
              enable_self_signed_jwt = @config.endpoint.nil? ||
                                       (@config.endpoint == Configuration::DEFAULT_ENDPOINT &&
                                       !@config.endpoint.split(".").first.include?("-"))
              credentials ||= Credentials.default scope: @config.scope,
                                                  enable_self_signed_jwt: enable_self_signed_jwt
              if credentials.is_a?(::String) || credentials.is_a?(::Hash)
                credentials = Credentials.new credentials, scope: @config.scope
              end
              @quota_project_id = @config.quota_project
              @quota_project_id ||= credentials.quota_project_id if credentials.respond_to? :quota_project_id

              @operations_client = Operations.new do |config|
                config.credentials = credentials
                config.quota_project = @quota_project_id
                config.endpoint = @config.endpoint
                config.universe_domain = @config.universe_domain
              end

              @security_center_stub = ::Gapic::ServiceStub.new(
                ::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Stub,
                credentials: credentials,
                endpoint: @config.endpoint,
                endpoint_template: DEFAULT_ENDPOINT_TEMPLATE,
                universe_domain: @config.universe_domain,
                channel_args: @config.channel_args,
                interceptors: @config.interceptors,
                channel_pool_config: @config.channel_pool
              )
            end

            ##
            # Get the associated client for long-running operations.
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Operations]
            #
            attr_reader :operations_client

            # Service calls

            ##
            # Creates a source.
            #
            # @overload create_source(request, options = nil)
            #   Pass arguments to `create_source` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::CreateSourceRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::CreateSourceRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload create_source(parent: nil, source: nil)
            #   Pass arguments to `create_source` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Resource name of the new source's parent. Its format should be
            #     "organizations/[organization_id]".
            #   @param source [::Google::Cloud::SecurityCenter::V1p1beta1::Source, ::Hash]
            #     Required. The Source being created, only the display_name and description will be
            #     used. All other fields will be ignored.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::Source]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::Source]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::CreateSourceRequest.new
            #
            #   # Call the create_source method.
            #   result = client.create_source request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::Source.
            #   p result
            #
            def create_source request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::CreateSourceRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.create_source.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.create_source.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.create_source.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :create_source, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Creates a finding. The corresponding source must exist for finding
            # creation to succeed.
            #
            # @overload create_finding(request, options = nil)
            #   Pass arguments to `create_finding` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::CreateFindingRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::CreateFindingRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload create_finding(parent: nil, finding_id: nil, finding: nil)
            #   Pass arguments to `create_finding` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Resource name of the new finding's parent. Its format should be
            #     "organizations/[organization_id]/sources/[source_id]".
            #   @param finding_id [::String]
            #     Required. Unique identifier provided by the client within the parent scope.
            #   @param finding [::Google::Cloud::SecurityCenter::V1p1beta1::Finding, ::Hash]
            #     Required. The Finding being created. The name and security_marks will be ignored as
            #     they are both output only fields on this resource.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::Finding]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::Finding]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::CreateFindingRequest.new
            #
            #   # Call the create_finding method.
            #   result = client.create_finding request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::Finding.
            #   p result
            #
            def create_finding request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::CreateFindingRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.create_finding.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.create_finding.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.create_finding.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :create_finding, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Creates a notification config.
            #
            # @overload create_notification_config(request, options = nil)
            #   Pass arguments to `create_notification_config` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::CreateNotificationConfigRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::CreateNotificationConfigRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload create_notification_config(parent: nil, config_id: nil, notification_config: nil)
            #   Pass arguments to `create_notification_config` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Resource name of the new notification config's parent. Its format is
            #     "organizations/[organization_id]".
            #   @param config_id [::String]
            #     Required. Unique identifier provided by the client within the parent scope.
            #     It must be between 1 and 128 characters, and contains alphanumeric
            #     characters, underscores or hyphens only.
            #   @param notification_config [::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig, ::Hash]
            #     Required. The notification config being created. The name and the service account
            #     will be ignored as they are both output only fields on this resource.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::CreateNotificationConfigRequest.new
            #
            #   # Call the create_notification_config method.
            #   result = client.create_notification_config request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig.
            #   p result
            #
            def create_notification_config request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::CreateNotificationConfigRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.create_notification_config.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.create_notification_config.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.create_notification_config.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :create_notification_config, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Deletes a notification config.
            #
            # @overload delete_notification_config(request, options = nil)
            #   Pass arguments to `delete_notification_config` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::DeleteNotificationConfigRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::DeleteNotificationConfigRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload delete_notification_config(name: nil)
            #   Pass arguments to `delete_notification_config` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param name [::String]
            #     Required. Name of the notification config to delete. Its format is
            #     "organizations/[organization_id]/notificationConfigs/[config_id]".
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Protobuf::Empty]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Protobuf::Empty]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::DeleteNotificationConfigRequest.new
            #
            #   # Call the delete_notification_config method.
            #   result = client.delete_notification_config request
            #
            #   # The returned object is of type Google::Protobuf::Empty.
            #   p result
            #
            def delete_notification_config request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::DeleteNotificationConfigRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.delete_notification_config.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.name
                header_params["name"] = request.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.delete_notification_config.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.delete_notification_config.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :delete_notification_config, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Gets the access control policy on the specified Source.
            #
            # @overload get_iam_policy(request, options = nil)
            #   Pass arguments to `get_iam_policy` via a request object, either of type
            #   {::Google::Iam::V1::GetIamPolicyRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Iam::V1::GetIamPolicyRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload get_iam_policy(resource: nil, options: nil)
            #   Pass arguments to `get_iam_policy` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param resource [::String]
            #     REQUIRED: The resource for which the policy is being requested.
            #     See the operation documentation for the appropriate value for this field.
            #   @param options [::Google::Iam::V1::GetPolicyOptions, ::Hash]
            #     OPTIONAL: A `GetPolicyOptions` object for specifying options to
            #     `GetIamPolicy`.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Iam::V1::Policy]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Iam::V1::Policy]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Iam::V1::GetIamPolicyRequest.new
            #
            #   # Call the get_iam_policy method.
            #   result = client.get_iam_policy request
            #
            #   # The returned object is of type Google::Iam::V1::Policy.
            #   p result
            #
            def get_iam_policy request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Iam::V1::GetIamPolicyRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.get_iam_policy.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.resource
                header_params["resource"] = request.resource
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.get_iam_policy.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.get_iam_policy.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :get_iam_policy, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Gets a notification config.
            #
            # @overload get_notification_config(request, options = nil)
            #   Pass arguments to `get_notification_config` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::GetNotificationConfigRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::GetNotificationConfigRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload get_notification_config(name: nil)
            #   Pass arguments to `get_notification_config` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param name [::String]
            #     Required. Name of the notification config to get. Its format is
            #     "organizations/[organization_id]/notificationConfigs/[config_id]".
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::GetNotificationConfigRequest.new
            #
            #   # Call the get_notification_config method.
            #   result = client.get_notification_config request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig.
            #   p result
            #
            def get_notification_config request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::GetNotificationConfigRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.get_notification_config.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.name
                header_params["name"] = request.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.get_notification_config.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.get_notification_config.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :get_notification_config, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Gets the settings for an organization.
            #
            # @overload get_organization_settings(request, options = nil)
            #   Pass arguments to `get_organization_settings` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::GetOrganizationSettingsRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::GetOrganizationSettingsRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload get_organization_settings(name: nil)
            #   Pass arguments to `get_organization_settings` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param name [::String]
            #     Required. Name of the organization to get organization settings for. Its format is
            #     "organizations/[organization_id]/organizationSettings".
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::GetOrganizationSettingsRequest.new
            #
            #   # Call the get_organization_settings method.
            #   result = client.get_organization_settings request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings.
            #   p result
            #
            def get_organization_settings request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::GetOrganizationSettingsRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.get_organization_settings.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.name
                header_params["name"] = request.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.get_organization_settings.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.get_organization_settings.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :get_organization_settings, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Gets a source.
            #
            # @overload get_source(request, options = nil)
            #   Pass arguments to `get_source` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::GetSourceRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::GetSourceRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload get_source(name: nil)
            #   Pass arguments to `get_source` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param name [::String]
            #     Required. Relative resource name of the source. Its format is
            #     "organizations/[organization_id]/source/[source_id]".
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::Source]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::Source]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::GetSourceRequest.new
            #
            #   # Call the get_source method.
            #   result = client.get_source request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::Source.
            #   p result
            #
            def get_source request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::GetSourceRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.get_source.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.name
                header_params["name"] = request.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.get_source.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.get_source.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :get_source, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Filters an organization's assets and  groups them by their specified
            # properties.
            #
            # @overload group_assets(request, options = nil)
            #   Pass arguments to `group_assets` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::GroupAssetsRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::GroupAssetsRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload group_assets(parent: nil, filter: nil, group_by: nil, compare_duration: nil, read_time: nil, page_token: nil, page_size: nil)
            #   Pass arguments to `group_assets` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Name of the organization to groupBy. Its format is
            #     "organizations/[organization_id], folders/[folder_id], or
            #     projects/[project_id]".
            #   @param filter [::String]
            #     Expression that defines the filter to apply across assets.
            #     The expression is a list of zero or more restrictions combined via logical
            #     operators `AND` and `OR`.
            #     Parentheses are supported, and `OR` has higher precedence than `AND`.
            #
            #     Restrictions have the form `<field> <operator> <value>` and may have a `-`
            #     character in front of them to indicate negation. The fields map to those
            #     defined in the Asset resource. Examples include:
            #
            #     * name
            #     * security_center_properties.resource_name
            #     * resource_properties.a_property
            #     * security_marks.marks.marka
            #
            #     The supported operators are:
            #
            #     * `=` for all value types.
            #     * `>`, `<`, `>=`, `<=` for integer values.
            #     * `:`, meaning substring matching, for strings.
            #
            #     The supported value types are:
            #
            #     * string literals in quotes.
            #     * integer literals without quotes.
            #     * boolean literals `true` and `false` without quotes.
            #
            #     The following field and operator combinations are supported:
            #
            #     * name: `=`
            #     * update_time: `=`, `>`, `<`, `>=`, `<=`
            #
            #       Usage: This should be milliseconds since epoch or an RFC3339 string.
            #       Examples:
            #         `update_time = "2019-06-10T16:07:18-07:00"`
            #         `update_time = 1560208038000`
            #
            #     * create_time: `=`, `>`, `<`, `>=`, `<=`
            #
            #       Usage: This should be milliseconds since epoch or an RFC3339 string.
            #       Examples:
            #         `create_time = "2019-06-10T16:07:18-07:00"`
            #         `create_time = 1560208038000`
            #
            #     * iam_policy.policy_blob: `=`, `:`
            #     * resource_properties: `=`, `:`, `>`, `<`, `>=`, `<=`
            #     * security_marks.marks: `=`, `:`
            #     * security_center_properties.resource_name: `=`, `:`
            #     * security_center_properties.resource_name_display_name: `=`, `:`
            #     * security_center_properties.resource_type: `=`, `:`
            #     * security_center_properties.resource_parent: `=`, `:`
            #     * security_center_properties.resource_parent_display_name: `=`, `:`
            #     * security_center_properties.resource_project: `=`, `:`
            #     * security_center_properties.resource_project_display_name: `=`, `:`
            #     * security_center_properties.resource_owners: `=`, `:`
            #
            #     For example, `resource_properties.size = 100` is a valid filter string.
            #
            #     Use a partial match on the empty string to filter based on a property
            #     existing: `resource_properties.my_property : ""`
            #
            #     Use a negated partial match on the empty string to filter based on a
            #     property not existing: `-resource_properties.my_property : ""`
            #   @param group_by [::String]
            #     Required. Expression that defines what assets fields to use for grouping. The string
            #     value should follow SQL syntax: comma separated list of fields. For
            #     example:
            #     "security_center_properties.resource_project,security_center_properties.project".
            #
            #     The following fields are supported when compare_duration is not set:
            #
            #     * security_center_properties.resource_project
            #     * security_center_properties.resource_project_display_name
            #     * security_center_properties.resource_type
            #     * security_center_properties.resource_parent
            #     * security_center_properties.resource_parent_display_name
            #
            #     The following fields are supported when compare_duration is set:
            #
            #     * security_center_properties.resource_type
            #     * security_center_properties.resource_project_display_name
            #     * security_center_properties.resource_parent_display_name
            #   @param compare_duration [::Google::Protobuf::Duration, ::Hash]
            #     When compare_duration is set, the GroupResult's "state_change" property is
            #     updated to indicate whether the asset was added, removed, or remained
            #     present during the compare_duration period of time that precedes the
            #     read_time. This is the time between (read_time - compare_duration) and
            #     read_time.
            #
            #     The state change value is derived based on the presence of the asset at the
            #     two points in time. Intermediate state changes between the two times don't
            #     affect the result. For example, the results aren't affected if the asset is
            #     removed and re-created again.
            #
            #     Possible "state_change" values when compare_duration is specified:
            #
            #     * "ADDED":   indicates that the asset was not present at the start of
            #                    compare_duration, but present at reference_time.
            #     * "REMOVED": indicates that the asset was present at the start of
            #                    compare_duration, but not present at reference_time.
            #     * "ACTIVE":  indicates that the asset was present at both the
            #                    start and the end of the time period defined by
            #                    compare_duration and reference_time.
            #
            #     If compare_duration is not specified, then the only possible state_change
            #     is "UNUSED", which will be the state_change set for all assets present at
            #     read_time.
            #
            #     If this field is set then `state_change` must be a specified field in
            #     `group_by`.
            #   @param read_time [::Google::Protobuf::Timestamp, ::Hash]
            #     Time used as a reference point when filtering assets. The filter is limited
            #     to assets existing at the supplied time and their values are those at that
            #     specific time. Absence of this field will default to the API's version of
            #     NOW.
            #   @param page_token [::String]
            #     The value returned by the last `GroupAssetsResponse`; indicates
            #     that this is a continuation of a prior `GroupAssets` call, and that the
            #     system should return the next page of data.
            #   @param page_size [::Integer]
            #     The maximum number of results to return in a single response. Default is
            #     10, minimum is 1, maximum is 1000.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::GroupResult>]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::GroupResult>]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::GroupAssetsRequest.new
            #
            #   # Call the group_assets method.
            #   result = client.group_assets request
            #
            #   # The returned object is of type Gapic::PagedEnumerable. You can iterate
            #   # over elements, and API calls will be issued to fetch pages as needed.
            #   result.each do |item|
            #     # Each element is of type ::Google::Cloud::SecurityCenter::V1p1beta1::GroupResult.
            #     p item
            #   end
            #
            def group_assets request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::GroupAssetsRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.group_assets.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.group_assets.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.group_assets.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :group_assets, request, options: options do |response, operation|
                response = ::Gapic::PagedEnumerable.new @security_center_stub, :group_assets, request, response, operation, options
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Filters an organization or source's findings and  groups them by their
            # specified properties.
            #
            # To group across all sources provide a `-` as the source id.
            # Example: /v1/organizations/\\{organization_id}/sources/-/findings,
            # /v1/folders/\\{folder_id}/sources/-/findings,
            # /v1/projects/\\{project_id}/sources/-/findings
            #
            # @overload group_findings(request, options = nil)
            #   Pass arguments to `group_findings` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::GroupFindingsRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::GroupFindingsRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload group_findings(parent: nil, filter: nil, group_by: nil, read_time: nil, compare_duration: nil, page_token: nil, page_size: nil)
            #   Pass arguments to `group_findings` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Name of the source to groupBy. Its format is
            #     "organizations/[organization_id]/sources/[source_id]",
            #     folders/[folder_id]/sources/[source_id], or
            #     projects/[project_id]/sources/[source_id]. To groupBy across all sources
            #     provide a source_id of `-`. For example:
            #     organizations/\\{organization_id}/sources/-, folders/\\{folder_id}/sources/-,
            #     or projects/\\{project_id}/sources/-
            #   @param filter [::String]
            #     Expression that defines the filter to apply across findings.
            #     The expression is a list of one or more restrictions combined via logical
            #     operators `AND` and `OR`.
            #     Parentheses are supported, and `OR` has higher precedence than `AND`.
            #
            #     Restrictions have the form `<field> <operator> <value>` and may have a `-`
            #     character in front of them to indicate negation. Examples include:
            #
            #      * name
            #      * source_properties.a_property
            #      * security_marks.marks.marka
            #
            #     The supported operators are:
            #
            #     * `=` for all value types.
            #     * `>`, `<`, `>=`, `<=` for integer values.
            #     * `:`, meaning substring matching, for strings.
            #
            #     The supported value types are:
            #
            #     * string literals in quotes.
            #     * integer literals without quotes.
            #     * boolean literals `true` and `false` without quotes.
            #
            #     The following field and operator combinations are supported:
            #
            #     * name: `=`
            #     * parent: `=`, `:`
            #     * resource_name: `=`, `:`
            #     * state: `=`, `:`
            #     * category: `=`, `:`
            #     * external_uri: `=`, `:`
            #     * event_time: `=`, `>`, `<`, `>=`, `<=`
            #     * severity: `=`, `:`
            #
            #       Usage: This should be milliseconds since epoch or an RFC3339 string.
            #       Examples:
            #         `event_time = "2019-06-10T16:07:18-07:00"`
            #         `event_time = 1560208038000`
            #
            #     * security_marks.marks: `=`, `:`
            #     * source_properties: `=`, `:`, `>`, `<`, `>=`, `<=`
            #
            #     For example, `source_properties.size = 100` is a valid filter string.
            #
            #     Use a partial match on the empty string to filter based on a property
            #     existing: `source_properties.my_property : ""`
            #
            #     Use a negated partial match on the empty string to filter based on a
            #     property not existing: `-source_properties.my_property : ""`
            #   @param group_by [::String]
            #     Required. Expression that defines what assets fields to use for grouping (including
            #     `state_change`). The string value should follow SQL syntax: comma separated
            #     list of fields. For example: "parent,resource_name".
            #
            #     The following fields are supported:
            #
            #     * resource_name
            #     * category
            #     * state
            #     * parent
            #     * severity
            #
            #     The following fields are supported when compare_duration is set:
            #
            #     * state_change
            #   @param read_time [::Google::Protobuf::Timestamp, ::Hash]
            #     Time used as a reference point when filtering findings. The filter is
            #     limited to findings existing at the supplied time and their values are
            #     those at that specific time. Absence of this field will default to the
            #     API's version of NOW.
            #   @param compare_duration [::Google::Protobuf::Duration, ::Hash]
            #     When compare_duration is set, the GroupResult's "state_change" attribute is
            #     updated to indicate whether the finding had its state changed, the
            #     finding's state remained unchanged, or if the finding was added during the
            #     compare_duration period of time that precedes the read_time. This is the
            #     time between (read_time - compare_duration) and read_time.
            #
            #     The state_change value is derived based on the presence and state of the
            #     finding at the two points in time. Intermediate state changes between the
            #     two times don't affect the result. For example, the results aren't affected
            #     if the finding is made inactive and then active again.
            #
            #     Possible "state_change" values when compare_duration is specified:
            #
            #     * "CHANGED":   indicates that the finding was present and matched the given
            #                      filter at the start of compare_duration, but changed its
            #                      state at read_time.
            #     * "UNCHANGED": indicates that the finding was present and matched the given
            #                      filter at the start of compare_duration and did not change
            #                      state at read_time.
            #     * "ADDED":     indicates that the finding did not match the given filter or
            #                      was not present at the start of compare_duration, but was
            #                      present at read_time.
            #     * "REMOVED":   indicates that the finding was present and matched the
            #                      filter at the start of compare_duration, but did not match
            #                      the filter at read_time.
            #
            #     If compare_duration is not specified, then the only possible state_change
            #     is "UNUSED",  which will be the state_change set for all findings present
            #     at read_time.
            #
            #     If this field is set then `state_change` must be a specified field in
            #     `group_by`.
            #   @param page_token [::String]
            #     The value returned by the last `GroupFindingsResponse`; indicates
            #     that this is a continuation of a prior `GroupFindings` call, and
            #     that the system should return the next page of data.
            #   @param page_size [::Integer]
            #     The maximum number of results to return in a single response. Default is
            #     10, minimum is 1, maximum is 1000.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::GroupResult>]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::GroupResult>]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::GroupFindingsRequest.new
            #
            #   # Call the group_findings method.
            #   result = client.group_findings request
            #
            #   # The returned object is of type Gapic::PagedEnumerable. You can iterate
            #   # over elements, and API calls will be issued to fetch pages as needed.
            #   result.each do |item|
            #     # Each element is of type ::Google::Cloud::SecurityCenter::V1p1beta1::GroupResult.
            #     p item
            #   end
            #
            def group_findings request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::GroupFindingsRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.group_findings.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.group_findings.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.group_findings.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :group_findings, request, options: options do |response, operation|
                response = ::Gapic::PagedEnumerable.new @security_center_stub, :group_findings, request, response, operation, options
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Lists an organization's assets.
            #
            # @overload list_assets(request, options = nil)
            #   Pass arguments to `list_assets` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::ListAssetsRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::ListAssetsRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload list_assets(parent: nil, filter: nil, order_by: nil, read_time: nil, compare_duration: nil, field_mask: nil, page_token: nil, page_size: nil)
            #   Pass arguments to `list_assets` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Name of the organization assets should belong to. Its format is
            #     "organizations/[organization_id], folders/[folder_id], or
            #     projects/[project_id]".
            #   @param filter [::String]
            #     Expression that defines the filter to apply across assets.
            #     The expression is a list of zero or more restrictions combined via logical
            #     operators `AND` and `OR`.
            #     Parentheses are supported, and `OR` has higher precedence than `AND`.
            #
            #     Restrictions have the form `<field> <operator> <value>` and may have a `-`
            #     character in front of them to indicate negation. The fields map to those
            #     defined in the Asset resource. Examples include:
            #
            #     * name
            #     * security_center_properties.resource_name
            #     * resource_properties.a_property
            #     * security_marks.marks.marka
            #
            #     The supported operators are:
            #
            #     * `=` for all value types.
            #     * `>`, `<`, `>=`, `<=` for integer values.
            #     * `:`, meaning substring matching, for strings.
            #
            #     The supported value types are:
            #
            #     * string literals in quotes.
            #     * integer literals without quotes.
            #     * boolean literals `true` and `false` without quotes.
            #
            #     The following are the allowed field and operator combinations:
            #
            #     * name: `=`
            #     * update_time: `=`, `>`, `<`, `>=`, `<=`
            #
            #       Usage: This should be milliseconds since epoch or an RFC3339 string.
            #       Examples:
            #         `update_time = "2019-06-10T16:07:18-07:00"`
            #         `update_time = 1560208038000`
            #
            #     * create_time: `=`, `>`, `<`, `>=`, `<=`
            #
            #       Usage: This should be milliseconds since epoch or an RFC3339 string.
            #       Examples:
            #         `create_time = "2019-06-10T16:07:18-07:00"`
            #         `create_time = 1560208038000`
            #
            #     * iam_policy.policy_blob: `=`, `:`
            #     * resource_properties: `=`, `:`, `>`, `<`, `>=`, `<=`
            #     * security_marks.marks: `=`, `:`
            #     * security_center_properties.resource_name: `=`, `:`
            #     * security_center_properties.resource_display_name: `=`, `:`
            #     * security_center_properties.resource_type: `=`, `:`
            #     * security_center_properties.resource_parent: `=`, `:`
            #     * security_center_properties.resource_parent_display_name: `=`, `:`
            #     * security_center_properties.resource_project: `=`, `:`
            #     * security_center_properties.resource_project_display_name: `=`, `:`
            #     * security_center_properties.resource_owners: `=`, `:`
            #
            #     For example, `resource_properties.size = 100` is a valid filter string.
            #
            #     Use a partial match on the empty string to filter based on a property
            #     existing: `resource_properties.my_property : ""`
            #
            #     Use a negated partial match on the empty string to filter based on a
            #     property not existing: `-resource_properties.my_property : ""`
            #   @param order_by [::String]
            #     Expression that defines what fields and order to use for sorting. The
            #     string value should follow SQL syntax: comma separated list of fields. For
            #     example: "name,resource_properties.a_property". The default sorting order
            #     is ascending. To specify descending order for a field, a suffix " desc"
            #     should be appended to the field name. For example: "name
            #     desc,resource_properties.a_property". Redundant space characters in the
            #     syntax are insignificant. "name desc,resource_properties.a_property" and "
            #     name     desc  ,   resource_properties.a_property  " are equivalent.
            #
            #     The following fields are supported:
            #     name
            #     update_time
            #     resource_properties
            #     security_marks.marks
            #     security_center_properties.resource_name
            #     security_center_properties.resource_display_name
            #     security_center_properties.resource_parent
            #     security_center_properties.resource_parent_display_name
            #     security_center_properties.resource_project
            #     security_center_properties.resource_project_display_name
            #     security_center_properties.resource_type
            #   @param read_time [::Google::Protobuf::Timestamp, ::Hash]
            #     Time used as a reference point when filtering assets. The filter is limited
            #     to assets existing at the supplied time and their values are those at that
            #     specific time. Absence of this field will default to the API's version of
            #     NOW.
            #   @param compare_duration [::Google::Protobuf::Duration, ::Hash]
            #     When compare_duration is set, the ListAssetsResult's "state_change"
            #     attribute is updated to indicate whether the asset was added, removed, or
            #     remained present during the compare_duration period of time that precedes
            #     the read_time. This is the time between (read_time - compare_duration) and
            #     read_time.
            #
            #     The state_change value is derived based on the presence of the asset at the
            #     two points in time. Intermediate state changes between the two times don't
            #     affect the result. For example, the results aren't affected if the asset is
            #     removed and re-created again.
            #
            #     Possible "state_change" values when compare_duration is specified:
            #
            #     * "ADDED":   indicates that the asset was not present at the start of
            #                    compare_duration, but present at read_time.
            #     * "REMOVED": indicates that the asset was present at the start of
            #                    compare_duration, but not present at read_time.
            #     * "ACTIVE":  indicates that the asset was present at both the
            #                    start and the end of the time period defined by
            #                    compare_duration and read_time.
            #
            #     If compare_duration is not specified, then the only possible state_change
            #     is "UNUSED",  which will be the state_change set for all assets present at
            #     read_time.
            #   @param field_mask [::Google::Protobuf::FieldMask, ::Hash]
            #     A field mask to specify the ListAssetsResult fields to be listed in the
            #     response.
            #     An empty field mask will list all fields.
            #   @param page_token [::String]
            #     The value returned by the last `ListAssetsResponse`; indicates
            #     that this is a continuation of a prior `ListAssets` call, and
            #     that the system should return the next page of data.
            #   @param page_size [::Integer]
            #     The maximum number of results to return in a single response. Default is
            #     10, minimum is 1, maximum is 1000.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::ListAssetsResponse::ListAssetsResult>]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::ListAssetsResponse::ListAssetsResult>]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::ListAssetsRequest.new
            #
            #   # Call the list_assets method.
            #   result = client.list_assets request
            #
            #   # The returned object is of type Gapic::PagedEnumerable. You can iterate
            #   # over elements, and API calls will be issued to fetch pages as needed.
            #   result.each do |item|
            #     # Each element is of type ::Google::Cloud::SecurityCenter::V1p1beta1::ListAssetsResponse::ListAssetsResult.
            #     p item
            #   end
            #
            def list_assets request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::ListAssetsRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.list_assets.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.list_assets.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.list_assets.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :list_assets, request, options: options do |response, operation|
                response = ::Gapic::PagedEnumerable.new @security_center_stub, :list_assets, request, response, operation, options
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Lists an organization or source's findings.
            #
            # To list across all sources provide a `-` as the source id.
            # Example: /v1p1beta1/organizations/\\{organization_id}/sources/-/findings
            #
            # @overload list_findings(request, options = nil)
            #   Pass arguments to `list_findings` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::ListFindingsRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::ListFindingsRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload list_findings(parent: nil, filter: nil, order_by: nil, read_time: nil, compare_duration: nil, field_mask: nil, page_token: nil, page_size: nil)
            #   Pass arguments to `list_findings` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Name of the source the findings belong to. Its format is
            #     "organizations/[organization_id]/sources/[source_id],
            #     folders/[folder_id]/sources/[source_id], or
            #     projects/[project_id]/sources/[source_id]". To list across all sources
            #     provide a source_id of `-`. For example:
            #     organizations/\\{organization_id}/sources/-, folders/\\{folder_id}/sources/- or
            #     projects/\\{projects_id}/sources/-
            #   @param filter [::String]
            #     Expression that defines the filter to apply across findings.
            #     The expression is a list of one or more restrictions combined via logical
            #     operators `AND` and `OR`.
            #     Parentheses are supported, and `OR` has higher precedence than `AND`.
            #
            #     Restrictions have the form `<field> <operator> <value>` and may have a `-`
            #     character in front of them to indicate negation. Examples include:
            #
            #      * name
            #      * source_properties.a_property
            #      * security_marks.marks.marka
            #
            #     The supported operators are:
            #
            #     * `=` for all value types.
            #     * `>`, `<`, `>=`, `<=` for integer values.
            #     * `:`, meaning substring matching, for strings.
            #
            #     The supported value types are:
            #
            #     * string literals in quotes.
            #     * integer literals without quotes.
            #     * boolean literals `true` and `false` without quotes.
            #
            #     The following field and operator combinations are supported:
            #
            #     * name: `=`
            #     * parent: `=`, `:`
            #     * resource_name: `=`, `:`
            #     * state: `=`, `:`
            #     * category: `=`, `:`
            #     * external_uri: `=`, `:`
            #     * event_time: `=`, `>`, `<`, `>=`, `<=`
            #     * severity: `=`, `:`
            #
            #       Usage: This should be milliseconds since epoch or an RFC3339 string.
            #       Examples:
            #         `event_time = "2019-06-10T16:07:18-07:00"`
            #         `event_time = 1560208038000`
            #
            #     security_marks.marks: `=`, `:`
            #     source_properties: `=`, `:`, `>`, `<`, `>=`, `<=`
            #
            #     For example, `source_properties.size = 100` is a valid filter string.
            #
            #     Use a partial match on the empty string to filter based on a property
            #     existing: `source_properties.my_property : ""`
            #
            #     Use a negated partial match on the empty string to filter based on a
            #     property not existing: `-source_properties.my_property : ""`
            #   @param order_by [::String]
            #     Expression that defines what fields and order to use for sorting. The
            #     string value should follow SQL syntax: comma separated list of fields. For
            #     example: "name,resource_properties.a_property". The default sorting order
            #     is ascending. To specify descending order for a field, a suffix " desc"
            #     should be appended to the field name. For example: "name
            #     desc,source_properties.a_property". Redundant space characters in the
            #     syntax are insignificant. "name desc,source_properties.a_property" and "
            #     name     desc  ,   source_properties.a_property  " are equivalent.
            #
            #     The following fields are supported:
            #     name
            #     parent
            #     state
            #     category
            #     resource_name
            #     event_time
            #     source_properties
            #     security_marks.marks
            #   @param read_time [::Google::Protobuf::Timestamp, ::Hash]
            #     Time used as a reference point when filtering findings. The filter is
            #     limited to findings existing at the supplied time and their values are
            #     those at that specific time. Absence of this field will default to the
            #     API's version of NOW.
            #   @param compare_duration [::Google::Protobuf::Duration, ::Hash]
            #     When compare_duration is set, the ListFindingsResult's "state_change"
            #     attribute is updated to indicate whether the finding had its state changed,
            #     the finding's state remained unchanged, or if the finding was added in any
            #     state during the compare_duration period of time that precedes the
            #     read_time. This is the time between (read_time - compare_duration) and
            #     read_time.
            #
            #     The state_change value is derived based on the presence and state of the
            #     finding at the two points in time. Intermediate state changes between the
            #     two times don't affect the result. For example, the results aren't affected
            #     if the finding is made inactive and then active again.
            #
            #     Possible "state_change" values when compare_duration is specified:
            #
            #     * "CHANGED":   indicates that the finding was present and matched the given
            #                      filter at the start of compare_duration, but changed its
            #                      state at read_time.
            #     * "UNCHANGED": indicates that the finding was present and matched the given
            #                      filter at the start of compare_duration and did not change
            #                      state at read_time.
            #     * "ADDED":     indicates that the finding did not match the given filter or
            #                      was not present at the start of compare_duration, but was
            #                      present at read_time.
            #     * "REMOVED":   indicates that the finding was present and matched the
            #                      filter at the start of compare_duration, but did not match
            #                      the filter at read_time.
            #
            #     If compare_duration is not specified, then the only possible state_change
            #     is "UNUSED", which will be the state_change set for all findings present at
            #     read_time.
            #   @param field_mask [::Google::Protobuf::FieldMask, ::Hash]
            #     A field mask to specify the Finding fields to be listed in the response.
            #     An empty field mask will list all fields.
            #   @param page_token [::String]
            #     The value returned by the last `ListFindingsResponse`; indicates
            #     that this is a continuation of a prior `ListFindings` call, and
            #     that the system should return the next page of data.
            #   @param page_size [::Integer]
            #     The maximum number of results to return in a single response. Default is
            #     10, minimum is 1, maximum is 1000.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::ListFindingsResponse::ListFindingsResult>]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::ListFindingsResponse::ListFindingsResult>]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::ListFindingsRequest.new
            #
            #   # Call the list_findings method.
            #   result = client.list_findings request
            #
            #   # The returned object is of type Gapic::PagedEnumerable. You can iterate
            #   # over elements, and API calls will be issued to fetch pages as needed.
            #   result.each do |item|
            #     # Each element is of type ::Google::Cloud::SecurityCenter::V1p1beta1::ListFindingsResponse::ListFindingsResult.
            #     p item
            #   end
            #
            def list_findings request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::ListFindingsRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.list_findings.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.list_findings.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.list_findings.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :list_findings, request, options: options do |response, operation|
                response = ::Gapic::PagedEnumerable.new @security_center_stub, :list_findings, request, response, operation, options
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Lists notification configs.
            #
            # @overload list_notification_configs(request, options = nil)
            #   Pass arguments to `list_notification_configs` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::ListNotificationConfigsRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::ListNotificationConfigsRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload list_notification_configs(parent: nil, page_token: nil, page_size: nil)
            #   Pass arguments to `list_notification_configs` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Name of the organization to list notification configs.
            #     Its format is "organizations/[organization_id]".
            #   @param page_token [::String]
            #     The value returned by the last `ListNotificationConfigsResponse`; indicates
            #     that this is a continuation of a prior `ListNotificationConfigs` call, and
            #     that the system should return the next page of data.
            #   @param page_size [::Integer]
            #     The maximum number of results to return in a single response. Default is
            #     10, minimum is 1, maximum is 1000.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig>]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig>]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::ListNotificationConfigsRequest.new
            #
            #   # Call the list_notification_configs method.
            #   result = client.list_notification_configs request
            #
            #   # The returned object is of type Gapic::PagedEnumerable. You can iterate
            #   # over elements, and API calls will be issued to fetch pages as needed.
            #   result.each do |item|
            #     # Each element is of type ::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig.
            #     p item
            #   end
            #
            def list_notification_configs request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::ListNotificationConfigsRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.list_notification_configs.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.list_notification_configs.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.list_notification_configs.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :list_notification_configs, request, options: options do |response, operation|
                response = ::Gapic::PagedEnumerable.new @security_center_stub, :list_notification_configs, request, response, operation, options
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Lists all sources belonging to an organization.
            #
            # @overload list_sources(request, options = nil)
            #   Pass arguments to `list_sources` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::ListSourcesRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::ListSourcesRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload list_sources(parent: nil, page_token: nil, page_size: nil)
            #   Pass arguments to `list_sources` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Resource name of the parent of sources to list. Its format should be
            #     "organizations/[organization_id], folders/[folder_id], or
            #     projects/[project_id]".
            #   @param page_token [::String]
            #     The value returned by the last `ListSourcesResponse`; indicates
            #     that this is a continuation of a prior `ListSources` call, and
            #     that the system should return the next page of data.
            #   @param page_size [::Integer]
            #     The maximum number of results to return in a single response. Default is
            #     10, minimum is 1, maximum is 1000.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::Source>]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Gapic::PagedEnumerable<::Google::Cloud::SecurityCenter::V1p1beta1::Source>]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::ListSourcesRequest.new
            #
            #   # Call the list_sources method.
            #   result = client.list_sources request
            #
            #   # The returned object is of type Gapic::PagedEnumerable. You can iterate
            #   # over elements, and API calls will be issued to fetch pages as needed.
            #   result.each do |item|
            #     # Each element is of type ::Google::Cloud::SecurityCenter::V1p1beta1::Source.
            #     p item
            #   end
            #
            def list_sources request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::ListSourcesRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.list_sources.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.list_sources.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.list_sources.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :list_sources, request, options: options do |response, operation|
                response = ::Gapic::PagedEnumerable.new @security_center_stub, :list_sources, request, response, operation, options
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Runs asset discovery. The discovery is tracked with a long-running
            # operation.
            #
            # This API can only be called with limited frequency for an organization. If
            # it is called too frequently the caller will receive a TOO_MANY_REQUESTS
            # error.
            #
            # @overload run_asset_discovery(request, options = nil)
            #   Pass arguments to `run_asset_discovery` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::RunAssetDiscoveryRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::RunAssetDiscoveryRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload run_asset_discovery(parent: nil)
            #   Pass arguments to `run_asset_discovery` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param parent [::String]
            #     Required. Name of the organization to run asset discovery for. Its format is
            #     "organizations/[organization_id]".
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Gapic::Operation]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Gapic::Operation]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::RunAssetDiscoveryRequest.new
            #
            #   # Call the run_asset_discovery method.
            #   result = client.run_asset_discovery request
            #
            #   # The returned object is of type Gapic::Operation. You can use it to
            #   # check the status of an operation, cancel it, or wait for results.
            #   # Here is how to wait for a response.
            #   result.wait_until_done! timeout: 60
            #   if result.response?
            #     p result.response
            #   else
            #     puts "No response received."
            #   end
            #
            def run_asset_discovery request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::RunAssetDiscoveryRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.run_asset_discovery.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.parent
                header_params["parent"] = request.parent
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.run_asset_discovery.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.run_asset_discovery.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :run_asset_discovery, request, options: options do |response, operation|
                response = ::Gapic::Operation.new response, @operations_client, options: options
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Updates the state of a finding.
            #
            # @overload set_finding_state(request, options = nil)
            #   Pass arguments to `set_finding_state` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::SetFindingStateRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::SetFindingStateRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload set_finding_state(name: nil, state: nil, start_time: nil)
            #   Pass arguments to `set_finding_state` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param name [::String]
            #     Required. The relative resource name of the finding. See:
            #     https://cloud.google.com/apis/design/resource_names#relative_resource_name
            #     Example:
            #     "organizations/\\{organization_id}/sources/\\{source_id}/finding/\\{finding_id}".
            #   @param state [::Google::Cloud::SecurityCenter::V1p1beta1::Finding::State]
            #     Required. The desired State of the finding.
            #   @param start_time [::Google::Protobuf::Timestamp, ::Hash]
            #     Required. The time at which the updated state takes effect.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::Finding]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::Finding]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::SetFindingStateRequest.new
            #
            #   # Call the set_finding_state method.
            #   result = client.set_finding_state request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::Finding.
            #   p result
            #
            def set_finding_state request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::SetFindingStateRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.set_finding_state.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.name
                header_params["name"] = request.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.set_finding_state.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.set_finding_state.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :set_finding_state, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Sets the access control policy on the specified Source.
            #
            # @overload set_iam_policy(request, options = nil)
            #   Pass arguments to `set_iam_policy` via a request object, either of type
            #   {::Google::Iam::V1::SetIamPolicyRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Iam::V1::SetIamPolicyRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload set_iam_policy(resource: nil, policy: nil, update_mask: nil)
            #   Pass arguments to `set_iam_policy` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param resource [::String]
            #     REQUIRED: The resource for which the policy is being specified.
            #     See the operation documentation for the appropriate value for this field.
            #   @param policy [::Google::Iam::V1::Policy, ::Hash]
            #     REQUIRED: The complete policy to be applied to the `resource`. The size of
            #     the policy is limited to a few 10s of KB. An empty policy is a
            #     valid policy but certain Cloud Platform services (such as Projects)
            #     might reject them.
            #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
            #     OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only
            #     the fields in the mask will be modified. If no mask is provided, the
            #     following default mask is used:
            #
            #     `paths: "bindings, etag"`
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Iam::V1::Policy]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Iam::V1::Policy]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Iam::V1::SetIamPolicyRequest.new
            #
            #   # Call the set_iam_policy method.
            #   result = client.set_iam_policy request
            #
            #   # The returned object is of type Google::Iam::V1::Policy.
            #   p result
            #
            def set_iam_policy request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Iam::V1::SetIamPolicyRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.set_iam_policy.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.resource
                header_params["resource"] = request.resource
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.set_iam_policy.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.set_iam_policy.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :set_iam_policy, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Returns the permissions that a caller has on the specified source.
            #
            # @overload test_iam_permissions(request, options = nil)
            #   Pass arguments to `test_iam_permissions` via a request object, either of type
            #   {::Google::Iam::V1::TestIamPermissionsRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Iam::V1::TestIamPermissionsRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload test_iam_permissions(resource: nil, permissions: nil)
            #   Pass arguments to `test_iam_permissions` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param resource [::String]
            #     REQUIRED: The resource for which the policy detail is being requested.
            #     See the operation documentation for the appropriate value for this field.
            #   @param permissions [::Array<::String>]
            #     The set of permissions to check for the `resource`. Permissions with
            #     wildcards (such as '*' or 'storage.*') are not allowed. For more
            #     information see
            #     [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Iam::V1::TestIamPermissionsResponse]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Iam::V1::TestIamPermissionsResponse]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Iam::V1::TestIamPermissionsRequest.new
            #
            #   # Call the test_iam_permissions method.
            #   result = client.test_iam_permissions request
            #
            #   # The returned object is of type Google::Iam::V1::TestIamPermissionsResponse.
            #   p result
            #
            def test_iam_permissions request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Iam::V1::TestIamPermissionsRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.test_iam_permissions.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.resource
                header_params["resource"] = request.resource
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.test_iam_permissions.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.test_iam_permissions.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :test_iam_permissions, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Creates or updates a finding. The corresponding source must exist for a
            # finding creation to succeed.
            #
            # @overload update_finding(request, options = nil)
            #   Pass arguments to `update_finding` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::UpdateFindingRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::UpdateFindingRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload update_finding(finding: nil, update_mask: nil)
            #   Pass arguments to `update_finding` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param finding [::Google::Cloud::SecurityCenter::V1p1beta1::Finding, ::Hash]
            #     Required. The finding resource to update or create if it does not already exist.
            #     parent, security_marks, and update_time will be ignored.
            #
            #     In the case of creation, the finding id portion of the name must be
            #     alphanumeric and less than or equal to 32 characters and greater than 0
            #     characters in length.
            #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
            #     The FieldMask to use when updating the finding resource. This field should
            #     not be specified when creating a finding.
            #
            #     When updating a finding, an empty mask is treated as updating all mutable
            #     fields and replacing source_properties.  Individual source_properties can
            #     be added/updated by using "source_properties.<property key>" in the field
            #     mask.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::Finding]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::Finding]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::UpdateFindingRequest.new
            #
            #   # Call the update_finding method.
            #   result = client.update_finding request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::Finding.
            #   p result
            #
            def update_finding request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::UpdateFindingRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.update_finding.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.finding&.name
                header_params["finding.name"] = request.finding.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.update_finding.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.update_finding.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :update_finding, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Updates a notification config. The following update
            # fields are allowed: description, pubsub_topic, streaming_config.filter
            #
            # @overload update_notification_config(request, options = nil)
            #   Pass arguments to `update_notification_config` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::UpdateNotificationConfigRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::UpdateNotificationConfigRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload update_notification_config(notification_config: nil, update_mask: nil)
            #   Pass arguments to `update_notification_config` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param notification_config [::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig, ::Hash]
            #     Required. The notification config to update.
            #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
            #     The FieldMask to use when updating the notification config.
            #
            #     If empty all mutable fields will be updated.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::UpdateNotificationConfigRequest.new
            #
            #   # Call the update_notification_config method.
            #   result = client.update_notification_config request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig.
            #   p result
            #
            def update_notification_config request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::UpdateNotificationConfigRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.update_notification_config.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.notification_config&.name
                header_params["notification_config.name"] = request.notification_config.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.update_notification_config.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.update_notification_config.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :update_notification_config, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Updates an organization's settings.
            #
            # @overload update_organization_settings(request, options = nil)
            #   Pass arguments to `update_organization_settings` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::UpdateOrganizationSettingsRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::UpdateOrganizationSettingsRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload update_organization_settings(organization_settings: nil, update_mask: nil)
            #   Pass arguments to `update_organization_settings` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param organization_settings [::Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings, ::Hash]
            #     Required. The organization settings resource to update.
            #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
            #     The FieldMask to use when updating the settings resource.
            #
            #     If empty all mutable fields will be updated.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::UpdateOrganizationSettingsRequest.new
            #
            #   # Call the update_organization_settings method.
            #   result = client.update_organization_settings request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings.
            #   p result
            #
            def update_organization_settings request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::UpdateOrganizationSettingsRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.update_organization_settings.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.organization_settings&.name
                header_params["organization_settings.name"] = request.organization_settings.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.update_organization_settings.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.update_organization_settings.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :update_organization_settings, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Updates a source.
            #
            # @overload update_source(request, options = nil)
            #   Pass arguments to `update_source` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::UpdateSourceRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::UpdateSourceRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload update_source(source: nil, update_mask: nil)
            #   Pass arguments to `update_source` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param source [::Google::Cloud::SecurityCenter::V1p1beta1::Source, ::Hash]
            #     Required. The source resource to update.
            #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
            #     The FieldMask to use when updating the source resource.
            #
            #     If empty all mutable fields will be updated.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::Source]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::Source]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::UpdateSourceRequest.new
            #
            #   # Call the update_source method.
            #   result = client.update_source request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::Source.
            #   p result
            #
            def update_source request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::UpdateSourceRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.update_source.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.source&.name
                header_params["source.name"] = request.source.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.update_source.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.update_source.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :update_source, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Updates security marks.
            #
            # @overload update_security_marks(request, options = nil)
            #   Pass arguments to `update_security_marks` via a request object, either of type
            #   {::Google::Cloud::SecurityCenter::V1p1beta1::UpdateSecurityMarksRequest} or an equivalent Hash.
            #
            #   @param request [::Google::Cloud::SecurityCenter::V1p1beta1::UpdateSecurityMarksRequest, ::Hash]
            #     A request object representing the call parameters. Required. To specify no
            #     parameters, or to keep all the default parameter values, pass an empty Hash.
            #   @param options [::Gapic::CallOptions, ::Hash]
            #     Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
            #
            # @overload update_security_marks(security_marks: nil, update_mask: nil, start_time: nil)
            #   Pass arguments to `update_security_marks` via keyword arguments. Note that at
            #   least one keyword argument is required. To specify no parameters, or to keep all
            #   the default parameter values, pass an empty Hash as a request object (see above).
            #
            #   @param security_marks [::Google::Cloud::SecurityCenter::V1p1beta1::SecurityMarks, ::Hash]
            #     Required. The security marks resource to update.
            #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
            #     The FieldMask to use when updating the security marks resource.
            #
            #     The field mask must not contain duplicate fields.
            #     If empty or set to "marks", all marks will be replaced.  Individual
            #     marks can be updated using "marks.<mark_key>".
            #   @param start_time [::Google::Protobuf::Timestamp, ::Hash]
            #     The time at which the updated SecurityMarks take effect.
            #     If not set uses current server time.  Updates will be applied to the
            #     SecurityMarks that are active immediately preceding this time.
            #
            # @yield [response, operation] Access the result along with the RPC operation
            # @yieldparam response [::Google::Cloud::SecurityCenter::V1p1beta1::SecurityMarks]
            # @yieldparam operation [::GRPC::ActiveCall::Operation]
            #
            # @return [::Google::Cloud::SecurityCenter::V1p1beta1::SecurityMarks]
            #
            # @raise [::Google::Cloud::Error] if the RPC is aborted.
            #
            # @example Basic example
            #   require "google/cloud/security_center/v1p1beta1"
            #
            #   # Create a client object. The client can be reused for multiple calls.
            #   client = Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new
            #
            #   # Create a request. To set request fields, pass in keyword arguments.
            #   request = Google::Cloud::SecurityCenter::V1p1beta1::UpdateSecurityMarksRequest.new
            #
            #   # Call the update_security_marks method.
            #   result = client.update_security_marks request
            #
            #   # The returned object is of type Google::Cloud::SecurityCenter::V1p1beta1::SecurityMarks.
            #   p result
            #
            def update_security_marks request, options = nil
              raise ::ArgumentError, "request must be provided" if request.nil?

              request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::SecurityCenter::V1p1beta1::UpdateSecurityMarksRequest

              # Converts hash and nil to an options object
              options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h

              # Customize the options with defaults
              metadata = @config.rpcs.update_security_marks.metadata.to_h

              # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
              metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
                lib_name: @config.lib_name, lib_version: @config.lib_version,
                gapic_version: ::Google::Cloud::SecurityCenter::V1p1beta1::VERSION
              metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
              metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

              header_params = {}
              if request.security_marks&.name
                header_params["security_marks.name"] = request.security_marks.name
              end

              request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
              metadata[:"x-goog-request-params"] ||= request_params_header

              options.apply_defaults timeout:      @config.rpcs.update_security_marks.timeout,
                                     metadata:     metadata,
                                     retry_policy: @config.rpcs.update_security_marks.retry_policy

              options.apply_defaults timeout:      @config.timeout,
                                     metadata:     @config.metadata,
                                     retry_policy: @config.retry_policy

              @security_center_stub.call_rpc :update_security_marks, request, options: options do |response, operation|
                yield response, operation if block_given?
                return response
              end
            rescue ::GRPC::BadStatus => e
              raise ::Google::Cloud::Error.from_error(e)
            end

            ##
            # Configuration class for the SecurityCenter API.
            #
            # This class represents the configuration for SecurityCenter,
            # providing control over timeouts, retry behavior, logging, transport
            # parameters, and other low-level controls. Certain parameters can also be
            # applied individually to specific RPCs. See
            # {::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client::Configuration::Rpcs}
            # for a list of RPCs that can be configured independently.
            #
            # Configuration can be applied globally to all clients, or to a single client
            # on construction.
            #
            # @example
            #
            #   # Modify the global config, setting the timeout for
            #   # create_source to 20 seconds,
            #   # and all remaining timeouts to 10 seconds.
            #   ::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.configure do |config|
            #     config.timeout = 10.0
            #     config.rpcs.create_source.timeout = 20.0
            #   end
            #
            #   # Apply the above configuration only to a new client.
            #   client = ::Google::Cloud::SecurityCenter::V1p1beta1::SecurityCenter::Client.new do |config|
            #     config.timeout = 10.0
            #     config.rpcs.create_source.timeout = 20.0
            #   end
            #
            # @!attribute [rw] endpoint
            #   A custom service endpoint, as a hostname or hostname:port. The default is
            #   nil, indicating to use the default endpoint in the current universe domain.
            #   @return [::String,nil]
            # @!attribute [rw] credentials
            #   Credentials to send with calls. You may provide any of the following types:
            #    *  (`String`) The path to a service account key file in JSON format
            #    *  (`Hash`) A service account key as a Hash
            #    *  (`Google::Auth::Credentials`) A googleauth credentials object
            #       (see the [googleauth docs](https://rubydoc.info/gems/googleauth/Google/Auth/Credentials))
            #    *  (`Signet::OAuth2::Client`) A signet oauth2 client object
            #       (see the [signet docs](https://rubydoc.info/gems/signet/Signet/OAuth2/Client))
            #    *  (`GRPC::Core::Channel`) a gRPC channel with included credentials
            #    *  (`GRPC::Core::ChannelCredentials`) a gRPC credentails object
            #    *  (`nil`) indicating no credentials
            #   @return [::Object]
            # @!attribute [rw] scope
            #   The OAuth scopes
            #   @return [::Array<::String>]
            # @!attribute [rw] lib_name
            #   The library name as recorded in instrumentation and logging
            #   @return [::String]
            # @!attribute [rw] lib_version
            #   The library version as recorded in instrumentation and logging
            #   @return [::String]
            # @!attribute [rw] channel_args
            #   Extra parameters passed to the gRPC channel. Note: this is ignored if a
            #   `GRPC::Core::Channel` object is provided as the credential.
            #   @return [::Hash]
            # @!attribute [rw] interceptors
            #   An array of interceptors that are run before calls are executed.
            #   @return [::Array<::GRPC::ClientInterceptor>]
            # @!attribute [rw] timeout
            #   The call timeout in seconds.
            #   @return [::Numeric]
            # @!attribute [rw] metadata
            #   Additional gRPC headers to be sent with the call.
            #   @return [::Hash{::Symbol=>::String}]
            # @!attribute [rw] retry_policy
            #   The retry policy. The value is a hash with the following keys:
            #    *  `:initial_delay` (*type:* `Numeric`) - The initial delay in seconds.
            #    *  `:max_delay` (*type:* `Numeric`) - The max delay in seconds.
            #    *  `:multiplier` (*type:* `Numeric`) - The incremental backoff multiplier.
            #    *  `:retry_codes` (*type:* `Array<String>`) - The error codes that should
            #       trigger a retry.
            #   @return [::Hash]
            # @!attribute [rw] quota_project
            #   A separate project against which to charge quota.
            #   @return [::String]
            # @!attribute [rw] universe_domain
            #   The universe domain within which to make requests. This determines the
            #   default endpoint URL. The default value of nil uses the environment
            #   universe (usually the default "googleapis.com" universe).
            #   @return [::String,nil]
            #
            class Configuration
              extend ::Gapic::Config

              # @private
              # The endpoint specific to the default "googleapis.com" universe. Deprecated.
              DEFAULT_ENDPOINT = "securitycenter.googleapis.com"

              config_attr :endpoint,      nil, ::String, nil
              config_attr :credentials,   nil do |value|
                allowed = [::String, ::Hash, ::Proc, ::Symbol, ::Google::Auth::Credentials, ::Signet::OAuth2::Client, nil]
                allowed += [::GRPC::Core::Channel, ::GRPC::Core::ChannelCredentials] if defined? ::GRPC
                allowed.any? { |klass| klass === value }
              end
              config_attr :scope,         nil, ::String, ::Array, nil
              config_attr :lib_name,      nil, ::String, nil
              config_attr :lib_version,   nil, ::String, nil
              config_attr(:channel_args,  { "grpc.service_config_disable_resolution" => 1 }, ::Hash, nil)
              config_attr :interceptors,  nil, ::Array, nil
              config_attr :timeout,       nil, ::Numeric, nil
              config_attr :metadata,      nil, ::Hash, nil
              config_attr :retry_policy,  nil, ::Hash, ::Proc, nil
              config_attr :quota_project, nil, ::String, nil
              config_attr :universe_domain, nil, ::String, nil

              # @private
              def initialize parent_config = nil
                @parent_config = parent_config unless parent_config.nil?

                yield self if block_given?
              end

              ##
              # Configurations for individual RPCs
              # @return [Rpcs]
              #
              def rpcs
                @rpcs ||= begin
                  parent_rpcs = nil
                  parent_rpcs = @parent_config.rpcs if defined?(@parent_config) && @parent_config.respond_to?(:rpcs)
                  Rpcs.new parent_rpcs
                end
              end

              ##
              # Configuration for the channel pool
              # @return [::Gapic::ServiceStub::ChannelPool::Configuration]
              #
              def channel_pool
                @channel_pool ||= ::Gapic::ServiceStub::ChannelPool::Configuration.new
              end

              ##
              # Configuration RPC class for the SecurityCenter API.
              #
              # Includes fields providing the configuration for each RPC in this service.
              # Each configuration object is of type `Gapic::Config::Method` and includes
              # the following configuration fields:
              #
              #  *  `timeout` (*type:* `Numeric`) - The call timeout in seconds
              #  *  `metadata` (*type:* `Hash{Symbol=>String}`) - Additional gRPC headers
              #  *  `retry_policy (*type:* `Hash`) - The retry policy. The policy fields
              #     include the following keys:
              #      *  `:initial_delay` (*type:* `Numeric`) - The initial delay in seconds.
              #      *  `:max_delay` (*type:* `Numeric`) - The max delay in seconds.
              #      *  `:multiplier` (*type:* `Numeric`) - The incremental backoff multiplier.
              #      *  `:retry_codes` (*type:* `Array<String>`) - The error codes that should
              #         trigger a retry.
              #
              class Rpcs
                ##
                # RPC-specific configuration for `create_source`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :create_source
                ##
                # RPC-specific configuration for `create_finding`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :create_finding
                ##
                # RPC-specific configuration for `create_notification_config`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :create_notification_config
                ##
                # RPC-specific configuration for `delete_notification_config`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :delete_notification_config
                ##
                # RPC-specific configuration for `get_iam_policy`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :get_iam_policy
                ##
                # RPC-specific configuration for `get_notification_config`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :get_notification_config
                ##
                # RPC-specific configuration for `get_organization_settings`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :get_organization_settings
                ##
                # RPC-specific configuration for `get_source`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :get_source
                ##
                # RPC-specific configuration for `group_assets`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :group_assets
                ##
                # RPC-specific configuration for `group_findings`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :group_findings
                ##
                # RPC-specific configuration for `list_assets`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :list_assets
                ##
                # RPC-specific configuration for `list_findings`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :list_findings
                ##
                # RPC-specific configuration for `list_notification_configs`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :list_notification_configs
                ##
                # RPC-specific configuration for `list_sources`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :list_sources
                ##
                # RPC-specific configuration for `run_asset_discovery`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :run_asset_discovery
                ##
                # RPC-specific configuration for `set_finding_state`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :set_finding_state
                ##
                # RPC-specific configuration for `set_iam_policy`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :set_iam_policy
                ##
                # RPC-specific configuration for `test_iam_permissions`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :test_iam_permissions
                ##
                # RPC-specific configuration for `update_finding`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :update_finding
                ##
                # RPC-specific configuration for `update_notification_config`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :update_notification_config
                ##
                # RPC-specific configuration for `update_organization_settings`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :update_organization_settings
                ##
                # RPC-specific configuration for `update_source`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :update_source
                ##
                # RPC-specific configuration for `update_security_marks`
                # @return [::Gapic::Config::Method]
                #
                attr_reader :update_security_marks

                # @private
                def initialize parent_rpcs = nil
                  create_source_config = parent_rpcs.create_source if parent_rpcs.respond_to? :create_source
                  @create_source = ::Gapic::Config::Method.new create_source_config
                  create_finding_config = parent_rpcs.create_finding if parent_rpcs.respond_to? :create_finding
                  @create_finding = ::Gapic::Config::Method.new create_finding_config
                  create_notification_config_config = parent_rpcs.create_notification_config if parent_rpcs.respond_to? :create_notification_config
                  @create_notification_config = ::Gapic::Config::Method.new create_notification_config_config
                  delete_notification_config_config = parent_rpcs.delete_notification_config if parent_rpcs.respond_to? :delete_notification_config
                  @delete_notification_config = ::Gapic::Config::Method.new delete_notification_config_config
                  get_iam_policy_config = parent_rpcs.get_iam_policy if parent_rpcs.respond_to? :get_iam_policy
                  @get_iam_policy = ::Gapic::Config::Method.new get_iam_policy_config
                  get_notification_config_config = parent_rpcs.get_notification_config if parent_rpcs.respond_to? :get_notification_config
                  @get_notification_config = ::Gapic::Config::Method.new get_notification_config_config
                  get_organization_settings_config = parent_rpcs.get_organization_settings if parent_rpcs.respond_to? :get_organization_settings
                  @get_organization_settings = ::Gapic::Config::Method.new get_organization_settings_config
                  get_source_config = parent_rpcs.get_source if parent_rpcs.respond_to? :get_source
                  @get_source = ::Gapic::Config::Method.new get_source_config
                  group_assets_config = parent_rpcs.group_assets if parent_rpcs.respond_to? :group_assets
                  @group_assets = ::Gapic::Config::Method.new group_assets_config
                  group_findings_config = parent_rpcs.group_findings if parent_rpcs.respond_to? :group_findings
                  @group_findings = ::Gapic::Config::Method.new group_findings_config
                  list_assets_config = parent_rpcs.list_assets if parent_rpcs.respond_to? :list_assets
                  @list_assets = ::Gapic::Config::Method.new list_assets_config
                  list_findings_config = parent_rpcs.list_findings if parent_rpcs.respond_to? :list_findings
                  @list_findings = ::Gapic::Config::Method.new list_findings_config
                  list_notification_configs_config = parent_rpcs.list_notification_configs if parent_rpcs.respond_to? :list_notification_configs
                  @list_notification_configs = ::Gapic::Config::Method.new list_notification_configs_config
                  list_sources_config = parent_rpcs.list_sources if parent_rpcs.respond_to? :list_sources
                  @list_sources = ::Gapic::Config::Method.new list_sources_config
                  run_asset_discovery_config = parent_rpcs.run_asset_discovery if parent_rpcs.respond_to? :run_asset_discovery
                  @run_asset_discovery = ::Gapic::Config::Method.new run_asset_discovery_config
                  set_finding_state_config = parent_rpcs.set_finding_state if parent_rpcs.respond_to? :set_finding_state
                  @set_finding_state = ::Gapic::Config::Method.new set_finding_state_config
                  set_iam_policy_config = parent_rpcs.set_iam_policy if parent_rpcs.respond_to? :set_iam_policy
                  @set_iam_policy = ::Gapic::Config::Method.new set_iam_policy_config
                  test_iam_permissions_config = parent_rpcs.test_iam_permissions if parent_rpcs.respond_to? :test_iam_permissions
                  @test_iam_permissions = ::Gapic::Config::Method.new test_iam_permissions_config
                  update_finding_config = parent_rpcs.update_finding if parent_rpcs.respond_to? :update_finding
                  @update_finding = ::Gapic::Config::Method.new update_finding_config
                  update_notification_config_config = parent_rpcs.update_notification_config if parent_rpcs.respond_to? :update_notification_config
                  @update_notification_config = ::Gapic::Config::Method.new update_notification_config_config
                  update_organization_settings_config = parent_rpcs.update_organization_settings if parent_rpcs.respond_to? :update_organization_settings
                  @update_organization_settings = ::Gapic::Config::Method.new update_organization_settings_config
                  update_source_config = parent_rpcs.update_source if parent_rpcs.respond_to? :update_source
                  @update_source = ::Gapic::Config::Method.new update_source_config
                  update_security_marks_config = parent_rpcs.update_security_marks if parent_rpcs.respond_to? :update_security_marks
                  @update_security_marks = ::Gapic::Config::Method.new update_security_marks_config

                  yield self if block_given?
                end
              end
            end
          end
        end
      end
    end
  end
end