packages feed

amazonka-redshift-serverless-2.0: gen/Amazonka/RedshiftServerLess/ListUsageLimits.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.RedshiftServerLess.ListUsageLimits
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Lists all usage limits within Amazon Redshift Serverless.
--
-- This operation returns paginated results.
module Amazonka.RedshiftServerLess.ListUsageLimits
  ( -- * Creating a Request
    ListUsageLimits (..),
    newListUsageLimits,

    -- * Request Lenses
    listUsageLimits_maxResults,
    listUsageLimits_nextToken,
    listUsageLimits_resourceArn,
    listUsageLimits_usageType,

    -- * Destructuring the Response
    ListUsageLimitsResponse (..),
    newListUsageLimitsResponse,

    -- * Response Lenses
    listUsageLimitsResponse_nextToken,
    listUsageLimitsResponse_usageLimits,
    listUsageLimitsResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.RedshiftServerLess.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newListUsageLimits' smart constructor.
data ListUsageLimits = ListUsageLimits'
  { -- | An optional parameter that specifies the maximum number of results to
    -- return. You can use @nextToken@ to get the next page of results. The
    -- default is 100.
    maxResults :: Prelude.Maybe Prelude.Natural,
    -- | If your initial @ListUsageLimits@ operation returns a @nextToken@, you
    -- can include the returned @nextToken@ in following @ListUsageLimits@
    -- operations, which returns results in the next page.
    nextToken :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) associated with the resource whose usage
    -- limits you want to list.
    resourceArn :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Redshift Serverless feature whose limits you want to see.
    usageType :: Prelude.Maybe UsageLimitUsageType
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ListUsageLimits' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'maxResults', 'listUsageLimits_maxResults' - An optional parameter that specifies the maximum number of results to
-- return. You can use @nextToken@ to get the next page of results. The
-- default is 100.
--
-- 'nextToken', 'listUsageLimits_nextToken' - If your initial @ListUsageLimits@ operation returns a @nextToken@, you
-- can include the returned @nextToken@ in following @ListUsageLimits@
-- operations, which returns results in the next page.
--
-- 'resourceArn', 'listUsageLimits_resourceArn' - The Amazon Resource Name (ARN) associated with the resource whose usage
-- limits you want to list.
--
-- 'usageType', 'listUsageLimits_usageType' - The Amazon Redshift Serverless feature whose limits you want to see.
newListUsageLimits ::
  ListUsageLimits
newListUsageLimits =
  ListUsageLimits'
    { maxResults = Prelude.Nothing,
      nextToken = Prelude.Nothing,
      resourceArn = Prelude.Nothing,
      usageType = Prelude.Nothing
    }

-- | An optional parameter that specifies the maximum number of results to
-- return. You can use @nextToken@ to get the next page of results. The
-- default is 100.
listUsageLimits_maxResults :: Lens.Lens' ListUsageLimits (Prelude.Maybe Prelude.Natural)
listUsageLimits_maxResults = Lens.lens (\ListUsageLimits' {maxResults} -> maxResults) (\s@ListUsageLimits' {} a -> s {maxResults = a} :: ListUsageLimits)

-- | If your initial @ListUsageLimits@ operation returns a @nextToken@, you
-- can include the returned @nextToken@ in following @ListUsageLimits@
-- operations, which returns results in the next page.
listUsageLimits_nextToken :: Lens.Lens' ListUsageLimits (Prelude.Maybe Prelude.Text)
listUsageLimits_nextToken = Lens.lens (\ListUsageLimits' {nextToken} -> nextToken) (\s@ListUsageLimits' {} a -> s {nextToken = a} :: ListUsageLimits)

-- | The Amazon Resource Name (ARN) associated with the resource whose usage
-- limits you want to list.
listUsageLimits_resourceArn :: Lens.Lens' ListUsageLimits (Prelude.Maybe Prelude.Text)
listUsageLimits_resourceArn = Lens.lens (\ListUsageLimits' {resourceArn} -> resourceArn) (\s@ListUsageLimits' {} a -> s {resourceArn = a} :: ListUsageLimits)

-- | The Amazon Redshift Serverless feature whose limits you want to see.
listUsageLimits_usageType :: Lens.Lens' ListUsageLimits (Prelude.Maybe UsageLimitUsageType)
listUsageLimits_usageType = Lens.lens (\ListUsageLimits' {usageType} -> usageType) (\s@ListUsageLimits' {} a -> s {usageType = a} :: ListUsageLimits)

instance Core.AWSPager ListUsageLimits where
  page rq rs
    | Core.stop
        ( rs
            Lens.^? listUsageLimitsResponse_nextToken
            Prelude.. Lens._Just
        ) =
        Prelude.Nothing
    | Core.stop
        ( rs
            Lens.^? listUsageLimitsResponse_usageLimits
            Prelude.. Lens._Just
            Prelude.. Lens.to Prelude.toList
        ) =
        Prelude.Nothing
    | Prelude.otherwise =
        Prelude.Just
          Prelude.$ rq
          Prelude.& listUsageLimits_nextToken
          Lens..~ rs
          Lens.^? listUsageLimitsResponse_nextToken
          Prelude.. Lens._Just

instance Core.AWSRequest ListUsageLimits where
  type
    AWSResponse ListUsageLimits =
      ListUsageLimitsResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          ListUsageLimitsResponse'
            Prelude.<$> (x Data..?> "nextToken")
            Prelude.<*> (x Data..?> "usageLimits")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable ListUsageLimits where
  hashWithSalt _salt ListUsageLimits' {..} =
    _salt
      `Prelude.hashWithSalt` maxResults
      `Prelude.hashWithSalt` nextToken
      `Prelude.hashWithSalt` resourceArn
      `Prelude.hashWithSalt` usageType

instance Prelude.NFData ListUsageLimits where
  rnf ListUsageLimits' {..} =
    Prelude.rnf maxResults
      `Prelude.seq` Prelude.rnf nextToken
      `Prelude.seq` Prelude.rnf resourceArn
      `Prelude.seq` Prelude.rnf usageType

instance Data.ToHeaders ListUsageLimits where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "X-Amz-Target"
              Data.=# ( "RedshiftServerless.ListUsageLimits" ::
                          Prelude.ByteString
                      ),
            "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON ListUsageLimits where
  toJSON ListUsageLimits' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("maxResults" Data..=) Prelude.<$> maxResults,
            ("nextToken" Data..=) Prelude.<$> nextToken,
            ("resourceArn" Data..=) Prelude.<$> resourceArn,
            ("usageType" Data..=) Prelude.<$> usageType
          ]
      )

instance Data.ToPath ListUsageLimits where
  toPath = Prelude.const "/"

instance Data.ToQuery ListUsageLimits where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newListUsageLimitsResponse' smart constructor.
data ListUsageLimitsResponse = ListUsageLimitsResponse'
  { -- | When @nextToken@ is returned, there are more results available. The
    -- value of @nextToken@ is a unique pagination token for each page. Make
    -- the call again using the returned token to retrieve the next page.
    nextToken :: Prelude.Maybe Prelude.Text,
    -- | An array of returned usage limit objects.
    usageLimits :: Prelude.Maybe (Prelude.NonEmpty UsageLimit),
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ListUsageLimitsResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'nextToken', 'listUsageLimitsResponse_nextToken' - When @nextToken@ is returned, there are more results available. The
-- value of @nextToken@ is a unique pagination token for each page. Make
-- the call again using the returned token to retrieve the next page.
--
-- 'usageLimits', 'listUsageLimitsResponse_usageLimits' - An array of returned usage limit objects.
--
-- 'httpStatus', 'listUsageLimitsResponse_httpStatus' - The response's http status code.
newListUsageLimitsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ListUsageLimitsResponse
newListUsageLimitsResponse pHttpStatus_ =
  ListUsageLimitsResponse'
    { nextToken =
        Prelude.Nothing,
      usageLimits = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | When @nextToken@ is returned, there are more results available. The
-- value of @nextToken@ is a unique pagination token for each page. Make
-- the call again using the returned token to retrieve the next page.
listUsageLimitsResponse_nextToken :: Lens.Lens' ListUsageLimitsResponse (Prelude.Maybe Prelude.Text)
listUsageLimitsResponse_nextToken = Lens.lens (\ListUsageLimitsResponse' {nextToken} -> nextToken) (\s@ListUsageLimitsResponse' {} a -> s {nextToken = a} :: ListUsageLimitsResponse)

-- | An array of returned usage limit objects.
listUsageLimitsResponse_usageLimits :: Lens.Lens' ListUsageLimitsResponse (Prelude.Maybe (Prelude.NonEmpty UsageLimit))
listUsageLimitsResponse_usageLimits = Lens.lens (\ListUsageLimitsResponse' {usageLimits} -> usageLimits) (\s@ListUsageLimitsResponse' {} a -> s {usageLimits = a} :: ListUsageLimitsResponse) Prelude.. Lens.mapping Lens.coerced

-- | The response's http status code.
listUsageLimitsResponse_httpStatus :: Lens.Lens' ListUsageLimitsResponse Prelude.Int
listUsageLimitsResponse_httpStatus = Lens.lens (\ListUsageLimitsResponse' {httpStatus} -> httpStatus) (\s@ListUsageLimitsResponse' {} a -> s {httpStatus = a} :: ListUsageLimitsResponse)

instance Prelude.NFData ListUsageLimitsResponse where
  rnf ListUsageLimitsResponse' {..} =
    Prelude.rnf nextToken
      `Prelude.seq` Prelude.rnf usageLimits
      `Prelude.seq` Prelude.rnf httpStatus