# 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/chat/v1/chat_service_pb"
require "google/apps/chat/v1/chat_service/rest/service_stub"

module Google
  module Apps
    module Chat
      module V1
        module ChatService
          module Rest
            ##
            # REST client for the ChatService service.
            #
            # Enables developers to build Chat apps and
            # integrations on Google Chat Platform.
            #
            class Client
              # @private
              API_VERSION = ""

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

              include Paths

              # @private
              attr_reader :chat_service_stub

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

                  default_config.rpcs.list_messages.timeout = 30.0
                  default_config.rpcs.list_messages.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.list_memberships.timeout = 30.0
                  default_config.rpcs.list_memberships.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.get_membership.timeout = 30.0
                  default_config.rpcs.get_membership.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.get_message.timeout = 30.0
                  default_config.rpcs.get_message.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.update_message.timeout = 30.0
                  default_config.rpcs.update_message.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.delete_message.timeout = 30.0
                  default_config.rpcs.delete_message.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.get_attachment.timeout = 30.0
                  default_config.rpcs.get_attachment.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.upload_attachment.timeout = 30.0
                  default_config.rpcs.upload_attachment.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.list_spaces.timeout = 30.0
                  default_config.rpcs.list_spaces.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.get_space.timeout = 30.0
                  default_config.rpcs.get_space.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.create_space.timeout = 30.0
                  default_config.rpcs.create_space.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.set_up_space.timeout = 30.0
                  default_config.rpcs.set_up_space.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.update_space.timeout = 30.0
                  default_config.rpcs.update_space.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.delete_space.timeout = 30.0
                  default_config.rpcs.delete_space.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.complete_import_space.timeout = 30.0
                  default_config.rpcs.complete_import_space.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.find_direct_message.timeout = 30.0
                  default_config.rpcs.find_direct_message.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.create_membership.timeout = 30.0
                  default_config.rpcs.create_membership.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.update_membership.timeout = 30.0
                  default_config.rpcs.update_membership.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.delete_membership.timeout = 30.0
                  default_config.rpcs.delete_membership.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.create_reaction.timeout = 30.0
                  default_config.rpcs.create_reaction.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.list_reactions.timeout = 30.0
                  default_config.rpcs.list_reactions.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.delete_reaction.timeout = 30.0
                  default_config.rpcs.delete_reaction.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.get_space_read_state.timeout = 30.0
                  default_config.rpcs.get_space_read_state.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.update_space_read_state.timeout = 30.0
                  default_config.rpcs.update_space_read_state.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config.rpcs.get_thread_read_state.timeout = 30.0
                  default_config.rpcs.get_thread_read_state.retry_policy = {
                    initial_delay: 1.0, max_delay: 10.0, multiplier: 1.3, retry_codes: [14]
                  }

                  default_config
                end
                yield @configure if block_given?
                @configure
              end

              ##
              # Configure the ChatService 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::Apps::Chat::V1::ChatService::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
                @chat_service_stub.universe_domain
              end

              ##
              # Create a new ChatService REST client object.
              #
              # @example
              #
              #   # Create a client using the default configuration
              #   client = ::Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a client using a custom configuration
              #   client = ::Google::Apps::Chat::V1::ChatService::Rest::Client.new do |config|
              #     config.timeout = 10.0
              #   end
              #
              # @yield [config] Configure the ChatService 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

                @chat_service_stub = ::Google::Apps::Chat::V1::ChatService::Rest::ServiceStub.new(
                  endpoint: @config.endpoint,
                  endpoint_template: DEFAULT_ENDPOINT_TEMPLATE,
                  universe_domain: @config.universe_domain,
                  credentials: credentials
                )
              end

              # Service calls

              ##
              # Creates a message in a Google Chat space. The maximum message size,
              # including text and cards, is 32,000 bytes. For an example, see [Send a
              # message](https://developers.google.com/workspace/chat/create-messages).
              #
              # Calling this method requires
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize)
              # and supports the following authentication types:
              #
              # - For text messages, user authentication or app authentication are
              # supported.
              # - For card messages, only app authentication is supported. (Only Chat apps
              # can create card messages.)
              #
              # @overload create_message(request, options = nil)
              #   Pass arguments to `create_message` via a request object, either of type
              #   {::Google::Apps::Chat::V1::CreateMessageRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::CreateMessageRequest, ::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_message(parent: nil, message: nil, thread_key: nil, request_id: nil, message_reply_option: nil, message_id: nil)
              #   Pass arguments to `create_message` 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 space in which to create a message.
              #
              #     Format: `spaces/{space}`
              #   @param message [::Google::Apps::Chat::V1::Message, ::Hash]
              #     Required. Message body.
              #   @param thread_key [::String]
              #     Optional. Deprecated: Use
              #     {::Google::Apps::Chat::V1::Thread#thread_key thread.thread_key} instead. ID for the
              #     thread. Supports up to 4000 characters. To start or add to a thread, create
              #     a message and specify a `threadKey` or the
              #     {::Google::Apps::Chat::V1::Thread#name thread.name}. For example usage, see [Start or
              #     reply to a message
              #     thread](https://developers.google.com/workspace/chat/create-messages#create-message-thread).
              #   @param request_id [::String]
              #     Optional. A unique request ID for this message. Specifying an existing
              #     request ID returns the message created with that ID instead of creating a
              #     new message.
              #   @param message_reply_option [::Google::Apps::Chat::V1::CreateMessageRequest::MessageReplyOption]
              #     Optional. Specifies whether a message starts a thread or replies to one.
              #     Only supported in named spaces.
              #   @param message_id [::String]
              #     Optional. A custom ID for a message. Lets Chat apps get, update, or delete
              #     a message without needing to store the system-assigned ID in the message's
              #     resource name (represented in the message `name` field).
              #
              #     The value for this field must meet the following requirements:
              #
              #     * Begins with `client-`. For example, `client-custom-name` is a valid
              #       custom ID, but `custom-name` is not.
              #     * Contains up to 63 characters and only lowercase letters, numbers, and
              #       hyphens.
              #     * Is unique within a space. A Chat app can't use the same custom ID for
              #     different messages.
              #
              #     For details, see [Name a
              #     message](https://developers.google.com/workspace/chat/create-messages#name_a_created_message).
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Message]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Message]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::CreateMessageRequest.new
              #
              #   # Call the create_message method.
              #   result = client.create_message request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Message.
              #   p result
              #
              def create_message request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::CreateMessageRequest

                # 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_message.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::Apps::Chat::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_message.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_message.retry_policy

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

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

              ##
              # Lists messages in a space that the caller is a member of, including
              # messages from blocked members and spaces. For an example, see
              # [List messages](/chat/api/guides/v1/messages/list).
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload list_messages(request, options = nil)
              #   Pass arguments to `list_messages` via a request object, either of type
              #   {::Google::Apps::Chat::V1::ListMessagesRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::ListMessagesRequest, ::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_messages(parent: nil, page_size: nil, page_token: nil, filter: nil, order_by: nil, show_deleted: nil)
              #   Pass arguments to `list_messages` 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 space to list messages from.
              #
              #     Format: `spaces/{space}`
              #   @param page_size [::Integer]
              #     The maximum number of messages returned. The service might return fewer
              #     messages than this value.
              #
              #     If unspecified, at most 25 are returned.
              #
              #     The maximum value is 1000. If you use a value more than 1000, it's
              #     automatically changed to 1000.
              #
              #     Negative values return an `INVALID_ARGUMENT` error.
              #   @param page_token [::String]
              #     Optional, if resuming from a previous query.
              #
              #     A page token received from a previous list messages call. Provide this
              #     parameter to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided should match the call that
              #     provided the page token. Passing different values to the other parameters
              #     might lead to unexpected results.
              #   @param filter [::String]
              #     A query filter.
              #
              #     You can filter messages by date (`create_time`) and thread (`thread.name`).
              #
              #     To filter messages by the date they were created, specify the `create_time`
              #     with a timestamp in [RFC-3339](https://www.rfc-editor.org/rfc/rfc3339)
              #     format and double quotation marks. For example,
              #     `"2023-04-21T11:30:00-04:00"`. You can use the greater than operator `>` to
              #     list messages that were created after a timestamp, or the less than
              #     operator `<` to list messages that were created before a timestamp. To
              #     filter messages within a time interval, use the `AND` operator between two
              #     timestamps.
              #
              #     To filter by thread, specify the `thread.name`, formatted as
              #     `spaces/{space}/threads/{thread}`. You can only specify one
              #     `thread.name` per query.
              #
              #     To filter by both thread and date, use the `AND` operator in your query.
              #
              #     For example, the following queries are valid:
              #
              #     ```
              #     create_time > "2012-04-21T11:30:00-04:00"
              #
              #     create_time > "2012-04-21T11:30:00-04:00" AND
              #       thread.name = spaces/AAAAAAAAAAA/threads/123
              #
              #     create_time > "2012-04-21T11:30:00+00:00" AND
              #
              #     create_time < "2013-01-01T00:00:00+00:00" AND
              #       thread.name = spaces/AAAAAAAAAAA/threads/123
              #
              #     thread.name = spaces/AAAAAAAAAAA/threads/123
              #     ```
              #
              #     Invalid queries are rejected by the server with an `INVALID_ARGUMENT`
              #     error.
              #   @param order_by [::String]
              #     Optional, if resuming from a previous query.
              #
              #     How the list of messages is ordered. Specify a value to order by an
              #     ordering operation. Valid ordering operation values are as follows:
              #
              #     - `ASC` for ascending.
              #
              #     - `DESC` for descending.
              #
              #     The default ordering is `create_time ASC`.
              #   @param show_deleted [::Boolean]
              #     Whether to include deleted messages. Deleted messages include deleted time
              #     and metadata about their deletion, but message content is unavailable.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Apps::Chat::V1::Message>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Apps::Chat::V1::Message>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::ListMessagesRequest.new
              #
              #   # Call the list_messages method.
              #   result = client.list_messages 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::Apps::Chat::V1::Message.
              #     p item
              #   end
              #
              def list_messages request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::ListMessagesRequest

                # 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_messages.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::Apps::Chat::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_messages.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_messages.retry_policy

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

                @chat_service_stub.list_messages request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @chat_service_stub, :list_messages, "messages", request, result, options
                  yield result, operation if block_given?
                  return result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Lists memberships in a space. For an example, see [List users and Google
              # Chat apps in a
              # space](https://developers.google.com/workspace/chat/list-members). Listing
              # memberships with [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app)
              # lists memberships in spaces that the Chat app has
              # access to, but excludes Chat app memberships,
              # including its own. Listing memberships with
              # [User
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user)
              # lists memberships in spaces that the authenticated user has access to.
              #
              # Requires
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize).
              # Supports
              # [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app)
              # and [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload list_memberships(request, options = nil)
              #   Pass arguments to `list_memberships` via a request object, either of type
              #   {::Google::Apps::Chat::V1::ListMembershipsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::ListMembershipsRequest, ::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_memberships(parent: nil, page_size: nil, page_token: nil, filter: nil, show_groups: nil, show_invited: nil)
              #   Pass arguments to `list_memberships` 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 space for which to fetch a membership
              #     list.
              #
              #     Format: spaces/\\{space}
              #   @param page_size [::Integer]
              #     Optional. The maximum number of memberships to return. The service might
              #     return fewer than this value.
              #
              #     If unspecified, at most 100 memberships are returned.
              #
              #     The maximum value is 1000. If you use a value more than 1000, it's
              #     automatically changed to 1000.
              #
              #     Negative values return an `INVALID_ARGUMENT` error.
              #   @param page_token [::String]
              #     Optional. A page token, received from a previous call to list memberships.
              #     Provide this parameter to retrieve the subsequent page.
              #
              #     When paginating, all other parameters provided should match the call that
              #     provided the page token. Passing different values to the other parameters
              #     might lead to unexpected results.
              #   @param filter [::String]
              #     Optional. A query filter.
              #
              #     You can filter memberships by a member's role
              #     ([`role`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.members#membershiprole))
              #     and type
              #     ([`member.type`](https://developers.google.com/workspace/chat/api/reference/rest/v1/User#type)).
              #
              #     To filter by role, set `role` to `ROLE_MEMBER` or `ROLE_MANAGER`.
              #
              #     To filter by type, set `member.type` to `HUMAN` or `BOT`. Developer
              #     Preview: You can also filter for `member.type` using the `!=` operator.
              #
              #     To filter by both role and type, use the `AND` operator. To filter by
              #     either role or type, use the `OR` operator.
              #
              #     Either `member.type = "HUMAN"` or `member.type != "BOT"` is required
              #     when `use_admin_access` is set to true. Other member type filters will be
              #     rejected.
              #
              #     For example, the following queries are valid:
              #
              #     ```
              #     role = "ROLE_MANAGER" OR role = "ROLE_MEMBER"
              #     member.type = "HUMAN" AND role = "ROLE_MANAGER"
              #
              #     member.type != "BOT"
              #     ```
              #
              #     The following queries are invalid:
              #
              #     ```
              #     member.type = "HUMAN" AND member.type = "BOT"
              #     role = "ROLE_MANAGER" AND role = "ROLE_MEMBER"
              #     ```
              #
              #     Invalid queries are rejected by the server with an `INVALID_ARGUMENT`
              #     error.
              #   @param show_groups [::Boolean]
              #     Optional. When `true`, also returns memberships associated with a
              #     {::Google::Apps::Chat::V1::Membership#group_member Google Group}, in
              #     addition to other types of memberships. If a
              #     {::Google::Apps::Chat::V1::ListMembershipsRequest#filter filter} is set,
              #     {::Google::Apps::Chat::V1::Membership#group_member Google Group}
              #     memberships that don't match the filter criteria aren't returned.
              #   @param show_invited [::Boolean]
              #     Optional. When `true`, also returns memberships associated with
              #     {::Google::Apps::Chat::V1::Membership::MembershipState::INVITED invited} members, in
              #     addition to other types of memberships. If a
              #     filter is set,
              #     {::Google::Apps::Chat::V1::Membership::MembershipState::INVITED invited} memberships
              #     that don't match the filter criteria aren't returned.
              #
              #     Currently requires [user
              #     authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Apps::Chat::V1::Membership>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Apps::Chat::V1::Membership>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::ListMembershipsRequest.new
              #
              #   # Call the list_memberships method.
              #   result = client.list_memberships 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::Apps::Chat::V1::Membership.
              #     p item
              #   end
              #
              def list_memberships request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::ListMembershipsRequest

                # 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_memberships.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::Apps::Chat::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_memberships.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_memberships.retry_policy

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

                @chat_service_stub.list_memberships request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @chat_service_stub, :list_memberships, "memberships", request, result, options
                  yield result, operation if block_given?
                  return result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Returns details about a membership. For an example, see
              # [Get details about a user's or Google Chat app's
              # membership](https://developers.google.com/workspace/chat/get-members).
              #
              # Requires
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize).
              # Supports
              # [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app)
              # and [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload get_membership(request, options = nil)
              #   Pass arguments to `get_membership` via a request object, either of type
              #   {::Google::Apps::Chat::V1::GetMembershipRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::GetMembershipRequest, ::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_membership(name: nil)
              #   Pass arguments to `get_membership` 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. Resource name of the membership to retrieve.
              #
              #     To get the app's own membership [by using user
              #     authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user),
              #     you can optionally use `spaces/{space}/members/app`.
              #
              #     Format: `spaces/{space}/members/{member}` or `spaces/{space}/members/app`
              #
              #     When [authenticated as a
              #     user](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user),
              #     you can use the user's email as an alias for `{member}`. For example,
              #     `spaces/{space}/members/example@gmail.com` where `example@gmail.com` is the
              #     email of the Google Chat user.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Membership]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Membership]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::GetMembershipRequest.new
              #
              #   # Call the get_membership method.
              #   result = client.get_membership request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Membership.
              #   p result
              #
              def get_membership request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::GetMembershipRequest

                # 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_membership.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::Apps::Chat::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_membership.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_membership.retry_policy

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

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

              ##
              # Returns details about a message.
              # For an example, see [Get details about a
              # message](https://developers.google.com/workspace/chat/get-messages).
              #
              # Requires
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize).
              # Supports
              # [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app)
              # and [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # Note: Might return a message from a blocked member or space.
              #
              # @overload get_message(request, options = nil)
              #   Pass arguments to `get_message` via a request object, either of type
              #   {::Google::Apps::Chat::V1::GetMessageRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::GetMessageRequest, ::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_message(name: nil)
              #   Pass arguments to `get_message` 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. Resource name of the message.
              #
              #     Format: `spaces/{space}/messages/{message}`
              #
              #     If you've set a custom ID for your message, you can use the value from the
              #     `clientAssignedMessageId` field for `{message}`. For details, see [Name a
              #     message]
              #     (https://developers.google.com/workspace/chat/create-messages#name_a_created_message).
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Message]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Message]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::GetMessageRequest.new
              #
              #   # Call the get_message method.
              #   result = client.get_message request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Message.
              #   p result
              #
              def get_message request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::GetMessageRequest

                # 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_message.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::Apps::Chat::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_message.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_message.retry_policy

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

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

              ##
              # Updates a message. There's a difference between the `patch` and `update`
              # methods. The `patch`
              # method uses a `patch` request while the `update` method uses a `put`
              # request. We recommend using the `patch` method. For an example, see
              # [Update a
              # message](https://developers.google.com/workspace/chat/update-messages).
              #
              # Requires
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize).
              # Supports
              # [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app)
              # and [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              # When using app authentication, requests can only update messages
              # created by the calling Chat app.
              #
              # @overload update_message(request, options = nil)
              #   Pass arguments to `update_message` via a request object, either of type
              #   {::Google::Apps::Chat::V1::UpdateMessageRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::UpdateMessageRequest, ::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_message(message: nil, update_mask: nil, allow_missing: nil)
              #   Pass arguments to `update_message` 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 message [::Google::Apps::Chat::V1::Message, ::Hash]
              #     Required. Message with fields updated.
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     Required. The field paths to update. Separate multiple values with commas
              #     or use `*` to update all field paths.
              #
              #     Currently supported field paths:
              #
              #     - `text`
              #
              #     - `attachment`
              #
              #     - `cards` (Requires [app
              #     authentication](/chat/api/guides/auth/service-accounts).)
              #
              #     - `cards_v2`  (Requires [app
              #     authentication](/chat/api/guides/auth/service-accounts).)
              #
              #     - `accessory_widgets`  (Requires [app
              #     authentication](/chat/api/guides/auth/service-accounts).)
              #   @param allow_missing [::Boolean]
              #     Optional. If `true` and the message isn't found, a new message is created
              #     and `updateMask` is ignored. The specified message ID must be
              #     [client-assigned](https://developers.google.com/workspace/chat/create-messages#name_a_created_message)
              #     or the request fails.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Message]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Message]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::UpdateMessageRequest.new
              #
              #   # Call the update_message method.
              #   result = client.update_message request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Message.
              #   p result
              #
              def update_message request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::UpdateMessageRequest

                # 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_message.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::Apps::Chat::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_message.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_message.retry_policy

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

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

              ##
              # Deletes a message.
              # For an example, see [Delete a
              # message](https://developers.google.com/workspace/chat/delete-messages).
              #
              # Requires
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize).
              # Supports
              # [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app)
              # and [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              # When using app authentication, requests can only delete messages
              # created by the calling Chat app.
              #
              # @overload delete_message(request, options = nil)
              #   Pass arguments to `delete_message` via a request object, either of type
              #   {::Google::Apps::Chat::V1::DeleteMessageRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::DeleteMessageRequest, ::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_message(name: nil, force: nil)
              #   Pass arguments to `delete_message` 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. Resource name of the message.
              #
              #     Format: `spaces/{space}/messages/{message}`
              #
              #     If you've set a custom ID for your message, you can use the value from the
              #     `clientAssignedMessageId` field for `{message}`. For details, see [Name a
              #     message]
              #     (https://developers.google.com/workspace/chat/create-messages#name_a_created_message).
              #   @param force [::Boolean]
              #     When `true`, deleting a message also deletes its threaded replies. When
              #     `false`, if a message has threaded replies, deletion fails.
              #
              #     Only applies when [authenticating as a
              #     user](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #     Has no effect when [authenticating as a Chat app]
              #     (https://developers.google.com/workspace/chat/authenticate-authorize-chat-app).
              # @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/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::DeleteMessageRequest.new
              #
              #   # Call the delete_message method.
              #   result = client.delete_message request
              #
              #   # The returned object is of type Google::Protobuf::Empty.
              #   p result
              #
              def delete_message request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::DeleteMessageRequest

                # 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_message.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::Apps::Chat::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_message.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_message.retry_policy

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

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

              ##
              # Gets the metadata of a message attachment. The attachment data is fetched
              # using the [media
              # API](https://developers.google.com/workspace/chat/api/reference/rest/v1/media/download).
              # For an example, see
              # [Get metadata about a message
              # attachment](https://developers.google.com/workspace/chat/get-media-attachments).
              # Requires [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app).
              #
              # @overload get_attachment(request, options = nil)
              #   Pass arguments to `get_attachment` via a request object, either of type
              #   {::Google::Apps::Chat::V1::GetAttachmentRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::GetAttachmentRequest, ::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_attachment(name: nil)
              #   Pass arguments to `get_attachment` 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. Resource name of the attachment, in the form
              #     `spaces/{space}/messages/{message}/attachments/{attachment}`.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Attachment]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Attachment]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::GetAttachmentRequest.new
              #
              #   # Call the get_attachment method.
              #   result = client.get_attachment request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Attachment.
              #   p result
              #
              def get_attachment request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::GetAttachmentRequest

                # 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_attachment.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::Apps::Chat::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_attachment.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_attachment.retry_policy

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

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

              ##
              # Uploads an attachment. For an example, see
              # [Upload media as a file
              # attachment](https://developers.google.com/workspace/chat/upload-media-attachments).
              # Requires user
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # You can upload attachments up to 200 MB. Certain file types aren't
              # supported. For details, see [File types blocked by Google
              # Chat](https://support.google.com/chat/answer/7651457?&co=GENIE.Platform%3DDesktop#File%20types%20blocked%20in%20Google%20Chat).
              #
              # @overload upload_attachment(request, options = nil)
              #   Pass arguments to `upload_attachment` via a request object, either of type
              #   {::Google::Apps::Chat::V1::UploadAttachmentRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::UploadAttachmentRequest, ::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_attachment(parent: nil, filename: nil)
              #   Pass arguments to `upload_attachment` via keyword arguments. Note that at
              #   least one keyword argument is required. To specify no parameters, or to keep all
              #   the default parameter values, pass an empty Hash as a request object (see above).
              #
              #   @param parent [::String]
              #     Required. Resource name of the Chat space in which the attachment is
              #     uploaded. Format "spaces/\\{space}".
              #   @param filename [::String]
              #     Required. The filename of the attachment, including the file extension.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::UploadAttachmentResponse]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::UploadAttachmentResponse]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::UploadAttachmentRequest.new
              #
              #   # Call the upload_attachment method.
              #   result = client.upload_attachment request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::UploadAttachmentResponse.
              #   p result
              #
              def upload_attachment request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::UploadAttachmentRequest

                # 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_attachment.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::Apps::Chat::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_attachment.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.upload_attachment.retry_policy

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

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

              ##
              # Lists spaces the caller is a member of. Group chats and DMs aren't listed
              # until the first message is sent. For an example, see
              # [List
              # spaces](https://developers.google.com/workspace/chat/list-spaces).
              #
              # Requires
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize).
              # Supports
              # [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app)
              # and [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # Lists spaces visible to the caller or authenticated user. Group chats
              # and DMs aren't listed until the first message is sent.
              #
              # To list all named spaces by Google Workspace organization, use the
              # [`spaces.search()`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search)
              # method using Workspace administrator privileges instead.
              #
              # @overload list_spaces(request, options = nil)
              #   Pass arguments to `list_spaces` via a request object, either of type
              #   {::Google::Apps::Chat::V1::ListSpacesRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::ListSpacesRequest, ::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_spaces(page_size: nil, page_token: nil, filter: nil)
              #   Pass arguments to `list_spaces` 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 page_size [::Integer]
              #     Optional. The maximum number of spaces to return. The service might return
              #     fewer than this value.
              #
              #     If unspecified, at most 100 spaces are returned.
              #
              #     The maximum value is 1000. If you use a value more than 1000, it's
              #     automatically changed to 1000.
              #
              #     Negative values return an `INVALID_ARGUMENT` error.
              #   @param page_token [::String]
              #     Optional. A page token, received from a previous list spaces call.
              #     Provide this parameter to retrieve the subsequent page.
              #
              #     When paginating, the filter value should match the call that provided the
              #     page token. Passing a different value may lead to unexpected results.
              #   @param filter [::String]
              #     Optional. A query filter.
              #
              #     You can filter spaces by the space type
              #     ([`space_type`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces#spacetype)).
              #
              #     To filter by space type, you must specify valid enum value, such as
              #     `SPACE` or `GROUP_CHAT` (the `space_type` can't be
              #     `SPACE_TYPE_UNSPECIFIED`). To query for multiple space types, use the `OR`
              #     operator.
              #
              #     For example, the following queries are valid:
              #
              #     ```
              #     space_type = "SPACE"
              #     spaceType = "GROUP_CHAT" OR spaceType = "DIRECT_MESSAGE"
              #     ```
              #
              #     Invalid queries are rejected by the server with an `INVALID_ARGUMENT`
              #     error.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Apps::Chat::V1::Space>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Apps::Chat::V1::Space>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::ListSpacesRequest.new
              #
              #   # Call the list_spaces method.
              #   result = client.list_spaces 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::Apps::Chat::V1::Space.
              #     p item
              #   end
              #
              def list_spaces request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::ListSpacesRequest

                # 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_spaces.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::Apps::Chat::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_spaces.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_spaces.retry_policy

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

                @chat_service_stub.list_spaces request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @chat_service_stub, :list_spaces, "spaces", request, result, options
                  yield result, operation if block_given?
                  return result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Returns details about a space. For an example, see
              # [Get details about a
              # space](https://developers.google.com/workspace/chat/get-spaces).
              #
              # Requires
              # [authentication](https://developers.google.com/workspace/chat/authenticate-authorize).
              # Supports
              # [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app)
              # and [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload get_space(request, options = nil)
              #   Pass arguments to `get_space` via a request object, either of type
              #   {::Google::Apps::Chat::V1::GetSpaceRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::GetSpaceRequest, ::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_space(name: nil)
              #   Pass arguments to `get_space` 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. Resource name of the space, in the form `spaces/{space}`.
              #
              #     Format: `spaces/{space}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Space]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Space]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::GetSpaceRequest.new
              #
              #   # Call the get_space method.
              #   result = client.get_space request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Space.
              #   p result
              #
              def get_space request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::GetSpaceRequest

                # 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_space.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::Apps::Chat::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_space.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_space.retry_policy

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

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

              ##
              # Creates a named space. Spaces grouped by topics aren't supported. For an
              # example, see [Create a
              # space](https://developers.google.com/workspace/chat/create-spaces).
              #
              #  If you receive the error message `ALREADY_EXISTS` when creating
              #  a space, try a different `displayName`. An existing space within
              #  the Google Workspace organization might already use this display name.
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload create_space(request, options = nil)
              #   Pass arguments to `create_space` via a request object, either of type
              #   {::Google::Apps::Chat::V1::CreateSpaceRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::CreateSpaceRequest, ::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_space(space: nil, request_id: nil)
              #   Pass arguments to `create_space` 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 space [::Google::Apps::Chat::V1::Space, ::Hash]
              #     Required. The `displayName` and `spaceType` fields must be populated.  Only
              #     `SpaceType.SPACE` is supported.
              #
              #     If you receive the error message `ALREADY_EXISTS` when creating a space,
              #     try a different `displayName`. An existing space within the Google
              #     Workspace organization might already use this display name.
              #
              #     The space `name` is assigned on the server so anything specified in this
              #     field will be ignored.
              #   @param request_id [::String]
              #     Optional. A unique identifier for this request.
              #     A random UUID is recommended.
              #     Specifying an existing request ID returns the space created with that ID
              #     instead of creating a new space.
              #     Specifying an existing request ID from the same Chat app with a different
              #     authenticated user returns an error.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Space]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Space]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::CreateSpaceRequest.new
              #
              #   # Call the create_space method.
              #   result = client.create_space request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Space.
              #   p result
              #
              def create_space request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::CreateSpaceRequest

                # 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_space.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::Apps::Chat::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_space.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_space.retry_policy

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

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

              ##
              # Creates a space and adds specified users to it. The calling user is
              # automatically added to the space, and shouldn't be specified as a
              # membership in the request. For an example, see
              # [Set up a space with initial
              # members](https://developers.google.com/workspace/chat/set-up-spaces).
              #
              # To specify the human members to add, add memberships with the appropriate
              # `membership.member.name`. To add a human user, use `users/{user}`, where
              # `{user}` can be the email address for the user. For users in the same
              # Workspace organization `{user}` can also be the `id` for the person from
              # the People API, or the `id` for the user in the Directory API. For example,
              # if the People API Person profile ID for `user@example.com` is `123456789`,
              # you can add the user to the space by setting the `membership.member.name`
              # to `users/user@example.com` or `users/123456789`.
              #
              # To specify the Google groups to add, add memberships with the
              # appropriate `membership.group_member.name`. To add or invite a Google
              # group, use `groups/{group}`, where `{group}` is the `id` for the group from
              # the Cloud Identity Groups API. For example, you can use [Cloud Identity
              # Groups lookup
              # API](https://cloud.google.com/identity/docs/reference/rest/v1/groups/lookup)
              # to retrieve the ID `123456789` for group email `group@example.com`, then
              # you can add the group to the space by setting the
              # `membership.group_member.name` to `groups/123456789`. Group email is not
              # supported, and Google groups can only be added as members in named spaces.
              #
              # For a named space or group chat, if the caller blocks, or is blocked
              # by some members, or doesn't have permission to add some members, then
              # those members aren't added to the created space.
              #
              # To create a direct message (DM) between the calling user and another human
              # user, specify exactly one membership to represent the human user. If
              # one user blocks the other, the request fails and the DM isn't created.
              #
              # To create a DM between the calling user and the calling app, set
              # `Space.singleUserBotDm` to `true` and don't specify any memberships. You
              # can only use this method to set up a DM with the calling app. To add the
              # calling app as a member of a space or an existing DM between two human
              # users, see
              # [Invite or add a user or app to a
              # space](https://developers.google.com/workspace/chat/create-members).
              #
              # If a DM already exists between two users, even when one user blocks the
              # other at the time a request is made, then the existing DM is returned.
              #
              # Spaces with threaded replies aren't supported. If you receive the error
              # message `ALREADY_EXISTS` when setting up a space, try a different
              # `displayName`. An existing space within the Google Workspace organization
              # might already use this display name.
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload set_up_space(request, options = nil)
              #   Pass arguments to `set_up_space` via a request object, either of type
              #   {::Google::Apps::Chat::V1::SetUpSpaceRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::SetUpSpaceRequest, ::Hash]
              #     A request object representing the call parameters. Required. To specify no
              #     parameters, or to keep all the default parameter values, pass an empty Hash.
              #   @param options [::Gapic::CallOptions, ::Hash]
              #     Overrides the default settings for this call, e.g, timeout, retries etc. Optional.
              #
              # @overload set_up_space(space: nil, request_id: nil, memberships: nil)
              #   Pass arguments to `set_up_space` 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 space [::Google::Apps::Chat::V1::Space, ::Hash]
              #     Required. The `Space.spaceType` field is required.
              #
              #     To create a space, set `Space.spaceType` to `SPACE` and set
              #     `Space.displayName`. If you receive the error message `ALREADY_EXISTS` when
              #     setting up a space, try a different `displayName`. An existing space
              #     within the Google Workspace organization might already use this display
              #     name.
              #
              #     To create a group chat, set `Space.spaceType` to
              #     `GROUP_CHAT`. Don't set `Space.displayName`.
              #
              #     To create a 1:1 conversation between humans,
              #     set `Space.spaceType` to `DIRECT_MESSAGE` and set
              #     `Space.singleUserBotDm` to `false`. Don't set `Space.displayName` or
              #     `Space.spaceDetails`.
              #
              #     To create an 1:1 conversation between a human and the calling Chat app, set
              #     `Space.spaceType` to `DIRECT_MESSAGE` and
              #     `Space.singleUserBotDm` to `true`. Don't set `Space.displayName` or
              #     `Space.spaceDetails`.
              #
              #     If a `DIRECT_MESSAGE` space already exists, that space is returned instead
              #     of creating a new space.
              #   @param request_id [::String]
              #     Optional. A unique identifier for this request.
              #     A random UUID is recommended.
              #     Specifying an existing request ID returns the space created with that ID
              #     instead of creating a new space.
              #     Specifying an existing request ID from the same Chat app with a different
              #     authenticated user returns an error.
              #   @param memberships [::Array<::Google::Apps::Chat::V1::Membership, ::Hash>]
              #     Optional. The Google Chat users or groups to invite to join the space. Omit
              #     the calling user, as they are added automatically.
              #
              #     The set currently allows up to 20 memberships (in addition to the caller).
              #
              #     For human membership, the `Membership.member` field must contain a `user`
              #     with `name` populated (format: `users/{user}`) and `type` set to
              #     `User.Type.HUMAN`. You can only add human users when setting up a space
              #     (adding Chat apps is only supported for direct message setup with the
              #     calling app). You can also add members using the user's email as an alias
              #     for \\{user}. For example, the `user.name` can be `users/example@gmail.com`.
              #     To invite Gmail users or users from external Google Workspace domains,
              #     user's email must be used for `{user}`.
              #
              #     For Google group membership, the `Membership.group_member` field must
              #     contain a `group` with `name` populated (format `groups/{group}`). You
              #     can only add Google groups when setting `Space.spaceType` to `SPACE`.
              #
              #     Optional when setting `Space.spaceType` to `SPACE`.
              #
              #     Required when setting `Space.spaceType` to `GROUP_CHAT`, along with at
              #     least two memberships.
              #
              #     Required when setting `Space.spaceType` to `DIRECT_MESSAGE` with a human
              #     user, along with exactly one membership.
              #
              #     Must be empty when creating a 1:1 conversation between a human and the
              #     calling Chat app (when setting `Space.spaceType` to
              #     `DIRECT_MESSAGE` and `Space.singleUserBotDm` to `true`).
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Space]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Space]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::SetUpSpaceRequest.new
              #
              #   # Call the set_up_space method.
              #   result = client.set_up_space request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Space.
              #   p result
              #
              def set_up_space request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::SetUpSpaceRequest

                # 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.set_up_space.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::Apps::Chat::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.set_up_space.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.set_up_space.retry_policy

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

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

              ##
              # Updates a space. For an example, see
              # [Update a
              # space](https://developers.google.com/workspace/chat/update-spaces).
              #
              # If you're updating the `displayName` field and receive the error message
              # `ALREADY_EXISTS`, try a different display name.. An existing space within
              # the Google Workspace organization might already use this display name.
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload update_space(request, options = nil)
              #   Pass arguments to `update_space` via a request object, either of type
              #   {::Google::Apps::Chat::V1::UpdateSpaceRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::UpdateSpaceRequest, ::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_space(space: nil, update_mask: nil)
              #   Pass arguments to `update_space` 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 space [::Google::Apps::Chat::V1::Space, ::Hash]
              #     Required. Space with fields to be updated. `Space.name` must be
              #     populated in the form of `spaces/{space}`. Only fields
              #     specified by `update_mask` are updated.
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     Required. The updated field paths, comma separated if there are
              #     multiple.
              #
              #     Currently supported field paths:
              #
              #     - `display_name` (Only supports changing the display name of a space with
              #     the `SPACE` type, or when also including the `space_type` mask to change a
              #     `GROUP_CHAT` space type to `SPACE`. Trying to update the display name of a
              #     `GROUP_CHAT` or a `DIRECT_MESSAGE` space results in an invalid argument
              #     error. If you receive the error message `ALREADY_EXISTS` when updating the
              #     `displayName`, try a different `displayName`. An existing space within the
              #     Google Workspace organization might already use this display name.)
              #
              #     - `space_type` (Only supports changing a `GROUP_CHAT` space type to
              #     `SPACE`. Include `display_name` together
              #     with `space_type` in the update mask and ensure that the specified space
              #     has a non-empty display name and the `SPACE` space type. Including the
              #     `space_type` mask and the `SPACE` type in the specified space when updating
              #     the display name is optional if the existing space already has the `SPACE`
              #     type. Trying to update the space type in other ways results in an invalid
              #     argument error).
              #     `space_type` is not supported with admin access.
              #
              #     - `space_details`
              #
              #     - `space_history_state` (Supports [turning history on or off for the
              #     space](https://support.google.com/chat/answer/7664687) if [the organization
              #     allows users to change their history
              #     setting](https://support.google.com/a/answer/7664184).
              #     Warning: mutually exclusive with all other field paths.)
              #     `space_history_state` is not supported with admin access.
              #
              #     - `access_settings.audience` (Supports changing the [access
              #     setting](https://support.google.com/chat/answer/11971020) of who can
              #     discover the space, join the space, and preview the messages in space. If
              #     no audience is specified in the access setting, the space's access setting
              #     is updated to private. Warning: mutually exclusive with all other field
              #     paths.)
              #     `access_settings.audience` is not supported with admin access.
              #
              #     - Developer Preview: Supports changing the [permission
              #     settings](https://support.google.com/chat/answer/13340792) of a space,
              #     supported field paths
              #     include: `permission_settings.manage_members_and_groups`,
              #     `permission_settings.modify_space_details`,
              #     `permission_settings.toggle_history`,
              #     `permission_settings.use_at_mention_all`,
              #     `permission_settings.manage_apps`, `permission_settings.manage_webhooks`,
              #     `permission_settings.reply_messages`
              #      (Warning: mutually exclusive with all other non-permission settings field
              #     paths). `permission_settings` is not supported with admin access.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Space]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Space]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::UpdateSpaceRequest.new
              #
              #   # Call the update_space method.
              #   result = client.update_space request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Space.
              #   p result
              #
              def update_space request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::UpdateSpaceRequest

                # 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_space.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::Apps::Chat::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_space.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_space.retry_policy

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

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

              ##
              # Deletes a named space. Always performs a cascading delete, which means
              # that the space's child resources—like messages posted in the space and
              # memberships in the space—are also deleted. For an example, see
              # [Delete a
              # space](https://developers.google.com/workspace/chat/delete-spaces).
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user)
              # from a user who has permission to delete the space.
              #
              # @overload delete_space(request, options = nil)
              #   Pass arguments to `delete_space` via a request object, either of type
              #   {::Google::Apps::Chat::V1::DeleteSpaceRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::DeleteSpaceRequest, ::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_space(name: nil)
              #   Pass arguments to `delete_space` 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. Resource name of the space to delete.
              #
              #     Format: `spaces/{space}`
              # @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/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::DeleteSpaceRequest.new
              #
              #   # Call the delete_space method.
              #   result = client.delete_space request
              #
              #   # The returned object is of type Google::Protobuf::Empty.
              #   p result
              #
              def delete_space request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::DeleteSpaceRequest

                # 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_space.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::Apps::Chat::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_space.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_space.retry_policy

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

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

              ##
              # Completes the
              # [import process](https://developers.google.com/workspace/chat/import-data)
              # for the specified space and makes it visible to users.
              # Requires app authentication and domain-wide delegation. For more
              # information, see [Authorize Google Chat apps to import
              # data](https://developers.google.com/workspace/chat/authorize-import).
              #
              # @overload complete_import_space(request, options = nil)
              #   Pass arguments to `complete_import_space` via a request object, either of type
              #   {::Google::Apps::Chat::V1::CompleteImportSpaceRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::CompleteImportSpaceRequest, ::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 complete_import_space(name: nil)
              #   Pass arguments to `complete_import_space` 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. Resource name of the import mode space.
              #
              #     Format: `spaces/{space}`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::CompleteImportSpaceResponse]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::CompleteImportSpaceResponse]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::CompleteImportSpaceRequest.new
              #
              #   # Call the complete_import_space method.
              #   result = client.complete_import_space request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::CompleteImportSpaceResponse.
              #   p result
              #
              def complete_import_space request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::CompleteImportSpaceRequest

                # 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.complete_import_space.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::Apps::Chat::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.complete_import_space.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.complete_import_space.retry_policy

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

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

              ##
              # Returns the existing direct message with the specified user. If no direct
              # message space is found, returns a `404 NOT_FOUND` error. For an example,
              # see
              # [Find a direct message](/chat/api/guides/v1/spaces/find-direct-message).
              #
              # With [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user),
              # returns the direct message space between the specified user and the
              # authenticated user.
              #
              # With [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app),
              # returns the direct message space between the specified user and the calling
              # Chat app.
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user)
              # or [app
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-app).
              #
              # @overload find_direct_message(request, options = nil)
              #   Pass arguments to `find_direct_message` via a request object, either of type
              #   {::Google::Apps::Chat::V1::FindDirectMessageRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::FindDirectMessageRequest, ::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 find_direct_message(name: nil)
              #   Pass arguments to `find_direct_message` 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. Resource name of the user to find direct message with.
              #
              #     Format: `users/{user}`, where `{user}` is either the `id` for the
              #     [person](https://developers.google.com/people/api/rest/v1/people) from the
              #     People API, or the `id` for the
              #     [user](https://developers.google.com/admin-sdk/directory/reference/rest/v1/users)
              #     in the Directory API. For example, if the People API profile ID is
              #     `123456789`, you can find a direct message with that person by using
              #     `users/123456789` as the `name`. When [authenticated as a
              #     user](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user),
              #     you can use the email as an alias for `{user}`. For example,
              #     `users/example@gmail.com` where `example@gmail.com` is the email of the
              #     Google Chat user.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Space]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Space]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::FindDirectMessageRequest.new
              #
              #   # Call the find_direct_message method.
              #   result = client.find_direct_message request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Space.
              #   p result
              #
              def find_direct_message request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::FindDirectMessageRequest

                # 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.find_direct_message.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::Apps::Chat::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.find_direct_message.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.find_direct_message.retry_policy

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

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

              ##
              # Creates a human membership or app membership for the calling app. Creating
              # memberships for other apps isn't supported. For an example, see
              # [Invite or add a user or a Google Chat app to a
              # space](https://developers.google.com/workspace/chat/create-members).
              # When creating a membership, if the specified member has their auto-accept
              # policy turned off, then they're invited, and must accept the space
              # invitation before joining. Otherwise, creating a membership adds the member
              # directly to the specified space. Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # To specify the member to add, set the `membership.member.name` for the
              # human or app member, or set the `membership.group_member.name` for the
              # group member.
              #
              # - To add the calling app to a space or a direct message between two human
              #   users, use `users/app`. Unable to add other
              #   apps to the space.
              #
              # - To add a human user, use `users/{user}`, where `{user}` can be the email
              # address for the user. For users in the same Workspace organization `{user}`
              # can also be the `id` for the person from the People API, or the `id` for
              # the user in the Directory API. For example, if the People API Person
              # profile ID for `user@example.com` is `123456789`, you can add the user to
              # the space by setting the `membership.member.name` to
              # `users/user@example.com` or `users/123456789`.
              #
              # - To add or invite a Google group in a named space, use
              # `groups/{group}`, where `{group}` is the `id` for the group from the Cloud
              # Identity Groups API. For example, you can use [Cloud Identity Groups lookup
              # API](https://cloud.google.com/identity/docs/reference/rest/v1/groups/lookup)
              # to retrieve the ID `123456789` for group email `group@example.com`, then
              # you can add or invite the group to a named space by setting the
              # `membership.group_member.name` to `groups/123456789`. Group email is not
              # supported, and Google groups can only be added as members in named spaces.
              #
              # @overload create_membership(request, options = nil)
              #   Pass arguments to `create_membership` via a request object, either of type
              #   {::Google::Apps::Chat::V1::CreateMembershipRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::CreateMembershipRequest, ::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_membership(parent: nil, membership: nil)
              #   Pass arguments to `create_membership` 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 space for which to create the
              #     membership.
              #
              #     Format: spaces/\\{space}
              #   @param membership [::Google::Apps::Chat::V1::Membership, ::Hash]
              #     Required. The membership relation to create.
              #     The `memberType` field must contain a user with the `user.name` and
              #     `user.type` fields populated. The server will assign a resource name
              #     and overwrite anything specified.
              #     When a Chat app creates a membership relation for a human user, it must use
              #     the `chat.memberships` scope, set `user.type` to `HUMAN`, and set
              #     `user.name` with format `users/{user}`, where `{user}` can be the email
              #     address for the user. For users in the same Workspace organization `{user}`
              #     can also be the `id` of the
              #     [person](https://developers.google.com/people/api/rest/v1/people) from the
              #     People API, or the `id` for the user in the Directory API. For example, if
              #     the People API Person profile ID for `user@example.com` is `123456789`, you
              #     can add the user to the space by setting the `membership.member.name` to
              #     `users/user@example.com` or `users/123456789`. When a Chat app creates a
              #     membership relation for itself, it must use the `chat.memberships.app`
              #     scope, set `user.type` to `BOT`, and set `user.name` to `users/app`.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Membership]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Membership]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::CreateMembershipRequest.new
              #
              #   # Call the create_membership method.
              #   result = client.create_membership request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Membership.
              #   p result
              #
              def create_membership request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::CreateMembershipRequest

                # 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_membership.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::Apps::Chat::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_membership.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_membership.retry_policy

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

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

              ##
              # Updates a membership. For an example, see [Update a user's membership in
              # a space](https://developers.google.com/workspace/chat/update-members).
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload update_membership(request, options = nil)
              #   Pass arguments to `update_membership` via a request object, either of type
              #   {::Google::Apps::Chat::V1::UpdateMembershipRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::UpdateMembershipRequest, ::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_membership(membership: nil, update_mask: nil)
              #   Pass arguments to `update_membership` 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 membership [::Google::Apps::Chat::V1::Membership, ::Hash]
              #     Required. The membership to update. Only fields specified by `update_mask`
              #     are updated.
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     Required. The field paths to update. Separate multiple values with commas
              #     or use `*` to update all field paths.
              #
              #     Currently supported field paths:
              #
              #     - `role`
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Membership]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Membership]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::UpdateMembershipRequest.new
              #
              #   # Call the update_membership method.
              #   result = client.update_membership request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Membership.
              #   p result
              #
              def update_membership request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::UpdateMembershipRequest

                # 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_membership.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::Apps::Chat::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_membership.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_membership.retry_policy

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

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

              ##
              # Deletes a membership. For an example, see
              # [Remove a user or a Google Chat app from a
              # space](https://developers.google.com/workspace/chat/delete-members).
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload delete_membership(request, options = nil)
              #   Pass arguments to `delete_membership` via a request object, either of type
              #   {::Google::Apps::Chat::V1::DeleteMembershipRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::DeleteMembershipRequest, ::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_membership(name: nil)
              #   Pass arguments to `delete_membership` 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. Resource name of the membership to delete. Chat apps can delete
              #     human users' or their own memberships. Chat apps can't delete other apps'
              #     memberships.
              #
              #     When deleting a human membership, requires the `chat.memberships` scope and
              #     `spaces/{space}/members/{member}` format. You can use the email as an
              #     alias for `{member}`. For example,
              #     `spaces/{space}/members/example@gmail.com` where `example@gmail.com` is the
              #     email of the Google Chat user.
              #
              #     When deleting an app membership, requires the `chat.memberships.app` scope
              #     and `spaces/{space}/members/app` format.
              #
              #     Format: `spaces/{space}/members/{member}` or `spaces/{space}/members/app`.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Membership]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Membership]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::DeleteMembershipRequest.new
              #
              #   # Call the delete_membership method.
              #   result = client.delete_membership request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Membership.
              #   p result
              #
              def delete_membership request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::DeleteMembershipRequest

                # 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_membership.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::Apps::Chat::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_membership.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_membership.retry_policy

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

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

              ##
              # Creates a reaction and adds it to a message. Only unicode emojis are
              # supported. For an example, see
              # [Add a reaction to a
              # message](https://developers.google.com/workspace/chat/create-reactions).
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload create_reaction(request, options = nil)
              #   Pass arguments to `create_reaction` via a request object, either of type
              #   {::Google::Apps::Chat::V1::CreateReactionRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::CreateReactionRequest, ::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_reaction(parent: nil, reaction: nil)
              #   Pass arguments to `create_reaction` 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 message where the reaction is created.
              #
              #     Format: `spaces/{space}/messages/{message}`
              #   @param reaction [::Google::Apps::Chat::V1::Reaction, ::Hash]
              #     Required. The reaction to create.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::Reaction]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::Reaction]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::CreateReactionRequest.new
              #
              #   # Call the create_reaction method.
              #   result = client.create_reaction request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::Reaction.
              #   p result
              #
              def create_reaction request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::CreateReactionRequest

                # 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_reaction.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::Apps::Chat::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_reaction.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.create_reaction.retry_policy

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

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

              ##
              # Lists reactions to a message. For an example, see
              # [List reactions for a
              # message](https://developers.google.com/workspace/chat/list-reactions).
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload list_reactions(request, options = nil)
              #   Pass arguments to `list_reactions` via a request object, either of type
              #   {::Google::Apps::Chat::V1::ListReactionsRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::ListReactionsRequest, ::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_reactions(parent: nil, page_size: nil, page_token: nil, filter: nil)
              #   Pass arguments to `list_reactions` 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 message users reacted to.
              #
              #     Format: `spaces/{space}/messages/{message}`
              #   @param page_size [::Integer]
              #     Optional. The maximum number of reactions returned. The service can return
              #     fewer reactions than this value. If unspecified, the default value is 25.
              #     The maximum value is 200; values above 200 are changed to 200.
              #   @param page_token [::String]
              #     Optional. (If resuming from a previous query.)
              #
              #     A page token received from a previous list reactions call. Provide this
              #     to retrieve the subsequent page.
              #
              #     When paginating, the filter value should match the call that provided the
              #     page token. Passing a different value might lead to unexpected results.
              #   @param filter [::String]
              #     Optional. A query filter.
              #
              #     You can filter reactions by
              #     [emoji](https://developers.google.com/workspace/chat/api/reference/rest/v1/Emoji)
              #     (either `emoji.unicode` or `emoji.custom_emoji.uid`) and
              #     [user](https://developers.google.com/workspace/chat/api/reference/rest/v1/User)
              #     (`user.name`).
              #
              #     To filter reactions for multiple emojis or users, join similar fields
              #     with the `OR` operator, such as `emoji.unicode = "🙂" OR emoji.unicode =
              #     "👍"` and `user.name = "users/AAAAAA" OR user.name = "users/BBBBBB"`.
              #
              #     To filter reactions by emoji and user, use the `AND` operator, such as
              #     `emoji.unicode = "🙂" AND user.name = "users/AAAAAA"`.
              #
              #     If your query uses both `AND` and `OR`, group them with parentheses.
              #
              #     For example, the following queries are valid:
              #
              #     ```
              #     user.name = "users/\\{user}"
              #     emoji.unicode = "🙂"
              #     emoji.custom_emoji.uid = "\\{uid}"
              #     emoji.unicode = "🙂" OR emoji.unicode = "👍"
              #     emoji.unicode = "🙂" OR emoji.custom_emoji.uid = "\\{uid}"
              #     emoji.unicode = "🙂" AND user.name = "users/\\{user}"
              #     (emoji.unicode = "🙂" OR emoji.custom_emoji.uid = "\\{uid}")
              #     AND user.name = "users/\\{user}"
              #     ```
              #
              #     The following queries are invalid:
              #
              #     ```
              #     emoji.unicode = "🙂" AND emoji.unicode = "👍"
              #     emoji.unicode = "🙂" AND emoji.custom_emoji.uid = "\\{uid}"
              #     emoji.unicode = "🙂" OR user.name = "users/\\{user}"
              #     emoji.unicode = "🙂" OR emoji.custom_emoji.uid = "\\{uid}" OR
              #     user.name = "users/\\{user}"
              #     emoji.unicode = "🙂" OR emoji.custom_emoji.uid = "\\{uid}"
              #     AND user.name = "users/\\{user}"
              #     ```
              #
              #     Invalid queries are rejected by the server with an `INVALID_ARGUMENT`
              #     error.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Gapic::Rest::PagedEnumerable<::Google::Apps::Chat::V1::Reaction>]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Gapic::Rest::PagedEnumerable<::Google::Apps::Chat::V1::Reaction>]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::ListReactionsRequest.new
              #
              #   # Call the list_reactions method.
              #   result = client.list_reactions 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::Apps::Chat::V1::Reaction.
              #     p item
              #   end
              #
              def list_reactions request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::ListReactionsRequest

                # 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_reactions.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::Apps::Chat::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_reactions.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.list_reactions.retry_policy

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

                @chat_service_stub.list_reactions request, options do |result, operation|
                  result = ::Gapic::Rest::PagedEnumerable.new @chat_service_stub, :list_reactions, "reactions", request, result, options
                  yield result, operation if block_given?
                  return result
                end
              rescue ::Gapic::Rest::Error => e
                raise ::Google::Cloud::Error.from_error(e)
              end

              ##
              # Deletes a reaction to a message. Only unicode emojis are supported.
              # For an example, see
              # [Delete a
              # reaction](https://developers.google.com/workspace/chat/delete-reactions).
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload delete_reaction(request, options = nil)
              #   Pass arguments to `delete_reaction` via a request object, either of type
              #   {::Google::Apps::Chat::V1::DeleteReactionRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::DeleteReactionRequest, ::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_reaction(name: nil)
              #   Pass arguments to `delete_reaction` 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 reaction to delete.
              #
              #     Format: `spaces/{space}/messages/{message}/reactions/{reaction}`
              # @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/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::DeleteReactionRequest.new
              #
              #   # Call the delete_reaction method.
              #   result = client.delete_reaction request
              #
              #   # The returned object is of type Google::Protobuf::Empty.
              #   p result
              #
              def delete_reaction request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::DeleteReactionRequest

                # 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_reaction.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::Apps::Chat::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_reaction.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.delete_reaction.retry_policy

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

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

              ##
              # Returns details about a user's read state within a space, used to identify
              # read and unread messages. For an example, see [Get details about a user's
              # space read
              # state](https://developers.google.com/workspace/chat/get-space-read-state).
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload get_space_read_state(request, options = nil)
              #   Pass arguments to `get_space_read_state` via a request object, either of type
              #   {::Google::Apps::Chat::V1::GetSpaceReadStateRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::GetSpaceReadStateRequest, ::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_space_read_state(name: nil)
              #   Pass arguments to `get_space_read_state` via keyword arguments. Note that at
              #   least one keyword argument is required. To specify no parameters, or to keep all
              #   the default parameter values, pass an empty Hash as a request object (see above).
              #
              #   @param name [::String]
              #     Required. Resource name of the space read state to retrieve.
              #
              #     Only supports getting read state for the calling user.
              #
              #     To refer to the calling user, set one of the following:
              #
              #     - The `me` alias. For example, `users/me/spaces/{space}/spaceReadState`.
              #
              #     - Their Workspace email address. For example,
              #     `users/user@example.com/spaces/{space}/spaceReadState`.
              #
              #     - Their user id. For example,
              #     `users/123456789/spaces/{space}/spaceReadState`.
              #
              #     Format: users/\\{user}/spaces/\\{space}/spaceReadState
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::SpaceReadState]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::SpaceReadState]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::GetSpaceReadStateRequest.new
              #
              #   # Call the get_space_read_state method.
              #   result = client.get_space_read_state request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::SpaceReadState.
              #   p result
              #
              def get_space_read_state request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::GetSpaceReadStateRequest

                # 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_space_read_state.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::Apps::Chat::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_space_read_state.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_space_read_state.retry_policy

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

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

              ##
              # Updates a user's read state within a space, used to identify read and
              # unread messages. For an example, see [Update a user's space read
              # state](https://developers.google.com/workspace/chat/update-space-read-state).
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload update_space_read_state(request, options = nil)
              #   Pass arguments to `update_space_read_state` via a request object, either of type
              #   {::Google::Apps::Chat::V1::UpdateSpaceReadStateRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::UpdateSpaceReadStateRequest, ::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_space_read_state(space_read_state: nil, update_mask: nil)
              #   Pass arguments to `update_space_read_state` via keyword arguments. Note that at
              #   least one keyword argument is required. To specify no parameters, or to keep all
              #   the default parameter values, pass an empty Hash as a request object (see above).
              #
              #   @param space_read_state [::Google::Apps::Chat::V1::SpaceReadState, ::Hash]
              #     Required. The space read state and fields to update.
              #
              #     Only supports updating read state for the calling user.
              #
              #     To refer to the calling user, set one of the following:
              #
              #     - The `me` alias. For example, `users/me/spaces/{space}/spaceReadState`.
              #
              #     - Their Workspace email address. For example,
              #     `users/user@example.com/spaces/{space}/spaceReadState`.
              #
              #     - Their user id. For example,
              #     `users/123456789/spaces/{space}/spaceReadState`.
              #
              #     Format: users/\\{user}/spaces/\\{space}/spaceReadState
              #   @param update_mask [::Google::Protobuf::FieldMask, ::Hash]
              #     Required. The field paths to update. Currently supported field paths:
              #
              #     - `last_read_time`
              #
              #     When the `last_read_time` is before the latest message create time, the
              #     space appears as unread in the UI.
              #
              #     To mark the space as read, set `last_read_time` to any value later (larger)
              #     than the latest message create time. The `last_read_time` is coerced to
              #     match the latest message create time. Note that the space read state only
              #     affects the read state of messages that are visible in the space's
              #     top-level conversation. Replies in threads are unaffected by this
              #     timestamp, and instead rely on the thread read state.
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::SpaceReadState]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::SpaceReadState]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::UpdateSpaceReadStateRequest.new
              #
              #   # Call the update_space_read_state method.
              #   result = client.update_space_read_state request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::SpaceReadState.
              #   p result
              #
              def update_space_read_state request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::UpdateSpaceReadStateRequest

                # 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_space_read_state.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::Apps::Chat::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_space_read_state.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.update_space_read_state.retry_policy

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

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

              ##
              # Returns details about a user's read state within a thread, used to identify
              # read and unread messages. For an example, see [Get details about a user's
              # thread read
              # state](https://developers.google.com/workspace/chat/get-thread-read-state).
              #
              # Requires [user
              # authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user).
              #
              # @overload get_thread_read_state(request, options = nil)
              #   Pass arguments to `get_thread_read_state` via a request object, either of type
              #   {::Google::Apps::Chat::V1::GetThreadReadStateRequest} or an equivalent Hash.
              #
              #   @param request [::Google::Apps::Chat::V1::GetThreadReadStateRequest, ::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_thread_read_state(name: nil)
              #   Pass arguments to `get_thread_read_state` via keyword arguments. Note that at
              #   least one keyword argument is required. To specify no parameters, or to keep all
              #   the default parameter values, pass an empty Hash as a request object (see above).
              #
              #   @param name [::String]
              #     Required. Resource name of the thread read state to retrieve.
              #
              #     Only supports getting read state for the calling user.
              #
              #     To refer to the calling user, set one of the following:
              #
              #     - The `me` alias. For example,
              #     `users/me/spaces/{space}/threads/{thread}/threadReadState`.
              #
              #     - Their Workspace email address. For example,
              #     `users/user@example.com/spaces/{space}/threads/{thread}/threadReadState`.
              #
              #     - Their user id. For example,
              #     `users/123456789/spaces/{space}/threads/{thread}/threadReadState`.
              #
              #     Format: users/\\{user}/spaces/\\{space}/threads/\\{thread}/threadReadState
              # @yield [result, operation] Access the result along with the TransportOperation object
              # @yieldparam result [::Google::Apps::Chat::V1::ThreadReadState]
              # @yieldparam operation [::Gapic::Rest::TransportOperation]
              #
              # @return [::Google::Apps::Chat::V1::ThreadReadState]
              #
              # @raise [::Google::Cloud::Error] if the REST call is aborted.
              #
              # @example Basic example
              #   require "google/apps/chat/v1"
              #
              #   # Create a client object. The client can be reused for multiple calls.
              #   client = Google::Apps::Chat::V1::ChatService::Rest::Client.new
              #
              #   # Create a request. To set request fields, pass in keyword arguments.
              #   request = Google::Apps::Chat::V1::GetThreadReadStateRequest.new
              #
              #   # Call the get_thread_read_state method.
              #   result = client.get_thread_read_state request
              #
              #   # The returned object is of type Google::Apps::Chat::V1::ThreadReadState.
              #   p result
              #
              def get_thread_read_state request, options = nil
                raise ::ArgumentError, "request must be provided" if request.nil?

                request = ::Gapic::Protobuf.coerce request, to: ::Google::Apps::Chat::V1::GetThreadReadStateRequest

                # 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_thread_read_state.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::Apps::Chat::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_thread_read_state.timeout,
                                       metadata:     call_metadata,
                                       retry_policy: @config.rpcs.get_thread_read_state.retry_policy

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

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

              ##
              # Configuration class for the ChatService REST API.
              #
              # This class represents the configuration for ChatService 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::Apps::Chat::V1::ChatService::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_message to 20 seconds,
              #   # and all remaining timeouts to 10 seconds.
              #   ::Google::Apps::Chat::V1::ChatService::Rest::Client.configure do |config|
              #     config.timeout = 10.0
              #     config.rpcs.create_message.timeout = 20.0
              #   end
              #
              #   # Apply the above configuration only to a new client.
              #   client = ::Google::Apps::Chat::V1::ChatService::Rest::Client.new do |config|
              #     config.timeout = 10.0
              #     config.rpcs.create_message.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
              #   @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]
              #
              class Configuration
                extend ::Gapic::Config

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

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

                # @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 ChatService 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_message`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_message
                  ##
                  # RPC-specific configuration for `list_messages`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_messages
                  ##
                  # RPC-specific configuration for `list_memberships`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_memberships
                  ##
                  # RPC-specific configuration for `get_membership`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_membership
                  ##
                  # RPC-specific configuration for `get_message`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_message
                  ##
                  # RPC-specific configuration for `update_message`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_message
                  ##
                  # RPC-specific configuration for `delete_message`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_message
                  ##
                  # RPC-specific configuration for `get_attachment`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_attachment
                  ##
                  # RPC-specific configuration for `upload_attachment`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :upload_attachment
                  ##
                  # RPC-specific configuration for `list_spaces`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_spaces
                  ##
                  # RPC-specific configuration for `get_space`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_space
                  ##
                  # RPC-specific configuration for `create_space`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_space
                  ##
                  # RPC-specific configuration for `set_up_space`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :set_up_space
                  ##
                  # RPC-specific configuration for `update_space`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_space
                  ##
                  # RPC-specific configuration for `delete_space`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_space
                  ##
                  # RPC-specific configuration for `complete_import_space`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :complete_import_space
                  ##
                  # RPC-specific configuration for `find_direct_message`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :find_direct_message
                  ##
                  # RPC-specific configuration for `create_membership`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_membership
                  ##
                  # RPC-specific configuration for `update_membership`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_membership
                  ##
                  # RPC-specific configuration for `delete_membership`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_membership
                  ##
                  # RPC-specific configuration for `create_reaction`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :create_reaction
                  ##
                  # RPC-specific configuration for `list_reactions`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :list_reactions
                  ##
                  # RPC-specific configuration for `delete_reaction`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :delete_reaction
                  ##
                  # RPC-specific configuration for `get_space_read_state`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_space_read_state
                  ##
                  # RPC-specific configuration for `update_space_read_state`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :update_space_read_state
                  ##
                  # RPC-specific configuration for `get_thread_read_state`
                  # @return [::Gapic::Config::Method]
                  #
                  attr_reader :get_thread_read_state

                  # @private
                  def initialize parent_rpcs = nil
                    create_message_config = parent_rpcs.create_message if parent_rpcs.respond_to? :create_message
                    @create_message = ::Gapic::Config::Method.new create_message_config
                    list_messages_config = parent_rpcs.list_messages if parent_rpcs.respond_to? :list_messages
                    @list_messages = ::Gapic::Config::Method.new list_messages_config
                    list_memberships_config = parent_rpcs.list_memberships if parent_rpcs.respond_to? :list_memberships
                    @list_memberships = ::Gapic::Config::Method.new list_memberships_config
                    get_membership_config = parent_rpcs.get_membership if parent_rpcs.respond_to? :get_membership
                    @get_membership = ::Gapic::Config::Method.new get_membership_config
                    get_message_config = parent_rpcs.get_message if parent_rpcs.respond_to? :get_message
                    @get_message = ::Gapic::Config::Method.new get_message_config
                    update_message_config = parent_rpcs.update_message if parent_rpcs.respond_to? :update_message
                    @update_message = ::Gapic::Config::Method.new update_message_config
                    delete_message_config = parent_rpcs.delete_message if parent_rpcs.respond_to? :delete_message
                    @delete_message = ::Gapic::Config::Method.new delete_message_config
                    get_attachment_config = parent_rpcs.get_attachment if parent_rpcs.respond_to? :get_attachment
                    @get_attachment = ::Gapic::Config::Method.new get_attachment_config
                    upload_attachment_config = parent_rpcs.upload_attachment if parent_rpcs.respond_to? :upload_attachment
                    @upload_attachment = ::Gapic::Config::Method.new upload_attachment_config
                    list_spaces_config = parent_rpcs.list_spaces if parent_rpcs.respond_to? :list_spaces
                    @list_spaces = ::Gapic::Config::Method.new list_spaces_config
                    get_space_config = parent_rpcs.get_space if parent_rpcs.respond_to? :get_space
                    @get_space = ::Gapic::Config::Method.new get_space_config
                    create_space_config = parent_rpcs.create_space if parent_rpcs.respond_to? :create_space
                    @create_space = ::Gapic::Config::Method.new create_space_config
                    set_up_space_config = parent_rpcs.set_up_space if parent_rpcs.respond_to? :set_up_space
                    @set_up_space = ::Gapic::Config::Method.new set_up_space_config
                    update_space_config = parent_rpcs.update_space if parent_rpcs.respond_to? :update_space
                    @update_space = ::Gapic::Config::Method.new update_space_config
                    delete_space_config = parent_rpcs.delete_space if parent_rpcs.respond_to? :delete_space
                    @delete_space = ::Gapic::Config::Method.new delete_space_config
                    complete_import_space_config = parent_rpcs.complete_import_space if parent_rpcs.respond_to? :complete_import_space
                    @complete_import_space = ::Gapic::Config::Method.new complete_import_space_config
                    find_direct_message_config = parent_rpcs.find_direct_message if parent_rpcs.respond_to? :find_direct_message
                    @find_direct_message = ::Gapic::Config::Method.new find_direct_message_config
                    create_membership_config = parent_rpcs.create_membership if parent_rpcs.respond_to? :create_membership
                    @create_membership = ::Gapic::Config::Method.new create_membership_config
                    update_membership_config = parent_rpcs.update_membership if parent_rpcs.respond_to? :update_membership
                    @update_membership = ::Gapic::Config::Method.new update_membership_config
                    delete_membership_config = parent_rpcs.delete_membership if parent_rpcs.respond_to? :delete_membership
                    @delete_membership = ::Gapic::Config::Method.new delete_membership_config
                    create_reaction_config = parent_rpcs.create_reaction if parent_rpcs.respond_to? :create_reaction
                    @create_reaction = ::Gapic::Config::Method.new create_reaction_config
                    list_reactions_config = parent_rpcs.list_reactions if parent_rpcs.respond_to? :list_reactions
                    @list_reactions = ::Gapic::Config::Method.new list_reactions_config
                    delete_reaction_config = parent_rpcs.delete_reaction if parent_rpcs.respond_to? :delete_reaction
                    @delete_reaction = ::Gapic::Config::Method.new delete_reaction_config
                    get_space_read_state_config = parent_rpcs.get_space_read_state if parent_rpcs.respond_to? :get_space_read_state
                    @get_space_read_state = ::Gapic::Config::Method.new get_space_read_state_config
                    update_space_read_state_config = parent_rpcs.update_space_read_state if parent_rpcs.respond_to? :update_space_read_state
                    @update_space_read_state = ::Gapic::Config::Method.new update_space_read_state_config
                    get_thread_read_state_config = parent_rpcs.get_thread_read_state if parent_rpcs.respond_to? :get_thread_read_state
                    @get_thread_read_state = ::Gapic::Config::Method.new get_thread_read_state_config

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