content: {-# 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.Sheets.Spreadsheets.GetByDataFilter
  -- 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)
  --
  -- Returns the spreadsheet at the given ID. The caller must specify the spreadsheet ID. This method differs from GetSpreadsheet in that it allows selecting which subsets of spreadsheet data to return by specifying a dataFilters parameter. Multiple DataFilters can be specified. Specifying one or more data filters returns the portions of the spreadsheet that intersect ranges matched by any of the filters. By default, data within grids is not returned. You can include grid data one of 2 ways: * Specify a <https://developers.google.com/sheets/api/guides/field-masks field mask> listing your desired fields using the @fields@ URL parameter in HTTP * Set the includeGridData parameter to true. If a field mask is set, the @includeGridData@ parameter is ignored For large spreadsheets, as a best practice, retrieve only the specific spreadsheet fields that you want.
  --
  -- /See:/ <https://developers.google.com/sheets/ Google Sheets API Reference> for @sheets.spreadsheets.getByDataFilter@.
  module Gogol.Sheets.Spreadsheets.GetByDataFilter
    ( -- * Resource
      SheetsSpreadsheetsGetByDataFilterResource,
  
      -- ** Constructing a Request
      SheetsSpreadsheetsGetByDataFilter (..),
      newSheetsSpreadsheetsGetByDataFilter,
    )
  where
  
  import Gogol.Prelude qualified as Core
  import Gogol.Sheets.Types
  
  -- | A resource alias for @sheets.spreadsheets.getByDataFilter@ method which the
  -- 'SheetsSpreadsheetsGetByDataFilter' request conforms to.
  type SheetsSpreadsheetsGetByDataFilterResource =
    "v4"
      Core.:> "spreadsheets"
      Core.:> Core.CaptureMode "spreadsheetId" "getByDataFilter" Core.Text
      Core.:> Core.QueryParam "$.xgafv" Xgafv
      Core.:> Core.QueryParam "access_token" Core.Text
      Core.:> Core.QueryParam "callback" Core.Text
      Core.:> Core.QueryParam "uploadType" Core.Text
      Core.:> Core.QueryParam "upload_protocol" Core.Text
      Core.:> Core.QueryParam "alt" Core.AltJSON
      Core.:> Core.ReqBody '[Core.JSON] GetSpreadsheetByDataFilterRequest
      Core.:> Core.Post '[Core.JSON] Spreadsheet
  
  -- | Returns the spreadsheet at the given ID. The caller must specify the spreadsheet ID. This method differs from GetSpreadsheet in that it allows selecting which subsets of spreadsheet data to return by specifying a dataFilters parameter. Multiple DataFilters can be specified. Specifying one or more data filters returns the portions of the spreadsheet that intersect ranges matched by any of the filters. By default, data within grids is not returned. You can include grid data one of 2 ways: * Specify a <https://developers.google.com/sheets/api/guides/field-masks field mask> listing your desired fields using the @fields@ URL parameter in HTTP * Set the includeGridData parameter to true. If a field mask is set, the @includeGridData@ parameter is ignored For large spreadsheets, as a best practice, retrieve only the specific spreadsheet fields that you want.
  --
  -- /See:/ 'newSheetsSpreadsheetsGetByDataFilter' smart constructor.
  data SheetsSpreadsheetsGetByDataFilter = SheetsSpreadsheetsGetByDataFilter
    { -- | V1 error format.
      xgafv :: (Core.Maybe Xgafv),
      -- | OAuth access token.
      accessToken :: (Core.Maybe Core.Text),
      -- | JSONP
      callback :: (Core.Maybe Core.Text),
      -- | Multipart request metadata.
      payload :: GetSpreadsheetByDataFilterRequest,
      -- | The spreadsheet to request.
      spreadsheetId :: Core.Text,
      -- | 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)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SheetsSpreadsheetsGetByDataFilter' with the minimum fields required to make a request.
  newSheetsSpreadsheetsGetByDataFilter ::
    -- |  Multipart request metadata. See 'payload'.
    GetSpreadsheetByDataFilterRequest ->
    -- |  The spreadsheet to request. See 'spreadsheetId'.
    Core.Text ->
    SheetsSpreadsheetsGetByDataFilter
  newSheetsSpreadsheetsGetByDataFilter payload spreadsheetId =
    SheetsSpreadsheetsGetByDataFilter
      { xgafv = Core.Nothing,
        accessToken = Core.Nothing,
        callback = Core.Nothing,
        payload = payload,
        spreadsheetId = spreadsheetId,
        uploadType = Core.Nothing,
        uploadProtocol = Core.Nothing
      }
  
  instance Core.GoogleRequest SheetsSpreadsheetsGetByDataFilter where
    type Rs SheetsSpreadsheetsGetByDataFilter = Spreadsheet
    type
      Scopes SheetsSpreadsheetsGetByDataFilter =
        '[Drive'FullControl, Drive'File, Spreadsheets'FullControl]
    requestClient SheetsSpreadsheetsGetByDataFilter {..} =
      go
        spreadsheetId
        xgafv
        accessToken
        callback
        uploadType
        uploadProtocol
        (Core.Just Core.AltJSON)
        payload
        sheetsService
      where
        go =
          Core.buildClient
            ( Core.Proxy ::
                Core.Proxy SheetsSpreadsheetsGetByDataFilterResource
            )
            Core.mempty
  