# 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 DriveactivityV2
      
      # Information about the action.
      class Action
        include Google::Apis::Core::Hashable
      
        # The actor of a Drive activity.
        # Corresponds to the JSON property `actor`
        # @return [Google::Apis::DriveactivityV2::Actor]
        attr_accessor :actor
      
        # Data describing the type and additional information of an action.
        # Corresponds to the JSON property `detail`
        # @return [Google::Apis::DriveactivityV2::ActionDetail]
        attr_accessor :detail
      
        # Information about the target of activity. For more information on how activity
        # history is shared with users, see [Activity history visibility](https://
        # developers.google.com/workspace/drive/activity/v2#activityhistory).
        # Corresponds to the JSON property `target`
        # @return [Google::Apis::DriveactivityV2::Target]
        attr_accessor :target
      
        # Information about time ranges.
        # Corresponds to the JSON property `timeRange`
        # @return [Google::Apis::DriveactivityV2::TimeRange]
        attr_accessor :time_range
      
        # The action occurred at this specific time.
        # Corresponds to the JSON property `timestamp`
        # @return [String]
        attr_accessor :timestamp
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @actor = args[:actor] if args.key?(:actor)
          @detail = args[:detail] if args.key?(:detail)
          @target = args[:target] if args.key?(:target)
          @time_range = args[:time_range] if args.key?(:time_range)
          @timestamp = args[:timestamp] if args.key?(:timestamp)
        end
      end
      
      # Data describing the type and additional information of an action.
      class ActionDetail
        include Google::Apis::Core::Hashable
      
        # Label changes that were made on the Target.
        # Corresponds to the JSON property `appliedLabelChange`
        # @return [Google::Apis::DriveactivityV2::AppliedLabelChange]
        attr_accessor :applied_label_change
      
        # A change about comments on an object.
        # Corresponds to the JSON property `comment`
        # @return [Google::Apis::DriveactivityV2::Comment]
        attr_accessor :comment
      
        # An object was created.
        # Corresponds to the JSON property `create`
        # @return [Google::Apis::DriveactivityV2::Create]
        attr_accessor :create
      
        # An object was deleted.
        # Corresponds to the JSON property `delete`
        # @return [Google::Apis::DriveactivityV2::Delete]
        attr_accessor :delete
      
        # A change in the object's data leak prevention status.
        # Corresponds to the JSON property `dlpChange`
        # @return [Google::Apis::DriveactivityV2::DataLeakPreventionChange]
        attr_accessor :dlp_change
      
        # An empty message indicating an object was edited.
        # Corresponds to the JSON property `edit`
        # @return [Google::Apis::DriveactivityV2::Edit]
        attr_accessor :edit
      
        # An object was moved.
        # Corresponds to the JSON property `move`
        # @return [Google::Apis::DriveactivityV2::Move]
        attr_accessor :move
      
        # A change of the permission setting on an item.
        # Corresponds to the JSON property `permissionChange`
        # @return [Google::Apis::DriveactivityV2::PermissionChange]
        attr_accessor :permission_change
      
        # Activity in applications other than Drive.
        # Corresponds to the JSON property `reference`
        # @return [Google::Apis::DriveactivityV2::ApplicationReference]
        attr_accessor :reference
      
        # An object was renamed.
        # Corresponds to the JSON property `rename`
        # @return [Google::Apis::DriveactivityV2::Rename]
        attr_accessor :rename
      
        # A deleted object was restored.
        # Corresponds to the JSON property `restore`
        # @return [Google::Apis::DriveactivityV2::Restore]
        attr_accessor :restore
      
        # Information about settings changes.
        # Corresponds to the JSON property `settingsChange`
        # @return [Google::Apis::DriveactivityV2::SettingsChange]
        attr_accessor :settings_change
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @applied_label_change = args[:applied_label_change] if args.key?(:applied_label_change)
          @comment = args[:comment] if args.key?(:comment)
          @create = args[:create] if args.key?(:create)
          @delete = args[:delete] if args.key?(:delete)
          @dlp_change = args[:dlp_change] if args.key?(:dlp_change)
          @edit = args[:edit] if args.key?(:edit)
          @move = args[:move] if args.key?(:move)
          @permission_change = args[:permission_change] if args.key?(:permission_change)
          @reference = args[:reference] if args.key?(:reference)
          @rename = args[:rename] if args.key?(:rename)
          @restore = args[:restore] if args.key?(:restore)
          @settings_change = args[:settings_change] if args.key?(:settings_change)
        end
      end
      
      # The actor of a Drive activity.
      class Actor
        include Google::Apis::Core::Hashable
      
        # Empty message representing an administrator.
        # Corresponds to the JSON property `administrator`
        # @return [Google::Apis::DriveactivityV2::Administrator]
        attr_accessor :administrator
      
        # Empty message representing an anonymous user or indicating the authenticated
        # user should be anonymized.
        # Corresponds to the JSON property `anonymous`
        # @return [Google::Apis::DriveactivityV2::AnonymousUser]
        attr_accessor :anonymous
      
        # Information about an impersonation, where an admin acts on behalf of an end
        # user. Information about the acting admin is not currently available.
        # Corresponds to the JSON property `impersonation`
        # @return [Google::Apis::DriveactivityV2::Impersonation]
        attr_accessor :impersonation
      
        # Event triggered by system operations instead of end users.
        # Corresponds to the JSON property `system`
        # @return [Google::Apis::DriveactivityV2::SystemEvent]
        attr_accessor :system
      
        # Information about an end user.
        # Corresponds to the JSON property `user`
        # @return [Google::Apis::DriveactivityV2::User]
        attr_accessor :user
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @administrator = args[:administrator] if args.key?(:administrator)
          @anonymous = args[:anonymous] if args.key?(:anonymous)
          @impersonation = args[:impersonation] if args.key?(:impersonation)
          @system = args[:system] if args.key?(:system)
          @user = args[:user] if args.key?(:user)
        end
      end
      
      # Empty message representing an administrator.
      class Administrator
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Empty message representing an anonymous user or indicating the authenticated
      # user should be anonymized.
      class AnonymousUser
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Represents any user (including a logged out user).
      class Anyone
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Activity in applications other than Drive.
      class ApplicationReference
        include Google::Apis::Core::Hashable
      
        # The reference type corresponding to this event.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Label changes that were made on the Target.
      class AppliedLabelChange
        include Google::Apis::Core::Hashable
      
        # Changes that were made to the Label on the Target.
        # Corresponds to the JSON property `changes`
        # @return [Array<Google::Apis::DriveactivityV2::AppliedLabelChangeDetail>]
        attr_accessor :changes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @changes = args[:changes] if args.key?(:changes)
        end
      end
      
      # A change made to a Label on the Target.
      class AppliedLabelChangeDetail
        include Google::Apis::Core::Hashable
      
        # Field Changes. Only present if `types` contains `LABEL_FIELD_VALUE_CHANGED`.
        # Corresponds to the JSON property `fieldChanges`
        # @return [Array<Google::Apis::DriveactivityV2::FieldValueChange>]
        attr_accessor :field_changes
      
        # The Label name representing the Label that changed. This name always contains
        # the revision of the Label that was used when this Action occurred. The format
        # is `labels/id@revision`.
        # Corresponds to the JSON property `label`
        # @return [String]
        attr_accessor :label
      
        # The human-readable title of the label that changed.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        # The types of changes made to the Label on the Target.
        # Corresponds to the JSON property `types`
        # @return [Array<String>]
        attr_accessor :types
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @field_changes = args[:field_changes] if args.key?(:field_changes)
          @label = args[:label] if args.key?(:label)
          @title = args[:title] if args.key?(:title)
          @types = args[:types] if args.key?(:types)
        end
      end
      
      # A comment with an assignment.
      class Assignment
        include Google::Apis::Core::Hashable
      
        # Information about an end user.
        # Corresponds to the JSON property `assignedUser`
        # @return [Google::Apis::DriveactivityV2::User]
        attr_accessor :assigned_user
      
        # The sub-type of this event.
        # Corresponds to the JSON property `subtype`
        # @return [String]
        attr_accessor :subtype
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_user = args[:assigned_user] if args.key?(:assigned_user)
          @subtype = args[:subtype] if args.key?(:subtype)
        end
      end
      
      # A change about comments on an object.
      class Comment
        include Google::Apis::Core::Hashable
      
        # A comment with an assignment.
        # Corresponds to the JSON property `assignment`
        # @return [Google::Apis::DriveactivityV2::Assignment]
        attr_accessor :assignment
      
        # Users who are mentioned in this comment.
        # Corresponds to the JSON property `mentionedUsers`
        # @return [Array<Google::Apis::DriveactivityV2::User>]
        attr_accessor :mentioned_users
      
        # A regular posted comment.
        # Corresponds to the JSON property `post`
        # @return [Google::Apis::DriveactivityV2::Post]
        attr_accessor :post
      
        # A suggestion.
        # Corresponds to the JSON property `suggestion`
        # @return [Google::Apis::DriveactivityV2::Suggestion]
        attr_accessor :suggestion
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assignment = args[:assignment] if args.key?(:assignment)
          @mentioned_users = args[:mentioned_users] if args.key?(:mentioned_users)
          @post = args[:post] if args.key?(:post)
          @suggestion = args[:suggestion] if args.key?(:suggestion)
        end
      end
      
      # How the individual activities are consolidated. If a set of activities is
      # related they can be consolidated into one combined activity, such as one actor
      # performing the same action on multiple targets, or multiple actors performing
      # the same action on a single target. The strategy defines the rules for which
      # activities are related.
      class ConsolidationStrategy
        include Google::Apis::Core::Hashable
      
        # A strategy that consolidates activities using the grouping rules from the
        # legacy V1 Activity API. Similar actions occurring within a window of time can
        # be grouped across multiple targets (such as moving a set of files at once) or
        # multiple actors (such as several users editing the same item). Grouping rules
        # for this strategy are specific to each type of action.
        # Corresponds to the JSON property `legacy`
        # @return [Google::Apis::DriveactivityV2::Legacy]
        attr_accessor :legacy
      
        # A strategy that does no consolidation of individual activities.
        # Corresponds to the JSON property `none`
        # @return [Google::Apis::DriveactivityV2::NoConsolidation]
        attr_accessor :none
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @legacy = args[:legacy] if args.key?(:legacy)
          @none = args[:none] if args.key?(:none)
        end
      end
      
      # An object was created by copying an existing object.
      class Copy
        include Google::Apis::Core::Hashable
      
        # A lightweight reference to the target of activity.
        # Corresponds to the JSON property `originalObject`
        # @return [Google::Apis::DriveactivityV2::TargetReference]
        attr_accessor :original_object
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @original_object = args[:original_object] if args.key?(:original_object)
        end
      end
      
      # An object was created.
      class Create
        include Google::Apis::Core::Hashable
      
        # An object was created by copying an existing object.
        # Corresponds to the JSON property `copy`
        # @return [Google::Apis::DriveactivityV2::Copy]
        attr_accessor :copy
      
        # An object was created from scratch.
        # Corresponds to the JSON property `new`
        # @return [Google::Apis::DriveactivityV2::New]
        attr_accessor :new
      
        # An object was uploaded into Drive.
        # Corresponds to the JSON property `upload`
        # @return [Google::Apis::DriveactivityV2::Upload]
        attr_accessor :upload
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @copy = args[:copy] if args.key?(:copy)
          @new = args[:new] if args.key?(:new)
          @upload = args[:upload] if args.key?(:upload)
        end
      end
      
      # A change in the object's data leak prevention status.
      class DataLeakPreventionChange
        include Google::Apis::Core::Hashable
      
        # The type of Data Leak Prevention (DLP) change.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Wrapper for Date Field value.
      class Date
        include Google::Apis::Core::Hashable
      
        # Date value.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # An object was deleted.
      class Delete
        include Google::Apis::Core::Hashable
      
        # The type of delete action taken.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # A user whose account has since been deleted.
      class DeletedUser
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Information about a domain.
      class Domain
        include Google::Apis::Core::Hashable
      
        # An opaque string used to identify this domain.
        # Corresponds to the JSON property `legacyId`
        # @return [String]
        attr_accessor :legacy_id
      
        # The name of the domain, e.g. `google.com`.
        # 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)
          @legacy_id = args[:legacy_id] if args.key?(:legacy_id)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Information about a shared drive.
      class Drive
        include Google::Apis::Core::Hashable
      
        # The resource name of the shared drive. The format is `COLLECTION_ID/DRIVE_ID`.
        # Clients should not assume a specific collection ID for this resource name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A Drive item, such as a file or folder.
        # Corresponds to the JSON property `root`
        # @return [Google::Apis::DriveactivityV2::DriveItem]
        attr_accessor :root
      
        # The title of the shared drive.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @root = args[:root] if args.key?(:root)
          @title = args[:title] if args.key?(:title)
        end
      end
      
      # A single Drive activity comprising one or more Actions by one or more Actors
      # on one or more Targets. Some Action groupings occur spontaneously, such as
      # moving an item into a shared folder triggering a permission change. Other
      # groupings of related Actions, such as multiple Actors editing one item or
      # moving multiple files into a new folder, are controlled by the selection of a
      # ConsolidationStrategy in the QueryDriveActivityRequest.
      class DriveActivity
        include Google::Apis::Core::Hashable
      
        # Details on all actions in this activity.
        # Corresponds to the JSON property `actions`
        # @return [Array<Google::Apis::DriveactivityV2::Action>]
        attr_accessor :actions
      
        # All actor(s) responsible for the activity.
        # Corresponds to the JSON property `actors`
        # @return [Array<Google::Apis::DriveactivityV2::Actor>]
        attr_accessor :actors
      
        # Data describing the type and additional information of an action.
        # Corresponds to the JSON property `primaryActionDetail`
        # @return [Google::Apis::DriveactivityV2::ActionDetail]
        attr_accessor :primary_action_detail
      
        # All Google Drive objects this activity is about (e.g. file, folder, drive).
        # This represents the state of the target immediately after the actions occurred.
        # Corresponds to the JSON property `targets`
        # @return [Array<Google::Apis::DriveactivityV2::Target>]
        attr_accessor :targets
      
        # Information about time ranges.
        # Corresponds to the JSON property `timeRange`
        # @return [Google::Apis::DriveactivityV2::TimeRange]
        attr_accessor :time_range
      
        # The activity occurred at this specific time.
        # Corresponds to the JSON property `timestamp`
        # @return [String]
        attr_accessor :timestamp
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @actions = args[:actions] if args.key?(:actions)
          @actors = args[:actors] if args.key?(:actors)
          @primary_action_detail = args[:primary_action_detail] if args.key?(:primary_action_detail)
          @targets = args[:targets] if args.key?(:targets)
          @time_range = args[:time_range] if args.key?(:time_range)
          @timestamp = args[:timestamp] if args.key?(:timestamp)
        end
      end
      
      # A Drive item which is a file.
      class DriveFile
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # A Drive item which is a folder.
      class DriveFolder
        include Google::Apis::Core::Hashable
      
        # The type of Drive folder.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # A Drive item, such as a file or folder.
      class DriveItem
        include Google::Apis::Core::Hashable
      
        # A Drive item which is a file.
        # Corresponds to the JSON property `driveFile`
        # @return [Google::Apis::DriveactivityV2::DriveFile]
        attr_accessor :drive_file
      
        # A Drive item which is a folder.
        # Corresponds to the JSON property `driveFolder`
        # @return [Google::Apis::DriveactivityV2::DriveFolder]
        attr_accessor :drive_folder
      
        # This item is deprecated; please see `DriveFile` instead.
        # Corresponds to the JSON property `file`
        # @return [Google::Apis::DriveactivityV2::File]
        attr_accessor :file
      
        # This item is deprecated; please see `DriveFolder` instead.
        # Corresponds to the JSON property `folder`
        # @return [Google::Apis::DriveactivityV2::Folder]
        attr_accessor :folder
      
        # The MIME type of the Drive item. See https://developers.google.com/workspace/
        # drive/v3/web/mime-types.
        # Corresponds to the JSON property `mimeType`
        # @return [String]
        attr_accessor :mime_type
      
        # The target Drive item. The format is `items/ITEM_ID`.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Information about the owner of a Drive item.
        # Corresponds to the JSON property `owner`
        # @return [Google::Apis::DriveactivityV2::Owner]
        attr_accessor :owner
      
        # The title of the Drive item.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @drive_file = args[:drive_file] if args.key?(:drive_file)
          @drive_folder = args[:drive_folder] if args.key?(:drive_folder)
          @file = args[:file] if args.key?(:file)
          @folder = args[:folder] if args.key?(:folder)
          @mime_type = args[:mime_type] if args.key?(:mime_type)
          @name = args[:name] if args.key?(:name)
          @owner = args[:owner] if args.key?(:owner)
          @title = args[:title] if args.key?(:title)
        end
      end
      
      # A lightweight reference to a Drive item, such as a file or folder.
      class DriveItemReference
        include Google::Apis::Core::Hashable
      
        # A Drive item which is a file.
        # Corresponds to the JSON property `driveFile`
        # @return [Google::Apis::DriveactivityV2::DriveFile]
        attr_accessor :drive_file
      
        # A Drive item which is a folder.
        # Corresponds to the JSON property `driveFolder`
        # @return [Google::Apis::DriveactivityV2::DriveFolder]
        attr_accessor :drive_folder
      
        # This item is deprecated; please see `DriveFile` instead.
        # Corresponds to the JSON property `file`
        # @return [Google::Apis::DriveactivityV2::File]
        attr_accessor :file
      
        # This item is deprecated; please see `DriveFolder` instead.
        # Corresponds to the JSON property `folder`
        # @return [Google::Apis::DriveactivityV2::Folder]
        attr_accessor :folder
      
        # The target Drive item. The format is `items/ITEM_ID`.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The title of the Drive item.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @drive_file = args[:drive_file] if args.key?(:drive_file)
          @drive_folder = args[:drive_folder] if args.key?(:drive_folder)
          @file = args[:file] if args.key?(:file)
          @folder = args[:folder] if args.key?(:folder)
          @name = args[:name] if args.key?(:name)
          @title = args[:title] if args.key?(:title)
        end
      end
      
      # A lightweight reference to a shared drive.
      class DriveReference
        include Google::Apis::Core::Hashable
      
        # The resource name of the shared drive. The format is `COLLECTION_ID/DRIVE_ID`.
        # Clients should not assume a specific collection ID for this resource name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The title of the shared drive.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @title = args[:title] if args.key?(:title)
        end
      end
      
      # An empty message indicating an object was edited.
      class Edit
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Contains a value of a Field.
      class FieldValue
        include Google::Apis::Core::Hashable
      
        # Wrapper for Date Field value.
        # Corresponds to the JSON property `date`
        # @return [Google::Apis::DriveactivityV2::Date]
        attr_accessor :date
      
        # Wrapper for Integer Field value.
        # Corresponds to the JSON property `integer`
        # @return [Google::Apis::DriveactivityV2::Integer]
        attr_accessor :integer
      
        # Wrapper for Selection Field value as combined value/display_name pair for
        # selected choice.
        # Corresponds to the JSON property `selection`
        # @return [Google::Apis::DriveactivityV2::Selection]
        attr_accessor :selection
      
        # Wrapper for SelectionList Field value.
        # Corresponds to the JSON property `selectionList`
        # @return [Google::Apis::DriveactivityV2::SelectionList]
        attr_accessor :selection_list
      
        # Wrapper for Text Field value.
        # Corresponds to the JSON property `text`
        # @return [Google::Apis::DriveactivityV2::Text]
        attr_accessor :text
      
        # Wrapper for Text List Field value.
        # Corresponds to the JSON property `textList`
        # @return [Google::Apis::DriveactivityV2::TextList]
        attr_accessor :text_list
      
        # Wrapper for User Field value.
        # Corresponds to the JSON property `user`
        # @return [Google::Apis::DriveactivityV2::SingleUser]
        attr_accessor :user
      
        # Wrapper for UserList Field value.
        # Corresponds to the JSON property `userList`
        # @return [Google::Apis::DriveactivityV2::UserList]
        attr_accessor :user_list
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @date = args[:date] if args.key?(:date)
          @integer = args[:integer] if args.key?(:integer)
          @selection = args[:selection] if args.key?(:selection)
          @selection_list = args[:selection_list] if args.key?(:selection_list)
          @text = args[:text] if args.key?(:text)
          @text_list = args[:text_list] if args.key?(:text_list)
          @user = args[:user] if args.key?(:user)
          @user_list = args[:user_list] if args.key?(:user_list)
        end
      end
      
      # Change to a Field value.
      class FieldValueChange
        include Google::Apis::Core::Hashable
      
        # The human-readable display name for this field.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # The ID of this field. Field IDs are unique within a Label.
        # Corresponds to the JSON property `fieldId`
        # @return [String]
        attr_accessor :field_id
      
        # Contains a value of a Field.
        # Corresponds to the JSON property `newValue`
        # @return [Google::Apis::DriveactivityV2::FieldValue]
        attr_accessor :new_value
      
        # Contains a value of a Field.
        # Corresponds to the JSON property `oldValue`
        # @return [Google::Apis::DriveactivityV2::FieldValue]
        attr_accessor :old_value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @field_id = args[:field_id] if args.key?(:field_id)
          @new_value = args[:new_value] if args.key?(:new_value)
          @old_value = args[:old_value] if args.key?(:old_value)
        end
      end
      
      # This item is deprecated; please see `DriveFile` instead.
      class File
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # A comment on a file.
      class FileComment
        include Google::Apis::Core::Hashable
      
        # The comment in the discussion thread. This identifier is an opaque string
        # compatible with the Drive API; see https://developers.google.com/workspace/
        # drive/v3/reference/comments/get
        # Corresponds to the JSON property `legacyCommentId`
        # @return [String]
        attr_accessor :legacy_comment_id
      
        # The discussion thread to which the comment was added. This identifier is an
        # opaque string compatible with the Drive API and references the first comment
        # in a discussion; see https://developers.google.com/workspace/drive/v3/
        # reference/comments/get
        # Corresponds to the JSON property `legacyDiscussionId`
        # @return [String]
        attr_accessor :legacy_discussion_id
      
        # The link to the discussion thread containing this comment, for example, `https:
        # //docs.google.com/DOCUMENT_ID/edit?disco=THREAD_ID`.
        # Corresponds to the JSON property `linkToDiscussion`
        # @return [String]
        attr_accessor :link_to_discussion
      
        # A Drive item, such as a file or folder.
        # Corresponds to the JSON property `parent`
        # @return [Google::Apis::DriveactivityV2::DriveItem]
        attr_accessor :parent
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @legacy_comment_id = args[:legacy_comment_id] if args.key?(:legacy_comment_id)
          @legacy_discussion_id = args[:legacy_discussion_id] if args.key?(:legacy_discussion_id)
          @link_to_discussion = args[:link_to_discussion] if args.key?(:link_to_discussion)
          @parent = args[:parent] if args.key?(:parent)
        end
      end
      
      # This item is deprecated; please see `DriveFolder` instead.
      class Folder
        include Google::Apis::Core::Hashable
      
        # This field is deprecated; please see `DriveFolder.type` instead.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Information about a group.
      class Group
        include Google::Apis::Core::Hashable
      
        # The email address of the group.
        # Corresponds to the JSON property `email`
        # @return [String]
        attr_accessor :email
      
        # The title of the group.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @email = args[:email] if args.key?(:email)
          @title = args[:title] if args.key?(:title)
        end
      end
      
      # Information about an impersonation, where an admin acts on behalf of an end
      # user. Information about the acting admin is not currently available.
      class Impersonation
        include Google::Apis::Core::Hashable
      
        # Information about an end user.
        # Corresponds to the JSON property `impersonatedUser`
        # @return [Google::Apis::DriveactivityV2::User]
        attr_accessor :impersonated_user
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @impersonated_user = args[:impersonated_user] if args.key?(:impersonated_user)
        end
      end
      
      # Wrapper for Integer Field value.
      class Integer
        include Google::Apis::Core::Hashable
      
        # Integer value.
        # Corresponds to the JSON property `value`
        # @return [Fixnum]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # A known user.
      class KnownUser
        include Google::Apis::Core::Hashable
      
        # True if this is the user making the request.
        # Corresponds to the JSON property `isCurrentUser`
        # @return [Boolean]
        attr_accessor :is_current_user
        alias_method :is_current_user?, :is_current_user
      
        # The identifier for this user that can be used with the People API to get more
        # information. The format is `people/ACCOUNT_ID`. See https://developers.google.
        # com/people/.
        # Corresponds to the JSON property `personName`
        # @return [String]
        attr_accessor :person_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @is_current_user = args[:is_current_user] if args.key?(:is_current_user)
          @person_name = args[:person_name] if args.key?(:person_name)
        end
      end
      
      # A strategy that consolidates activities using the grouping rules from the
      # legacy V1 Activity API. Similar actions occurring within a window of time can
      # be grouped across multiple targets (such as moving a set of files at once) or
      # multiple actors (such as several users editing the same item). Grouping rules
      # for this strategy are specific to each type of action.
      class Legacy
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # An object was moved.
      class Move
        include Google::Apis::Core::Hashable
      
        # The added parent object(s).
        # Corresponds to the JSON property `addedParents`
        # @return [Array<Google::Apis::DriveactivityV2::TargetReference>]
        attr_accessor :added_parents
      
        # The removed parent object(s).
        # Corresponds to the JSON property `removedParents`
        # @return [Array<Google::Apis::DriveactivityV2::TargetReference>]
        attr_accessor :removed_parents
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @added_parents = args[:added_parents] if args.key?(:added_parents)
          @removed_parents = args[:removed_parents] if args.key?(:removed_parents)
        end
      end
      
      # An object was created from scratch.
      class New
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # A strategy that does no consolidation of individual activities.
      class NoConsolidation
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Information about the owner of a Drive item.
      class Owner
        include Google::Apis::Core::Hashable
      
        # Information about a domain.
        # Corresponds to the JSON property `domain`
        # @return [Google::Apis::DriveactivityV2::Domain]
        attr_accessor :domain
      
        # A lightweight reference to a shared drive.
        # Corresponds to the JSON property `drive`
        # @return [Google::Apis::DriveactivityV2::DriveReference]
        attr_accessor :drive
      
        # This item is deprecated; please see `DriveReference` instead.
        # Corresponds to the JSON property `teamDrive`
        # @return [Google::Apis::DriveactivityV2::TeamDriveReference]
        attr_accessor :team_drive
      
        # Information about an end user.
        # Corresponds to the JSON property `user`
        # @return [Google::Apis::DriveactivityV2::User]
        attr_accessor :user
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @domain = args[:domain] if args.key?(:domain)
          @drive = args[:drive] if args.key?(:drive)
          @team_drive = args[:team_drive] if args.key?(:team_drive)
          @user = args[:user] if args.key?(:user)
        end
      end
      
      # The permission setting of an object.
      class Permission
        include Google::Apis::Core::Hashable
      
        # If true, the item can be discovered (e.g. in the user's "Shared with me"
        # collection) without needing a link to the item.
        # Corresponds to the JSON property `allowDiscovery`
        # @return [Boolean]
        attr_accessor :allow_discovery
        alias_method :allow_discovery?, :allow_discovery
      
        # Represents any user (including a logged out user).
        # Corresponds to the JSON property `anyone`
        # @return [Google::Apis::DriveactivityV2::Anyone]
        attr_accessor :anyone
      
        # Information about a domain.
        # Corresponds to the JSON property `domain`
        # @return [Google::Apis::DriveactivityV2::Domain]
        attr_accessor :domain
      
        # Information about a group.
        # Corresponds to the JSON property `group`
        # @return [Google::Apis::DriveactivityV2::Group]
        attr_accessor :group
      
        # Indicates the [Google Drive permissions role](https://developers.google.com/
        # workspace/drive/web/manage-sharing#roles). The role determines a user's
        # ability to read, write, and comment on items.
        # Corresponds to the JSON property `role`
        # @return [String]
        attr_accessor :role
      
        # Information about an end user.
        # Corresponds to the JSON property `user`
        # @return [Google::Apis::DriveactivityV2::User]
        attr_accessor :user
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @allow_discovery = args[:allow_discovery] if args.key?(:allow_discovery)
          @anyone = args[:anyone] if args.key?(:anyone)
          @domain = args[:domain] if args.key?(:domain)
          @group = args[:group] if args.key?(:group)
          @role = args[:role] if args.key?(:role)
          @user = args[:user] if args.key?(:user)
        end
      end
      
      # A change of the permission setting on an item.
      class PermissionChange
        include Google::Apis::Core::Hashable
      
        # The set of permissions added by this change.
        # Corresponds to the JSON property `addedPermissions`
        # @return [Array<Google::Apis::DriveactivityV2::Permission>]
        attr_accessor :added_permissions
      
        # The set of permissions removed by this change.
        # Corresponds to the JSON property `removedPermissions`
        # @return [Array<Google::Apis::DriveactivityV2::Permission>]
        attr_accessor :removed_permissions
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @added_permissions = args[:added_permissions] if args.key?(:added_permissions)
          @removed_permissions = args[:removed_permissions] if args.key?(:removed_permissions)
        end
      end
      
      # A regular posted comment.
      class Post
        include Google::Apis::Core::Hashable
      
        # The sub-type of this event.
        # Corresponds to the JSON property `subtype`
        # @return [String]
        attr_accessor :subtype
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @subtype = args[:subtype] if args.key?(:subtype)
        end
      end
      
      # The request message for querying Drive activity.
      class QueryDriveActivityRequest
        include Google::Apis::Core::Hashable
      
        # Return activities for this Drive folder, plus all children and descendants.
        # The format is `items/ITEM_ID`.
        # Corresponds to the JSON property `ancestorName`
        # @return [String]
        attr_accessor :ancestor_name
      
        # How the individual activities are consolidated. If a set of activities is
        # related they can be consolidated into one combined activity, such as one actor
        # performing the same action on multiple targets, or multiple actors performing
        # the same action on a single target. The strategy defines the rules for which
        # activities are related.
        # Corresponds to the JSON property `consolidationStrategy`
        # @return [Google::Apis::DriveactivityV2::ConsolidationStrategy]
        attr_accessor :consolidation_strategy
      
        # The filtering for items returned from this query request. The format of the
        # filter string is a sequence of expressions, joined by an optional "AND", where
        # each expression is of the form "field operator value". Supported fields: - `
        # time`: Uses numerical operators on date values either in terms of milliseconds
        # since Jan 1, 1970 or in RFC 3339 format. Examples: - `time > 1452409200000 AND
        # time <= 1492812924310` - `time >= "2016-01-10T01:02:03-05:00"` - `detail.
        # action_detail_case`: Uses the "has" operator (:) and either a singular value
        # or a list of allowed action types enclosed in parentheses, separated by a
        # space. To exclude a result from the response, prepend a hyphen (`-`) to the
        # beginning of the filter string. Examples: - `detail.action_detail_case:RENAME`
        # - `detail.action_detail_case:(CREATE RESTORE)` - `-detail.action_detail_case:
        # MOVE`
        # Corresponds to the JSON property `filter`
        # @return [String]
        attr_accessor :filter
      
        # Return activities for this Drive item. The format is `items/ITEM_ID`.
        # Corresponds to the JSON property `itemName`
        # @return [String]
        attr_accessor :item_name
      
        # The minimum number of activities desired in the response; the server attempts
        # to return at least this quantity. The server may also return fewer activities
        # if it has a partial response ready before the request times out. If not set, a
        # default value is used.
        # Corresponds to the JSON property `pageSize`
        # @return [Fixnum]
        attr_accessor :page_size
      
        # The token identifies which page of results to return. Set this to the
        # next_page_token value returned from a previous query to obtain the following
        # page of results. If not set, the first page of results is returned.
        # Corresponds to the JSON property `pageToken`
        # @return [String]
        attr_accessor :page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ancestor_name = args[:ancestor_name] if args.key?(:ancestor_name)
          @consolidation_strategy = args[:consolidation_strategy] if args.key?(:consolidation_strategy)
          @filter = args[:filter] if args.key?(:filter)
          @item_name = args[:item_name] if args.key?(:item_name)
          @page_size = args[:page_size] if args.key?(:page_size)
          @page_token = args[:page_token] if args.key?(:page_token)
        end
      end
      
      # Response message for querying Drive activity.
      class QueryDriveActivityResponse
        include Google::Apis::Core::Hashable
      
        # List of activity requested.
        # Corresponds to the JSON property `activities`
        # @return [Array<Google::Apis::DriveactivityV2::DriveActivity>]
        attr_accessor :activities
      
        # Token to retrieve the next page of results, or empty if there are no more
        # results in the list.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @activities = args[:activities] if args.key?(:activities)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # An object was renamed.
      class Rename
        include Google::Apis::Core::Hashable
      
        # The new title of the drive object.
        # Corresponds to the JSON property `newTitle`
        # @return [String]
        attr_accessor :new_title
      
        # The previous title of the drive object.
        # Corresponds to the JSON property `oldTitle`
        # @return [String]
        attr_accessor :old_title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @new_title = args[:new_title] if args.key?(:new_title)
          @old_title = args[:old_title] if args.key?(:old_title)
        end
      end
      
      # A deleted object was restored.
      class Restore
        include Google::Apis::Core::Hashable
      
        # The type of restore action taken.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Information about restriction policy changes to a feature.
      class RestrictionChange
        include Google::Apis::Core::Hashable
      
        # The feature which had a change in restriction policy.
        # Corresponds to the JSON property `feature`
        # @return [String]
        attr_accessor :feature
      
        # The restriction in place after the change.
        # Corresponds to the JSON property `newRestriction`
        # @return [String]
        attr_accessor :new_restriction
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @feature = args[:feature] if args.key?(:feature)
          @new_restriction = args[:new_restriction] if args.key?(:new_restriction)
        end
      end
      
      # Wrapper for Selection Field value as combined value/display_name pair for
      # selected choice.
      class Selection
        include Google::Apis::Core::Hashable
      
        # Selection value as human-readable display string.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Selection value as Field Choice ID.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # Wrapper for SelectionList Field value.
      class SelectionList
        include Google::Apis::Core::Hashable
      
        # Selection values.
        # Corresponds to the JSON property `values`
        # @return [Array<Google::Apis::DriveactivityV2::Selection>]
        attr_accessor :values
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @values = args[:values] if args.key?(:values)
        end
      end
      
      # Information about settings changes.
      class SettingsChange
        include Google::Apis::Core::Hashable
      
        # The set of changes made to restrictions.
        # Corresponds to the JSON property `restrictionChanges`
        # @return [Array<Google::Apis::DriveactivityV2::RestrictionChange>]
        attr_accessor :restriction_changes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @restriction_changes = args[:restriction_changes] if args.key?(:restriction_changes)
        end
      end
      
      # Wrapper for User Field value.
      class SingleUser
        include Google::Apis::Core::Hashable
      
        # User value as email.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # A suggestion.
      class Suggestion
        include Google::Apis::Core::Hashable
      
        # The sub-type of this event.
        # Corresponds to the JSON property `subtype`
        # @return [String]
        attr_accessor :subtype
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @subtype = args[:subtype] if args.key?(:subtype)
        end
      end
      
      # Event triggered by system operations instead of end users.
      class SystemEvent
        include Google::Apis::Core::Hashable
      
        # The type of the system event that may triggered activity.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Information about the target of activity. For more information on how activity
      # history is shared with users, see [Activity history visibility](https://
      # developers.google.com/workspace/drive/activity/v2#activityhistory).
      class Target
        include Google::Apis::Core::Hashable
      
        # Information about a shared drive.
        # Corresponds to the JSON property `drive`
        # @return [Google::Apis::DriveactivityV2::Drive]
        attr_accessor :drive
      
        # A Drive item, such as a file or folder.
        # Corresponds to the JSON property `driveItem`
        # @return [Google::Apis::DriveactivityV2::DriveItem]
        attr_accessor :drive_item
      
        # A comment on a file.
        # Corresponds to the JSON property `fileComment`
        # @return [Google::Apis::DriveactivityV2::FileComment]
        attr_accessor :file_comment
      
        # This item is deprecated; please see `Drive` instead.
        # Corresponds to the JSON property `teamDrive`
        # @return [Google::Apis::DriveactivityV2::TeamDrive]
        attr_accessor :team_drive
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @drive = args[:drive] if args.key?(:drive)
          @drive_item = args[:drive_item] if args.key?(:drive_item)
          @file_comment = args[:file_comment] if args.key?(:file_comment)
          @team_drive = args[:team_drive] if args.key?(:team_drive)
        end
      end
      
      # A lightweight reference to the target of activity.
      class TargetReference
        include Google::Apis::Core::Hashable
      
        # A lightweight reference to a shared drive.
        # Corresponds to the JSON property `drive`
        # @return [Google::Apis::DriveactivityV2::DriveReference]
        attr_accessor :drive
      
        # A lightweight reference to a Drive item, such as a file or folder.
        # Corresponds to the JSON property `driveItem`
        # @return [Google::Apis::DriveactivityV2::DriveItemReference]
        attr_accessor :drive_item
      
        # This item is deprecated; please see `DriveReference` instead.
        # Corresponds to the JSON property `teamDrive`
        # @return [Google::Apis::DriveactivityV2::TeamDriveReference]
        attr_accessor :team_drive
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @drive = args[:drive] if args.key?(:drive)
          @drive_item = args[:drive_item] if args.key?(:drive_item)
          @team_drive = args[:team_drive] if args.key?(:team_drive)
        end
      end
      
      # This item is deprecated; please see `Drive` instead.
      class TeamDrive
        include Google::Apis::Core::Hashable
      
        # This field is deprecated; please see `Drive.name` instead.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A Drive item, such as a file or folder.
        # Corresponds to the JSON property `root`
        # @return [Google::Apis::DriveactivityV2::DriveItem]
        attr_accessor :root
      
        # This field is deprecated; please see `Drive.title` instead.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @root = args[:root] if args.key?(:root)
          @title = args[:title] if args.key?(:title)
        end
      end
      
      # This item is deprecated; please see `DriveReference` instead.
      class TeamDriveReference
        include Google::Apis::Core::Hashable
      
        # This field is deprecated; please see `DriveReference.name` instead.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # This field is deprecated; please see `DriveReference.title` instead.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @title = args[:title] if args.key?(:title)
        end
      end
      
      # Wrapper for Text Field value.
      class Text
        include Google::Apis::Core::Hashable
      
        # Value of Text Field.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # Wrapper for Text List Field value.
      class TextList
        include Google::Apis::Core::Hashable
      
        # Text values.
        # Corresponds to the JSON property `values`
        # @return [Array<Google::Apis::DriveactivityV2::Text>]
        attr_accessor :values
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @values = args[:values] if args.key?(:values)
        end
      end
      
      # Information about time ranges.
      class TimeRange
        include Google::Apis::Core::Hashable
      
        # The end of the time range.
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # The start of the time range.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @end_time = args[:end_time] if args.key?(:end_time)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # A user about whom nothing is currently known.
      class UnknownUser
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # An object was uploaded into Drive.
      class Upload
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Information about an end user.
      class User
        include Google::Apis::Core::Hashable
      
        # A user whose account has since been deleted.
        # Corresponds to the JSON property `deletedUser`
        # @return [Google::Apis::DriveactivityV2::DeletedUser]
        attr_accessor :deleted_user
      
        # A known user.
        # Corresponds to the JSON property `knownUser`
        # @return [Google::Apis::DriveactivityV2::KnownUser]
        attr_accessor :known_user
      
        # A user about whom nothing is currently known.
        # Corresponds to the JSON property `unknownUser`
        # @return [Google::Apis::DriveactivityV2::UnknownUser]
        attr_accessor :unknown_user
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deleted_user = args[:deleted_user] if args.key?(:deleted_user)
          @known_user = args[:known_user] if args.key?(:known_user)
          @unknown_user = args[:unknown_user] if args.key?(:unknown_user)
        end
      end
      
      # Wrapper for UserList Field value.
      class UserList
        include Google::Apis::Core::Hashable
      
        # User values.
        # Corresponds to the JSON property `values`
        # @return [Array<Google::Apis::DriveactivityV2::SingleUser>]
        attr_accessor :values
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @values = args[:values] if args.key?(:values)
        end
      end
    end
  end
end
