packages feed

gogol-drive-1.0.0: gen/Gogol/Drive/Permissions/Create.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- |
-- Module      : Gogol.Drive.Permissions.Create
-- Copyright   : (c) 2015-2025 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
--               Toni Cebrián <toni@tonicebrian.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a permission for a file or shared drive. __Warning:__ Concurrent permissions operations on the same file are not supported; only the last update is applied.
--
-- /See:/ <https://developers.google.com/drive/ Google Drive API Reference> for @drive.permissions.create@.
module Gogol.Drive.Permissions.Create
  ( -- * Resource
    DrivePermissionsCreateResource,

    -- ** Constructing a Request
    DrivePermissionsCreate (..),
    newDrivePermissionsCreate,
  )
where

import Gogol.Drive.Types
import Gogol.Prelude qualified as Core

-- | A resource alias for @drive.permissions.create@ method which the
-- 'DrivePermissionsCreate' request conforms to.
type DrivePermissionsCreateResource =
  "drive"
    Core.:> "v3"
    Core.:> "files"
    Core.:> Core.Capture "fileId" Core.Text
    Core.:> "permissions"
    Core.:> Core.QueryParam "$.xgafv" Xgafv
    Core.:> Core.QueryParam "access_token" Core.Text
    Core.:> Core.QueryParam "callback" Core.Text
    Core.:> Core.QueryParam "emailMessage" Core.Text
    Core.:> Core.QueryParam "enforceSingleParent" Core.Bool
    Core.:> Core.QueryParam "moveToNewOwnersRoot" Core.Bool
    Core.:> Core.QueryParam "sendNotificationEmail" Core.Bool
    Core.:> Core.QueryParam "supportsAllDrives" Core.Bool
    Core.:> Core.QueryParam "supportsTeamDrives" Core.Bool
    Core.:> Core.QueryParam "transferOwnership" Core.Bool
    Core.:> Core.QueryParam "uploadType" Core.Text
    Core.:> Core.QueryParam "upload_protocol" Core.Text
    Core.:> Core.QueryParam "useDomainAdminAccess" Core.Bool
    Core.:> Core.QueryParam "alt" Core.AltJSON
    Core.:> Core.ReqBody '[Core.JSON] Permission
    Core.:> Core.Post '[Core.JSON] Permission

-- | Creates a permission for a file or shared drive. __Warning:__ Concurrent permissions operations on the same file are not supported; only the last update is applied.
--
-- /See:/ 'newDrivePermissionsCreate' smart constructor.
data DrivePermissionsCreate = DrivePermissionsCreate
  { -- | V1 error format.
    xgafv :: (Core.Maybe Xgafv),
    -- | OAuth access token.
    accessToken :: (Core.Maybe Core.Text),
    -- | JSONP
    callback :: (Core.Maybe Core.Text),
    -- | A plain text custom message to include in the notification email.
    emailMessage :: (Core.Maybe Core.Text),
    -- | Deprecated: See @moveToNewOwnersRoot@ for details.
    enforceSingleParent :: Core.Bool,
    -- | The ID of the file or shared drive.
    fileId :: Core.Text,
    -- | This parameter will only take effect if the item is not in a shared drive and the request is attempting to transfer the ownership of the item. If set to @true@, the item will be moved to the new owner\'s My Drive root folder and all prior parents removed. If set to @false@, parents are not changed.
    moveToNewOwnersRoot :: Core.Bool,
    -- | Multipart request metadata.
    payload :: Permission,
    -- | Whether to send a notification email when sharing to users or groups. This defaults to true for users and groups, and is not allowed for other requests. It must not be disabled for ownership transfers.
    sendNotificationEmail :: (Core.Maybe Core.Bool),
    -- | Whether the requesting application supports both My Drives and shared drives.
    supportsAllDrives :: Core.Bool,
    -- | Deprecated: Use @supportsAllDrives@ instead.
    supportsTeamDrives :: Core.Bool,
    -- | Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect.
    transferOwnership :: Core.Bool,
    -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
    uploadType :: (Core.Maybe Core.Text),
    -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
    uploadProtocol :: (Core.Maybe Core.Text),
    -- | Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.
    useDomainAdminAccess :: Core.Bool
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DrivePermissionsCreate' with the minimum fields required to make a request.
newDrivePermissionsCreate ::
  -- |  The ID of the file or shared drive. See 'fileId'.
  Core.Text ->
  -- |  Multipart request metadata. See 'payload'.
  Permission ->
  DrivePermissionsCreate
newDrivePermissionsCreate fileId payload =
  DrivePermissionsCreate
    { xgafv = Core.Nothing,
      accessToken = Core.Nothing,
      callback = Core.Nothing,
      emailMessage = Core.Nothing,
      enforceSingleParent = Core.False,
      fileId = fileId,
      moveToNewOwnersRoot = Core.False,
      payload = payload,
      sendNotificationEmail = Core.Nothing,
      supportsAllDrives = Core.False,
      supportsTeamDrives = Core.False,
      transferOwnership = Core.False,
      uploadType = Core.Nothing,
      uploadProtocol = Core.Nothing,
      useDomainAdminAccess = Core.False
    }

instance Core.GoogleRequest DrivePermissionsCreate where
  type Rs DrivePermissionsCreate = Permission
  type
    Scopes DrivePermissionsCreate =
      '[Drive'FullControl, Drive'File]
  requestClient DrivePermissionsCreate {..} =
    go
      fileId
      xgafv
      accessToken
      callback
      emailMessage
      (Core.Just enforceSingleParent)
      (Core.Just moveToNewOwnersRoot)
      sendNotificationEmail
      (Core.Just supportsAllDrives)
      (Core.Just supportsTeamDrives)
      (Core.Just transferOwnership)
      uploadType
      uploadProtocol
      (Core.Just useDomainAdminAccess)
      (Core.Just Core.AltJSON)
      payload
      driveService
    where
      go =
        Core.buildClient
          (Core.Proxy :: Core.Proxy DrivePermissionsCreateResource)
          Core.mempty