{-# 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-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- 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_context,
    getDimensionValues_filter,
    getDimensionValues_maxResults,
    getDimensionValues_nextPageToken,
    getDimensionValues_searchString,
    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 qualified Amazonka.Core.Lens.Internal as Lens
import Amazonka.CostExplorer.Types
import qualified Amazonka.Data as Data
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 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@.
    --
    -- -   BILLING_ENTITY - The Amazon Web Services seller that your account is
    --     with. Possible values are the following:
    --
    --     - Amazon Web Services(Amazon Web Services): The entity that sells
    --     Amazon Web Services.
    --
    --     - AISPL (Amazon Internet Services Pvt. Ltd.): The local Indian
    --     entity that\'s an acting reseller for Amazon Web Services in India.
    --
    --     - Amazon Web Services Marketplace: The entity that supports the sale
    --     of solutions that are built on Amazon Web Services by third-party
    --     software providers.
    --
    -- -   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@.
    --
    -- -   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@.
    --
    -- -   INSTANCE_TYPE_FAMILY - A family of instance types optimized to fit
    --     different use cases. Examples are @Compute Optimized@ (for example,
    --     @C4@, @C5@, @C6g@, and @C7g@), @Memory Optimization@ (for example,
    --     @R4@, @R5n@, @R5b@, and @R6g@).
    --
    -- -   INVOICING_ENTITY - The name of the entity that issues the Amazon Web
    --     Services invoice.
    --
    -- -   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 that this usage
    --     is related to. Examples include On-Demand Instances and Standard
    --     Reserved Instances.
    --
    -- -   RESERVATION_ID - The unique identifier for an Amazon Web Services
    --     Reservation Instance.
    --
    -- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plans.
    --
    -- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or
    --     Compute).
    --
    -- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
    --
    -- -   TENANCY - The tenancy of a resource. Examples are shared or
    --     dedicated.
    --
    -- -   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 Reserved
    --     Instance (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 - The 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 Plans.
    GetDimensionValues -> Maybe Context
context :: Prelude.Maybe Context,
    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 are returned for this request. If
    -- MaxResults isn\'t specified with SortBy, the request returns 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 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 value that you want to search the filter values for.
    GetDimensionValues -> Maybe Text
searchString :: Prelude.Maybe Prelude.Text,
    -- | The value that you want to sort the data by.
    --
    -- The key represents cost and usage metrics. The following values are
    -- supported:
    --
    -- -   @BlendedCost@
    --
    -- -   @UnblendedCost@
    --
    -- -   @AmortizedCost@
    --
    -- -   @NetAmortizedCost@
    --
    -- -   @NetUnblendedCost@
    --
    -- -   @UsageQuantity@
    --
    -- -   @NormalizedUsageAmount@
    --
    -- The supported values for the @SortOrder@ key are @ASCENDING@ or
    -- @DESCENDING@.
    --
    -- When you specify a @SortBy@ paramater, the context must be
    -- @COST_AND_USAGE@. Further, when using @SortBy@, @NextPageToken@ and
    -- @SearchString@ aren\'t 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@. @LINK_ACCOUNT_NAME@ and
    -- @SERVICE_CODE@ can only be used in
    -- <https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/AAPI_CostCategoryRule.html CostCategoryRule>.
    GetDimensionValues -> Dimension
dimension :: Dimension
  }
  deriving (GetDimensionValues -> GetDimensionValues -> Bool
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]
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
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. 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:
--
-- '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@.
--
-- -   BILLING_ENTITY - The Amazon Web Services seller that your account is
--     with. Possible values are the following:
--
--     - Amazon Web Services(Amazon Web Services): The entity that sells
--     Amazon Web Services.
--
--     - AISPL (Amazon Internet Services Pvt. Ltd.): The local Indian
--     entity that\'s an acting reseller for Amazon Web Services in India.
--
--     - Amazon Web Services Marketplace: The entity that supports the sale
--     of solutions that are built on Amazon Web Services by third-party
--     software providers.
--
-- -   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@.
--
-- -   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@.
--
-- -   INSTANCE_TYPE_FAMILY - A family of instance types optimized to fit
--     different use cases. Examples are @Compute Optimized@ (for example,
--     @C4@, @C5@, @C6g@, and @C7g@), @Memory Optimization@ (for example,
--     @R4@, @R5n@, @R5b@, and @R6g@).
--
-- -   INVOICING_ENTITY - The name of the entity that issues the Amazon Web
--     Services invoice.
--
-- -   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 that this usage
--     is related to. Examples include On-Demand Instances and Standard
--     Reserved Instances.
--
-- -   RESERVATION_ID - The unique identifier for an Amazon Web Services
--     Reservation Instance.
--
-- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plans.
--
-- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or
--     Compute).
--
-- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
--
-- -   TENANCY - The tenancy of a resource. Examples are shared or
--     dedicated.
--
-- -   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 Reserved
--     Instance (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 - The 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 Plans.
--
-- '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 are returned for this request. If
-- MaxResults isn\'t specified with SortBy, the request returns 1000
-- results as the default value for this parameter.
--
-- For @GetDimensionValues@, MaxResults has an upper limit of 1000.
--
-- '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.
--
-- 'searchString', 'getDimensionValues_searchString' - The value that you want to search the filter values for.
--
-- 'sortBy', 'getDimensionValues_sortBy' - The value that you want to sort the data by.
--
-- The key represents cost and usage metrics. The following values are
-- supported:
--
-- -   @BlendedCost@
--
-- -   @UnblendedCost@
--
-- -   @AmortizedCost@
--
-- -   @NetAmortizedCost@
--
-- -   @NetUnblendedCost@
--
-- -   @UsageQuantity@
--
-- -   @NormalizedUsageAmount@
--
-- The supported values for the @SortOrder@ key are @ASCENDING@ or
-- @DESCENDING@.
--
-- When you specify a @SortBy@ paramater, the context must be
-- @COST_AND_USAGE@. Further, when using @SortBy@, @NextPageToken@ and
-- @SearchString@ aren\'t 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@. @LINK_ACCOUNT_NAME@ and
-- @SERVICE_CODE@ can only be used in
-- <https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/AAPI_CostCategoryRule.html CostCategoryRule>.
newGetDimensionValues ::
  -- | 'timePeriod'
  DateInterval ->
  -- | 'dimension'
  Dimension ->
  GetDimensionValues
newGetDimensionValues :: DateInterval -> Dimension -> GetDimensionValues
newGetDimensionValues DateInterval
pTimePeriod_ Dimension
pDimension_ =
  GetDimensionValues'
    { $sel:context:GetDimensionValues' :: Maybe Context
context = forall a. Maybe a
Prelude.Nothing,
      $sel:filter':GetDimensionValues' :: Maybe Expression
filter' = forall a. Maybe a
Prelude.Nothing,
      $sel:maxResults:GetDimensionValues' :: Maybe Natural
maxResults = forall a. Maybe a
Prelude.Nothing,
      $sel:nextPageToken:GetDimensionValues' :: Maybe Text
nextPageToken = forall a. Maybe a
Prelude.Nothing,
      $sel:searchString:GetDimensionValues' :: Maybe Text
searchString = forall a. Maybe a
Prelude.Nothing,
      $sel:sortBy:GetDimensionValues' :: Maybe [SortDefinition]
sortBy = forall a. Maybe a
Prelude.Nothing,
      $sel:timePeriod:GetDimensionValues' :: DateInterval
timePeriod = DateInterval
pTimePeriod_,
      $sel:dimension:GetDimensionValues' :: Dimension
dimension = Dimension
pDimension_
    }

-- | 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@.
--
-- -   BILLING_ENTITY - The Amazon Web Services seller that your account is
--     with. Possible values are the following:
--
--     - Amazon Web Services(Amazon Web Services): The entity that sells
--     Amazon Web Services.
--
--     - AISPL (Amazon Internet Services Pvt. Ltd.): The local Indian
--     entity that\'s an acting reseller for Amazon Web Services in India.
--
--     - Amazon Web Services Marketplace: The entity that supports the sale
--     of solutions that are built on Amazon Web Services by third-party
--     software providers.
--
-- -   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@.
--
-- -   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@.
--
-- -   INSTANCE_TYPE_FAMILY - A family of instance types optimized to fit
--     different use cases. Examples are @Compute Optimized@ (for example,
--     @C4@, @C5@, @C6g@, and @C7g@), @Memory Optimization@ (for example,
--     @R4@, @R5n@, @R5b@, and @R6g@).
--
-- -   INVOICING_ENTITY - The name of the entity that issues the Amazon Web
--     Services invoice.
--
-- -   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 that this usage
--     is related to. Examples include On-Demand Instances and Standard
--     Reserved Instances.
--
-- -   RESERVATION_ID - The unique identifier for an Amazon Web Services
--     Reservation Instance.
--
-- -   SAVINGS_PLAN_ARN - The unique identifier for your Savings Plans.
--
-- -   SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or
--     Compute).
--
-- -   SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
--
-- -   TENANCY - The tenancy of a resource. Examples are shared or
--     dedicated.
--
-- -   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 Reserved
--     Instance (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 - The 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 Plans.
getDimensionValues_context :: Lens.Lens' GetDimensionValues (Prelude.Maybe Context)
getDimensionValues_context :: Lens' GetDimensionValues (Maybe Context)
getDimensionValues_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)

-- | Undocumented member.
getDimensionValues_filter :: Lens.Lens' GetDimensionValues (Prelude.Maybe Expression)
getDimensionValues_filter :: Lens' GetDimensionValues (Maybe Expression)
getDimensionValues_filter = 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 are returned for this request. If
-- MaxResults isn\'t specified with SortBy, the request returns 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 :: Lens' GetDimensionValues (Maybe Natural)
getDimensionValues_maxResults = 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 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 :: Lens' GetDimensionValues (Maybe Text)
getDimensionValues_nextPageToken = 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 value that you want to search the filter values for.
getDimensionValues_searchString :: Lens.Lens' GetDimensionValues (Prelude.Maybe Prelude.Text)
getDimensionValues_searchString :: Lens' GetDimensionValues (Maybe Text)
getDimensionValues_searchString = 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)

-- | The value that you want to sort the data by.
--
-- The key represents cost and usage metrics. The following values are
-- supported:
--
-- -   @BlendedCost@
--
-- -   @UnblendedCost@
--
-- -   @AmortizedCost@
--
-- -   @NetAmortizedCost@
--
-- -   @NetUnblendedCost@
--
-- -   @UsageQuantity@
--
-- -   @NormalizedUsageAmount@
--
-- The supported values for the @SortOrder@ key are @ASCENDING@ or
-- @DESCENDING@.
--
-- When you specify a @SortBy@ paramater, the context must be
-- @COST_AND_USAGE@. Further, when using @SortBy@, @NextPageToken@ and
-- @SearchString@ aren\'t supported.
getDimensionValues_sortBy :: Lens.Lens' GetDimensionValues (Prelude.Maybe [SortDefinition])
getDimensionValues_sortBy :: Lens' GetDimensionValues (Maybe [SortDefinition])
getDimensionValues_sortBy = 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) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. 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 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 :: Lens' GetDimensionValues DateInterval
getDimensionValues_timePeriod = 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@. @LINK_ACCOUNT_NAME@ and
-- @SERVICE_CODE@ can only be used in
-- <https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/AAPI_CostCategoryRule.html CostCategoryRule>.
getDimensionValues_dimension :: Lens.Lens' GetDimensionValues Dimension
getDimensionValues_dimension :: Lens' GetDimensionValues Dimension
getDimensionValues_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 :: (Service -> Service)
-> GetDimensionValues -> Request GetDimensionValues
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetDimensionValues
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetDimensionValues)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> 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'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"NextPageToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"DimensionValues"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"ReturnSize")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"TotalSize")
      )

instance Prelude.Hashable GetDimensionValues where
  hashWithSalt :: Int -> GetDimensionValues -> Int
hashWithSalt Int
_salt GetDimensionValues' {Maybe Natural
Maybe [SortDefinition]
Maybe Text
Maybe Context
Maybe Expression
DateInterval
Dimension
dimension :: Dimension
timePeriod :: DateInterval
sortBy :: Maybe [SortDefinition]
searchString :: Maybe Text
nextPageToken :: Maybe Text
maxResults :: Maybe Natural
filter' :: Maybe Expression
context :: Maybe Context
$sel:dimension:GetDimensionValues' :: GetDimensionValues -> Dimension
$sel:timePeriod:GetDimensionValues' :: GetDimensionValues -> DateInterval
$sel:sortBy:GetDimensionValues' :: GetDimensionValues -> Maybe [SortDefinition]
$sel:searchString:GetDimensionValues' :: GetDimensionValues -> Maybe Text
$sel:nextPageToken:GetDimensionValues' :: GetDimensionValues -> Maybe Text
$sel:maxResults:GetDimensionValues' :: GetDimensionValues -> Maybe Natural
$sel:filter':GetDimensionValues' :: GetDimensionValues -> Maybe Expression
$sel:context:GetDimensionValues' :: GetDimensionValues -> Maybe Context
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Context
context
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Expression
filter'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maxResults
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextPageToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
searchString
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [SortDefinition]
sortBy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DateInterval
timePeriod
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Dimension
dimension

instance Prelude.NFData GetDimensionValues where
  rnf :: GetDimensionValues -> ()
rnf GetDimensionValues' {Maybe Natural
Maybe [SortDefinition]
Maybe Text
Maybe Context
Maybe Expression
DateInterval
Dimension
dimension :: Dimension
timePeriod :: DateInterval
sortBy :: Maybe [SortDefinition]
searchString :: Maybe Text
nextPageToken :: Maybe Text
maxResults :: Maybe Natural
filter' :: Maybe Expression
context :: Maybe Context
$sel:dimension:GetDimensionValues' :: GetDimensionValues -> Dimension
$sel:timePeriod:GetDimensionValues' :: GetDimensionValues -> DateInterval
$sel:sortBy:GetDimensionValues' :: GetDimensionValues -> Maybe [SortDefinition]
$sel:searchString:GetDimensionValues' :: GetDimensionValues -> Maybe Text
$sel:nextPageToken:GetDimensionValues' :: GetDimensionValues -> Maybe Text
$sel:maxResults:GetDimensionValues' :: GetDimensionValues -> Maybe Natural
$sel:filter':GetDimensionValues' :: GetDimensionValues -> Maybe Expression
$sel:context:GetDimensionValues' :: GetDimensionValues -> Maybe Context
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Context
context
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Expression
filter'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextPageToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
searchString
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [SortDefinition]
sortBy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DateInterval
timePeriod
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Dimension
dimension

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

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

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

instance Data.ToQuery GetDimensionValues where
  toQuery :: GetDimensionValues -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const 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. You can opt-in by enabling @Hourly@ and
    --     @Resource Level Data@ in Cost Management Console preferences.
    --
    -- 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
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]
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
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.
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. You can opt-in by enabling @Hourly@ and
--     @Resource Level Data@ in Cost Management Console preferences.
--
-- 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'
      { $sel:nextPageToken:GetDimensionValuesResponse' :: Maybe Text
nextPageToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetDimensionValuesResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:dimensionValues:GetDimensionValuesResponse' :: [DimensionValuesWithAttributes]
dimensionValues = 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 :: Lens' GetDimensionValuesResponse (Maybe Text)
getDimensionValuesResponse_nextPageToken = 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 :: Lens' GetDimensionValuesResponse Int
getDimensionValuesResponse_httpStatus = 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. You can opt-in by enabling @Hourly@ and
--     @Resource Level Data@ in Cost Management Console preferences.
--
-- 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 :: Lens' GetDimensionValuesResponse [DimensionValuesWithAttributes]
getDimensionValuesResponse_dimensionValues = 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) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. 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 :: Lens' GetDimensionValuesResponse Int
getDimensionValuesResponse_returnSize = 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 :: Lens' GetDimensionValuesResponse Int
getDimensionValuesResponse_totalSize = 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 where
  rnf :: GetDimensionValuesResponse -> ()
rnf GetDimensionValuesResponse' {Int
[DimensionValuesWithAttributes]
Maybe Text
totalSize :: Int
returnSize :: Int
dimensionValues :: [DimensionValuesWithAttributes]
httpStatus :: Int
nextPageToken :: Maybe Text
$sel:totalSize:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> Int
$sel:returnSize:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> Int
$sel:dimensionValues:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> [DimensionValuesWithAttributes]
$sel:httpStatus:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> Int
$sel:nextPageToken:GetDimensionValuesResponse' :: GetDimensionValuesResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextPageToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [DimensionValuesWithAttributes]
dimensionValues
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
returnSize
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
totalSize