# frozen_string_literal: true

# Copyright 2024 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/visionai/v1/warehouse_pb"
require "google/cloud/vision_ai/v1/warehouse/rest/service_stub"
require "google/cloud/location/rest"
require "google/iam/v1/rest"

module Google
  module Cloud
    module VisionAI
      module V1
        module Warehouse
          module Rest
            ##
            # REST client for the Warehouse service.
            #
            # Service that manages media content + metadata for streaming.
            #
            class Client
              # @private
              API_VERSION = ""

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

              include Paths

              # @private
              attr_reader :warehouse_stub

              ##
              # Configure the Warehouse Client class.
              #
              # See {::Google::Cloud::VisionAI::V1::Warehouse::Rest::Client::Configuration}
              # for a description of the configuration fields.
              #
              # @example
              #
              #   # Modify the configuration for all Warehouse clients
              #   ::Google::Cloud::VisionAI::V1::Warehouse::Rest::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", "VisionAI", "V1"]
                  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.timeout = 60.0
                  default_config.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.create_asset.timeout = 120.0
                  default_config.rpcs.create_asset.retry_policy = {
                    initial_delay: 1.0, max_delay: 120.0, multiplier: 2.5, retry_codes: [14]
                  }

                  default_config.rpcs.create_corpus.timeout = 120.0
                  default_config.rpcs.create_corpus.retry_policy = {
                    initial_delay: 1.0, max_delay: 120.0, multiplier: 2.5, retry_codes: [14]
                  }

                  default_config.rpcs.create_data_schema.timeout = 120.0
                  default_config.rpcs.create_data_schema.retry_policy = {
                    initial_delay: 1.0, max_delay: 120.0, multiplier: 2.5, retry_codes: [14]
                  }

                  default_config.rpcs.create_annotation.timeout = 120.0
                  default_config.rpcs.create_annotation.retry_policy = {
                    initial_delay: 1.0, max_delay: 120.0, multiplier: 2.5, retry_codes: [14]
                  }

                  default_config
                end
                yield @configure if block_given?
                @configure
              end

              ##
              # Configure the Warehouse 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::VisionAI::V1::Warehouse::Rest::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
                @warehouse_stub.universe_domain
              end

              ##
              # Create a new Warehouse REST client object.
              #
              # @example
              #
              #   # Create a client using the default configuration
              #   client = ::Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a client using a custom configuration
              #   client = ::Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new do |config|
              #     config.timeout = 10.0
              #   end
              #
              # @yield [config] Configure the Warehouse client.
              # @yieldparam config [Client::Configuration]
              #
              def initialize
                # 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 = ::Google::Cloud::VisionAI::V1::Warehouse::Rest::Operations.new do |config|
                  config.credentials = credentials
                  config.quota_project = @quota_project_id
                  config.endpoint = @config.endpoint
                  config.universe_domain = @config.universe_domain
                end

                @warehouse_stub = ::Google::Cloud::VisionAI::V1::Warehouse::Rest::ServiceStub.new(
                  endpoint: @config.endpoint,
                  endpoint_template: DEFAULT_ENDPOINT_TEMPLATE,
                  universe_domain: @config.universe_domain,
                  credentials: credentials,
                  logger: @config.logger
                )

                @warehouse_stub.logger(stub: true)&.info do |entry|
                  entry.set_system_name
                  entry.set_service
                  entry.message = "Created client for #{entry.service}"
                  entry.set_credentials_fields credentials
                  entry.set "customEndpoint", @config.endpoint if @config.endpoint
                  entry.set "defaultTimeout", @config.timeout if @config.timeout
                  entry.set "quotaProject", @quota_project_id if @quota_project_id
                end

                @location_client = Google::Cloud::Location::Locations::Rest::Client.new do |config|
                  config.credentials = credentials
                  config.quota_project = @quota_project_id
                  config.endpoint = @warehouse_stub.endpoint
                  config.universe_domain = @warehouse_stub.universe_domain
                  config.logger = @warehouse_stub.logger if config.respond_to? :logger=
                end

                @iam_policy_client = Google::Iam::V1::IAMPolicy::Rest::Client.new do |config|
                  config.credentials = credentials
                  config.quota_project = @quota_project_id
                  config.endpoint = @warehouse_stub.endpoint
                  config.universe_domain = @warehouse_stub.universe_domain
                  config.logger = @warehouse_stub.logger if config.respond_to? :logger=
                end
              end

              ##
              # Get the associated client for long-running operations.
              #
              # @return [::Google::Cloud::VisionAI::V1::Warehouse::Rest::Operations]
              #
              attr_reader :operations_client

              ##
              # Get the associated client for mix-in of the Locations.
              #
              # @return [Google::Cloud::Location::Locations::Rest::Client]
              #
              attr_reader :location_client

              ##
              # Get the associated client for mix-in of the IAMPolicy.
              #
              # @return [Google::Iam::V1::IAMPolicy::Rest::Client]
              #
              attr_reader :iam_policy_client

              ##
              # The logger used for request/response debug logging.
              #
              # @return [Logger]
              #
              def logger
                @warehouse_stub.logger
              end

              # Service calls

              ##
              # Creates an asset inside corpus.
              #
              # @overload create_asset(request, options = nil)
              #   Pass arguments to `create_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateAssetRequest, ::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_asset(parent: nil, asset: nil, asset_id: nil)
              #   Pass arguments to `create_asset` 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. The parent resource where this asset will be created.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
              #   @param asset [::Google::Cloud::VisionAI::V1::Asset, ::Hash]
              #     Required. The asset to create.
              #   @param asset_id [::String]
              #     Optional. The ID to use for the asset, which will become the final
              #     component of the asset's resource name if user choose to specify.
              #     Otherwise, asset id will be generated by system.
              #
              #     This value should be up to 63 characters, and valid characters
              #     are /[a-z][0-9]-/. The first character must be a letter, the last could be
              #     a letter or a number.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Asset]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Asset]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateAssetRequest.new
              #
              #   # Call the create_asset method.
              #   result = client.create_asset request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Asset.
              #   p result
              #
              def create_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateAssetRequest

                # 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
                call_metadata = @config.rpcs.create_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_asset.retry_policy

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

                @warehouse_stub.create_asset request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates an asset inside corpus.
              #
              # @overload update_asset(request, options = nil)
              #   Pass arguments to `update_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateAssetRequest, ::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_asset(asset: nil, update_mask: nil)
              #   Pass arguments to `update_asset` 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 asset [::Google::Cloud::VisionAI::V1::Asset, ::Hash]
              #     Required. The asset to update.
              #
              #     The asset's `name` field is used to identify the asset to be updated.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}`
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     The list of fields to be updated.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Asset]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Asset]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateAssetRequest.new
              #
              #   # Call the update_asset method.
              #   result = client.update_asset request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Asset.
              #   p result
              #
              def update_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateAssetRequest

                # 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
                call_metadata = @config.rpcs.update_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_asset.retry_policy

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

                @warehouse_stub.update_asset request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Reads an asset inside corpus.
              #
              # @overload get_asset(request, options = nil)
              #   Pass arguments to `get_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetAssetRequest, ::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_asset(name: nil)
              #   Pass arguments to `get_asset` 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 name of the asset to retrieve.
              #     Format:
              #     projects/\\{project_number}/locations/\\{location}/corpora/\\{corpus}/assets/\\{asset}
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Asset]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Asset]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetAssetRequest.new
              #
              #   # Call the get_asset method.
              #   result = client.get_asset request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Asset.
              #   p result
              #
              def get_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetAssetRequest

                # 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
                call_metadata = @config.rpcs.get_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_asset.retry_policy

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

                @warehouse_stub.get_asset request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists an list of assets inside corpus.
              #
              # @overload list_assets(request, options = nil)
              #   Pass arguments to `list_assets` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListAssetsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::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, page_size: nil, page_token: nil, filter: 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. The parent, which owns this collection of assets.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}`
              #   @param page_size [::Integer]
              #     The maximum number of assets to return. The service may return fewer than
              #     this value.
              #     If unspecified, at most 50 assets will be returned.
              #     The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `ListAssets` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to `ListAssets` must match
              #     the call that provided the page token.
              #   @param filter [::String]
              #     The filter applied to the returned list.
              #     Only the following filterings are supported:
              #     "assets_with_contents = true", which returns assets with contents uploaded;
              #     "assets_with_contents = false", which returns assets without contents.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Asset>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Asset>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::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::VisionAI::V1::Asset.
              #     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::VisionAI::V1::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
                call_metadata = @config.rpcs.list_assets.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

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

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

                @warehouse_stub.list_assets request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_assets, "assets", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes asset inside corpus.
              #
              # @overload delete_asset(request, options = nil)
              #   Pass arguments to `delete_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteAssetRequest, ::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_asset(name: nil)
              #   Pass arguments to `delete_asset` 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 name of the asset to delete.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteAssetRequest.new
              #
              #   # Call the delete_asset method.
              #   result = client.delete_asset 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 delete_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteAssetRequest

                # 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
                call_metadata = @config.rpcs.delete_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_asset.retry_policy

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

                @warehouse_stub.delete_asset request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Upload asset by specifing the asset Cloud Storage uri.
              # For video warehouse, it requires users who call this API have read access
              # to the cloud storage file. Once it is uploaded, it can be retrieved by
              # GenerateRetrievalUrl API which by default, only can retrieve cloud storage
              # files from the same project of the warehouse. To allow retrieval cloud
              # storage files that are in a separate project, it requires to find the
              # vision ai service account (Go to IAM, check checkbox to show "Include
              # Google-provided role grants", search for "Cloud Vision AI Service Agent")
              # and grant the read access of the cloud storage files to that service
              # account.
              #
              # @overload upload_asset(request, options = nil)
              #   Pass arguments to `upload_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UploadAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UploadAssetRequest, ::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 upload_asset(name: nil, asset_source: nil)
              #   Pass arguments to `upload_asset` 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 resource name of the asset to upload.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
              #   @param asset_source [::Google::Cloud::VisionAI::V1::AssetSource, ::Hash]
              #     The source of the asset.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UploadAssetRequest.new
              #
              #   # Call the upload_asset method.
              #   result = client.upload_asset 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 upload_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UploadAssetRequest

                # 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
                call_metadata = @config.rpcs.upload_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.upload_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.upload_asset.retry_policy

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

                @warehouse_stub.upload_asset request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Generates a signed url for downloading the asset.
              # For video warehouse, please see comment of UploadAsset about how to allow
              # retrieval of cloud storage files in a different project.
              #
              # @overload generate_retrieval_url(request, options = nil)
              #   Pass arguments to `generate_retrieval_url` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GenerateRetrievalUrlRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GenerateRetrievalUrlRequest, ::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 generate_retrieval_url(name: nil)
              #   Pass arguments to `generate_retrieval_url` 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 resource name of the asset to request signed url for.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::GenerateRetrievalUrlResponse]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::GenerateRetrievalUrlResponse]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GenerateRetrievalUrlRequest.new
              #
              #   # Call the generate_retrieval_url method.
              #   result = client.generate_retrieval_url request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::GenerateRetrievalUrlResponse.
              #   p result
              #
              def generate_retrieval_url request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GenerateRetrievalUrlRequest

                # 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
                call_metadata = @config.rpcs.generate_retrieval_url.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.generate_retrieval_url.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.generate_retrieval_url.retry_policy

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

                @warehouse_stub.generate_retrieval_url request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Analyze asset to power search capability.
              #
              # @overload analyze_asset(request, options = nil)
              #   Pass arguments to `analyze_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::AnalyzeAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::AnalyzeAssetRequest, ::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 analyze_asset(name: nil)
              #   Pass arguments to `analyze_asset` 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 resource name of the asset to analyze.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::AnalyzeAssetRequest.new
              #
              #   # Call the analyze_asset method.
              #   result = client.analyze_asset 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 analyze_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::AnalyzeAssetRequest

                # 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
                call_metadata = @config.rpcs.analyze_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.analyze_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.analyze_asset.retry_policy

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

                @warehouse_stub.analyze_asset request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Index one asset for search.
              # Supported corpus type: Corpus.Type.VIDEO_ON_DEMAND
              #
              # @overload index_asset(request, options = nil)
              #   Pass arguments to `index_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::IndexAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::IndexAssetRequest, ::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 index_asset(name: nil, index: nil)
              #   Pass arguments to `index_asset` 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 resource name of the asset to index.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
              #   @param index [::String]
              #     Optional. The name of the index.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::IndexAssetRequest.new
              #
              #   # Call the index_asset method.
              #   result = client.index_asset 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 index_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::IndexAssetRequest

                # 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
                call_metadata = @config.rpcs.index_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.index_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.index_asset.retry_policy

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

                @warehouse_stub.index_asset request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Remove one asset's index data for search.
              # Supported corpus type: Corpus.Type.VIDEO_ON_DEMAND
              #
              # @overload remove_index_asset(request, options = nil)
              #   Pass arguments to `remove_index_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::RemoveIndexAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::RemoveIndexAssetRequest, ::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 remove_index_asset(name: nil, index: nil)
              #   Pass arguments to `remove_index_asset` 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 resource name of the asset to index.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
              #   @param index [::String]
              #     Optional. The name of the index.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::RemoveIndexAssetRequest.new
              #
              #   # Call the remove_index_asset method.
              #   result = client.remove_index_asset 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 remove_index_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::RemoveIndexAssetRequest

                # 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
                call_metadata = @config.rpcs.remove_index_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.remove_index_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.remove_index_asset.retry_policy

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

                @warehouse_stub.remove_index_asset request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists assets inside an index.
              #
              # @overload view_indexed_assets(request, options = nil)
              #   Pass arguments to `view_indexed_assets` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ViewIndexedAssetsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ViewIndexedAssetsRequest, ::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 view_indexed_assets(index: nil, page_size: nil, page_token: nil, filter: nil)
              #   Pass arguments to `view_indexed_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 index [::String]
              #     Required. The index that owns this collection of assets.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}`
              #   @param page_size [::Integer]
              #     The maximum number of assets to return. The service may return fewer than
              #     this value.
              #     If unspecified, at most 50 assets will be returned.
              #     The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `ViewIndexedAssets` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to `ViewIndexedAssets` must
              #     match the call that provided the page token.
              #   @param filter [::String]
              #     The filter applied to the returned list.
              #     Only the following filterings are supported:
              #     "asset_id = xxxx", which returns asset with specified id.
              #     "asset_id = xxxx, yyyy, zzzz", which returns assets with specified ids.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::IndexedAsset>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::IndexedAsset>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ViewIndexedAssetsRequest.new
              #
              #   # Call the view_indexed_assets method.
              #   result = client.view_indexed_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::VisionAI::V1::IndexedAsset.
              #     p item
              #   end
              #
              def view_indexed_assets request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ViewIndexedAssetsRequest

                # 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
                call_metadata = @config.rpcs.view_indexed_assets.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.view_indexed_assets.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.view_indexed_assets.retry_policy

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

                @warehouse_stub.view_indexed_assets request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :view_indexed_assets, "indexed_assets", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Creates an Index under the corpus.
              #
              # @overload create_index(request, options = nil)
              #   Pass arguments to `create_index` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateIndexRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateIndexRequest, ::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_index(parent: nil, index_id: nil, index: nil)
              #   Pass arguments to `create_index` 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. Value for the parent. The resource name of the Corpus under which
              #     this index is created. Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
              #   @param index_id [::String]
              #     Optional. The ID for the index. This will become the final resource name
              #     for the index. If the user does not specify this value, it will be
              #     generated by system.
              #
              #     This value should be up to 63 characters, and valid characters
              #     are /[a-z][0-9]-/. The first character must be a letter, the last could be
              #     a letter or a number.
              #   @param index [::Google::Cloud::VisionAI::V1::Index, ::Hash]
              #     Required. The index being created.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateIndexRequest.new
              #
              #   # Call the create_index method.
              #   result = client.create_index 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 create_index request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateIndexRequest

                # 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
                call_metadata = @config.rpcs.create_index.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_index.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_index.retry_policy

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

                @warehouse_stub.create_index request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates an Index under the corpus.
              # Users can perform a metadata-only update or trigger a full index rebuild
              # with different update_mask values.
              #
              # @overload update_index(request, options = nil)
              #   Pass arguments to `update_index` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateIndexRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateIndexRequest, ::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_index(index: nil, update_mask: nil)
              #   Pass arguments to `update_index` 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 index [::Google::Cloud::VisionAI::V1::Index, ::Hash]
              #     Required. The resource being updated.
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     Required. Field mask is used to specify the fields to be overwritten in the
              #     Index resource by the update. The fields specified in the update_mask are
              #     relative to the resource, not the full request. A field of the resource
              #     will be overwritten if it is in the mask. Empty field mask is not allowed.
              #     If the mask is "*", it triggers a full update of the index, and also a
              #     whole rebuild of index data.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateIndexRequest.new
              #
              #   # Call the update_index method.
              #   result = client.update_index 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 update_index request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateIndexRequest

                # 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
                call_metadata = @config.rpcs.update_index.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_index.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_index.retry_policy

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

                @warehouse_stub.update_index request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Gets the details of a single Index under a Corpus.
              #
              # @overload get_index(request, options = nil)
              #   Pass arguments to `get_index` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetIndexRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetIndexRequest, ::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_index(name: nil)
              #   Pass arguments to `get_index` 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 Index resource.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Index]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Index]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetIndexRequest.new
              #
              #   # Call the get_index method.
              #   result = client.get_index request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Index.
              #   p result
              #
              def get_index request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetIndexRequest

                # 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
                call_metadata = @config.rpcs.get_index.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_index.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_index.retry_policy

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

                @warehouse_stub.get_index request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # List all Indexes in a given Corpus.
              #
              # @overload list_indexes(request, options = nil)
              #   Pass arguments to `list_indexes` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListIndexesRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ListIndexesRequest, ::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_indexes(parent: nil, page_size: nil, page_token: nil)
              #   Pass arguments to `list_indexes` 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. The parent corpus that owns this collection of indexes.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}`
              #   @param page_size [::Integer]
              #     The maximum number of indexes to return. The service may return fewer than
              #     this value.
              #     If unspecified, at most 50 indexes will be returned.
              #     The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `ListIndexes` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to `ListIndexes` must match
              #     the call that provided the page token.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Index>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Index>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ListIndexesRequest.new
              #
              #   # Call the list_indexes method.
              #   result = client.list_indexes 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::VisionAI::V1::Index.
              #     p item
              #   end
              #
              def list_indexes request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ListIndexesRequest

                # 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
                call_metadata = @config.rpcs.list_indexes.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.list_indexes.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_indexes.retry_policy

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

                @warehouse_stub.list_indexes request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_indexes, "indexes", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Delete a single Index. In order to delete an index, the caller must
              # make sure that it is not deployed to any index endpoint.
              #
              # @overload delete_index(request, options = nil)
              #   Pass arguments to `delete_index` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteIndexRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteIndexRequest, ::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_index(name: nil)
              #   Pass arguments to `delete_index` 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 name of the index to delete.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteIndexRequest.new
              #
              #   # Call the delete_index method.
              #   result = client.delete_index 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 delete_index request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteIndexRequest

                # 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
                call_metadata = @config.rpcs.delete_index.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_index.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_index.retry_policy

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

                @warehouse_stub.delete_index request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Creates a corpus inside a project.
              #
              # @overload create_corpus(request, options = nil)
              #   Pass arguments to `create_corpus` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateCorpusRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateCorpusRequest, ::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_corpus(parent: nil, corpus: nil)
              #   Pass arguments to `create_corpus` 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. Form: `projects/{project_number}/locations/{location_id}`
              #   @param corpus [::Google::Cloud::VisionAI::V1::Corpus, ::Hash]
              #     Required. The corpus to be created.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateCorpusRequest.new
              #
              #   # Call the create_corpus method.
              #   result = client.create_corpus 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 create_corpus request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateCorpusRequest

                # 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
                call_metadata = @config.rpcs.create_corpus.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_corpus.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_corpus.retry_policy

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

                @warehouse_stub.create_corpus request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Gets corpus details inside a project.
              #
              # @overload get_corpus(request, options = nil)
              #   Pass arguments to `get_corpus` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetCorpusRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetCorpusRequest, ::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_corpus(name: nil)
              #   Pass arguments to `get_corpus` 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 resource name of the corpus to retrieve.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Corpus]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Corpus]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetCorpusRequest.new
              #
              #   # Call the get_corpus method.
              #   result = client.get_corpus request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Corpus.
              #   p result
              #
              def get_corpus request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetCorpusRequest

                # 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
                call_metadata = @config.rpcs.get_corpus.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_corpus.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_corpus.retry_policy

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

                @warehouse_stub.get_corpus request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates a corpus in a project.
              #
              # @overload update_corpus(request, options = nil)
              #   Pass arguments to `update_corpus` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateCorpusRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateCorpusRequest, ::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_corpus(corpus: nil, update_mask: nil)
              #   Pass arguments to `update_corpus` 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 corpus [::Google::Cloud::VisionAI::V1::Corpus, ::Hash]
              #     Required. The corpus which replaces the resource on the server.
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     The list of fields to be updated.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Corpus]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Corpus]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateCorpusRequest.new
              #
              #   # Call the update_corpus method.
              #   result = client.update_corpus request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Corpus.
              #   p result
              #
              def update_corpus request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateCorpusRequest

                # 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
                call_metadata = @config.rpcs.update_corpus.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_corpus.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_corpus.retry_policy

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

                @warehouse_stub.update_corpus request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists all corpora in a project.
              #
              # @overload list_corpora(request, options = nil)
              #   Pass arguments to `list_corpora` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListCorporaRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ListCorporaRequest, ::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_corpora(parent: nil, page_size: nil, page_token: nil, filter: nil)
              #   Pass arguments to `list_corpora` 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. The resource name of the project from which to list corpora.
              #   @param page_size [::Integer]
              #     Requested page size. API may return fewer results than requested.
              #     If negative, INVALID_ARGUMENT error will be returned.
              #     If unspecified or 0, API will pick a default size, which is 10.
              #     If the requested page size is larger than the maximum size, API will pick
              #     use the maximum size, which is 20.
              #   @param page_token [::String]
              #     A token identifying a page of results for the server to return.
              #     Typically obtained via
              #     {::Google::Cloud::VisionAI::V1::ListCorporaResponse#next_page_token ListCorporaResponse.next_page_token}
              #     of the previous
              #     {::Google::Cloud::VisionAI::V1::Warehouse::Rest::Client#list_corpora Warehouse.ListCorpora}
              #     call.
              #   @param filter [::String]
              #     The filter applied to the returned corpora list.
              #     Only the following restrictions are supported:
              #     `type=<Corpus.Type>`,
              #     `type!=<Corpus.Type>`.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Corpus>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Corpus>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ListCorporaRequest.new
              #
              #   # Call the list_corpora method.
              #   result = client.list_corpora 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::VisionAI::V1::Corpus.
              #     p item
              #   end
              #
              def list_corpora request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ListCorporaRequest

                # 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
                call_metadata = @config.rpcs.list_corpora.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.list_corpora.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_corpora.retry_policy

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

                @warehouse_stub.list_corpora request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_corpora, "corpora", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes a corpus only if its empty.
              # Returns empty response.
              #
              # @overload delete_corpus(request, options = nil)
              #   Pass arguments to `delete_corpus` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteCorpusRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteCorpusRequest, ::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_corpus(name: nil)
              #   Pass arguments to `delete_corpus` 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 resource name of the corpus to delete.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Protobuf::Empty]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Protobuf::Empty]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteCorpusRequest.new
              #
              #   # Call the delete_corpus method.
              #   result = client.delete_corpus request
              #
              #   # The returned object is of type Google::Protobuf::Empty.
              #   p result
              #
              def delete_corpus request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteCorpusRequest

                # 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
                call_metadata = @config.rpcs.delete_corpus.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_corpus.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_corpus.retry_policy

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

                @warehouse_stub.delete_corpus request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Analyzes a corpus.
              #
              # @overload analyze_corpus(request, options = nil)
              #   Pass arguments to `analyze_corpus` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::AnalyzeCorpusRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::AnalyzeCorpusRequest, ::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 analyze_corpus(name: nil)
              #   Pass arguments to `analyze_corpus` 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 parent corpus resource where the assets will be analyzed.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::AnalyzeCorpusRequest.new
              #
              #   # Call the analyze_corpus method.
              #   result = client.analyze_corpus 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 analyze_corpus request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::AnalyzeCorpusRequest

                # 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
                call_metadata = @config.rpcs.analyze_corpus.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.analyze_corpus.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.analyze_corpus.retry_policy

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

                @warehouse_stub.analyze_corpus request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Creates data schema inside corpus.
              #
              # @overload create_data_schema(request, options = nil)
              #   Pass arguments to `create_data_schema` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateDataSchemaRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateDataSchemaRequest, ::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_data_schema(parent: nil, data_schema: nil)
              #   Pass arguments to `create_data_schema` 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. The parent resource where this data schema will be created.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
              #   @param data_schema [::Google::Cloud::VisionAI::V1::DataSchema, ::Hash]
              #     Required. The data schema to create.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::DataSchema]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::DataSchema]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateDataSchemaRequest.new
              #
              #   # Call the create_data_schema method.
              #   result = client.create_data_schema request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::DataSchema.
              #   p result
              #
              def create_data_schema request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateDataSchemaRequest

                # 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
                call_metadata = @config.rpcs.create_data_schema.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_data_schema.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_data_schema.retry_policy

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

                @warehouse_stub.create_data_schema request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates data schema inside corpus.
              #
              # @overload update_data_schema(request, options = nil)
              #   Pass arguments to `update_data_schema` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateDataSchemaRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateDataSchemaRequest, ::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_data_schema(data_schema: nil, update_mask: nil)
              #   Pass arguments to `update_data_schema` 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 data_schema [::Google::Cloud::VisionAI::V1::DataSchema, ::Hash]
              #     Required. The data schema's `name` field is used to identify the data
              #     schema to be updated. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/dataSchemas/{data_schema}`
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     The list of fields to be updated.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::DataSchema]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::DataSchema]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateDataSchemaRequest.new
              #
              #   # Call the update_data_schema method.
              #   result = client.update_data_schema request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::DataSchema.
              #   p result
              #
              def update_data_schema request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateDataSchemaRequest

                # 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
                call_metadata = @config.rpcs.update_data_schema.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_data_schema.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_data_schema.retry_policy

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

                @warehouse_stub.update_data_schema request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Gets data schema inside corpus.
              #
              # @overload get_data_schema(request, options = nil)
              #   Pass arguments to `get_data_schema` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetDataSchemaRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetDataSchemaRequest, ::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_data_schema(name: nil)
              #   Pass arguments to `get_data_schema` 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 name of the data schema to retrieve.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/dataSchemas/{data_schema_id}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::DataSchema]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::DataSchema]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetDataSchemaRequest.new
              #
              #   # Call the get_data_schema method.
              #   result = client.get_data_schema request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::DataSchema.
              #   p result
              #
              def get_data_schema request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetDataSchemaRequest

                # 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
                call_metadata = @config.rpcs.get_data_schema.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_data_schema.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_data_schema.retry_policy

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

                @warehouse_stub.get_data_schema request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes data schema inside corpus.
              #
              # @overload delete_data_schema(request, options = nil)
              #   Pass arguments to `delete_data_schema` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteDataSchemaRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteDataSchemaRequest, ::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_data_schema(name: nil)
              #   Pass arguments to `delete_data_schema` 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 name of the data schema to delete.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/dataSchemas/{data_schema_id}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Protobuf::Empty]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Protobuf::Empty]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteDataSchemaRequest.new
              #
              #   # Call the delete_data_schema method.
              #   result = client.delete_data_schema request
              #
              #   # The returned object is of type Google::Protobuf::Empty.
              #   p result
              #
              def delete_data_schema request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteDataSchemaRequest

                # 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
                call_metadata = @config.rpcs.delete_data_schema.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_data_schema.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_data_schema.retry_policy

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

                @warehouse_stub.delete_data_schema request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists a list of data schemas inside corpus.
              #
              # @overload list_data_schemas(request, options = nil)
              #   Pass arguments to `list_data_schemas` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListDataSchemasRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ListDataSchemasRequest, ::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_data_schemas(parent: nil, page_size: nil, page_token: nil)
              #   Pass arguments to `list_data_schemas` 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. The parent, which owns this collection of data schemas.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
              #   @param page_size [::Integer]
              #     The maximum number of data schemas to return. The service may return fewer
              #     than this value. If unspecified, at most 50 data schemas will be returned.
              #     The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `ListDataSchemas` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to `ListDataSchemas` must
              #     match the call that provided the page token.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::DataSchema>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::DataSchema>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ListDataSchemasRequest.new
              #
              #   # Call the list_data_schemas method.
              #   result = client.list_data_schemas 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::VisionAI::V1::DataSchema.
              #     p item
              #   end
              #
              def list_data_schemas request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ListDataSchemasRequest

                # 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
                call_metadata = @config.rpcs.list_data_schemas.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.list_data_schemas.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_data_schemas.retry_policy

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

                @warehouse_stub.list_data_schemas request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_data_schemas, "data_schemas", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Creates annotation inside asset.
              #
              # @overload create_annotation(request, options = nil)
              #   Pass arguments to `create_annotation` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateAnnotationRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateAnnotationRequest, ::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_annotation(parent: nil, annotation: nil, annotation_id: nil)
              #   Pass arguments to `create_annotation` 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. The parent resource where this annotation will be created.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
              #   @param annotation [::Google::Cloud::VisionAI::V1::Annotation, ::Hash]
              #     Required. The annotation to create.
              #   @param annotation_id [::String]
              #     Optional. The ID to use for the annotation, which will become the final
              #     component of the annotation's resource name if user choose to specify.
              #     Otherwise, annotation id will be generated by system.
              #
              #     This value should be up to 63 characters, and valid characters
              #     are /[a-z][0-9]-/. The first character must be a letter, the last could be
              #     a letter or a number.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Annotation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Annotation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateAnnotationRequest.new
              #
              #   # Call the create_annotation method.
              #   result = client.create_annotation request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Annotation.
              #   p result
              #
              def create_annotation request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateAnnotationRequest

                # 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
                call_metadata = @config.rpcs.create_annotation.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_annotation.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_annotation.retry_policy

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

                @warehouse_stub.create_annotation request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Reads annotation inside asset.
              #
              # @overload get_annotation(request, options = nil)
              #   Pass arguments to `get_annotation` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetAnnotationRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetAnnotationRequest, ::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_annotation(name: nil)
              #   Pass arguments to `get_annotation` 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 name of the annotation to retrieve.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Annotation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Annotation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetAnnotationRequest.new
              #
              #   # Call the get_annotation method.
              #   result = client.get_annotation request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Annotation.
              #   p result
              #
              def get_annotation request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetAnnotationRequest

                # 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
                call_metadata = @config.rpcs.get_annotation.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_annotation.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_annotation.retry_policy

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

                @warehouse_stub.get_annotation request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists a list of annotations inside asset.
              #
              # @overload list_annotations(request, options = nil)
              #   Pass arguments to `list_annotations` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListAnnotationsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ListAnnotationsRequest, ::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_annotations(parent: nil, page_size: nil, page_token: nil, filter: nil)
              #   Pass arguments to `list_annotations` 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]
              #     The parent, which owns this collection of annotations.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}`
              #   @param page_size [::Integer]
              #     The maximum number of annotations to return. The service may return fewer
              #     than this value. If unspecified, at most 50 annotations will be returned.
              #     The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `ListAnnotations` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to `ListAnnotations` must
              #     match the call that provided the page token.
              #   @param filter [::String]
              #     The filter applied to the returned list.
              #     We only support filtering for the following fields:
              #     For corpus of STREAM_VIDEO type:
              #     `partition.temporal_partition.start_time`,
              #     `partition.temporal_partition.end_time`, and `key`.
              #     For corpus of VIDEO_ON_DEMAND type,
              #     `partition.relative_temporal_partition.start_offset`,
              #     `partition.relative_temporal_partition.end_offset`, and `key`.
              #     For corpus of IMAGE type, only `key` is supported.
              #     Timestamps are specified in the RFC-3339 format, and only one restriction
              #     may be applied per field, joined by conjunctions.
              #     Format:
              #     "partition.temporal_partition.start_time > "2012-04-21T11:30:00-04:00" AND
              #     partition.temporal_partition.end_time < "2012-04-22T11:30:00-04:00" AND
              #     key = "example_key""
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Annotation>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Annotation>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ListAnnotationsRequest.new
              #
              #   # Call the list_annotations method.
              #   result = client.list_annotations 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::VisionAI::V1::Annotation.
              #     p item
              #   end
              #
              def list_annotations request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ListAnnotationsRequest

                # 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
                call_metadata = @config.rpcs.list_annotations.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.list_annotations.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_annotations.retry_policy

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

                @warehouse_stub.list_annotations request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_annotations, "annotations", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates annotation inside asset.
              #
              # @overload update_annotation(request, options = nil)
              #   Pass arguments to `update_annotation` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateAnnotationRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateAnnotationRequest, ::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_annotation(annotation: nil, update_mask: nil)
              #   Pass arguments to `update_annotation` 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 annotation [::Google::Cloud::VisionAI::V1::Annotation, ::Hash]
              #     Required. The annotation to update.
              #     The annotation's `name` field is used to identify the annotation to be
              #     updated. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}`
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     The list of fields to be updated.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Annotation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Annotation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateAnnotationRequest.new
              #
              #   # Call the update_annotation method.
              #   result = client.update_annotation request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Annotation.
              #   p result
              #
              def update_annotation request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateAnnotationRequest

                # 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
                call_metadata = @config.rpcs.update_annotation.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_annotation.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_annotation.retry_policy

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

                @warehouse_stub.update_annotation request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes annotation inside asset.
              #
              # @overload delete_annotation(request, options = nil)
              #   Pass arguments to `delete_annotation` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteAnnotationRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteAnnotationRequest, ::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_annotation(name: nil)
              #   Pass arguments to `delete_annotation` 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 name of the annotation to delete.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Protobuf::Empty]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Protobuf::Empty]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteAnnotationRequest.new
              #
              #   # Call the delete_annotation method.
              #   result = client.delete_annotation request
              #
              #   # The returned object is of type Google::Protobuf::Empty.
              #   p result
              #
              def delete_annotation request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteAnnotationRequest

                # 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
                call_metadata = @config.rpcs.delete_annotation.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_annotation.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_annotation.retry_policy

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

                @warehouse_stub.delete_annotation request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Supported by STREAM_VIDEO corpus type.
              # Generates clips for downloading. The api takes in a time range, and
              # generates a clip of the first content available after start_time and
              # before end_time, which may overflow beyond these bounds.
              # Returned clips are truncated if the total size of the clips are larger
              # than 100MB.
              #
              # @overload clip_asset(request, options = nil)
              #   Pass arguments to `clip_asset` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ClipAssetRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ClipAssetRequest, ::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 clip_asset(name: nil, temporal_partition: nil)
              #   Pass arguments to `clip_asset` 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 resource name of the asset to request clips for.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
              #   @param temporal_partition [::Google::Cloud::VisionAI::V1::Partition::TemporalPartition, ::Hash]
              #     Required. The time range to request clips for.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::ClipAssetResponse]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::ClipAssetResponse]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ClipAssetRequest.new
              #
              #   # Call the clip_asset method.
              #   result = client.clip_asset request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::ClipAssetResponse.
              #   p result
              #
              def clip_asset request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ClipAssetRequest

                # 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
                call_metadata = @config.rpcs.clip_asset.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.clip_asset.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.clip_asset.retry_policy

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

                @warehouse_stub.clip_asset request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Generates a uri for an HLS manifest. The api takes in a collection of time
              # ranges, and generates a URI for an HLS manifest that covers all the
              # requested time ranges.
              #
              # @overload generate_hls_uri(request, options = nil)
              #   Pass arguments to `generate_hls_uri` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GenerateHlsUriRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GenerateHlsUriRequest, ::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 generate_hls_uri(name: nil, temporal_partitions: nil, live_view_enabled: nil)
              #   Pass arguments to `generate_hls_uri` 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 resource name of the asset to request clips for.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
              #   @param temporal_partitions [::Array<::Google::Cloud::VisionAI::V1::Partition::TemporalPartition, ::Hash>]
              #     The time range to request clips for. Will be ignored if `get_live_view` is
              #     set to True. The total time range requested should be smaller than 24h.
              #   @param live_view_enabled [::Boolean]
              #     Option to exclusively show a livestream of the asset with up to 3 minutes
              #     of backlog data.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::GenerateHlsUriResponse]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::GenerateHlsUriResponse]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GenerateHlsUriRequest.new
              #
              #   # Call the generate_hls_uri method.
              #   result = client.generate_hls_uri request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::GenerateHlsUriResponse.
              #   p result
              #
              def generate_hls_uri request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GenerateHlsUriRequest

                # 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
                call_metadata = @config.rpcs.generate_hls_uri.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.generate_hls_uri.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.generate_hls_uri.retry_policy

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

                @warehouse_stub.generate_hls_uri request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Imports assets (images plus annotations) from a meta file on cloud storage.
              # Each row in the meta file is corresponding to an image (specified by a
              # cloud storage uri) and its annotations.
              #
              # @overload import_assets(request, options = nil)
              #   Pass arguments to `import_assets` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ImportAssetsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ImportAssetsRequest, ::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 import_assets(assets_gcs_uri: nil, parent: nil)
              #   Pass arguments to `import_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 assets_gcs_uri [::String]
              #     The file contains all assets information to be imported.
              #     * The file is in JSONL format.
              #     * Each line corresponding to one asset.
              #     * Each line will be converted into InputImageAsset proto.
              #   @param parent [::String]
              #     Required. The parent corpus resource where the assets will be imported.
              #     Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ImportAssetsRequest.new
              #
              #   # Call the import_assets method.
              #   result = client.import_assets 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 import_assets request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ImportAssetsRequest

                # 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
                call_metadata = @config.rpcs.import_assets.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.import_assets.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.import_assets.retry_policy

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

                @warehouse_stub.import_assets request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Creates a search configuration inside a corpus.
              #
              # Please follow the rules below to create a valid CreateSearchConfigRequest.
              # --- General Rules ---
              # 1. Request.search_config_id must not be associated with an existing
              #    SearchConfig.
              # 2. Request must contain at least one non-empty search_criteria_property or
              #    facet_property.
              # 3. mapped_fields must not be empty, and must map to existing UGA keys.
              # 4. All mapped_fields must be of the same type.
              # 5. All mapped_fields must share the same granularity.
              # 6. All mapped_fields must share the same semantic SearchConfig match
              #    options.
              # For property-specific rules, please reference the comments for
              # FacetProperty and SearchCriteriaProperty.
              #
              # @overload create_search_config(request, options = nil)
              #   Pass arguments to `create_search_config` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateSearchConfigRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateSearchConfigRequest, ::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_search_config(parent: nil, search_config: nil, search_config_id: nil)
              #   Pass arguments to `create_search_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. The parent resource where this search configuration will be
              #     created. Format:
              #     `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
              #   @param search_config [::Google::Cloud::VisionAI::V1::SearchConfig, ::Hash]
              #     Required. The search config to create.
              #   @param search_config_id [::String]
              #     Required. ID to use for the new search config. Will become the final
              #     component of the SearchConfig's resource name. This value should be up to
              #     63 characters, and valid characters are /[a-z][0-9]-_/. The first character
              #     must be a letter, the last could be a letter or a number.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::SearchConfig]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::SearchConfig]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateSearchConfigRequest.new
              #
              #   # Call the create_search_config method.
              #   result = client.create_search_config request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::SearchConfig.
              #   p result
              #
              def create_search_config request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateSearchConfigRequest

                # 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
                call_metadata = @config.rpcs.create_search_config.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_search_config.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_search_config.retry_policy

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

                @warehouse_stub.create_search_config request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates a search configuration inside a corpus.
              #
              # Please follow the rules below to create a valid UpdateSearchConfigRequest.
              # --- General Rules ---
              # 1. Request.search_configuration.name must already exist.
              # 2. Request must contain at least one non-empty search_criteria_property or
              # facet_property.
              # 3. mapped_fields must not be empty, and must map to existing UGA keys.
              # 4. All mapped_fields must be of the same type.
              # 5. All mapped_fields must share the same granularity.
              # 6. All mapped_fields must share the same semantic SearchConfig match
              #    options.
              # For property-specific rules, please reference the comments for
              # FacetProperty and SearchCriteriaProperty.
              #
              # @overload update_search_config(request, options = nil)
              #   Pass arguments to `update_search_config` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateSearchConfigRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateSearchConfigRequest, ::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_search_config(search_config: nil, update_mask: nil)
              #   Pass arguments to `update_search_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 search_config [::Google::Cloud::VisionAI::V1::SearchConfig, ::Hash]
              #     Required. The search configuration to update.
              #
              #     The search configuration's `name` field is used to identify the resource to
              #     be updated. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}`
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     The list of fields to be updated. If left unset, all field paths will be
              #     updated/overwritten.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::SearchConfig]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::SearchConfig]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateSearchConfigRequest.new
              #
              #   # Call the update_search_config method.
              #   result = client.update_search_config request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::SearchConfig.
              #   p result
              #
              def update_search_config request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateSearchConfigRequest

                # 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
                call_metadata = @config.rpcs.update_search_config.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_search_config.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_search_config.retry_policy

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

                @warehouse_stub.update_search_config request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Gets a search configuration inside a corpus.
              #
              # @overload get_search_config(request, options = nil)
              #   Pass arguments to `get_search_config` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetSearchConfigRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetSearchConfigRequest, ::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_search_config(name: nil)
              #   Pass arguments to `get_search_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. The name of the search configuration to retrieve.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::SearchConfig]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::SearchConfig]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetSearchConfigRequest.new
              #
              #   # Call the get_search_config method.
              #   result = client.get_search_config request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::SearchConfig.
              #   p result
              #
              def get_search_config request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetSearchConfigRequest

                # 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
                call_metadata = @config.rpcs.get_search_config.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_search_config.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_search_config.retry_policy

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

                @warehouse_stub.get_search_config request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes a search configuration inside a corpus.
              #
              # For a DeleteSearchConfigRequest to be valid,
              # Request.search_configuration.name must already exist.
              #
              # @overload delete_search_config(request, options = nil)
              #   Pass arguments to `delete_search_config` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteSearchConfigRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteSearchConfigRequest, ::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_search_config(name: nil)
              #   Pass arguments to `delete_search_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. The name of the search configuration to delete.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Protobuf::Empty]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Protobuf::Empty]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteSearchConfigRequest.new
              #
              #   # Call the delete_search_config method.
              #   result = client.delete_search_config request
              #
              #   # The returned object is of type Google::Protobuf::Empty.
              #   p result
              #
              def delete_search_config request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteSearchConfigRequest

                # 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
                call_metadata = @config.rpcs.delete_search_config.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_search_config.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_search_config.retry_policy

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

                @warehouse_stub.delete_search_config request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists all search configurations inside a corpus.
              #
              # @overload list_search_configs(request, options = nil)
              #   Pass arguments to `list_search_configs` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListSearchConfigsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ListSearchConfigsRequest, ::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_search_configs(parent: nil, page_size: nil, page_token: nil)
              #   Pass arguments to `list_search_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. The parent, which owns this collection of search configurations.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}`
              #   @param page_size [::Integer]
              #     The maximum number of search configurations to return. The service may
              #     return fewer than this value. If unspecified, a page size of 50 will be
              #     used. The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `ListSearchConfigs` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to
              #     `ListSearchConfigs` must match the call that provided the page
              #     token.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::SearchConfig>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::SearchConfig>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ListSearchConfigsRequest.new
              #
              #   # Call the list_search_configs method.
              #   result = client.list_search_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::VisionAI::V1::SearchConfig.
              #     p item
              #   end
              #
              def list_search_configs request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ListSearchConfigsRequest

                # 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
                call_metadata = @config.rpcs.list_search_configs.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.list_search_configs.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_search_configs.retry_policy

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

                @warehouse_stub.list_search_configs request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_search_configs, "search_configs", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Creates a SearchHypernym inside a corpus.
              #
              # @overload create_search_hypernym(request, options = nil)
              #   Pass arguments to `create_search_hypernym` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateSearchHypernymRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateSearchHypernymRequest, ::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_search_hypernym(parent: nil, search_hypernym: nil, search_hypernym_id: nil)
              #   Pass arguments to `create_search_hypernym` 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. The parent resource where this SearchHypernym will be created.
              #     Format: `projects/{project_number}/locations/{location}/corpora/{corpus}`
              #   @param search_hypernym [::Google::Cloud::VisionAI::V1::SearchHypernym, ::Hash]
              #     Required. The SearchHypernym to create.
              #   @param search_hypernym_id [::String]
              #     Optional. The search hypernym id.
              #     If omitted, a random UUID will be generated.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::SearchHypernym]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::SearchHypernym]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateSearchHypernymRequest.new
              #
              #   # Call the create_search_hypernym method.
              #   result = client.create_search_hypernym request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::SearchHypernym.
              #   p result
              #
              def create_search_hypernym request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateSearchHypernymRequest

                # 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
                call_metadata = @config.rpcs.create_search_hypernym.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_search_hypernym.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_search_hypernym.retry_policy

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

                @warehouse_stub.create_search_hypernym request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates a SearchHypernym inside a corpus.
              #
              # @overload update_search_hypernym(request, options = nil)
              #   Pass arguments to `update_search_hypernym` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateSearchHypernymRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateSearchHypernymRequest, ::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_search_hypernym(search_hypernym: nil, update_mask: nil)
              #   Pass arguments to `update_search_hypernym` 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 search_hypernym [::Google::Cloud::VisionAI::V1::SearchHypernym, ::Hash]
              #     Required. The SearchHypernym to update.
              #     The search hypernym's `name` field is used to identify the search hypernym
              #     to be updated. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}`
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     The list of fields to be updated. If left unset, all field paths will be
              #     updated/overwritten.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::SearchHypernym]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::SearchHypernym]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateSearchHypernymRequest.new
              #
              #   # Call the update_search_hypernym method.
              #   result = client.update_search_hypernym request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::SearchHypernym.
              #   p result
              #
              def update_search_hypernym request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateSearchHypernymRequest

                # 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
                call_metadata = @config.rpcs.update_search_hypernym.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_search_hypernym.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_search_hypernym.retry_policy

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

                @warehouse_stub.update_search_hypernym request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Gets a SearchHypernym inside a corpus.
              #
              # @overload get_search_hypernym(request, options = nil)
              #   Pass arguments to `get_search_hypernym` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetSearchHypernymRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetSearchHypernymRequest, ::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_search_hypernym(name: nil)
              #   Pass arguments to `get_search_hypernym` 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 name of the SearchHypernym to retrieve.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::SearchHypernym]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::SearchHypernym]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetSearchHypernymRequest.new
              #
              #   # Call the get_search_hypernym method.
              #   result = client.get_search_hypernym request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::SearchHypernym.
              #   p result
              #
              def get_search_hypernym request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetSearchHypernymRequest

                # 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
                call_metadata = @config.rpcs.get_search_hypernym.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_search_hypernym.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_search_hypernym.retry_policy

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

                @warehouse_stub.get_search_hypernym request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes a SearchHypernym inside a corpus.
              #
              # @overload delete_search_hypernym(request, options = nil)
              #   Pass arguments to `delete_search_hypernym` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteSearchHypernymRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteSearchHypernymRequest, ::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_search_hypernym(name: nil)
              #   Pass arguments to `delete_search_hypernym` 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 name of the SearchHypernym to delete.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Protobuf::Empty]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Protobuf::Empty]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteSearchHypernymRequest.new
              #
              #   # Call the delete_search_hypernym method.
              #   result = client.delete_search_hypernym request
              #
              #   # The returned object is of type Google::Protobuf::Empty.
              #   p result
              #
              def delete_search_hypernym request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteSearchHypernymRequest

                # 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
                call_metadata = @config.rpcs.delete_search_hypernym.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_search_hypernym.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_search_hypernym.retry_policy

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

                @warehouse_stub.delete_search_hypernym request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists SearchHypernyms inside a corpus.
              #
              # @overload list_search_hypernyms(request, options = nil)
              #   Pass arguments to `list_search_hypernyms` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListSearchHypernymsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ListSearchHypernymsRequest, ::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_search_hypernyms(parent: nil, page_size: nil, page_token: nil)
              #   Pass arguments to `list_search_hypernyms` 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. The parent, which owns this collection of SearchHypernyms.
              #     Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}`
              #   @param page_size [::Integer]
              #     The maximum number of SearchHypernyms returned. The service may
              #     return fewer than this value. If unspecified, a page size of 50 will be
              #     used. The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `SearchHypernym` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to
              #     `SearchHypernym` must match the call that provided the page
              #     token.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::SearchHypernym>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::SearchHypernym>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ListSearchHypernymsRequest.new
              #
              #   # Call the list_search_hypernyms method.
              #   result = client.list_search_hypernyms 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::VisionAI::V1::SearchHypernym.
              #     p item
              #   end
              #
              def list_search_hypernyms request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ListSearchHypernymsRequest

                # 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
                call_metadata = @config.rpcs.list_search_hypernyms.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.list_search_hypernyms.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_search_hypernyms.retry_policy

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

                @warehouse_stub.list_search_hypernyms request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_search_hypernyms, "search_hypernyms", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Search media asset.
              #
              # @overload search_assets(request, options = nil)
              #   Pass arguments to `search_assets` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::SearchAssetsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::SearchAssetsRequest, ::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 search_assets(schema_key_sorting_strategy: nil, corpus: nil, page_size: nil, page_token: nil, content_time_ranges: nil, criteria: nil, facet_selections: nil, result_annotation_keys: nil, search_query: nil)
              #   Pass arguments to `search_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 schema_key_sorting_strategy [::Google::Cloud::VisionAI::V1::SchemaKeySortingStrategy, ::Hash]
              #     Sort by the value under the data schema key.
              #   @param corpus [::String]
              #     Required. The parent corpus to search.
              #     Format: `projects/{project_id}/locations/{location_id}/corpora/{corpus_id}`
              #   @param page_size [::Integer]
              #     The number of results to be returned in this page. If it's 0, the server
              #     will decide the appropriate page_size.
              #   @param page_token [::String]
              #     The continuation token to fetch the next page. If empty, it means it is
              #     fetching the first page.
              #   @param content_time_ranges [::Google::Cloud::VisionAI::V1::DateTimeRangeArray, ::Hash]
              #     Time ranges that matching video content must fall within. If no ranges are
              #     provided, there will be no time restriction. This field is treated just
              #     like the criteria below, but defined separately for convenience as it is
              #     used frequently. Note that if the end_time is in the future, it will be
              #     clamped to the time the request was received.
              #   @param criteria [::Array<::Google::Cloud::VisionAI::V1::Criteria, ::Hash>]
              #     Criteria applied to search results.
              #   @param facet_selections [::Array<::Google::Cloud::VisionAI::V1::FacetGroup, ::Hash>]
              #     Stores most recent facet selection state. Only facet groups with user's
              #     selection will be presented here. Selection state is either selected or
              #     unselected. Only selected facet buckets will be used as search criteria.
              #   @param result_annotation_keys [::Array<::String>]
              #     A list of annotation keys to specify the annotations to be retrieved and
              #     returned with each search result.
              #     Annotation granularity must be GRANULARITY_ASSET_LEVEL and its search
              #     strategy must not be NO_SEARCH.
              #   @param search_query [::String]
              #     Global search query. Allows user to search assets without needing to
              #     specify which field the value belongs to.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::SearchResultItem>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::SearchResultItem>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::SearchAssetsRequest.new
              #
              #   # Call the search_assets method.
              #   result = client.search_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::VisionAI::V1::SearchResultItem.
              #     p item
              #   end
              #
              def search_assets request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::SearchAssetsRequest

                # 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
                call_metadata = @config.rpcs.search_assets.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.search_assets.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.search_assets.retry_policy

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

                @warehouse_stub.search_assets request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :search_assets, "search_result_items", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Search a deployed index endpoint (IMAGE corpus type only).
              #
              # @overload search_index_endpoint(request, options = nil)
              #   Pass arguments to `search_index_endpoint` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::SearchIndexEndpointRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::SearchIndexEndpointRequest, ::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 search_index_endpoint(image_query: nil, text_query: nil, index_endpoint: nil, criteria: nil, exclusion_criteria: nil, page_size: nil, page_token: nil)
              #   Pass arguments to `search_index_endpoint` 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 image_query [::Google::Cloud::VisionAI::V1::ImageQuery, ::Hash]
              #     An image-only query.
              #
              #     Note: The following parameters are mutually exclusive: `image_query`, `text_query`. At most one of these parameters can be set. If more than one is set, only one will be used, and it is not defined which one.
              #   @param text_query [::String]
              #     A text-only query.
              #
              #     Note: The following parameters are mutually exclusive: `text_query`, `image_query`. At most one of these parameters can be set. If more than one is set, only one will be used, and it is not defined which one.
              #   @param index_endpoint [::String]
              #     Required. The index endpoint to search.
              #     Format:
              #     `projects/{project_id}/locations/{location_id}/indexEndpoints/{index_endpoint_id}`
              #   @param criteria [::Array<::Google::Cloud::VisionAI::V1::Criteria, ::Hash>]
              #     Criteria applied to search results.
              #   @param exclusion_criteria [::Array<::Google::Cloud::VisionAI::V1::Criteria, ::Hash>]
              #     Criteria to exclude from search results.
              #     Note that `fetch_matched_annotations` will be ignored.
              #   @param page_size [::Integer]
              #     Requested page size. API may return fewer results than requested.
              #     If negative, INVALID_ARGUMENT error will be returned.
              #     If unspecified or 0, API will pick a default size, which is 10.
              #     If the requested page size is larger than the maximum size, API will pick
              #     the maximum size, which is 100.
              #   @param page_token [::String]
              #     The continuation token to fetch the next page. If empty, it means it is
              #     fetching the first page.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::SearchResultItem>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::SearchResultItem>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::SearchIndexEndpointRequest.new
              #
              #   # Call the search_index_endpoint method.
              #   result = client.search_index_endpoint 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::VisionAI::V1::SearchResultItem.
              #     p item
              #   end
              #
              def search_index_endpoint request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::SearchIndexEndpointRequest

                # 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
                call_metadata = @config.rpcs.search_index_endpoint.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.search_index_endpoint.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.search_index_endpoint.retry_policy

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

                @warehouse_stub.search_index_endpoint request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :search_index_endpoint, "search_result_items", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Creates an IndexEndpoint.
              #
              # @overload create_index_endpoint(request, options = nil)
              #   Pass arguments to `create_index_endpoint` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateIndexEndpointRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateIndexEndpointRequest, ::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_index_endpoint(parent: nil, index_endpoint_id: nil, index_endpoint: nil)
              #   Pass arguments to `create_index_endpoint` 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. Format: `projects/{project}/locations/{location}`
              #   @param index_endpoint_id [::String]
              #     Optional. The ID to use for the IndexEndpoint, which will become the final
              #     component of the IndexEndpoint's resource name if the user specifies it.
              #     Otherwise, IndexEndpoint id will be autogenerated.
              #
              #     This value should be up to 63 characters, and valid characters
              #     are a-z, 0-9 and dash (-). The first character must be a letter, the last
              #     must be a letter or a number.
              #   @param index_endpoint [::Google::Cloud::VisionAI::V1::IndexEndpoint, ::Hash]
              #     Required. The resource being created.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateIndexEndpointRequest.new
              #
              #   # Call the create_index_endpoint method.
              #   result = client.create_index_endpoint 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 create_index_endpoint request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateIndexEndpointRequest

                # 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
                call_metadata = @config.rpcs.create_index_endpoint.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_index_endpoint.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_index_endpoint.retry_policy

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

                @warehouse_stub.create_index_endpoint request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Gets an IndexEndpoint.
              #
              # @overload get_index_endpoint(request, options = nil)
              #   Pass arguments to `get_index_endpoint` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetIndexEndpointRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetIndexEndpointRequest, ::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_index_endpoint(name: nil)
              #   Pass arguments to `get_index_endpoint` 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 IndexEndpoint resource.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::IndexEndpoint]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::IndexEndpoint]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetIndexEndpointRequest.new
              #
              #   # Call the get_index_endpoint method.
              #   result = client.get_index_endpoint request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::IndexEndpoint.
              #   p result
              #
              def get_index_endpoint request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetIndexEndpointRequest

                # 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
                call_metadata = @config.rpcs.get_index_endpoint.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_index_endpoint.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_index_endpoint.retry_policy

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

                @warehouse_stub.get_index_endpoint request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists all IndexEndpoints in a project.
              #
              # @overload list_index_endpoints(request, options = nil)
              #   Pass arguments to `list_index_endpoints` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListIndexEndpointsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ListIndexEndpointsRequest, ::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_index_endpoints(parent: nil, page_size: nil, page_token: nil, filter: nil)
              #   Pass arguments to `list_index_endpoints` 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. Format: `projects/{project}/locations/{location}`
              #   @param page_size [::Integer]
              #     Optional. Requested page size. Server may return fewer items than
              #     requested. The service may return fewer than this value. If unspecified, a
              #     page size of 50 will be used. The maximum value is 1000; values above 1000
              #     will be coerced to 1000.
              #   @param page_token [::String]
              #     Optional. A token identifying a page of results the server should return.
              #   @param filter [::String]
              #     Optional. The filter applied to the returned list.
              #     We only support filtering for the `deployed_image_index.image_index` field.
              #     However, to filter by a corpus instead of an image index, simply use
              #     `deployed_image_index.corpus`, which will return all endpoints with
              #     `deployed_image_index.image_index` inside of the given corpus.
              #     A basic filter on image index would look like:
              #       deployed_image_index.image_index =
              #         "projects/123/locations/us-central1/corpora/my_corpus/imageIndexes/my_image_index"
              #     A basic filter on corpus would look like:
              #       deployed_image_index.corpus =
              #         "projects/123/locations/us-central1/corpora/my_corpus"
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::IndexEndpoint>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::IndexEndpoint>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ListIndexEndpointsRequest.new
              #
              #   # Call the list_index_endpoints method.
              #   result = client.list_index_endpoints 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::VisionAI::V1::IndexEndpoint.
              #     p item
              #   end
              #
              def list_index_endpoints request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ListIndexEndpointsRequest

                # 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
                call_metadata = @config.rpcs.list_index_endpoints.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.list_index_endpoints.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_index_endpoints.retry_policy

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

                @warehouse_stub.list_index_endpoints request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_index_endpoints, "index_endpoints", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates an IndexEndpoint.
              #
              # @overload update_index_endpoint(request, options = nil)
              #   Pass arguments to `update_index_endpoint` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateIndexEndpointRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateIndexEndpointRequest, ::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_index_endpoint(index_endpoint: nil, update_mask: nil)
              #   Pass arguments to `update_index_endpoint` 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 index_endpoint [::Google::Cloud::VisionAI::V1::IndexEndpoint, ::Hash]
              #     Required. The resource being updated.
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     Required. Field mask is used to specify the fields to be overwritten in the
              #     IndexEndpoint resource by the update.
              #     The fields specified in the update_mask are relative to the resource, not
              #     the full request.
              #     A field of the resource will be overwritten if it is in the mask.
              #     Empty field mask is not allowed.
              #     If the mask is "*", then this is a full replacement of the resource.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateIndexEndpointRequest.new
              #
              #   # Call the update_index_endpoint method.
              #   result = client.update_index_endpoint 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 update_index_endpoint request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateIndexEndpointRequest

                # 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
                call_metadata = @config.rpcs.update_index_endpoint.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_index_endpoint.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_index_endpoint.retry_policy

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

                @warehouse_stub.update_index_endpoint request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes an IndexEndpoint.
              #
              # @overload delete_index_endpoint(request, options = nil)
              #   Pass arguments to `delete_index_endpoint` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteIndexEndpointRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteIndexEndpointRequest, ::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_index_endpoint(name: nil)
              #   Pass arguments to `delete_index_endpoint` 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 resource.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteIndexEndpointRequest.new
              #
              #   # Call the delete_index_endpoint method.
              #   result = client.delete_index_endpoint 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 delete_index_endpoint request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteIndexEndpointRequest

                # 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
                call_metadata = @config.rpcs.delete_index_endpoint.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_index_endpoint.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_index_endpoint.retry_policy

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

                @warehouse_stub.delete_index_endpoint request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deploys an Index to IndexEndpoint.
              #
              # @overload deploy_index(request, options = nil)
              #   Pass arguments to `deploy_index` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeployIndexRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeployIndexRequest, ::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 deploy_index(index_endpoint: nil, deployed_index: nil)
              #   Pass arguments to `deploy_index` 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 index_endpoint [::String]
              #     Required. IndexEndpoint the index is deployed to.
              #     Format:
              #     `projects/{project}/locations/{location}/indexEndpoints/{index_endpoint}`
              #   @param deployed_index [::Google::Cloud::VisionAI::V1::DeployedIndex, ::Hash]
              #     Required. Index to deploy.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeployIndexRequest.new
              #
              #   # Call the deploy_index method.
              #   result = client.deploy_index 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 deploy_index request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeployIndexRequest

                # 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
                call_metadata = @config.rpcs.deploy_index.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.deploy_index.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.deploy_index.retry_policy

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

                @warehouse_stub.deploy_index request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Undeploys an Index from IndexEndpoint.
              #
              # @overload undeploy_index(request, options = nil)
              #   Pass arguments to `undeploy_index` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UndeployIndexRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UndeployIndexRequest, ::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 undeploy_index(index_endpoint: nil)
              #   Pass arguments to `undeploy_index` 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 index_endpoint [::String]
              #     Required. Resource name of the IndexEndpoint resource on which the
              #     undeployment will act. Format:
              #     `projects/{project}/locations/{location}/indexEndpoints/{index_endpoint}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UndeployIndexRequest.new
              #
              #   # Call the undeploy_index method.
              #   result = client.undeploy_index 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 undeploy_index request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UndeployIndexRequest

                # 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
                call_metadata = @config.rpcs.undeploy_index.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.undeploy_index.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.undeploy_index.retry_policy

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

                @warehouse_stub.undeploy_index request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Creates a collection.
              #
              # @overload create_collection(request, options = nil)
              #   Pass arguments to `create_collection` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::CreateCollectionRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::CreateCollectionRequest, ::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_collection(parent: nil, collection: nil, collection_id: nil)
              #   Pass arguments to `create_collection` 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. The parent resource where this collection will be created.
              #     Format: `projects/{project_number}/locations/{location}/corpora/{corpus}`
              #   @param collection [::Google::Cloud::VisionAI::V1::Collection, ::Hash]
              #     Required. The collection resource to be created.
              #   @param collection_id [::String]
              #     Optional. The ID to use for the collection, which will become the final
              #     component of the resource name if user choose to specify. Otherwise,
              #     collection id will be generated by system.
              #
              #     This value should be up to 55 characters, and valid characters
              #     are /[a-z][0-9]-/. The first character must be a letter, the last could be
              #     a letter or a number.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::CreateCollectionRequest.new
              #
              #   # Call the create_collection method.
              #   result = client.create_collection 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 create_collection request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::CreateCollectionRequest

                # 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
                call_metadata = @config.rpcs.create_collection.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.create_collection.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_collection.retry_policy

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

                @warehouse_stub.create_collection request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes a collection.
              #
              # @overload delete_collection(request, options = nil)
              #   Pass arguments to `delete_collection` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::DeleteCollectionRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::DeleteCollectionRequest, ::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_collection(name: nil)
              #   Pass arguments to `delete_collection` 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 name of the collection to delete. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Operation]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Operation]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::DeleteCollectionRequest.new
              #
              #   # Call the delete_collection method.
              #   result = client.delete_collection 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 delete_collection request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::DeleteCollectionRequest

                # 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
                call_metadata = @config.rpcs.delete_collection.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.delete_collection.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_collection.retry_policy

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

                @warehouse_stub.delete_collection request, options do |result, operation|
                  result = ::Gapic::Operation.new result, @operations_client, options: options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Gets a collection.
              #
              # @overload get_collection(request, options = nil)
              #   Pass arguments to `get_collection` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::GetCollectionRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::GetCollectionRequest, ::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_collection(name: nil)
              #   Pass arguments to `get_collection` 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 name of the collection to retrieve. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Collection]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Collection]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::GetCollectionRequest.new
              #
              #   # Call the get_collection method.
              #   result = client.get_collection request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Collection.
              #   p result
              #
              def get_collection request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::GetCollectionRequest

                # 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
                call_metadata = @config.rpcs.get_collection.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.get_collection.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_collection.retry_policy

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

                @warehouse_stub.get_collection request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Updates a collection.
              #
              # @overload update_collection(request, options = nil)
              #   Pass arguments to `update_collection` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::UpdateCollectionRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::UpdateCollectionRequest, ::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_collection(collection: nil, update_mask: nil)
              #   Pass arguments to `update_collection` 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 collection [::Google::Cloud::VisionAI::V1::Collection, ::Hash]
              #     Required. The collection to update.
              #
              #     The collection's `name` field is used to identify the collection to be
              #     updated. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}`
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     The list of fields to be updated.
              #     - Unset `update_mask` or set `update_mask` to be a single "*" only will
              #       update all updatable fields with the value provided in `collection`.
              #     - To update `display_name` value to empty string, set it in the
              #     `collection`
              #       to empty string, and set `update_mask` with "display_name". Same applies
              #       to other updatable string fields in the `collection`.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::Collection]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::Collection]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::UpdateCollectionRequest.new
              #
              #   # Call the update_collection method.
              #   result = client.update_collection request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::Collection.
              #   p result
              #
              def update_collection request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::UpdateCollectionRequest

                # 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
                call_metadata = @config.rpcs.update_collection.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.update_collection.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_collection.retry_policy

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

                @warehouse_stub.update_collection request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists collections inside a corpus.
              #
              # @overload list_collections(request, options = nil)
              #   Pass arguments to `list_collections` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ListCollectionsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ListCollectionsRequest, ::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_collections(parent: nil, page_size: nil, page_token: nil)
              #   Pass arguments to `list_collections` 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. The parent corpus. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}`
              #   @param page_size [::Integer]
              #     The maximum number of collections to return. The service may return fewer
              #     than this value. If unspecified, at most 50 collections will be returned.
              #     The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `ListCollectionsRequest` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to `ListCollectionsRequest`
              #     must match the call that provided the page token.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Collection>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::Collection>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ListCollectionsRequest.new
              #
              #   # Call the list_collections method.
              #   result = client.list_collections 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::VisionAI::V1::Collection.
              #     p item
              #   end
              #
              def list_collections request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ListCollectionsRequest

                # 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
                call_metadata = @config.rpcs.list_collections.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.list_collections.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_collections.retry_policy

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

                @warehouse_stub.list_collections request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :list_collections, "collections", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Adds an item into a Collection.
              #
              # @overload add_collection_item(request, options = nil)
              #   Pass arguments to `add_collection_item` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::AddCollectionItemRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::AddCollectionItemRequest, ::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 add_collection_item(item: nil)
              #   Pass arguments to `add_collection_item` 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 item [::Google::Cloud::VisionAI::V1::CollectionItem, ::Hash]
              #     Required. The item to be added.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::AddCollectionItemResponse]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::AddCollectionItemResponse]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::AddCollectionItemRequest.new
              #
              #   # Call the add_collection_item method.
              #   result = client.add_collection_item request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::AddCollectionItemResponse.
              #   p result
              #
              def add_collection_item request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::AddCollectionItemRequest

                # 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
                call_metadata = @config.rpcs.add_collection_item.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.add_collection_item.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.add_collection_item.retry_policy

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

                @warehouse_stub.add_collection_item request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Removes an item from a collection.
              #
              # @overload remove_collection_item(request, options = nil)
              #   Pass arguments to `remove_collection_item` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::RemoveCollectionItemRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::RemoveCollectionItemRequest, ::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 remove_collection_item(item: nil)
              #   Pass arguments to `remove_collection_item` 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 item [::Google::Cloud::VisionAI::V1::CollectionItem, ::Hash]
              #     Required. The item to be removed.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Cloud::VisionAI::V1::RemoveCollectionItemResponse]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Cloud::VisionAI::V1::RemoveCollectionItemResponse]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::RemoveCollectionItemRequest.new
              #
              #   # Call the remove_collection_item method.
              #   result = client.remove_collection_item request
              #
              #   # The returned object is of type Google::Cloud::VisionAI::V1::RemoveCollectionItemResponse.
              #   p result
              #
              def remove_collection_item request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::RemoveCollectionItemRequest

                # 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
                call_metadata = @config.rpcs.remove_collection_item.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.remove_collection_item.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.remove_collection_item.retry_policy

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

                @warehouse_stub.remove_collection_item request, options do |result, operation|
                  yield result, operation if block_given?
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # View items inside a collection.
              #
              # @overload view_collection_items(request, options = nil)
              #   Pass arguments to `view_collection_items` via a request object, either of type
              #   {::Google::Cloud::VisionAI::V1::ViewCollectionItemsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Cloud::VisionAI::V1::ViewCollectionItemsRequest, ::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 view_collection_items(collection: nil, page_size: nil, page_token: nil)
              #   Pass arguments to `view_collection_items` 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 collection [::String]
              #     Required. The collection to view. Format:
              #     `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}`
              #   @param page_size [::Integer]
              #     The maximum number of collections to return. The service may return fewer
              #     than this value. If unspecified, at most 50 collections will be returned.
              #     The maximum value is 1000; values above 1000 will be coerced to 1000.
              #   @param page_token [::String]
              #     A page token, received from a previous `ViewCollectionItemsRequest` call.
              #     Provide this to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided to
              #     `ViewCollectionItemsRequest` must match the call that provided the page
              #     token.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::CollectionItem>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Cloud::VisionAI::V1::CollectionItem>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/cloud/vision_ai/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Cloud::VisionAI::V1::ViewCollectionItemsRequest.new
              #
              #   # Call the view_collection_items method.
              #   result = client.view_collection_items 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::VisionAI::V1::CollectionItem.
              #     p item
              #   end
              #
              def view_collection_items request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::VisionAI::V1::ViewCollectionItemsRequest

                # 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
                call_metadata = @config.rpcs.view_collection_items.metadata.to_h

                # Set x-goog-api-client, x-goog-user-project and x-goog-api-version headers
                call_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::VisionAI::V1::VERSION,
                  transports_version_send: [:rest]

                call_metadata[:"x-goog-api-version"] = API_VERSION unless API_VERSION.empty?
                call_metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id

                options.apply_defaults timeout:      @config.rpcs.view_collection_items.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.view_collection_items.retry_policy

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

                @warehouse_stub.view_collection_items request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @warehouse_stub, :view_collection_items, "items", request, result, options
                  yield result, operation if block_given?
                  throw :response, result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Configuration class for the Warehouse REST API.
              #
              # This class represents the configuration for Warehouse REST,
              # 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::VisionAI::V1::Warehouse::Rest::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_asset to 20 seconds,
              #   # and all remaining timeouts to 10 seconds.
              #   ::Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.configure do |config|
              #     config.timeout = 10.0
              #     config.rpcs.create_asset.timeout = 20.0
              #   end
              #
              #   # Apply the above configuration only to a new client.
              #   client = ::Google::Cloud::VisionAI::V1::Warehouse::Rest::Client.new do |config|
              #     config.timeout = 10.0
              #     config.rpcs.create_asset.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))
              #    *  (`nil`) indicating no credentials
              #
              #   Warning: If you accept a credential configuration (JSON file or Hash) from an
              #   external source for authentication to Google Cloud, you must validate it before
              #   providing it to a Google API client library. Providing an unvalidated credential
              #   configuration to Google APIs can compromise the security of your systems and data.
              #   For more information, refer to [Validate credential configurations from external
              #   sources](https://cloud.google.com/docs/authentication/external/externally-sourced-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] timeout
              #   The call timeout in seconds.
              #   @return [::Numeric]
              # @!attribute [rw] metadata
              #   Additional 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]
              # @!attribute [rw] logger
              #   A custom logger to use for request/response debug logging, or the value
              #   `:default` (the default) to construct a default logger, or `nil` to
              #   explicitly disable logging.
              #   @return [::Logger,:default,nil]
              #
              class Configuration
                extend ::Gapic::Config

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

                config_attr :endpoint,      nil, ::String, nil
                config_attr :credentials,   nil do |value|
                  allowed = [::String, ::Hash, ::Proc, ::Symbol, ::Google::Auth::Credentials, ::Google::Auth::BaseClient, ::Signet::OAuth2::Client, nil]
                  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 :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
                config_attr :logger, :default, ::Logger, nil, :default

                # @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 RPC class for the Warehouse 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 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_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_asset
                  ##
                  # RPC-specific configuration for `update_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_asset
                  ##
                  # RPC-specific configuration for `get_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_asset
                  ##
                  # RPC-specific configuration for `list_assets`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_assets
                  ##
                  # RPC-specific configuration for `delete_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_asset
                  ##
                  # RPC-specific configuration for `upload_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :upload_asset
                  ##
                  # RPC-specific configuration for `generate_retrieval_url`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :generate_retrieval_url
                  ##
                  # RPC-specific configuration for `analyze_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :analyze_asset
                  ##
                  # RPC-specific configuration for `index_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :index_asset
                  ##
                  # RPC-specific configuration for `remove_index_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :remove_index_asset
                  ##
                  # RPC-specific configuration for `view_indexed_assets`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :view_indexed_assets
                  ##
                  # RPC-specific configuration for `create_index`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_index
                  ##
                  # RPC-specific configuration for `update_index`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_index
                  ##
                  # RPC-specific configuration for `get_index`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_index
                  ##
                  # RPC-specific configuration for `list_indexes`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_indexes
                  ##
                  # RPC-specific configuration for `delete_index`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_index
                  ##
                  # RPC-specific configuration for `create_corpus`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_corpus
                  ##
                  # RPC-specific configuration for `get_corpus`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_corpus
                  ##
                  # RPC-specific configuration for `update_corpus`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_corpus
                  ##
                  # RPC-specific configuration for `list_corpora`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_corpora
                  ##
                  # RPC-specific configuration for `delete_corpus`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_corpus
                  ##
                  # RPC-specific configuration for `analyze_corpus`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :analyze_corpus
                  ##
                  # RPC-specific configuration for `create_data_schema`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_data_schema
                  ##
                  # RPC-specific configuration for `update_data_schema`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_data_schema
                  ##
                  # RPC-specific configuration for `get_data_schema`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_data_schema
                  ##
                  # RPC-specific configuration for `delete_data_schema`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_data_schema
                  ##
                  # RPC-specific configuration for `list_data_schemas`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_data_schemas
                  ##
                  # RPC-specific configuration for `create_annotation`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_annotation
                  ##
                  # RPC-specific configuration for `get_annotation`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_annotation
                  ##
                  # RPC-specific configuration for `list_annotations`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_annotations
                  ##
                  # RPC-specific configuration for `update_annotation`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_annotation
                  ##
                  # RPC-specific configuration for `delete_annotation`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_annotation
                  ##
                  # RPC-specific configuration for `clip_asset`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :clip_asset
                  ##
                  # RPC-specific configuration for `generate_hls_uri`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :generate_hls_uri
                  ##
                  # RPC-specific configuration for `import_assets`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :import_assets
                  ##
                  # RPC-specific configuration for `create_search_config`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_search_config
                  ##
                  # RPC-specific configuration for `update_search_config`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_search_config
                  ##
                  # RPC-specific configuration for `get_search_config`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_search_config
                  ##
                  # RPC-specific configuration for `delete_search_config`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_search_config
                  ##
                  # RPC-specific configuration for `list_search_configs`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_search_configs
                  ##
                  # RPC-specific configuration for `create_search_hypernym`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_search_hypernym
                  ##
                  # RPC-specific configuration for `update_search_hypernym`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_search_hypernym
                  ##
                  # RPC-specific configuration for `get_search_hypernym`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_search_hypernym
                  ##
                  # RPC-specific configuration for `delete_search_hypernym`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_search_hypernym
                  ##
                  # RPC-specific configuration for `list_search_hypernyms`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_search_hypernyms
                  ##
                  # RPC-specific configuration for `search_assets`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :search_assets
                  ##
                  # RPC-specific configuration for `search_index_endpoint`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :search_index_endpoint
                  ##
                  # RPC-specific configuration for `create_index_endpoint`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_index_endpoint
                  ##
                  # RPC-specific configuration for `get_index_endpoint`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_index_endpoint
                  ##
                  # RPC-specific configuration for `list_index_endpoints`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_index_endpoints
                  ##
                  # RPC-specific configuration for `update_index_endpoint`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_index_endpoint
                  ##
                  # RPC-specific configuration for `delete_index_endpoint`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_index_endpoint
                  ##
                  # RPC-specific configuration for `deploy_index`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :deploy_index
                  ##
                  # RPC-specific configuration for `undeploy_index`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :undeploy_index
                  ##
                  # RPC-specific configuration for `create_collection`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_collection
                  ##
                  # RPC-specific configuration for `delete_collection`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_collection
                  ##
                  # RPC-specific configuration for `get_collection`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_collection
                  ##
                  # RPC-specific configuration for `update_collection`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_collection
                  ##
                  # RPC-specific configuration for `list_collections`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_collections
                  ##
                  # RPC-specific configuration for `add_collection_item`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :add_collection_item
                  ##
                  # RPC-specific configuration for `remove_collection_item`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :remove_collection_item
                  ##
                  # RPC-specific configuration for `view_collection_items`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :view_collection_items

                  # @private
                  def initialize parent_rpcs = nil
                    create_asset_config = parent_rpcs.create_asset if parent_rpcs.respond_to? :create_asset
                    @create_asset = ::Gapic::Config::Method.new create_asset_config
                    update_asset_config = parent_rpcs.update_asset if parent_rpcs.respond_to? :update_asset
                    @update_asset = ::Gapic::Config::Method.new update_asset_config
                    get_asset_config = parent_rpcs.get_asset if parent_rpcs.respond_to? :get_asset
                    @get_asset = ::Gapic::Config::Method.new get_asset_config
                    list_assets_config = parent_rpcs.list_assets if parent_rpcs.respond_to? :list_assets
                    @list_assets = ::Gapic::Config::Method.new list_assets_config
                    delete_asset_config = parent_rpcs.delete_asset if parent_rpcs.respond_to? :delete_asset
                    @delete_asset = ::Gapic::Config::Method.new delete_asset_config
                    upload_asset_config = parent_rpcs.upload_asset if parent_rpcs.respond_to? :upload_asset
                    @upload_asset = ::Gapic::Config::Method.new upload_asset_config
                    generate_retrieval_url_config = parent_rpcs.generate_retrieval_url if parent_rpcs.respond_to? :generate_retrieval_url
                    @generate_retrieval_url = ::Gapic::Config::Method.new generate_retrieval_url_config
                    analyze_asset_config = parent_rpcs.analyze_asset if parent_rpcs.respond_to? :analyze_asset
                    @analyze_asset = ::Gapic::Config::Method.new analyze_asset_config
                    index_asset_config = parent_rpcs.index_asset if parent_rpcs.respond_to? :index_asset
                    @index_asset = ::Gapic::Config::Method.new index_asset_config
                    remove_index_asset_config = parent_rpcs.remove_index_asset if parent_rpcs.respond_to? :remove_index_asset
                    @remove_index_asset = ::Gapic::Config::Method.new remove_index_asset_config
                    view_indexed_assets_config = parent_rpcs.view_indexed_assets if parent_rpcs.respond_to? :view_indexed_assets
                    @view_indexed_assets = ::Gapic::Config::Method.new view_indexed_assets_config
                    create_index_config = parent_rpcs.create_index if parent_rpcs.respond_to? :create_index
                    @create_index = ::Gapic::Config::Method.new create_index_config
                    update_index_config = parent_rpcs.update_index if parent_rpcs.respond_to? :update_index
                    @update_index = ::Gapic::Config::Method.new update_index_config
                    get_index_config = parent_rpcs.get_index if parent_rpcs.respond_to? :get_index
                    @get_index = ::Gapic::Config::Method.new get_index_config
                    list_indexes_config = parent_rpcs.list_indexes if parent_rpcs.respond_to? :list_indexes
                    @list_indexes = ::Gapic::Config::Method.new list_indexes_config
                    delete_index_config = parent_rpcs.delete_index if parent_rpcs.respond_to? :delete_index
                    @delete_index = ::Gapic::Config::Method.new delete_index_config
                    create_corpus_config = parent_rpcs.create_corpus if parent_rpcs.respond_to? :create_corpus
                    @create_corpus = ::Gapic::Config::Method.new create_corpus_config
                    get_corpus_config = parent_rpcs.get_corpus if parent_rpcs.respond_to? :get_corpus
                    @get_corpus = ::Gapic::Config::Method.new get_corpus_config
                    update_corpus_config = parent_rpcs.update_corpus if parent_rpcs.respond_to? :update_corpus
                    @update_corpus = ::Gapic::Config::Method.new update_corpus_config
                    list_corpora_config = parent_rpcs.list_corpora if parent_rpcs.respond_to? :list_corpora
                    @list_corpora = ::Gapic::Config::Method.new list_corpora_config
                    delete_corpus_config = parent_rpcs.delete_corpus if parent_rpcs.respond_to? :delete_corpus
                    @delete_corpus = ::Gapic::Config::Method.new delete_corpus_config
                    analyze_corpus_config = parent_rpcs.analyze_corpus if parent_rpcs.respond_to? :analyze_corpus
                    @analyze_corpus = ::Gapic::Config::Method.new analyze_corpus_config
                    create_data_schema_config = parent_rpcs.create_data_schema if parent_rpcs.respond_to? :create_data_schema
                    @create_data_schema = ::Gapic::Config::Method.new create_data_schema_config
                    update_data_schema_config = parent_rpcs.update_data_schema if parent_rpcs.respond_to? :update_data_schema
                    @update_data_schema = ::Gapic::Config::Method.new update_data_schema_config
                    get_data_schema_config = parent_rpcs.get_data_schema if parent_rpcs.respond_to? :get_data_schema
                    @get_data_schema = ::Gapic::Config::Method.new get_data_schema_config
                    delete_data_schema_config = parent_rpcs.delete_data_schema if parent_rpcs.respond_to? :delete_data_schema
                    @delete_data_schema = ::Gapic::Config::Method.new delete_data_schema_config
                    list_data_schemas_config = parent_rpcs.list_data_schemas if parent_rpcs.respond_to? :list_data_schemas
                    @list_data_schemas = ::Gapic::Config::Method.new list_data_schemas_config
                    create_annotation_config = parent_rpcs.create_annotation if parent_rpcs.respond_to? :create_annotation
                    @create_annotation = ::Gapic::Config::Method.new create_annotation_config
                    get_annotation_config = parent_rpcs.get_annotation if parent_rpcs.respond_to? :get_annotation
                    @get_annotation = ::Gapic::Config::Method.new get_annotation_config
                    list_annotations_config = parent_rpcs.list_annotations if parent_rpcs.respond_to? :list_annotations
                    @list_annotations = ::Gapic::Config::Method.new list_annotations_config
                    update_annotation_config = parent_rpcs.update_annotation if parent_rpcs.respond_to? :update_annotation
                    @update_annotation = ::Gapic::Config::Method.new update_annotation_config
                    delete_annotation_config = parent_rpcs.delete_annotation if parent_rpcs.respond_to? :delete_annotation
                    @delete_annotation = ::Gapic::Config::Method.new delete_annotation_config
                    clip_asset_config = parent_rpcs.clip_asset if parent_rpcs.respond_to? :clip_asset
                    @clip_asset = ::Gapic::Config::Method.new clip_asset_config
                    generate_hls_uri_config = parent_rpcs.generate_hls_uri if parent_rpcs.respond_to? :generate_hls_uri
                    @generate_hls_uri = ::Gapic::Config::Method.new generate_hls_uri_config
                    import_assets_config = parent_rpcs.import_assets if parent_rpcs.respond_to? :import_assets
                    @import_assets = ::Gapic::Config::Method.new import_assets_config
                    create_search_config_config = parent_rpcs.create_search_config if parent_rpcs.respond_to? :create_search_config
                    @create_search_config = ::Gapic::Config::Method.new create_search_config_config
                    update_search_config_config = parent_rpcs.update_search_config if parent_rpcs.respond_to? :update_search_config
                    @update_search_config = ::Gapic::Config::Method.new update_search_config_config
                    get_search_config_config = parent_rpcs.get_search_config if parent_rpcs.respond_to? :get_search_config
                    @get_search_config = ::Gapic::Config::Method.new get_search_config_config
                    delete_search_config_config = parent_rpcs.delete_search_config if parent_rpcs.respond_to? :delete_search_config
                    @delete_search_config = ::Gapic::Config::Method.new delete_search_config_config
                    list_search_configs_config = parent_rpcs.list_search_configs if parent_rpcs.respond_to? :list_search_configs
                    @list_search_configs = ::Gapic::Config::Method.new list_search_configs_config
                    create_search_hypernym_config = parent_rpcs.create_search_hypernym if parent_rpcs.respond_to? :create_search_hypernym
                    @create_search_hypernym = ::Gapic::Config::Method.new create_search_hypernym_config
                    update_search_hypernym_config = parent_rpcs.update_search_hypernym if parent_rpcs.respond_to? :update_search_hypernym
                    @update_search_hypernym = ::Gapic::Config::Method.new update_search_hypernym_config
                    get_search_hypernym_config = parent_rpcs.get_search_hypernym if parent_rpcs.respond_to? :get_search_hypernym
                    @get_search_hypernym = ::Gapic::Config::Method.new get_search_hypernym_config
                    delete_search_hypernym_config = parent_rpcs.delete_search_hypernym if parent_rpcs.respond_to? :delete_search_hypernym
                    @delete_search_hypernym = ::Gapic::Config::Method.new delete_search_hypernym_config
                    list_search_hypernyms_config = parent_rpcs.list_search_hypernyms if parent_rpcs.respond_to? :list_search_hypernyms
                    @list_search_hypernyms = ::Gapic::Config::Method.new list_search_hypernyms_config
                    search_assets_config = parent_rpcs.search_assets if parent_rpcs.respond_to? :search_assets
                    @search_assets = ::Gapic::Config::Method.new search_assets_config
                    search_index_endpoint_config = parent_rpcs.search_index_endpoint if parent_rpcs.respond_to? :search_index_endpoint
                    @search_index_endpoint = ::Gapic::Config::Method.new search_index_endpoint_config
                    create_index_endpoint_config = parent_rpcs.create_index_endpoint if parent_rpcs.respond_to? :create_index_endpoint
                    @create_index_endpoint = ::Gapic::Config::Method.new create_index_endpoint_config
                    get_index_endpoint_config = parent_rpcs.get_index_endpoint if parent_rpcs.respond_to? :get_index_endpoint
                    @get_index_endpoint = ::Gapic::Config::Method.new get_index_endpoint_config
                    list_index_endpoints_config = parent_rpcs.list_index_endpoints if parent_rpcs.respond_to? :list_index_endpoints
                    @list_index_endpoints = ::Gapic::Config::Method.new list_index_endpoints_config
                    update_index_endpoint_config = parent_rpcs.update_index_endpoint if parent_rpcs.respond_to? :update_index_endpoint
                    @update_index_endpoint = ::Gapic::Config::Method.new update_index_endpoint_config
                    delete_index_endpoint_config = parent_rpcs.delete_index_endpoint if parent_rpcs.respond_to? :delete_index_endpoint
                    @delete_index_endpoint = ::Gapic::Config::Method.new delete_index_endpoint_config
                    deploy_index_config = parent_rpcs.deploy_index if parent_rpcs.respond_to? :deploy_index
                    @deploy_index = ::Gapic::Config::Method.new deploy_index_config
                    undeploy_index_config = parent_rpcs.undeploy_index if parent_rpcs.respond_to? :undeploy_index
                    @undeploy_index = ::Gapic::Config::Method.new undeploy_index_config
                    create_collection_config = parent_rpcs.create_collection if parent_rpcs.respond_to? :create_collection
                    @create_collection = ::Gapic::Config::Method.new create_collection_config
                    delete_collection_config = parent_rpcs.delete_collection if parent_rpcs.respond_to? :delete_collection
                    @delete_collection = ::Gapic::Config::Method.new delete_collection_config
                    get_collection_config = parent_rpcs.get_collection if parent_rpcs.respond_to? :get_collection
                    @get_collection = ::Gapic::Config::Method.new get_collection_config
                    update_collection_config = parent_rpcs.update_collection if parent_rpcs.respond_to? :update_collection
                    @update_collection = ::Gapic::Config::Method.new update_collection_config
                    list_collections_config = parent_rpcs.list_collections if parent_rpcs.respond_to? :list_collections
                    @list_collections = ::Gapic::Config::Method.new list_collections_config
                    add_collection_item_config = parent_rpcs.add_collection_item if parent_rpcs.respond_to? :add_collection_item
                    @add_collection_item = ::Gapic::Config::Method.new add_collection_item_config
                    remove_collection_item_config = parent_rpcs.remove_collection_item if parent_rpcs.respond_to? :remove_collection_item
                    @remove_collection_item = ::Gapic::Config::Method.new remove_collection_item_config
                    view_collection_items_config = parent_rpcs.view_collection_items if parent_rpcs.respond_to? :view_collection_items
                    @view_collection_items = ::Gapic::Config::Method.new view_collection_items_config

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