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.Dataproc.Projects.Regions.Clusters.List
  -- 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)
  --
  -- Lists all regions\/{region}\/clusters in a project alphabetically.
  --
  -- /See:/ <https://cloud.google.com/dataproc/ Cloud Dataproc API Reference> for @dataproc.projects.regions.clusters.list@.
  module Gogol.Dataproc.Projects.Regions.Clusters.List
    ( -- * Resource
      DataprocProjectsRegionsClustersListResource,
  
      -- ** Constructing a Request
      DataprocProjectsRegionsClustersList (..),
      newDataprocProjectsRegionsClustersList,
    )
  where
  
  import Gogol.Dataproc.Types
  import Gogol.Prelude qualified as Core
  
  -- | A resource alias for @dataproc.projects.regions.clusters.list@ method which the
  -- 'DataprocProjectsRegionsClustersList' request conforms to.
  type DataprocProjectsRegionsClustersListResource =
    "v1"
      Core.:> "projects"
      Core.:> Core.Capture "projectId" Core.Text
      Core.:> "regions"
      Core.:> Core.Capture "region" Core.Text
      Core.:> "clusters"
      Core.:> Core.QueryParam "$.xgafv" Xgafv
      Core.:> Core.QueryParam "access_token" Core.Text
      Core.:> Core.QueryParam "callback" Core.Text
      Core.:> Core.QueryParam "filter" Core.Text
      Core.:> Core.QueryParam "pageSize" Core.Int32
      Core.:> Core.QueryParam "pageToken" Core.Text
      Core.:> Core.QueryParam "uploadType" Core.Text
      Core.:> Core.QueryParam "upload_protocol" Core.Text
      Core.:> Core.QueryParam "alt" Core.AltJSON
      Core.:> Core.Get '[Core.JSON] ListClustersResponse
  
  -- | Lists all regions\/{region}\/clusters in a project alphabetically.
  --
  -- /See:/ 'newDataprocProjectsRegionsClustersList' smart constructor.
  data DataprocProjectsRegionsClustersList = DataprocProjectsRegionsClustersList
    { -- | V1 error format.
      xgafv :: (Core.Maybe Xgafv),
      -- | OAuth access token.
      accessToken :: (Core.Maybe Core.Text),
      -- | JSONP
      callback :: (Core.Maybe Core.Text),
      -- | Optional. A filter constraining the clusters to list. Filters are case-sensitive and have the following syntax:field = value AND field = value ...where field is one of status.state, clusterName, or labels.[KEY], and [KEY] is a label key. value can be * to match all values. status.state can be one of the following: ACTIVE, INACTIVE, CREATING, RUNNING, ERROR, DELETING, UPDATING, STOPPING, or STOPPED. ACTIVE contains the CREATING, UPDATING, and RUNNING states. INACTIVE contains the DELETING, ERROR, STOPPING, and STOPPED states. clusterName is the name of the cluster provided at creation time. Only the logical AND operator is supported; space-separated items are treated as having an implicit AND operator.Example filter:status.state = ACTIVE AND clusterName = mycluster AND labels.env = staging AND labels.starred = *
      filter :: (Core.Maybe Core.Text),
      -- | Optional. The standard List page size.
      pageSize :: (Core.Maybe Core.Int32),
      -- | Optional. The standard List page token.
      pageToken :: (Core.Maybe Core.Text),
      -- | Required. The ID of the Google Cloud Platform project that the cluster belongs to.
      projectId :: Core.Text,
      -- | Required. The Dataproc region in which to handle the request.
      region :: 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 'DataprocProjectsRegionsClustersList' with the minimum fields required to make a request.
  newDataprocProjectsRegionsClustersList ::
    -- |  Required. The ID of the Google Cloud Platform project that the cluster belongs to. See 'projectId'.
    Core.Text ->
    -- |  Required. The Dataproc region in which to handle the request. See 'region'.
    Core.Text ->
    DataprocProjectsRegionsClustersList
  newDataprocProjectsRegionsClustersList projectId region =
    DataprocProjectsRegionsClustersList
      { xgafv = Core.Nothing,
        accessToken = Core.Nothing,
        callback = Core.Nothing,
        filter = Core.Nothing,
        pageSize = Core.Nothing,
        pageToken = Core.Nothing,
        projectId = projectId,
        region = region,
        uploadType = Core.Nothing,
        uploadProtocol = Core.Nothing
      }
  
  instance Core.GoogleRequest DataprocProjectsRegionsClustersList where
    type Rs DataprocProjectsRegionsClustersList = ListClustersResponse
    type
      Scopes DataprocProjectsRegionsClustersList =
        '[CloudPlatform'FullControl]
    requestClient DataprocProjectsRegionsClustersList {..} =
      go
        projectId
        region
        xgafv
        accessToken
        callback
        filter
        pageSize
        pageToken
        uploadType
        uploadProtocol
        (Core.Just Core.AltJSON)
        dataprocService
      where
        go =
          Core.buildClient
            ( Core.Proxy ::
                Core.Proxy DataprocProjectsRegionsClustersListResource
            )
            Core.mempty
  