{-# 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.CostExplorer.GetDimensionValues
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves all available filter values for a specified filter over a
-- period of time. You can search the dimension values for an arbitrary
-- string.
module Amazonka.CostExplorer.GetDimensionValues
  ( -- * Creating a Request
    GetDimensionValues (..),
    newGetDimensionValues,

    -- * Request Lenses
    getDimensionValues_nextPageToken,
    getDimensionValues_context,
    getDimensionValues_searchString,
    getDimensionValues_filter,
    getDimensionValues_maxResults,
    getDimensionValues_sortBy,
    getDimensionValues_timePeriod,
    getDimensionValues_dimension,

    -- * Destructuring the Response
    GetDimensionValuesResponse (..),
    newGetDimensionValuesResponse,

    -- * Response Lenses
    getDimensionValuesResponse_nextPageToken,
    getDimensionValuesResponse_httpStatus,
    getDimensionValuesResponse_dimensionValues,
    getDimensionValuesResponse_returnSize,
    getDimensionValuesResponse_totalSize,
  )
where

import qualified Amazonka.Core as Core
import Amazonka.CostExplorer.Types
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newGetDimensionValues' smart constructor.
data GetDimensionValues = GetDimensionValues'
  { -- | The token to retrieve the next set of results. Amazon Web Services
    -- provides the token when the response from a previous call has more
    -- results than the maximum page size.
    GetDimensionValues -> Maybe Text
nextPageToken :: Prelude.Maybe Prelude.Text,
    -- | The context for the call to @GetDimensionValues@. This can be
    -- @RESERVATIONS@ or @COST_AND_USAGE@. The default value is
    -- @COST_AND_USAGE@. If the context is set to @RESERVATIONS@, the resulting
    -- dimension values can be used in the @GetReservationUtilization@
    -- operation. If the context is set to @COST_AND_USAGE@, the resulting
    -- dimension values can be used in the @GetCostAndUsage@ operation.
    --
    -- If you set the context to @COST_AND_USAGE@, you can use the following
    -- dimensions for searching:
    --
    -- -   AZ - The Availability Zone. An example is @us-east-1a@.
    --
    -- -   DATABASE_ENGINE - The Amazon Relational Database Service database.
    --     Examples are Aurora or MySQL.
    --
    -- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
    --     @m4.xlarge@.
    --
    -- -   LEGAL_ENTITY_NAME - The name of the organization that sells you
    --     Amazon Web Services services, such as Amazon Web Services.
    --
    -- -   LINKED_ACCOUNT - The description in the attribute map that includes
    --     the full name of the member account. The value field contains the
    --     Amazon Web Services ID of the member account.
    --
    -- -   OPERATING_SYSTEM - The operating system. Examples are Windows or
    --     Linux.
    --
    -- -   OPERATION - The action performed. Examples include @RunInstance@ and
    --     @CreateBucket@.
    --
    -- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
    --     Linux.
    --
    -- -   PURCHASE_TYPE - The reservation type of the purchase to which this
    --     usage is related. Examples include On-Demand Instances and Standard
    --     Reserved Instances.
    --
    -- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
    --
    -- -   USAGE_TYPE - The type of usage. An example is DataTransfer-In-Bytes.
    --     The response for the @GetDimensionValues@ operation includes a unit
    --     attribute. Examples include GB and Hrs.
    --
    -- -   USAGE_TYPE_GROUP - The grouping of common usage types. An example is
    --     Amazon EC2: CloudWatch – Alarms. The response for this operation
    --     includes a unit attribute.
    --
    -- -   REGION - The Amazon Web Services Region.
    --
    -- -   RECORD_TYPE - The different types of charges such as RI fees, usage
    --     costs, tax refunds, and credits.
    --
    -- -   RESOURCE_ID - The unique identifier of the resource. ResourceId is
    --     an opt-in feature only available for last 14 days for EC2-Compute
    --     Service.
    --
    -- If you set the context to @RESERVATIONS@, you can use the following
    -- dimensions for searching:
    --
    -- -   AZ - The Availability Zone. An example is @us-east-1a@.
    --
    -- -   CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
    --     Windows or Linux.
    --
    -- -   DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
    --     deployments. Valid values are @SingleAZ@ and @MultiAZ@.
    --
    -- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
    --     @m4.xlarge@.
    --
    -- -   LINKED_ACCOUNT - The description in the attribute map that includes
    --     the full name of the member account. The value field contains the
    --     Amazon Web Services ID of the member account.
    --
    -- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
    --     Linux.
    --
    -- -   REGION - The Amazon Web Services Region.
    --
    -- -   SCOPE (Utilization only) - The scope of a Reserved Instance (RI).
    --     Values are regional or a single Availability Zone.
    --
    -- -   TAG (Coverage only) - The tags that are associated with a Reserved
    --     Instance (RI).
    --
    -- -   TENANCY - The tenancy of a resource. Examples are shared or
    --     dedicated.
    --
    -- If you set the context to @SAVINGS_PLANS@, you can use the following
    -- dimensions for searching:
    --
    -- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute)
    --
    -- -   PAYMENT_OPTION - Payment option for the given Savings Plans (for
    --     example, All Upfront)
    --
    -- -   REGION - The Amazon Web Services Region.
    --
    -- -   INSTANCE_TYPE_FAMILY - The family of instances (For example, @m5@)
    --
    -- -   LINKED_ACCOUNT - The description in the attribute map that includes
    --     the full name of the member account. The value field contains the
    --     Amazon Web Services ID of the member account.
    --
    -- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plan
    GetDimensionValues -> Maybe Context
context :: Prelude.Maybe Context,
    -- | The value that you want to search the filter values for.
    GetDimensionValues -> Maybe Text
searchString :: Prelude.Maybe Prelude.Text,
    GetDimensionValues -> Maybe Expression
filter' :: Prelude.Maybe Expression,
    -- | This field is only used when SortBy is provided in the request. The
    -- maximum number of objects that to be returned for this request. If
    -- MaxResults is not specified with SortBy, the request will return 1000
    -- results as the default value for this parameter.
    --
    -- For @GetDimensionValues@, MaxResults has an upper limit of 1000.
    GetDimensionValues -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    -- | The value by which you want to sort the data.
    --
    -- The key represents cost and usage metrics. The following values are
    -- supported:
    --
    -- -   @BlendedCost@
    --
    -- -   @UnblendedCost@
    --
    -- -   @AmortizedCost@
    --
    -- -   @NetAmortizedCost@
    --
    -- -   @NetUnblendedCost@
    --
    -- -   @UsageQuantity@
    --
    -- -   @NormalizedUsageAmount@
    --
    -- Supported values for @SortOrder@ are @ASCENDING@ or @DESCENDING@.
    --
    -- When you specify a @SortBy@ paramater, the context must be
    -- @COST_AND_USAGE@. Further, when using @SortBy@, @NextPageToken@ and
    -- @SearchString@ are not supported.
    GetDimensionValues -> Maybe [SortDefinition]
sortBy :: Prelude.Maybe [SortDefinition],
    -- | The start date and end date for retrieving the dimension values. The
    -- start date is inclusive, but the end date is exclusive. For example, if
    -- @start@ is @2017-01-01@ and @end@ is @2017-05-01@, then the cost and
    -- usage data is retrieved from @2017-01-01@ up to and including
    -- @2017-04-30@ but not including @2017-05-01@.
    GetDimensionValues -> DateInterval
timePeriod :: DateInterval,
    -- | The name of the dimension. Each @Dimension@ is available for a different
    -- @Context@. For more information, see @Context@.
    GetDimensionValues -> Dimension
dimension :: Dimension
  }
  deriving (GetDimensionValues -> GetDimensionValues -> Bool
(GetDimensionValues -> GetDimensionValues -> Bool)
-> (GetDimensionValues -> GetDimensionValues -> Bool)
-> Eq GetDimensionValues
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetDimensionValues -> GetDimensionValues -> Bool
$c/= :: GetDimensionValues -> GetDimensionValues -> Bool
== :: GetDimensionValues -> GetDimensionValues -> Bool
$c== :: GetDimensionValues -> GetDimensionValues -> Bool
Prelude.Eq, ReadPrec [GetDimensionValues]
ReadPrec GetDimensionValues
Int -> ReadS GetDimensionValues
ReadS [GetDimensionValues]
(Int -> ReadS GetDimensionValues)
-> ReadS [GetDimensionValues]
-> ReadPrec GetDimensionValues
-> ReadPrec [GetDimensionValues]
-> Read GetDimensionValues
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetDimensionValues]
$creadListPrec :: ReadPrec [GetDimensionValues]
readPrec :: ReadPrec GetDimensionValues
$creadPrec :: ReadPrec GetDimensionValues
readList :: ReadS [GetDimensionValues]
$creadList :: ReadS [GetDimensionValues]
readsPrec :: Int -> ReadS GetDimensionValues
$creadsPrec :: Int -> ReadS GetDimensionValues
Prelude.Read, Int -> GetDimensionValues -> ShowS
[GetDimensionValues] -> ShowS
GetDimensionValues -> String
(Int -> GetDimensionValues -> ShowS)
-> (GetDimensionValues -> String)
-> ([GetDimensionValues] -> ShowS)
-> Show GetDimensionValues
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetDimensionValues] -> ShowS
$cshowList :: [GetDimensionValues] -> ShowS
show :: GetDimensionValues -> String
$cshow :: GetDimensionValues -> String
showsPrec :: Int -> GetDimensionValues -> ShowS
$cshowsPrec :: Int -> GetDimensionValues -> ShowS
Prelude.Show, (forall x. GetDimensionValues -> Rep GetDimensionValues x)
-> (forall x. Rep GetDimensionValues x -> GetDimensionValues)
-> Generic GetDimensionValues
forall x. Rep GetDimensionValues x -> GetDimensionValues
forall x. GetDimensionValues -> Rep GetDimensionValues x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetDimensionValues x -> GetDimensionValues
$cfrom :: forall x. GetDimensionValues -> Rep GetDimensionValues x
Prelude.Generic)

-- |
-- Create a value of 'GetDimensionValues' 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:
--
-- 'nextPageToken', 'getDimensionValues_nextPageToken' - The token to retrieve the next set of results. Amazon Web Services
-- provides the token when the response from a previous call has more
-- results than the maximum page size.
--
-- 'context', 'getDimensionValues_context' - The context for the call to @GetDimensionValues@. This can be
-- @RESERVATIONS@ or @COST_AND_USAGE@. The default value is
-- @COST_AND_USAGE@. If the context is set to @RESERVATIONS@, the resulting
-- dimension values can be used in the @GetReservationUtilization@
-- operation. If the context is set to @COST_AND_USAGE@, the resulting
-- dimension values can be used in the @GetCostAndUsage@ operation.
--
-- If you set the context to @COST_AND_USAGE@, you can use the following
-- dimensions for searching:
--
-- -   AZ - The Availability Zone. An example is @us-east-1a@.
--
-- -   DATABASE_ENGINE - The Amazon Relational Database Service database.
--     Examples are Aurora or MySQL.
--
-- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
--     @m4.xlarge@.
--
-- -   LEGAL_ENTITY_NAME - The name of the organization that sells you
--     Amazon Web Services services, such as Amazon Web Services.
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   OPERATING_SYSTEM - The operating system. Examples are Windows or
--     Linux.
--
-- -   OPERATION - The action performed. Examples include @RunInstance@ and
--     @CreateBucket@.
--
-- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
--     Linux.
--
-- -   PURCHASE_TYPE - The reservation type of the purchase to which this
--     usage is related. Examples include On-Demand Instances and Standard
--     Reserved Instances.
--
-- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
--
-- -   USAGE_TYPE - The type of usage. An example is DataTransfer-In-Bytes.
--     The response for the @GetDimensionValues@ operation includes a unit
--     attribute. Examples include GB and Hrs.
--
-- -   USAGE_TYPE_GROUP - The grouping of common usage types. An example is
--     Amazon EC2: CloudWatch – Alarms. The response for this operation
--     includes a unit attribute.
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   RECORD_TYPE - The different types of charges such as RI fees, usage
--     costs, tax refunds, and credits.
--
-- -   RESOURCE_ID - The unique identifier of the resource. ResourceId is
--     an opt-in feature only available for last 14 days for EC2-Compute
--     Service.
--
-- If you set the context to @RESERVATIONS@, you can use the following
-- dimensions for searching:
--
-- -   AZ - The Availability Zone. An example is @us-east-1a@.
--
-- -   CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
--     Windows or Linux.
--
-- -   DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
--     deployments. Valid values are @SingleAZ@ and @MultiAZ@.
--
-- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
--     @m4.xlarge@.
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
--     Linux.
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   SCOPE (Utilization only) - The scope of a Reserved Instance (RI).
--     Values are regional or a single Availability Zone.
--
-- -   TAG (Coverage only) - The tags that are associated with a Reserved
--     Instance (RI).
--
-- -   TENANCY - The tenancy of a resource. Examples are shared or
--     dedicated.
--
-- If you set the context to @SAVINGS_PLANS@, you can use the following
-- dimensions for searching:
--
-- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute)
--
-- -   PAYMENT_OPTION - Payment option for the given Savings Plans (for
--     example, All Upfront)
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   INSTANCE_TYPE_FAMILY - The family of instances (For example, @m5@)
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plan
--
-- 'searchString', 'getDimensionValues_searchString' - The value that you want to search the filter values for.
--
-- 'filter'', 'getDimensionValues_filter' - Undocumented member.
--
-- 'maxResults', 'getDimensionValues_maxResults' - This field is only used when SortBy is provided in the request. The
-- maximum number of objects that to be returned for this request. If
-- MaxResults is not specified with SortBy, the request will return 1000
-- results as the default value for this parameter.
--
-- For @GetDimensionValues@, MaxResults has an upper limit of 1000.
--
-- 'sortBy', 'getDimensionValues_sortBy' - The value by which you want to sort the data.
--
-- The key represents cost and usage metrics. The following values are
-- supported:
--
-- -   @BlendedCost@
--
-- -   @UnblendedCost@
--
-- -   @AmortizedCost@
--
-- -   @NetAmortizedCost@
--
-- -   @NetUnblendedCost@
--
-- -   @UsageQuantity@
--
-- -   @NormalizedUsageAmount@
--
-- Supported values for @SortOrder@ are @ASCENDING@ or @DESCENDING@.
--
-- When you specify a @SortBy@ paramater, the context must be
-- @COST_AND_USAGE@. Further, when using @SortBy@, @NextPageToken@ and
-- @SearchString@ are not supported.
--
-- 'timePeriod', 'getDimensionValues_timePeriod' - The start date and end date for retrieving the dimension values. The
-- start date is inclusive, but the end date is exclusive. For example, if
-- @start@ is @2017-01-01@ and @end@ is @2017-05-01@, then the cost and
-- usage data is retrieved from @2017-01-01@ up to and including
-- @2017-04-30@ but not including @2017-05-01@.
--
-- 'dimension', 'getDimensionValues_dimension' - The name of the dimension. Each @Dimension@ is available for a different
-- @Context@. For more information, see @Context@.
newGetDimensionValues ::
  -- | 'timePeriod'
  DateInterval ->
  -- | 'dimension'
  Dimension ->
  GetDimensionValues
newGetDimensionValues :: DateInterval -> Dimension -> GetDimensionValues
newGetDimensionValues DateInterval
pTimePeriod_ Dimension
pDimension_ =
  GetDimensionValues' :: Maybe Text
-> Maybe Context
-> Maybe Text
-> Maybe Expression
-> Maybe Natural
-> Maybe [SortDefinition]
-> DateInterval
-> Dimension
-> GetDimensionValues
GetDimensionValues'
    { $sel:nextPageToken:GetDimensionValues' :: Maybe Text
nextPageToken =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:context:GetDimensionValues' :: Maybe Context
context = Maybe Context
forall a. Maybe a
Prelude.Nothing,
      $sel:searchString:GetDimensionValues' :: Maybe Text
searchString = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:filter':GetDimensionValues' :: Maybe Expression
filter' = Maybe Expression
forall a. Maybe a
Prelude.Nothing,
      $sel:maxResults:GetDimensionValues' :: Maybe Natural
maxResults = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:sortBy:GetDimensionValues' :: Maybe [SortDefinition]
sortBy = Maybe [SortDefinition]
forall a. Maybe a
Prelude.Nothing,
      $sel:timePeriod:GetDimensionValues' :: DateInterval
timePeriod = DateInterval
pTimePeriod_,
      $sel:dimension:GetDimensionValues' :: Dimension
dimension = Dimension
pDimension_
    }

-- | The token to retrieve the next set of results. Amazon Web Services
-- provides the token when the response from a previous call has more
-- results than the maximum page size.
getDimensionValues_nextPageToken :: Lens.Lens' GetDimensionValues (Prelude.Maybe Prelude.Text)
getDimensionValues_nextPageToken :: (Maybe Text -> f (Maybe Text))
-> GetDimensionValues -> f GetDimensionValues
getDimensionValues_nextPageToken = (GetDimensionValues -> Maybe Text)
-> (GetDimensionValues -> Maybe Text -> GetDimensionValues)
-> Lens
     GetDimensionValues GetDimensionValues (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValues' {Maybe Text
nextPageToken :: Maybe Text
$sel:nextPageToken:GetDimensionValues' :: GetDimensionValues -> Maybe Text
nextPageToken} -> Maybe Text
nextPageToken) (\s :: GetDimensionValues
s@GetDimensionValues' {} Maybe Text
a -> GetDimensionValues
s {$sel:nextPageToken:GetDimensionValues' :: Maybe Text
nextPageToken = Maybe Text
a} :: GetDimensionValues)

-- | The context for the call to @GetDimensionValues@. This can be
-- @RESERVATIONS@ or @COST_AND_USAGE@. The default value is
-- @COST_AND_USAGE@. If the context is set to @RESERVATIONS@, the resulting
-- dimension values can be used in the @GetReservationUtilization@
-- operation. If the context is set to @COST_AND_USAGE@, the resulting
-- dimension values can be used in the @GetCostAndUsage@ operation.
--
-- If you set the context to @COST_AND_USAGE@, you can use the following
-- dimensions for searching:
--
-- -   AZ - The Availability Zone. An example is @us-east-1a@.
--
-- -   DATABASE_ENGINE - The Amazon Relational Database Service database.
--     Examples are Aurora or MySQL.
--
-- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
--     @m4.xlarge@.
--
-- -   LEGAL_ENTITY_NAME - The name of the organization that sells you
--     Amazon Web Services services, such as Amazon Web Services.
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   OPERATING_SYSTEM - The operating system. Examples are Windows or
--     Linux.
--
-- -   OPERATION - The action performed. Examples include @RunInstance@ and
--     @CreateBucket@.
--
-- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
--     Linux.
--
-- -   PURCHASE_TYPE - The reservation type of the purchase to which this
--     usage is related. Examples include On-Demand Instances and Standard
--     Reserved Instances.
--
-- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
--
-- -   USAGE_TYPE - The type of usage. An example is DataTransfer-In-Bytes.
--     The response for the @GetDimensionValues@ operation includes a unit
--     attribute. Examples include GB and Hrs.
--
-- -   USAGE_TYPE_GROUP - The grouping of common usage types. An example is
--     Amazon EC2: CloudWatch – Alarms. The response for this operation
--     includes a unit attribute.
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   RECORD_TYPE - The different types of charges such as RI fees, usage
--     costs, tax refunds, and credits.
--
-- -   RESOURCE_ID - The unique identifier of the resource. ResourceId is
--     an opt-in feature only available for last 14 days for EC2-Compute
--     Service.
--
-- If you set the context to @RESERVATIONS@, you can use the following
-- dimensions for searching:
--
-- -   AZ - The Availability Zone. An example is @us-east-1a@.
--
-- -   CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
--     Windows or Linux.
--
-- -   DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
--     deployments. Valid values are @SingleAZ@ and @MultiAZ@.
--
-- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
--     @m4.xlarge@.
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
--     Linux.
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   SCOPE (Utilization only) - The scope of a Reserved Instance (RI).
--     Values are regional or a single Availability Zone.
--
-- -   TAG (Coverage only) - The tags that are associated with a Reserved
--     Instance (RI).
--
-- -   TENANCY - The tenancy of a resource. Examples are shared or
--     dedicated.
--
-- If you set the context to @SAVINGS_PLANS@, you can use the following
-- dimensions for searching:
--
-- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute)
--
-- -   PAYMENT_OPTION - Payment option for the given Savings Plans (for
--     example, All Upfront)
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   INSTANCE_TYPE_FAMILY - The family of instances (For example, @m5@)
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plan
getDimensionValues_context :: Lens.Lens' GetDimensionValues (Prelude.Maybe Context)
getDimensionValues_context :: (Maybe Context -> f (Maybe Context))
-> GetDimensionValues -> f GetDimensionValues
getDimensionValues_context = (GetDimensionValues -> Maybe Context)
-> (GetDimensionValues -> Maybe Context -> GetDimensionValues)
-> Lens
     GetDimensionValues
     GetDimensionValues
     (Maybe Context)
     (Maybe Context)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValues' {Maybe Context
context :: Maybe Context
$sel:context:GetDimensionValues' :: GetDimensionValues -> Maybe Context
context} -> Maybe Context
context) (\s :: GetDimensionValues
s@GetDimensionValues' {} Maybe Context
a -> GetDimensionValues
s {$sel:context:GetDimensionValues' :: Maybe Context
context = Maybe Context
a} :: GetDimensionValues)

-- | The value that you want to search the filter values for.
getDimensionValues_searchString :: Lens.Lens' GetDimensionValues (Prelude.Maybe Prelude.Text)
getDimensionValues_searchString :: (Maybe Text -> f (Maybe Text))
-> GetDimensionValues -> f GetDimensionValues
getDimensionValues_searchString = (GetDimensionValues -> Maybe Text)
-> (GetDimensionValues -> Maybe Text -> GetDimensionValues)
-> Lens
     GetDimensionValues GetDimensionValues (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValues' {Maybe Text
searchString :: Maybe Text
$sel:searchString:GetDimensionValues' :: GetDimensionValues -> Maybe Text
searchString} -> Maybe Text
searchString) (\s :: GetDimensionValues
s@GetDimensionValues' {} Maybe Text
a -> GetDimensionValues
s {$sel:searchString:GetDimensionValues' :: Maybe Text
searchString = Maybe Text
a} :: GetDimensionValues)

-- | Undocumented member.
getDimensionValues_filter :: Lens.Lens' GetDimensionValues (Prelude.Maybe Expression)
getDimensionValues_filter :: (Maybe Expression -> f (Maybe Expression))
-> GetDimensionValues -> f GetDimensionValues
getDimensionValues_filter = (GetDimensionValues -> Maybe Expression)
-> (GetDimensionValues -> Maybe Expression -> GetDimensionValues)
-> Lens
     GetDimensionValues
     GetDimensionValues
     (Maybe Expression)
     (Maybe Expression)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValues' {Maybe Expression
filter' :: Maybe Expression
$sel:filter':GetDimensionValues' :: GetDimensionValues -> Maybe Expression
filter'} -> Maybe Expression
filter') (\s :: GetDimensionValues
s@GetDimensionValues' {} Maybe Expression
a -> GetDimensionValues
s {$sel:filter':GetDimensionValues' :: Maybe Expression
filter' = Maybe Expression
a} :: GetDimensionValues)

-- | This field is only used when SortBy is provided in the request. The
-- maximum number of objects that to be returned for this request. If
-- MaxResults is not specified with SortBy, the request will return 1000
-- results as the default value for this parameter.
--
-- For @GetDimensionValues@, MaxResults has an upper limit of 1000.
getDimensionValues_maxResults :: Lens.Lens' GetDimensionValues (Prelude.Maybe Prelude.Natural)
getDimensionValues_maxResults :: (Maybe Natural -> f (Maybe Natural))
-> GetDimensionValues -> f GetDimensionValues
getDimensionValues_maxResults = (GetDimensionValues -> Maybe Natural)
-> (GetDimensionValues -> Maybe Natural -> GetDimensionValues)
-> Lens
     GetDimensionValues
     GetDimensionValues
     (Maybe Natural)
     (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValues' {Maybe Natural
maxResults :: Maybe Natural
$sel:maxResults:GetDimensionValues' :: GetDimensionValues -> Maybe Natural
maxResults} -> Maybe Natural
maxResults) (\s :: GetDimensionValues
s@GetDimensionValues' {} Maybe Natural
a -> GetDimensionValues
s {$sel:maxResults:GetDimensionValues' :: Maybe Natural
maxResults = Maybe Natural
a} :: GetDimensionValues)

-- | The value by which you want to sort the data.
--
-- The key represents cost and usage metrics. The following values are
-- supported:
--
-- -   @BlendedCost@
--
-- -   @UnblendedCost@
--
-- -   @AmortizedCost@
--
-- -   @NetAmortizedCost@
--
-- -   @NetUnblendedCost@
--
-- -   @UsageQuantity@
--
-- -   @NormalizedUsageAmount@
--
-- Supported values for @SortOrder@ are @ASCENDING@ or @DESCENDING@.
--
-- When you specify a @SortBy@ paramater, the context must be
-- @COST_AND_USAGE@. Further, when using @SortBy@, @NextPageToken@ and
-- @SearchString@ are not supported.
getDimensionValues_sortBy :: Lens.Lens' GetDimensionValues (Prelude.Maybe [SortDefinition])
getDimensionValues_sortBy :: (Maybe [SortDefinition] -> f (Maybe [SortDefinition]))
-> GetDimensionValues -> f GetDimensionValues
getDimensionValues_sortBy = (GetDimensionValues -> Maybe [SortDefinition])
-> (GetDimensionValues
    -> Maybe [SortDefinition] -> GetDimensionValues)
-> Lens
     GetDimensionValues
     GetDimensionValues
     (Maybe [SortDefinition])
     (Maybe [SortDefinition])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValues' {Maybe [SortDefinition]
sortBy :: Maybe [SortDefinition]
$sel:sortBy:GetDimensionValues' :: GetDimensionValues -> Maybe [SortDefinition]
sortBy} -> Maybe [SortDefinition]
sortBy) (\s :: GetDimensionValues
s@GetDimensionValues' {} Maybe [SortDefinition]
a -> GetDimensionValues
s {$sel:sortBy:GetDimensionValues' :: Maybe [SortDefinition]
sortBy = Maybe [SortDefinition]
a} :: GetDimensionValues) ((Maybe [SortDefinition] -> f (Maybe [SortDefinition]))
 -> GetDimensionValues -> f GetDimensionValues)
-> ((Maybe [SortDefinition] -> f (Maybe [SortDefinition]))
    -> Maybe [SortDefinition] -> f (Maybe [SortDefinition]))
-> (Maybe [SortDefinition] -> f (Maybe [SortDefinition]))
-> GetDimensionValues
-> f GetDimensionValues
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [SortDefinition] [SortDefinition] [SortDefinition] [SortDefinition]
-> Iso
     (Maybe [SortDefinition])
     (Maybe [SortDefinition])
     (Maybe [SortDefinition])
     (Maybe [SortDefinition])
forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping AnIso
  [SortDefinition] [SortDefinition] [SortDefinition] [SortDefinition]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The start date and end date for retrieving the dimension values. The
-- start date is inclusive, but the end date is exclusive. For example, if
-- @start@ is @2017-01-01@ and @end@ is @2017-05-01@, then the cost and
-- usage data is retrieved from @2017-01-01@ up to and including
-- @2017-04-30@ but not including @2017-05-01@.
getDimensionValues_timePeriod :: Lens.Lens' GetDimensionValues DateInterval
getDimensionValues_timePeriod :: (DateInterval -> f DateInterval)
-> GetDimensionValues -> f GetDimensionValues
getDimensionValues_timePeriod = (GetDimensionValues -> DateInterval)
-> (GetDimensionValues -> DateInterval -> GetDimensionValues)
-> Lens
     GetDimensionValues GetDimensionValues DateInterval DateInterval
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValues' {DateInterval
timePeriod :: DateInterval
$sel:timePeriod:GetDimensionValues' :: GetDimensionValues -> DateInterval
timePeriod} -> DateInterval
timePeriod) (\s :: GetDimensionValues
s@GetDimensionValues' {} DateInterval
a -> GetDimensionValues
s {$sel:timePeriod:GetDimensionValues' :: DateInterval
timePeriod = DateInterval
a} :: GetDimensionValues)

-- | The name of the dimension. Each @Dimension@ is available for a different
-- @Context@. For more information, see @Context@.
getDimensionValues_dimension :: Lens.Lens' GetDimensionValues Dimension
getDimensionValues_dimension :: (Dimension -> f Dimension)
-> GetDimensionValues -> f GetDimensionValues
getDimensionValues_dimension = (GetDimensionValues -> Dimension)
-> (GetDimensionValues -> Dimension -> GetDimensionValues)
-> Lens GetDimensionValues GetDimensionValues Dimension Dimension
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValues' {Dimension
dimension :: Dimension
$sel:dimension:GetDimensionValues' :: GetDimensionValues -> Dimension
dimension} -> Dimension
dimension) (\s :: GetDimensionValues
s@GetDimensionValues' {} Dimension
a -> GetDimensionValues
s {$sel:dimension:GetDimensionValues' :: Dimension
dimension = Dimension
a} :: GetDimensionValues)

instance Core.AWSRequest GetDimensionValues where
  type
    AWSResponse GetDimensionValues =
      GetDimensionValuesResponse
  request :: GetDimensionValues -> Request GetDimensionValues
request = Service -> GetDimensionValues -> Request GetDimensionValues
forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON Service
defaultService
  response :: Logger
-> Service
-> Proxy GetDimensionValues
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetDimensionValues)))
response =
    (Int
 -> ResponseHeaders
 -> Object
 -> Either String (AWSResponse GetDimensionValues))
-> Logger
-> Service
-> Proxy GetDimensionValues
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetDimensionValues)))
forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> Logger
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text
-> Int
-> [DimensionValuesWithAttributes]
-> Int
-> Int
-> GetDimensionValuesResponse
GetDimensionValuesResponse'
            (Maybe Text
 -> Int
 -> [DimensionValuesWithAttributes]
 -> Int
 -> Int
 -> GetDimensionValuesResponse)
-> Either String (Maybe Text)
-> Either
     String
     (Int
      -> [DimensionValuesWithAttributes]
      -> Int
      -> Int
      -> GetDimensionValuesResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Either String (Maybe Text)
forall a. FromJSON a => Object -> Text -> Either String (Maybe a)
Core..?> Text
"NextPageToken")
            Either
  String
  (Int
   -> [DimensionValuesWithAttributes]
   -> Int
   -> Int
   -> GetDimensionValuesResponse)
-> Either String Int
-> Either
     String
     ([DimensionValuesWithAttributes]
      -> Int -> Int -> GetDimensionValuesResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Int -> Either String Int
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
            Either
  String
  ([DimensionValuesWithAttributes]
   -> Int -> Int -> GetDimensionValuesResponse)
-> Either String [DimensionValuesWithAttributes]
-> Either String (Int -> Int -> GetDimensionValuesResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x Object
-> Text -> Either String (Maybe [DimensionValuesWithAttributes])
forall a. FromJSON a => Object -> Text -> Either String (Maybe a)
Core..?> Text
"DimensionValues"
                            Either String (Maybe [DimensionValuesWithAttributes])
-> [DimensionValuesWithAttributes]
-> Either String [DimensionValuesWithAttributes]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [DimensionValuesWithAttributes]
forall a. Monoid a => a
Prelude.mempty
                        )
            Either String (Int -> Int -> GetDimensionValuesResponse)
-> Either String Int
-> Either String (Int -> GetDimensionValuesResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Either String Int
forall a. FromJSON a => Object -> Text -> Either String a
Core..:> Text
"ReturnSize")
            Either String (Int -> GetDimensionValuesResponse)
-> Either String Int -> Either String GetDimensionValuesResponse
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Either String Int
forall a. FromJSON a => Object -> Text -> Either String a
Core..:> Text
"TotalSize")
      )

instance Prelude.Hashable GetDimensionValues

instance Prelude.NFData GetDimensionValues

instance Core.ToHeaders GetDimensionValues where
  toHeaders :: GetDimensionValues -> ResponseHeaders
toHeaders =
    ResponseHeaders -> GetDimensionValues -> ResponseHeaders
forall a b. a -> b -> a
Prelude.const
      ( [ResponseHeaders] -> ResponseHeaders
forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              HeaderName -> ByteString -> ResponseHeaders
forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Core.=# ( ByteString
"AWSInsightsIndexService.GetDimensionValues" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              HeaderName -> ByteString -> ResponseHeaders
forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Core.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Core.ToJSON GetDimensionValues where
  toJSON :: GetDimensionValues -> Value
toJSON GetDimensionValues' {Maybe Natural
Maybe [SortDefinition]
Maybe Text
Maybe Context
Maybe Expression
DateInterval
Dimension
dimension :: Dimension
timePeriod :: DateInterval
sortBy :: Maybe [SortDefinition]
maxResults :: Maybe Natural
filter' :: Maybe Expression
searchString :: Maybe Text
context :: Maybe Context
nextPageToken :: Maybe Text
$sel:dimension:GetDimensionValues' :: GetDimensionValues -> Dimension
$sel:timePeriod:GetDimensionValues' :: GetDimensionValues -> DateInterval
$sel:sortBy:GetDimensionValues' :: GetDimensionValues -> Maybe [SortDefinition]
$sel:maxResults:GetDimensionValues' :: GetDimensionValues -> Maybe Natural
$sel:filter':GetDimensionValues' :: GetDimensionValues -> Maybe Expression
$sel:searchString:GetDimensionValues' :: GetDimensionValues -> Maybe Text
$sel:context:GetDimensionValues' :: GetDimensionValues -> Maybe Context
$sel:nextPageToken:GetDimensionValues' :: GetDimensionValues -> Maybe Text
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"NextPageToken" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
nextPageToken,
            (Text
"Context" Text -> Context -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Context -> Pair) -> Maybe Context -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Context
context,
            (Text
"SearchString" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
searchString,
            (Text
"Filter" Text -> Expression -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Expression -> Pair) -> Maybe Expression -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Expression
filter',
            (Text
"MaxResults" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
maxResults,
            (Text
"SortBy" Text -> [SortDefinition] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) ([SortDefinition] -> Pair) -> Maybe [SortDefinition] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [SortDefinition]
sortBy,
            Pair -> Maybe Pair
forall a. a -> Maybe a
Prelude.Just (Text
"TimePeriod" Text -> DateInterval -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..= DateInterval
timePeriod),
            Pair -> Maybe Pair
forall a. a -> Maybe a
Prelude.Just (Text
"Dimension" Text -> Dimension -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..= Dimension
dimension)
          ]
      )

instance Core.ToPath GetDimensionValues where
  toPath :: GetDimensionValues -> ByteString
toPath = ByteString -> GetDimensionValues -> ByteString
forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Core.ToQuery GetDimensionValues where
  toQuery :: GetDimensionValues -> QueryString
toQuery = QueryString -> GetDimensionValues -> QueryString
forall a b. a -> b -> a
Prelude.const QueryString
forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newGetDimensionValuesResponse' smart constructor.
data GetDimensionValuesResponse = GetDimensionValuesResponse'
  { -- | The token for the next set of retrievable results. Amazon Web Services
    -- provides the token when the response from a previous call has more
    -- results than the maximum page size.
    GetDimensionValuesResponse -> Maybe Text
nextPageToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetDimensionValuesResponse -> Int
httpStatus :: Prelude.Int,
    -- | The filters that you used to filter your request. Some dimensions are
    -- available only for a specific context.
    --
    -- If you set the context to @COST_AND_USAGE@, you can use the following
    -- dimensions for searching:
    --
    -- -   AZ - The Availability Zone. An example is @us-east-1a@.
    --
    -- -   DATABASE_ENGINE - The Amazon Relational Database Service database.
    --     Examples are Aurora or MySQL.
    --
    -- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
    --     @m4.xlarge@.
    --
    -- -   LEGAL_ENTITY_NAME - The name of the organization that sells you
    --     Amazon Web Services services, such as Amazon Web Services.
    --
    -- -   LINKED_ACCOUNT - The description in the attribute map that includes
    --     the full name of the member account. The value field contains the
    --     Amazon Web Services ID of the member account.
    --
    -- -   OPERATING_SYSTEM - The operating system. Examples are Windows or
    --     Linux.
    --
    -- -   OPERATION - The action performed. Examples include @RunInstance@ and
    --     @CreateBucket@.
    --
    -- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
    --     Linux.
    --
    -- -   PURCHASE_TYPE - The reservation type of the purchase to which this
    --     usage is related. Examples include On-Demand Instances and Standard
    --     Reserved Instances.
    --
    -- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
    --
    -- -   USAGE_TYPE - The type of usage. An example is DataTransfer-In-Bytes.
    --     The response for the @GetDimensionValues@ operation includes a unit
    --     attribute. Examples include GB and Hrs.
    --
    -- -   USAGE_TYPE_GROUP - The grouping of common usage types. An example is
    --     Amazon EC2: CloudWatch – Alarms. The response for this operation
    --     includes a unit attribute.
    --
    -- -   RECORD_TYPE - The different types of charges such as RI fees, usage
    --     costs, tax refunds, and credits.
    --
    -- -   RESOURCE_ID - The unique identifier of the resource. ResourceId is
    --     an opt-in feature only available for last 14 days for EC2-Compute
    --     Service.
    --
    -- If you set the context to @RESERVATIONS@, you can use the following
    -- dimensions for searching:
    --
    -- -   AZ - The Availability Zone. An example is @us-east-1a@.
    --
    -- -   CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
    --     Windows or Linux.
    --
    -- -   DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
    --     deployments. Valid values are @SingleAZ@ and @MultiAZ@.
    --
    -- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
    --     @m4.xlarge@.
    --
    -- -   LINKED_ACCOUNT - The description in the attribute map that includes
    --     the full name of the member account. The value field contains the
    --     Amazon Web Services ID of the member account.
    --
    -- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
    --     Linux.
    --
    -- -   REGION - The Amazon Web Services Region.
    --
    -- -   SCOPE (Utilization only) - The scope of a Reserved Instance (RI).
    --     Values are regional or a single Availability Zone.
    --
    -- -   TAG (Coverage only) - The tags that are associated with a Reserved
    --     Instance (RI).
    --
    -- -   TENANCY - The tenancy of a resource. Examples are shared or
    --     dedicated.
    --
    -- If you set the context to @SAVINGS_PLANS@, you can use the following
    -- dimensions for searching:
    --
    -- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute)
    --
    -- -   PAYMENT_OPTION - Payment option for the given Savings Plans (for
    --     example, All Upfront)
    --
    -- -   REGION - The Amazon Web Services Region.
    --
    -- -   INSTANCE_TYPE_FAMILY - The family of instances (For example, @m5@)
    --
    -- -   LINKED_ACCOUNT - The description in the attribute map that includes
    --     the full name of the member account. The value field contains the
    --     Amazon Web Services ID of the member account.
    --
    -- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plan
    GetDimensionValuesResponse -> [DimensionValuesWithAttributes]
dimensionValues :: [DimensionValuesWithAttributes],
    -- | The number of results that Amazon Web Services returned at one time.
    GetDimensionValuesResponse -> Int
returnSize :: Prelude.Int,
    -- | The total number of search results.
    GetDimensionValuesResponse -> Int
totalSize :: Prelude.Int
  }
  deriving (GetDimensionValuesResponse -> GetDimensionValuesResponse -> Bool
(GetDimensionValuesResponse -> GetDimensionValuesResponse -> Bool)
-> (GetDimensionValuesResponse
    -> GetDimensionValuesResponse -> Bool)
-> Eq GetDimensionValuesResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetDimensionValuesResponse -> GetDimensionValuesResponse -> Bool
$c/= :: GetDimensionValuesResponse -> GetDimensionValuesResponse -> Bool
== :: GetDimensionValuesResponse -> GetDimensionValuesResponse -> Bool
$c== :: GetDimensionValuesResponse -> GetDimensionValuesResponse -> Bool
Prelude.Eq, ReadPrec [GetDimensionValuesResponse]
ReadPrec GetDimensionValuesResponse
Int -> ReadS GetDimensionValuesResponse
ReadS [GetDimensionValuesResponse]
(Int -> ReadS GetDimensionValuesResponse)
-> ReadS [GetDimensionValuesResponse]
-> ReadPrec GetDimensionValuesResponse
-> ReadPrec [GetDimensionValuesResponse]
-> Read GetDimensionValuesResponse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetDimensionValuesResponse]
$creadListPrec :: ReadPrec [GetDimensionValuesResponse]
readPrec :: ReadPrec GetDimensionValuesResponse
$creadPrec :: ReadPrec GetDimensionValuesResponse
readList :: ReadS [GetDimensionValuesResponse]
$creadList :: ReadS [GetDimensionValuesResponse]
readsPrec :: Int -> ReadS GetDimensionValuesResponse
$creadsPrec :: Int -> ReadS GetDimensionValuesResponse
Prelude.Read, Int -> GetDimensionValuesResponse -> ShowS
[GetDimensionValuesResponse] -> ShowS
GetDimensionValuesResponse -> String
(Int -> GetDimensionValuesResponse -> ShowS)
-> (GetDimensionValuesResponse -> String)
-> ([GetDimensionValuesResponse] -> ShowS)
-> Show GetDimensionValuesResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetDimensionValuesResponse] -> ShowS
$cshowList :: [GetDimensionValuesResponse] -> ShowS
show :: GetDimensionValuesResponse -> String
$cshow :: GetDimensionValuesResponse -> String
showsPrec :: Int -> GetDimensionValuesResponse -> ShowS
$cshowsPrec :: Int -> GetDimensionValuesResponse -> ShowS
Prelude.Show, (forall x.
 GetDimensionValuesResponse -> Rep GetDimensionValuesResponse x)
-> (forall x.
    Rep GetDimensionValuesResponse x -> GetDimensionValuesResponse)
-> Generic GetDimensionValuesResponse
forall x.
Rep GetDimensionValuesResponse x -> GetDimensionValuesResponse
forall x.
GetDimensionValuesResponse -> Rep GetDimensionValuesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetDimensionValuesResponse x -> GetDimensionValuesResponse
$cfrom :: forall x.
GetDimensionValuesResponse -> Rep GetDimensionValuesResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetDimensionValuesResponse' 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:
--
-- 'nextPageToken', 'getDimensionValuesResponse_nextPageToken' - The token for the next set of retrievable results. Amazon Web Services
-- provides the token when the response from a previous call has more
-- results than the maximum page size.
--
-- 'httpStatus', 'getDimensionValuesResponse_httpStatus' - The response's http status code.
--
-- 'dimensionValues', 'getDimensionValuesResponse_dimensionValues' - The filters that you used to filter your request. Some dimensions are
-- available only for a specific context.
--
-- If you set the context to @COST_AND_USAGE@, you can use the following
-- dimensions for searching:
--
-- -   AZ - The Availability Zone. An example is @us-east-1a@.
--
-- -   DATABASE_ENGINE - The Amazon Relational Database Service database.
--     Examples are Aurora or MySQL.
--
-- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
--     @m4.xlarge@.
--
-- -   LEGAL_ENTITY_NAME - The name of the organization that sells you
--     Amazon Web Services services, such as Amazon Web Services.
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   OPERATING_SYSTEM - The operating system. Examples are Windows or
--     Linux.
--
-- -   OPERATION - The action performed. Examples include @RunInstance@ and
--     @CreateBucket@.
--
-- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
--     Linux.
--
-- -   PURCHASE_TYPE - The reservation type of the purchase to which this
--     usage is related. Examples include On-Demand Instances and Standard
--     Reserved Instances.
--
-- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
--
-- -   USAGE_TYPE - The type of usage. An example is DataTransfer-In-Bytes.
--     The response for the @GetDimensionValues@ operation includes a unit
--     attribute. Examples include GB and Hrs.
--
-- -   USAGE_TYPE_GROUP - The grouping of common usage types. An example is
--     Amazon EC2: CloudWatch – Alarms. The response for this operation
--     includes a unit attribute.
--
-- -   RECORD_TYPE - The different types of charges such as RI fees, usage
--     costs, tax refunds, and credits.
--
-- -   RESOURCE_ID - The unique identifier of the resource. ResourceId is
--     an opt-in feature only available for last 14 days for EC2-Compute
--     Service.
--
-- If you set the context to @RESERVATIONS@, you can use the following
-- dimensions for searching:
--
-- -   AZ - The Availability Zone. An example is @us-east-1a@.
--
-- -   CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
--     Windows or Linux.
--
-- -   DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
--     deployments. Valid values are @SingleAZ@ and @MultiAZ@.
--
-- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
--     @m4.xlarge@.
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
--     Linux.
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   SCOPE (Utilization only) - The scope of a Reserved Instance (RI).
--     Values are regional or a single Availability Zone.
--
-- -   TAG (Coverage only) - The tags that are associated with a Reserved
--     Instance (RI).
--
-- -   TENANCY - The tenancy of a resource. Examples are shared or
--     dedicated.
--
-- If you set the context to @SAVINGS_PLANS@, you can use the following
-- dimensions for searching:
--
-- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute)
--
-- -   PAYMENT_OPTION - Payment option for the given Savings Plans (for
--     example, All Upfront)
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   INSTANCE_TYPE_FAMILY - The family of instances (For example, @m5@)
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plan
--
-- 'returnSize', 'getDimensionValuesResponse_returnSize' - The number of results that Amazon Web Services returned at one time.
--
-- 'totalSize', 'getDimensionValuesResponse_totalSize' - The total number of search results.
newGetDimensionValuesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'returnSize'
  Prelude.Int ->
  -- | 'totalSize'
  Prelude.Int ->
  GetDimensionValuesResponse
newGetDimensionValuesResponse :: Int -> Int -> Int -> GetDimensionValuesResponse
newGetDimensionValuesResponse
  Int
pHttpStatus_
  Int
pReturnSize_
  Int
pTotalSize_ =
    GetDimensionValuesResponse' :: Maybe Text
-> Int
-> [DimensionValuesWithAttributes]
-> Int
-> Int
-> GetDimensionValuesResponse
GetDimensionValuesResponse'
      { $sel:nextPageToken:GetDimensionValuesResponse' :: Maybe Text
nextPageToken =
          Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetDimensionValuesResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:dimensionValues:GetDimensionValuesResponse' :: [DimensionValuesWithAttributes]
dimensionValues = [DimensionValuesWithAttributes]
forall a. Monoid a => a
Prelude.mempty,
        $sel:returnSize:GetDimensionValuesResponse' :: Int
returnSize = Int
pReturnSize_,
        $sel:totalSize:GetDimensionValuesResponse' :: Int
totalSize = Int
pTotalSize_
      }

-- | The token for the next set of retrievable results. Amazon Web Services
-- provides the token when the response from a previous call has more
-- results than the maximum page size.
getDimensionValuesResponse_nextPageToken :: Lens.Lens' GetDimensionValuesResponse (Prelude.Maybe Prelude.Text)
getDimensionValuesResponse_nextPageToken :: (Maybe Text -> f (Maybe Text))
-> GetDimensionValuesResponse -> f GetDimensionValuesResponse
getDimensionValuesResponse_nextPageToken = (GetDimensionValuesResponse -> Maybe Text)
-> (GetDimensionValuesResponse
    -> Maybe Text -> GetDimensionValuesResponse)
-> Lens
     GetDimensionValuesResponse
     GetDimensionValuesResponse
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValuesResponse' {Maybe Text
nextPageToken :: Maybe Text
$sel:nextPageToken:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> Maybe Text
nextPageToken} -> Maybe Text
nextPageToken) (\s :: GetDimensionValuesResponse
s@GetDimensionValuesResponse' {} Maybe Text
a -> GetDimensionValuesResponse
s {$sel:nextPageToken:GetDimensionValuesResponse' :: Maybe Text
nextPageToken = Maybe Text
a} :: GetDimensionValuesResponse)

-- | The response's http status code.
getDimensionValuesResponse_httpStatus :: Lens.Lens' GetDimensionValuesResponse Prelude.Int
getDimensionValuesResponse_httpStatus :: (Int -> f Int)
-> GetDimensionValuesResponse -> f GetDimensionValuesResponse
getDimensionValuesResponse_httpStatus = (GetDimensionValuesResponse -> Int)
-> (GetDimensionValuesResponse
    -> Int -> GetDimensionValuesResponse)
-> Lens
     GetDimensionValuesResponse GetDimensionValuesResponse Int Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValuesResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetDimensionValuesResponse
s@GetDimensionValuesResponse' {} Int
a -> GetDimensionValuesResponse
s {$sel:httpStatus:GetDimensionValuesResponse' :: Int
httpStatus = Int
a} :: GetDimensionValuesResponse)

-- | The filters that you used to filter your request. Some dimensions are
-- available only for a specific context.
--
-- If you set the context to @COST_AND_USAGE@, you can use the following
-- dimensions for searching:
--
-- -   AZ - The Availability Zone. An example is @us-east-1a@.
--
-- -   DATABASE_ENGINE - The Amazon Relational Database Service database.
--     Examples are Aurora or MySQL.
--
-- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
--     @m4.xlarge@.
--
-- -   LEGAL_ENTITY_NAME - The name of the organization that sells you
--     Amazon Web Services services, such as Amazon Web Services.
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   OPERATING_SYSTEM - The operating system. Examples are Windows or
--     Linux.
--
-- -   OPERATION - The action performed. Examples include @RunInstance@ and
--     @CreateBucket@.
--
-- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
--     Linux.
--
-- -   PURCHASE_TYPE - The reservation type of the purchase to which this
--     usage is related. Examples include On-Demand Instances and Standard
--     Reserved Instances.
--
-- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
--
-- -   USAGE_TYPE - The type of usage. An example is DataTransfer-In-Bytes.
--     The response for the @GetDimensionValues@ operation includes a unit
--     attribute. Examples include GB and Hrs.
--
-- -   USAGE_TYPE_GROUP - The grouping of common usage types. An example is
--     Amazon EC2: CloudWatch – Alarms. The response for this operation
--     includes a unit attribute.
--
-- -   RECORD_TYPE - The different types of charges such as RI fees, usage
--     costs, tax refunds, and credits.
--
-- -   RESOURCE_ID - The unique identifier of the resource. ResourceId is
--     an opt-in feature only available for last 14 days for EC2-Compute
--     Service.
--
-- If you set the context to @RESERVATIONS@, you can use the following
-- dimensions for searching:
--
-- -   AZ - The Availability Zone. An example is @us-east-1a@.
--
-- -   CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
--     Windows or Linux.
--
-- -   DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
--     deployments. Valid values are @SingleAZ@ and @MultiAZ@.
--
-- -   INSTANCE_TYPE - The type of Amazon EC2 instance. An example is
--     @m4.xlarge@.
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   PLATFORM - The Amazon EC2 operating system. Examples are Windows or
--     Linux.
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   SCOPE (Utilization only) - The scope of a Reserved Instance (RI).
--     Values are regional or a single Availability Zone.
--
-- -   TAG (Coverage only) - The tags that are associated with a Reserved
--     Instance (RI).
--
-- -   TENANCY - The tenancy of a resource. Examples are shared or
--     dedicated.
--
-- If you set the context to @SAVINGS_PLANS@, you can use the following
-- dimensions for searching:
--
-- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute)
--
-- -   PAYMENT_OPTION - Payment option for the given Savings Plans (for
--     example, All Upfront)
--
-- -   REGION - The Amazon Web Services Region.
--
-- -   INSTANCE_TYPE_FAMILY - The family of instances (For example, @m5@)
--
-- -   LINKED_ACCOUNT - The description in the attribute map that includes
--     the full name of the member account. The value field contains the
--     Amazon Web Services ID of the member account.
--
-- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plan
getDimensionValuesResponse_dimensionValues :: Lens.Lens' GetDimensionValuesResponse [DimensionValuesWithAttributes]
getDimensionValuesResponse_dimensionValues :: ([DimensionValuesWithAttributes]
 -> f [DimensionValuesWithAttributes])
-> GetDimensionValuesResponse -> f GetDimensionValuesResponse
getDimensionValuesResponse_dimensionValues = (GetDimensionValuesResponse -> [DimensionValuesWithAttributes])
-> (GetDimensionValuesResponse
    -> [DimensionValuesWithAttributes] -> GetDimensionValuesResponse)
-> Lens
     GetDimensionValuesResponse
     GetDimensionValuesResponse
     [DimensionValuesWithAttributes]
     [DimensionValuesWithAttributes]
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValuesResponse' {[DimensionValuesWithAttributes]
dimensionValues :: [DimensionValuesWithAttributes]
$sel:dimensionValues:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> [DimensionValuesWithAttributes]
dimensionValues} -> [DimensionValuesWithAttributes]
dimensionValues) (\s :: GetDimensionValuesResponse
s@GetDimensionValuesResponse' {} [DimensionValuesWithAttributes]
a -> GetDimensionValuesResponse
s {$sel:dimensionValues:GetDimensionValuesResponse' :: [DimensionValuesWithAttributes]
dimensionValues = [DimensionValuesWithAttributes]
a} :: GetDimensionValuesResponse) (([DimensionValuesWithAttributes]
  -> f [DimensionValuesWithAttributes])
 -> GetDimensionValuesResponse -> f GetDimensionValuesResponse)
-> (([DimensionValuesWithAttributes]
     -> f [DimensionValuesWithAttributes])
    -> [DimensionValuesWithAttributes]
    -> f [DimensionValuesWithAttributes])
-> ([DimensionValuesWithAttributes]
    -> f [DimensionValuesWithAttributes])
-> GetDimensionValuesResponse
-> f GetDimensionValuesResponse
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. ([DimensionValuesWithAttributes]
 -> f [DimensionValuesWithAttributes])
-> [DimensionValuesWithAttributes]
-> f [DimensionValuesWithAttributes]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The number of results that Amazon Web Services returned at one time.
getDimensionValuesResponse_returnSize :: Lens.Lens' GetDimensionValuesResponse Prelude.Int
getDimensionValuesResponse_returnSize :: (Int -> f Int)
-> GetDimensionValuesResponse -> f GetDimensionValuesResponse
getDimensionValuesResponse_returnSize = (GetDimensionValuesResponse -> Int)
-> (GetDimensionValuesResponse
    -> Int -> GetDimensionValuesResponse)
-> Lens
     GetDimensionValuesResponse GetDimensionValuesResponse Int Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValuesResponse' {Int
returnSize :: Int
$sel:returnSize:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> Int
returnSize} -> Int
returnSize) (\s :: GetDimensionValuesResponse
s@GetDimensionValuesResponse' {} Int
a -> GetDimensionValuesResponse
s {$sel:returnSize:GetDimensionValuesResponse' :: Int
returnSize = Int
a} :: GetDimensionValuesResponse)

-- | The total number of search results.
getDimensionValuesResponse_totalSize :: Lens.Lens' GetDimensionValuesResponse Prelude.Int
getDimensionValuesResponse_totalSize :: (Int -> f Int)
-> GetDimensionValuesResponse -> f GetDimensionValuesResponse
getDimensionValuesResponse_totalSize = (GetDimensionValuesResponse -> Int)
-> (GetDimensionValuesResponse
    -> Int -> GetDimensionValuesResponse)
-> Lens
     GetDimensionValuesResponse GetDimensionValuesResponse Int Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDimensionValuesResponse' {Int
totalSize :: Int
$sel:totalSize:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> Int
totalSize} -> Int
totalSize) (\s :: GetDimensionValuesResponse
s@GetDimensionValuesResponse' {} Int
a -> GetDimensionValuesResponse
s {$sel:totalSize:GetDimensionValuesResponse' :: Int
totalSize = Int
a} :: GetDimensionValuesResponse)

instance Prelude.NFData GetDimensionValuesResponse