# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://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.

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module ClouddebuggerV2
      
      # An alias to a repo revision.
      class AliasContext
        include Google::Apis::Core::Hashable
      
        # The alias kind.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The alias name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # ------------------------------------------------------------------------------
      # ## Breakpoint (the resource) Represents the breakpoint specification, status
      # and results.
      class Breakpoint
        include Google::Apis::Core::Hashable
      
        # Action that the agent should perform when the code at the breakpoint location
        # is hit.
        # Corresponds to the JSON property `action`
        # @return [String]
        attr_accessor :action
      
        # The deadline for the breakpoint to stay in CANARY_ACTIVE state. The value is
        # meaningless when the breakpoint is not in CANARY_ACTIVE state.
        # Corresponds to the JSON property `canaryExpireTime`
        # @return [String]
        attr_accessor :canary_expire_time
      
        # Condition that triggers the breakpoint. The condition is a compound boolean
        # expression composed using expressions in a programming language at the source
        # location.
        # Corresponds to the JSON property `condition`
        # @return [String]
        attr_accessor :condition
      
        # Time this breakpoint was created by the server in seconds resolution.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Values of evaluated expressions at breakpoint time. The evaluated expressions
        # appear in exactly the same order they are listed in the `expressions` field.
        # The `name` field holds the original expression text, the `value` or `members`
        # field holds the result of the evaluated expression. If the expression cannot
        # be evaluated, the `status` inside the `Variable` will indicate an error and
        # contain the error text.
        # Corresponds to the JSON property `evaluatedExpressions`
        # @return [Array<Google::Apis::ClouddebuggerV2::Variable>]
        attr_accessor :evaluated_expressions
      
        # List of read-only expressions to evaluate at the breakpoint location. The
        # expressions are composed using expressions in the programming language at the
        # source location. If the breakpoint action is `LOG`, the evaluated expressions
        # are included in log statements.
        # Corresponds to the JSON property `expressions`
        # @return [Array<String>]
        attr_accessor :expressions
      
        # Time this breakpoint was finalized as seen by the server in seconds resolution.
        # Corresponds to the JSON property `finalTime`
        # @return [String]
        attr_accessor :final_time
      
        # Breakpoint identifier, unique in the scope of the debuggee.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # When true, indicates that this is a final result and the breakpoint state will
        # not change from here on.
        # Corresponds to the JSON property `isFinalState`
        # @return [Boolean]
        attr_accessor :is_final_state
        alias_method :is_final_state?, :is_final_state
      
        # A set of custom breakpoint properties, populated by the agent, to be displayed
        # to the user.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Represents a location in the source code.
        # Corresponds to the JSON property `location`
        # @return [Google::Apis::ClouddebuggerV2::SourceLocation]
        attr_accessor :location
      
        # Indicates the severity of the log. Only relevant when action is `LOG`.
        # Corresponds to the JSON property `logLevel`
        # @return [String]
        attr_accessor :log_level
      
        # Only relevant when action is `LOG`. Defines the message to log when the
        # breakpoint hits. The message may include parameter placeholders `$0`, `$1`,
        # etc. These placeholders are replaced with the evaluated value of the
        # appropriate expression. Expressions not referenced in `log_message_format` are
        # not logged. Example: `Message received, id = $0, count = $1` with `expressions`
        # = `[ message.id, message.count ]`.
        # Corresponds to the JSON property `logMessageFormat`
        # @return [String]
        attr_accessor :log_message_format
      
        # The stack at breakpoint time, where stack_frames[0] represents the most
        # recently entered function.
        # Corresponds to the JSON property `stackFrames`
        # @return [Array<Google::Apis::ClouddebuggerV2::StackFrame>]
        attr_accessor :stack_frames
      
        # The current state of the breakpoint.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Represents a contextual status message. The message can indicate an error or
        # informational status, and refer to specific parts of the containing object.
        # For example, the `Breakpoint.status` field can indicate an error referring to
        # the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ClouddebuggerV2::StatusMessage]
        attr_accessor :status
      
        # E-mail address of the user that created this breakpoint
        # Corresponds to the JSON property `userEmail`
        # @return [String]
        attr_accessor :user_email
      
        # The `variable_table` exists to aid with computation, memory and network
        # traffic optimization. It enables storing a variable once and reference it from
        # multiple variables, including variables stored in the `variable_table` itself.
        # For example, the same `this` object, which may appear at many levels of the
        # stack, can have all of its data stored once in this table. The stack frame
        # variables then would hold only a reference to it. The variable `
        # var_table_index` field is an index into this repeated field. The stored
        # objects are nameless and get their name from the referencing variable. The
        # effective variable is a merge of the referencing variable and the referenced
        # variable.
        # Corresponds to the JSON property `variableTable`
        # @return [Array<Google::Apis::ClouddebuggerV2::Variable>]
        attr_accessor :variable_table
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @action = args[:action] if args.key?(:action)
          @canary_expire_time = args[:canary_expire_time] if args.key?(:canary_expire_time)
          @condition = args[:condition] if args.key?(:condition)
          @create_time = args[:create_time] if args.key?(:create_time)
          @evaluated_expressions = args[:evaluated_expressions] if args.key?(:evaluated_expressions)
          @expressions = args[:expressions] if args.key?(:expressions)
          @final_time = args[:final_time] if args.key?(:final_time)
          @id = args[:id] if args.key?(:id)
          @is_final_state = args[:is_final_state] if args.key?(:is_final_state)
          @labels = args[:labels] if args.key?(:labels)
          @location = args[:location] if args.key?(:location)
          @log_level = args[:log_level] if args.key?(:log_level)
          @log_message_format = args[:log_message_format] if args.key?(:log_message_format)
          @stack_frames = args[:stack_frames] if args.key?(:stack_frames)
          @state = args[:state] if args.key?(:state)
          @status = args[:status] if args.key?(:status)
          @user_email = args[:user_email] if args.key?(:user_email)
          @variable_table = args[:variable_table] if args.key?(:variable_table)
        end
      end
      
      # A CloudRepoSourceContext denotes a particular revision in a cloud repo (a repo
      # hosted by the Google Cloud Platform).
      class CloudRepoSourceContext
        include Google::Apis::Core::Hashable
      
        # An alias to a repo revision.
        # Corresponds to the JSON property `aliasContext`
        # @return [Google::Apis::ClouddebuggerV2::AliasContext]
        attr_accessor :alias_context
      
        # The name of an alias (branch, tag, etc.).
        # Corresponds to the JSON property `aliasName`
        # @return [String]
        attr_accessor :alias_name
      
        # A unique identifier for a cloud repo.
        # Corresponds to the JSON property `repoId`
        # @return [Google::Apis::ClouddebuggerV2::RepoId]
        attr_accessor :repo_id
      
        # A revision ID.
        # Corresponds to the JSON property `revisionId`
        # @return [String]
        attr_accessor :revision_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @alias_context = args[:alias_context] if args.key?(:alias_context)
          @alias_name = args[:alias_name] if args.key?(:alias_name)
          @repo_id = args[:repo_id] if args.key?(:repo_id)
          @revision_id = args[:revision_id] if args.key?(:revision_id)
        end
      end
      
      # A CloudWorkspaceId is a unique identifier for a cloud workspace. A cloud
      # workspace is a place associated with a repo where modified files can be stored
      # before they are committed.
      class CloudWorkspaceId
        include Google::Apis::Core::Hashable
      
        # The unique name of the workspace within the repo. This is the name chosen by
        # the client in the Source API's CreateWorkspace method.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A unique identifier for a cloud repo.
        # Corresponds to the JSON property `repoId`
        # @return [Google::Apis::ClouddebuggerV2::RepoId]
        attr_accessor :repo_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @repo_id = args[:repo_id] if args.key?(:repo_id)
        end
      end
      
      # A CloudWorkspaceSourceContext denotes a workspace at a particular snapshot.
      class CloudWorkspaceSourceContext
        include Google::Apis::Core::Hashable
      
        # The ID of the snapshot. An empty snapshot_id refers to the most recent
        # snapshot.
        # Corresponds to the JSON property `snapshotId`
        # @return [String]
        attr_accessor :snapshot_id
      
        # A CloudWorkspaceId is a unique identifier for a cloud workspace. A cloud
        # workspace is a place associated with a repo where modified files can be stored
        # before they are committed.
        # Corresponds to the JSON property `workspaceId`
        # @return [Google::Apis::ClouddebuggerV2::CloudWorkspaceId]
        attr_accessor :workspace_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @snapshot_id = args[:snapshot_id] if args.key?(:snapshot_id)
          @workspace_id = args[:workspace_id] if args.key?(:workspace_id)
        end
      end
      
      # Represents the debugged application. The application may include one or more
      # replicated processes executing the same code. Each of these processes is
      # attached with a debugger agent, carrying out the debugging commands. Agents
      # attached to the same debuggee identify themselves as such by using exactly the
      # same Debuggee message value when registering.
      class Debuggee
        include Google::Apis::Core::Hashable
      
        # Version ID of the agent. Schema: `domain/language-platform/vmajor.minor` (for
        # example `google.com/java-gcp/v1.1`).
        # Corresponds to the JSON property `agentVersion`
        # @return [String]
        attr_accessor :agent_version
      
        # Used when setting breakpoint canary for this debuggee.
        # Corresponds to the JSON property `canaryMode`
        # @return [String]
        attr_accessor :canary_mode
      
        # Human readable description of the debuggee. Including a human-readable project
        # name, environment name and version information is recommended.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # References to the locations and revisions of the source code used in the
        # deployed application.
        # Corresponds to the JSON property `extSourceContexts`
        # @return [Array<Google::Apis::ClouddebuggerV2::ExtendedSourceContext>]
        attr_accessor :ext_source_contexts
      
        # Unique identifier for the debuggee generated by the controller service.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # If set to `true`, indicates that the agent should disable itself and detach
        # from the debuggee.
        # Corresponds to the JSON property `isDisabled`
        # @return [Boolean]
        attr_accessor :is_disabled
        alias_method :is_disabled?, :is_disabled
      
        # If set to `true`, indicates that Controller service does not detect any
        # activity from the debuggee agents and the application is possibly stopped.
        # Corresponds to the JSON property `isInactive`
        # @return [Boolean]
        attr_accessor :is_inactive
        alias_method :is_inactive?, :is_inactive
      
        # A set of custom debuggee properties, populated by the agent, to be displayed
        # to the user.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Project the debuggee is associated with. Use project number or id when
        # registering a Google Cloud Platform project.
        # Corresponds to the JSON property `project`
        # @return [String]
        attr_accessor :project
      
        # References to the locations and revisions of the source code used in the
        # deployed application.
        # Corresponds to the JSON property `sourceContexts`
        # @return [Array<Google::Apis::ClouddebuggerV2::SourceContext>]
        attr_accessor :source_contexts
      
        # Represents a contextual status message. The message can indicate an error or
        # informational status, and refer to specific parts of the containing object.
        # For example, the `Breakpoint.status` field can indicate an error referring to
        # the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ClouddebuggerV2::StatusMessage]
        attr_accessor :status
      
        # Uniquifier to further distinguish the application. It is possible that
        # different applications might have identical values in the debuggee message,
        # thus, incorrectly identified as a single application by the Controller service.
        # This field adds salt to further distinguish the application. Agents should
        # consider seeding this field with value that identifies the code, binary,
        # configuration and environment.
        # Corresponds to the JSON property `uniquifier`
        # @return [String]
        attr_accessor :uniquifier
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @agent_version = args[:agent_version] if args.key?(:agent_version)
          @canary_mode = args[:canary_mode] if args.key?(:canary_mode)
          @description = args[:description] if args.key?(:description)
          @ext_source_contexts = args[:ext_source_contexts] if args.key?(:ext_source_contexts)
          @id = args[:id] if args.key?(:id)
          @is_disabled = args[:is_disabled] if args.key?(:is_disabled)
          @is_inactive = args[:is_inactive] if args.key?(:is_inactive)
          @labels = args[:labels] if args.key?(:labels)
          @project = args[:project] if args.key?(:project)
          @source_contexts = args[:source_contexts] if args.key?(:source_contexts)
          @status = args[:status] if args.key?(:status)
          @uniquifier = args[:uniquifier] if args.key?(:uniquifier)
        end
      end
      
      # A generic empty message that you can re-use to avoid defining duplicated empty
      # messages in your APIs. A typical example is to use it as the request or the
      # response type of an API method. For instance: service Foo ` rpc Bar(google.
      # protobuf.Empty) returns (google.protobuf.Empty); `
      class Empty
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # An ExtendedSourceContext is a SourceContext combined with additional details
      # describing the context.
      class ExtendedSourceContext
        include Google::Apis::Core::Hashable
      
        # A SourceContext is a reference to a tree of files. A SourceContext together
        # with a path point to a unique revision of a single file or directory.
        # Corresponds to the JSON property `context`
        # @return [Google::Apis::ClouddebuggerV2::SourceContext]
        attr_accessor :context
      
        # Labels with user defined metadata.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @context = args[:context] if args.key?(:context)
          @labels = args[:labels] if args.key?(:labels)
        end
      end
      
      # Represents a message with parameters.
      class FormatMessage
        include Google::Apis::Core::Hashable
      
        # Format template for the message. The `format` uses placeholders `$0`, `$1`,
        # etc. to reference parameters. `$$` can be used to denote the `$` character.
        # Examples: * `Failed to load '$0' which helps debug $1 the first time it is
        # loaded. Again, $0 is very important.` * `Please pay $$10 to use $0 instead of $
        # 1.`
        # Corresponds to the JSON property `format`
        # @return [String]
        attr_accessor :format
      
        # Optional parameters to be embedded into the message.
        # Corresponds to the JSON property `parameters`
        # @return [Array<String>]
        attr_accessor :parameters
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @format = args[:format] if args.key?(:format)
          @parameters = args[:parameters] if args.key?(:parameters)
        end
      end
      
      # A SourceContext referring to a Gerrit project.
      class GerritSourceContext
        include Google::Apis::Core::Hashable
      
        # An alias to a repo revision.
        # Corresponds to the JSON property `aliasContext`
        # @return [Google::Apis::ClouddebuggerV2::AliasContext]
        attr_accessor :alias_context
      
        # The name of an alias (branch, tag, etc.).
        # Corresponds to the JSON property `aliasName`
        # @return [String]
        attr_accessor :alias_name
      
        # The full project name within the host. Projects may be nested, so "project/
        # subproject" is a valid project name. The "repo name" is hostURI/project.
        # Corresponds to the JSON property `gerritProject`
        # @return [String]
        attr_accessor :gerrit_project
      
        # The URI of a running Gerrit instance.
        # Corresponds to the JSON property `hostUri`
        # @return [String]
        attr_accessor :host_uri
      
        # A revision (commit) ID.
        # Corresponds to the JSON property `revisionId`
        # @return [String]
        attr_accessor :revision_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @alias_context = args[:alias_context] if args.key?(:alias_context)
          @alias_name = args[:alias_name] if args.key?(:alias_name)
          @gerrit_project = args[:gerrit_project] if args.key?(:gerrit_project)
          @host_uri = args[:host_uri] if args.key?(:host_uri)
          @revision_id = args[:revision_id] if args.key?(:revision_id)
        end
      end
      
      # Response for getting breakpoint information.
      class GetBreakpointResponse
        include Google::Apis::Core::Hashable
      
        # ------------------------------------------------------------------------------
        # ## Breakpoint (the resource) Represents the breakpoint specification, status
        # and results.
        # Corresponds to the JSON property `breakpoint`
        # @return [Google::Apis::ClouddebuggerV2::Breakpoint]
        attr_accessor :breakpoint
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @breakpoint = args[:breakpoint] if args.key?(:breakpoint)
        end
      end
      
      # A GitSourceContext denotes a particular revision in a third party Git
      # repository (e.g. GitHub).
      class GitSourceContext
        include Google::Apis::Core::Hashable
      
        # Git commit hash. required.
        # Corresponds to the JSON property `revisionId`
        # @return [String]
        attr_accessor :revision_id
      
        # Git repository URL.
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @revision_id = args[:revision_id] if args.key?(:revision_id)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # Response for listing active breakpoints.
      class ListActiveBreakpointsResponse
        include Google::Apis::Core::Hashable
      
        # List of all active breakpoints. The fields `id` and `location` are guaranteed
        # to be set on each breakpoint.
        # Corresponds to the JSON property `breakpoints`
        # @return [Array<Google::Apis::ClouddebuggerV2::Breakpoint>]
        attr_accessor :breakpoints
      
        # A token that can be used in the next method call to block until the list of
        # breakpoints changes.
        # Corresponds to the JSON property `nextWaitToken`
        # @return [String]
        attr_accessor :next_wait_token
      
        # If set to `true`, indicates that there is no change to the list of active
        # breakpoints and the server-selected timeout has expired. The `breakpoints`
        # field would be empty and should be ignored.
        # Corresponds to the JSON property `waitExpired`
        # @return [Boolean]
        attr_accessor :wait_expired
        alias_method :wait_expired?, :wait_expired
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @breakpoints = args[:breakpoints] if args.key?(:breakpoints)
          @next_wait_token = args[:next_wait_token] if args.key?(:next_wait_token)
          @wait_expired = args[:wait_expired] if args.key?(:wait_expired)
        end
      end
      
      # Response for listing breakpoints.
      class ListBreakpointsResponse
        include Google::Apis::Core::Hashable
      
        # List of breakpoints matching the request. The fields `id` and `location` are
        # guaranteed to be set on each breakpoint. The fields: `stack_frames`, `
        # evaluated_expressions` and `variable_table` are cleared on each breakpoint
        # regardless of its status.
        # Corresponds to the JSON property `breakpoints`
        # @return [Array<Google::Apis::ClouddebuggerV2::Breakpoint>]
        attr_accessor :breakpoints
      
        # A wait token that can be used in the next call to `list` (REST) or `
        # ListBreakpoints` (RPC) to block until the list of breakpoints has changes.
        # Corresponds to the JSON property `nextWaitToken`
        # @return [String]
        attr_accessor :next_wait_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @breakpoints = args[:breakpoints] if args.key?(:breakpoints)
          @next_wait_token = args[:next_wait_token] if args.key?(:next_wait_token)
        end
      end
      
      # Response for listing debuggees.
      class ListDebuggeesResponse
        include Google::Apis::Core::Hashable
      
        # List of debuggees accessible to the calling user. The fields `debuggee.id` and
        # `description` are guaranteed to be set. The `description` field is a human
        # readable field provided by agents and can be displayed to users.
        # Corresponds to the JSON property `debuggees`
        # @return [Array<Google::Apis::ClouddebuggerV2::Debuggee>]
        attr_accessor :debuggees
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @debuggees = args[:debuggees] if args.key?(:debuggees)
        end
      end
      
      # Selects a repo using a Google Cloud Platform project ID (e.g. winged-cargo-31)
      # and a repo name within that project.
      class ProjectRepoId
        include Google::Apis::Core::Hashable
      
        # The ID of the project.
        # Corresponds to the JSON property `projectId`
        # @return [String]
        attr_accessor :project_id
      
        # The name of the repo. Leave empty for the default repo.
        # Corresponds to the JSON property `repoName`
        # @return [String]
        attr_accessor :repo_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @project_id = args[:project_id] if args.key?(:project_id)
          @repo_name = args[:repo_name] if args.key?(:repo_name)
        end
      end
      
      # Request to register a debuggee.
      class RegisterDebuggeeRequest
        include Google::Apis::Core::Hashable
      
        # Represents the debugged application. The application may include one or more
        # replicated processes executing the same code. Each of these processes is
        # attached with a debugger agent, carrying out the debugging commands. Agents
        # attached to the same debuggee identify themselves as such by using exactly the
        # same Debuggee message value when registering.
        # Corresponds to the JSON property `debuggee`
        # @return [Google::Apis::ClouddebuggerV2::Debuggee]
        attr_accessor :debuggee
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @debuggee = args[:debuggee] if args.key?(:debuggee)
        end
      end
      
      # Response for registering a debuggee.
      class RegisterDebuggeeResponse
        include Google::Apis::Core::Hashable
      
        # A unique ID generated for the agent. Each RegisterDebuggee request will
        # generate a new agent ID.
        # Corresponds to the JSON property `agentId`
        # @return [String]
        attr_accessor :agent_id
      
        # Represents the debugged application. The application may include one or more
        # replicated processes executing the same code. Each of these processes is
        # attached with a debugger agent, carrying out the debugging commands. Agents
        # attached to the same debuggee identify themselves as such by using exactly the
        # same Debuggee message value when registering.
        # Corresponds to the JSON property `debuggee`
        # @return [Google::Apis::ClouddebuggerV2::Debuggee]
        attr_accessor :debuggee
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @agent_id = args[:agent_id] if args.key?(:agent_id)
          @debuggee = args[:debuggee] if args.key?(:debuggee)
        end
      end
      
      # A unique identifier for a cloud repo.
      class RepoId
        include Google::Apis::Core::Hashable
      
        # Selects a repo using a Google Cloud Platform project ID (e.g. winged-cargo-31)
        # and a repo name within that project.
        # Corresponds to the JSON property `projectRepoId`
        # @return [Google::Apis::ClouddebuggerV2::ProjectRepoId]
        attr_accessor :project_repo_id
      
        # A server-assigned, globally unique identifier.
        # Corresponds to the JSON property `uid`
        # @return [String]
        attr_accessor :uid
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @project_repo_id = args[:project_repo_id] if args.key?(:project_repo_id)
          @uid = args[:uid] if args.key?(:uid)
        end
      end
      
      # Response for setting a breakpoint.
      class SetBreakpointResponse
        include Google::Apis::Core::Hashable
      
        # ------------------------------------------------------------------------------
        # ## Breakpoint (the resource) Represents the breakpoint specification, status
        # and results.
        # Corresponds to the JSON property `breakpoint`
        # @return [Google::Apis::ClouddebuggerV2::Breakpoint]
        attr_accessor :breakpoint
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @breakpoint = args[:breakpoint] if args.key?(:breakpoint)
        end
      end
      
      # A SourceContext is a reference to a tree of files. A SourceContext together
      # with a path point to a unique revision of a single file or directory.
      class SourceContext
        include Google::Apis::Core::Hashable
      
        # A CloudRepoSourceContext denotes a particular revision in a cloud repo (a repo
        # hosted by the Google Cloud Platform).
        # Corresponds to the JSON property `cloudRepo`
        # @return [Google::Apis::ClouddebuggerV2::CloudRepoSourceContext]
        attr_accessor :cloud_repo
      
        # A CloudWorkspaceSourceContext denotes a workspace at a particular snapshot.
        # Corresponds to the JSON property `cloudWorkspace`
        # @return [Google::Apis::ClouddebuggerV2::CloudWorkspaceSourceContext]
        attr_accessor :cloud_workspace
      
        # A SourceContext referring to a Gerrit project.
        # Corresponds to the JSON property `gerrit`
        # @return [Google::Apis::ClouddebuggerV2::GerritSourceContext]
        attr_accessor :gerrit
      
        # A GitSourceContext denotes a particular revision in a third party Git
        # repository (e.g. GitHub).
        # Corresponds to the JSON property `git`
        # @return [Google::Apis::ClouddebuggerV2::GitSourceContext]
        attr_accessor :git
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cloud_repo = args[:cloud_repo] if args.key?(:cloud_repo)
          @cloud_workspace = args[:cloud_workspace] if args.key?(:cloud_workspace)
          @gerrit = args[:gerrit] if args.key?(:gerrit)
          @git = args[:git] if args.key?(:git)
        end
      end
      
      # Represents a location in the source code.
      class SourceLocation
        include Google::Apis::Core::Hashable
      
        # Column within a line. The first column in a line as the value `1`. Agents that
        # do not support setting breakpoints on specific columns ignore this field.
        # Corresponds to the JSON property `column`
        # @return [Fixnum]
        attr_accessor :column
      
        # Line inside the file. The first line in the file has the value `1`.
        # Corresponds to the JSON property `line`
        # @return [Fixnum]
        attr_accessor :line
      
        # Path to the source file within the source context of the target binary.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @column = args[:column] if args.key?(:column)
          @line = args[:line] if args.key?(:line)
          @path = args[:path] if args.key?(:path)
        end
      end
      
      # Represents a stack frame context.
      class StackFrame
        include Google::Apis::Core::Hashable
      
        # Set of arguments passed to this function. Note that this might not be
        # populated for all stack frames.
        # Corresponds to the JSON property `arguments`
        # @return [Array<Google::Apis::ClouddebuggerV2::Variable>]
        attr_accessor :arguments
      
        # Demangled function name at the call site.
        # Corresponds to the JSON property `function`
        # @return [String]
        attr_accessor :function
      
        # Set of local variables at the stack frame location. Note that this might not
        # be populated for all stack frames.
        # Corresponds to the JSON property `locals`
        # @return [Array<Google::Apis::ClouddebuggerV2::Variable>]
        attr_accessor :locals
      
        # Represents a location in the source code.
        # Corresponds to the JSON property `location`
        # @return [Google::Apis::ClouddebuggerV2::SourceLocation]
        attr_accessor :location
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @arguments = args[:arguments] if args.key?(:arguments)
          @function = args[:function] if args.key?(:function)
          @locals = args[:locals] if args.key?(:locals)
          @location = args[:location] if args.key?(:location)
        end
      end
      
      # Represents a contextual status message. The message can indicate an error or
      # informational status, and refer to specific parts of the containing object.
      # For example, the `Breakpoint.status` field can indicate an error referring to
      # the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`.
      class StatusMessage
        include Google::Apis::Core::Hashable
      
        # Represents a message with parameters.
        # Corresponds to the JSON property `description`
        # @return [Google::Apis::ClouddebuggerV2::FormatMessage]
        attr_accessor :description
      
        # Distinguishes errors from informational messages.
        # Corresponds to the JSON property `isError`
        # @return [Boolean]
        attr_accessor :is_error
        alias_method :is_error?, :is_error
      
        # Reference to which the message applies.
        # Corresponds to the JSON property `refersTo`
        # @return [String]
        attr_accessor :refers_to
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @is_error = args[:is_error] if args.key?(:is_error)
          @refers_to = args[:refers_to] if args.key?(:refers_to)
        end
      end
      
      # Request to update an active breakpoint.
      class UpdateActiveBreakpointRequest
        include Google::Apis::Core::Hashable
      
        # ------------------------------------------------------------------------------
        # ## Breakpoint (the resource) Represents the breakpoint specification, status
        # and results.
        # Corresponds to the JSON property `breakpoint`
        # @return [Google::Apis::ClouddebuggerV2::Breakpoint]
        attr_accessor :breakpoint
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @breakpoint = args[:breakpoint] if args.key?(:breakpoint)
        end
      end
      
      # Response for updating an active breakpoint. The message is defined to allow
      # future extensions.
      class UpdateActiveBreakpointResponse
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Represents a variable or an argument possibly of a compound object type. Note
      # how the following variables are represented: 1) A simple variable: int x = 5 `
      # name: "x", value: "5", type: "int" ` // Captured variable 2) A compound object:
      # struct T ` int m1; int m2; `; T x = ` 3, 7 `; ` // Captured variable name: "x"
      # , type: "T", members ` name: "m1", value: "3", type: "int" `, members ` name: "
      # m2", value: "7", type: "int" ` ` 3) A pointer where the pointee was captured:
      # T x = ` 3, 7 `; T* p = &x; ` // Captured variable name: "p", type: "T*", value:
      # "0x00500500", members ` name: "m1", value: "3", type: "int" `, members ` name:
      # "m2", value: "7", type: "int" ` ` 4) A pointer where the pointee was not
      # captured: T* p = new T; ` // Captured variable name: "p", type: "T*", value: "
      # 0x00400400" status ` is_error: true, description ` format: "unavailable" ` ` `
      # The status should describe the reason for the missing value, such as ``, ``, ``
      # . Note that a null pointer should not have members. 5) An unnamed value: int*
      # p = new int(7); ` // Captured variable name: "p", value: "0x00500500", type: "
      # int*", members ` value: "7", type: "int" ` ` 6) An unnamed pointer where the
      # pointee was not captured: int* p = new int(7); int** pp = &p; ` // Captured
      # variable name: "pp", value: "0x00500500", type: "int**", members ` value: "
      # 0x00400400", type: "int*" status ` is_error: true, description: ` format: "
      # unavailable" ` ` ` ` ` To optimize computation, memory and network traffic,
      # variables that repeat in the output multiple times can be stored once in a
      # shared variable table and be referenced using the `var_table_index` field. The
      # variables stored in the shared table are nameless and are essentially a
      # partition of the complete variable. To reconstruct the complete variable,
      # merge the referencing variable with the referenced variable. When using the
      # shared variable table, the following variables: T x = ` 3, 7 `; T* p = &x; T&
      # r = x; ` name: "x", var_table_index: 3, type: "T" ` // Captured variables `
      # name: "p", value "0x00500500", type="T*", var_table_index: 3 ` ` name: "r",
      # type="T&", var_table_index: 3 ` ` // Shared variable table entry #3: members `
      # name: "m1", value: "3", type: "int" `, members ` name: "m2", value: "7", type:
      # "int" ` ` Note that the pointer address is stored with the referencing
      # variable and not with the referenced variable. This allows the referenced
      # variable to be shared between pointers and references. The type field is
      # optional. The debugger agent may or may not support it.
      class Variable
        include Google::Apis::Core::Hashable
      
        # Members contained or pointed to by the variable.
        # Corresponds to the JSON property `members`
        # @return [Array<Google::Apis::ClouddebuggerV2::Variable>]
        attr_accessor :members
      
        # Name of the variable, if any.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Represents a contextual status message. The message can indicate an error or
        # informational status, and refer to specific parts of the containing object.
        # For example, the `Breakpoint.status` field can indicate an error referring to
        # the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ClouddebuggerV2::StatusMessage]
        attr_accessor :status
      
        # Variable type (e.g. `MyClass`). If the variable is split with `var_table_index`
        # , `type` goes next to `value`. The interpretation of a type is agent specific.
        # It is recommended to include the dynamic type rather than a static type of an
        # object.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Simple value of the variable.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        # Reference to a variable in the shared variable table. More than one variable
        # can reference the same variable in the table. The `var_table_index` field is
        # an index into `variable_table` in Breakpoint.
        # Corresponds to the JSON property `varTableIndex`
        # @return [Fixnum]
        attr_accessor :var_table_index
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @members = args[:members] if args.key?(:members)
          @name = args[:name] if args.key?(:name)
          @status = args[:status] if args.key?(:status)
          @type = args[:type] if args.key?(:type)
          @value = args[:value] if args.key?(:value)
          @var_table_index = args[:var_table_index] if args.key?(:var_table_index)
        end
      end
    end
  end
end
