# Copyright 2019 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.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Drive.V3.Model.FileCapabilities do
  @moduledoc """
  Output only. Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.

  ## Attributes

  *   `canAddMyDriveParent` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can add a parent for the item without removing an existing parent in the same request. Not populated for shared drive files.
  *   `canModifyOwnerContentRestriction` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can add or modify content restrictions which are owner restricted.
  *   `canMoveItemWithinDrive` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can move this item within this drive. Note that a request to change the parent of the item may still fail depending on the new parent that is being added and the parent that is being removed.
  *   `canChangeSecurityUpdateEnabled` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can change the securityUpdateEnabled field on link share metadata.
  *   `canMoveItemWithinTeamDrive` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only. Use `canMoveItemWithinDrive` instead.
  *   `canShare` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can modify the sharing settings for this file.
  *   `canComment` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can comment on this file.
  *   `canModifyContentRestriction` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only. Use one of `canModifyEditorContentRestriction`, `canModifyOwnerContentRestriction` or `canRemoveContentRestriction`.
  *   `canAddChildren` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can add children to this folder. This is always false when the item is not a folder.
  *   `canMoveChildrenOutOfTeamDrive` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only. Use `canMoveChildrenOutOfDrive` instead.
  *   `canTrashChildren` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can trash children of this folder. This is false when the item is not a folder. Only populated for items in shared drives.
  *   `canUntrash` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can restore this file from trash.
  *   `canModifyContent` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can modify the content of this file.
  *   `canDownload` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can download this file.
  *   `canReadLabels` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can read the labels on the file.
  *   `canChangeViewersCanCopyContent` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only.
  *   `canMoveItemOutOfTeamDrive` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only. Use `canMoveItemOutOfDrive` instead.
  *   `canEdit` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can edit this file. Other factors may limit the type of changes a user can make to a file. For example, see `canChangeCopyRequiresWriterPermission` or `canModifyContent`.
  *   `canMoveItemIntoTeamDrive` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only. Use `canMoveItemOutOfDrive` instead.
  *   `canMoveTeamDriveItem` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only. Use `canMoveItemWithinDrive` or `canMoveItemOutOfDrive` instead.
  *   `canMoveItemOutOfDrive` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can move this item outside of this drive by changing its parent. Note that a request to change the parent of the item may still fail depending on the new parent that is being added.
  *   `canMoveChildrenWithinDrive` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can move children of this folder within this drive. This is false when the item is not a folder. Note that a request to move the child may still fail depending on the current user's access to the child and to the destination folder.
  *   `canMoveChildrenOutOfDrive` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can move children of this folder outside of the shared drive. This is false when the item is not a folder. Only populated for items in shared drives.
  *   `canMoveChildrenWithinTeamDrive` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only. Use `canMoveChildrenWithinDrive` instead.
  *   `canTrash` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can move this file to trash.
  *   `canRemoveMyDriveParent` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can remove a parent from the item without adding another parent in the same request. Not populated for shared drive files.
  *   `canRemoveContentRestriction` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether there is a content restriction on the file that can be removed by the current user.
  *   `canAcceptOwnership` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user is the pending owner of the file. Not populated for shared drive files.
  *   `canModifyEditorContentRestriction` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can add or modify content restrictions on the file which are editor restricted.
  *   `canModifyLabels` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can modify the labels on the file.
  *   `canRemoveChildren` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can remove children from this folder. This is always false when the item is not a folder. For a folder in a shared drive, use `canDeleteChildren` or `canTrashChildren` instead.
  *   `canAddFolderFromAnotherDrive` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can add a folder from another drive (different shared drive or My Drive) to this folder. This is false when the item is not a folder. Only populated for items in shared drives.
  *   `canDelete` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can delete this file.
  *   `canCopy` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can copy this file. For an item in a shared drive, whether the current user can copy non-folder descendants of this item, or this item itself if it is not a folder.
  *   `canRename` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can rename this file.
  *   `canReadRevisions` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can read the revisions resource of this file. For a shared drive item, whether revisions of non-folder descendants of this item, or this item itself if it is not a folder, can be read.
  *   `canReadTeamDrive` (*type:* `boolean()`, *default:* `nil`) - Deprecated: Output only. Use `canReadDrive` instead.
  *   `canListChildren` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can list the children of this folder. This is always false when the item is not a folder.
  *   `canDeleteChildren` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can delete children of this folder. This is false when the item is not a folder. Only populated for items in shared drives.
  *   `canReadDrive` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can read the shared drive to which this file belongs. Only populated for items in shared drives.
  *   `canChangeCopyRequiresWriterPermission` (*type:* `boolean()`, *default:* `nil`) - Output only. Whether the current user can change the `copyRequiresWriterPermission` restriction of this file.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :canAddMyDriveParent => boolean() | nil,
          :canModifyOwnerContentRestriction => boolean() | nil,
          :canMoveItemWithinDrive => boolean() | nil,
          :canChangeSecurityUpdateEnabled => boolean() | nil,
          :canMoveItemWithinTeamDrive => boolean() | nil,
          :canShare => boolean() | nil,
          :canComment => boolean() | nil,
          :canModifyContentRestriction => boolean() | nil,
          :canAddChildren => boolean() | nil,
          :canMoveChildrenOutOfTeamDrive => boolean() | nil,
          :canTrashChildren => boolean() | nil,
          :canUntrash => boolean() | nil,
          :canModifyContent => boolean() | nil,
          :canDownload => boolean() | nil,
          :canReadLabels => boolean() | nil,
          :canChangeViewersCanCopyContent => boolean() | nil,
          :canMoveItemOutOfTeamDrive => boolean() | nil,
          :canEdit => boolean() | nil,
          :canMoveItemIntoTeamDrive => boolean() | nil,
          :canMoveTeamDriveItem => boolean() | nil,
          :canMoveItemOutOfDrive => boolean() | nil,
          :canMoveChildrenWithinDrive => boolean() | nil,
          :canMoveChildrenOutOfDrive => boolean() | nil,
          :canMoveChildrenWithinTeamDrive => boolean() | nil,
          :canTrash => boolean() | nil,
          :canRemoveMyDriveParent => boolean() | nil,
          :canRemoveContentRestriction => boolean() | nil,
          :canAcceptOwnership => boolean() | nil,
          :canModifyEditorContentRestriction => boolean() | nil,
          :canModifyLabels => boolean() | nil,
          :canRemoveChildren => boolean() | nil,
          :canAddFolderFromAnotherDrive => boolean() | nil,
          :canDelete => boolean() | nil,
          :canCopy => boolean() | nil,
          :canRename => boolean() | nil,
          :canReadRevisions => boolean() | nil,
          :canReadTeamDrive => boolean() | nil,
          :canListChildren => boolean() | nil,
          :canDeleteChildren => boolean() | nil,
          :canReadDrive => boolean() | nil,
          :canChangeCopyRequiresWriterPermission => boolean() | nil
        }

  field(:canAddMyDriveParent)
  field(:canModifyOwnerContentRestriction)
  field(:canMoveItemWithinDrive)
  field(:canChangeSecurityUpdateEnabled)
  field(:canMoveItemWithinTeamDrive)
  field(:canShare)
  field(:canComment)
  field(:canModifyContentRestriction)
  field(:canAddChildren)
  field(:canMoveChildrenOutOfTeamDrive)
  field(:canTrashChildren)
  field(:canUntrash)
  field(:canModifyContent)
  field(:canDownload)
  field(:canReadLabels)
  field(:canChangeViewersCanCopyContent)
  field(:canMoveItemOutOfTeamDrive)
  field(:canEdit)
  field(:canMoveItemIntoTeamDrive)
  field(:canMoveTeamDriveItem)
  field(:canMoveItemOutOfDrive)
  field(:canMoveChildrenWithinDrive)
  field(:canMoveChildrenOutOfDrive)
  field(:canMoveChildrenWithinTeamDrive)
  field(:canTrash)
  field(:canRemoveMyDriveParent)
  field(:canRemoveContentRestriction)
  field(:canAcceptOwnership)
  field(:canModifyEditorContentRestriction)
  field(:canModifyLabels)
  field(:canRemoveChildren)
  field(:canAddFolderFromAnotherDrive)
  field(:canDelete)
  field(:canCopy)
  field(:canRename)
  field(:canReadRevisions)
  field(:canReadTeamDrive)
  field(:canListChildren)
  field(:canDeleteChildren)
  field(:canReadDrive)
  field(:canChangeCopyRequiresWriterPermission)
end

defimpl Poison.Decoder, for: GoogleApi.Drive.V3.Model.FileCapabilities do
  def decode(value, options) do
    GoogleApi.Drive.V3.Model.FileCapabilities.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Drive.V3.Model.FileCapabilities do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
