{-# 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.MarketplaceAnalytics.GenerateDataSet
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Given a data set type and data set publication date, asynchronously
-- publishes the requested data set to the specified S3 bucket and notifies
-- the specified SNS topic once the data is available. Returns a unique
-- request identifier that can be used to correlate requests with
-- notifications from the SNS topic. Data sets will be published in
-- comma-separated values (CSV) format with the file name
-- {data_set_type}_YYYY-MM-DD.csv. If a file with the same name already
-- exists (e.g. if the same data set is requested twice), the original file
-- will be overwritten by the new file. Requires a Role with an attached
-- permissions policy providing Allow permissions for the following
-- actions: s3:PutObject, s3:GetBucketLocation, sns:GetTopicAttributes,
-- sns:Publish, iam:GetRolePolicy.
module Amazonka.MarketplaceAnalytics.GenerateDataSet
  ( -- * Creating a Request
    GenerateDataSet (..),
    newGenerateDataSet,

    -- * Request Lenses
    generateDataSet_customerDefinedValues,
    generateDataSet_destinationS3Prefix,
    generateDataSet_dataSetType,
    generateDataSet_dataSetPublicationDate,
    generateDataSet_roleNameArn,
    generateDataSet_destinationS3BucketName,
    generateDataSet_snsTopicArn,

    -- * Destructuring the Response
    GenerateDataSetResponse (..),
    newGenerateDataSetResponse,

    -- * Response Lenses
    generateDataSetResponse_dataSetRequestId,
    generateDataSetResponse_httpStatus,
  )
where

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

-- | Container for the parameters to the GenerateDataSet operation.
--
-- /See:/ 'newGenerateDataSet' smart constructor.
data GenerateDataSet = GenerateDataSet'
  { -- | (Optional) Key-value pairs which will be returned, unmodified, in the
    -- Amazon SNS notification message and the data set metadata file. These
    -- key-value pairs can be used to correlated responses with tracking
    -- information from other systems.
    GenerateDataSet -> Maybe (HashMap Text Text)
customerDefinedValues :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | (Optional) The desired S3 prefix for the published data set, similar to
    -- a directory path in standard file systems. For example, if given the
    -- bucket name \"mybucket\" and the prefix \"myprefix\/mydatasets\", the
    -- output file \"outputfile\" would be published to
    -- \"s3:\/\/mybucket\/myprefix\/mydatasets\/outputfile\". If the prefix
    -- directory structure does not exist, it will be created. If no prefix is
    -- provided, the data set will be published to the S3 bucket root.
    GenerateDataSet -> Maybe Text
destinationS3Prefix :: Prelude.Maybe Prelude.Text,
    -- | The desired data set type.
    --
    -- -   __customer_subscriber_hourly_monthly_subscriptions__
    --
    --     From 2017-09-15 to present: Available daily by 24:00 UTC.
    --
    -- -   __customer_subscriber_annual_subscriptions__
    --
    --     From 2017-09-15 to present: Available daily by 24:00 UTC.
    --
    -- -   __daily_business_usage_by_instance_type__
    --
    --     From 2017-09-15 to present: Available daily by 24:00 UTC.
    --
    -- -   __daily_business_fees__
    --
    --     From 2017-09-15 to present: Available daily by 24:00 UTC.
    --
    -- -   __daily_business_free_trial_conversions__
    --
    --     From 2017-09-15 to present: Available daily by 24:00 UTC.
    --
    -- -   __daily_business_new_instances__
    --
    --     From 2017-09-15 to present: Available daily by 24:00 UTC.
    --
    -- -   __daily_business_new_product_subscribers__
    --
    --     From 2017-09-15 to present: Available daily by 24:00 UTC.
    --
    -- -   __daily_business_canceled_product_subscribers__
    --
    --     From 2017-09-15 to present: Available daily by 24:00 UTC.
    --
    -- -   __monthly_revenue_billing_and_revenue_data__
    --
    --     From 2017-09-15 to present: Available monthly on the 15th day of the
    --     month by 24:00 UTC. Data includes metered transactions (e.g. hourly)
    --     from one month prior.
    --
    -- -   __monthly_revenue_annual_subscriptions__
    --
    --     From 2017-09-15 to present: Available monthly on the 15th day of the
    --     month by 24:00 UTC. Data includes up-front software charges (e.g.
    --     annual) from one month prior.
    --
    -- -   __monthly_revenue_field_demonstration_usage__
    --
    --     From 2018-03-15 to present: Available monthly on the 15th day of the
    --     month by 24:00 UTC.
    --
    -- -   __monthly_revenue_flexible_payment_schedule__
    --
    --     From 2018-11-15 to present: Available monthly on the 15th day of the
    --     month by 24:00 UTC.
    --
    -- -   __disbursed_amount_by_product__
    --
    --     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
    --
    -- -   __disbursed_amount_by_instance_hours__
    --
    --     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
    --
    -- -   __disbursed_amount_by_customer_geo__
    --
    --     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
    --
    -- -   __disbursed_amount_by_age_of_uncollected_funds__
    --
    --     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
    --
    -- -   __disbursed_amount_by_age_of_disbursed_funds__
    --
    --     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
    --
    -- -   __disbursed_amount_by_age_of_past_due_funds__
    --
    --     From 2018-04-07 to present: Available every 30 days by 24:00 UTC.
    --
    -- -   __disbursed_amount_by_uncollected_funds_breakdown__
    --
    --     From 2019-10-04 to present: Available every 30 days by 24:00 UTC.
    --
    -- -   __sales_compensation_billed_revenue__
    --
    --     From 2017-09-15 to present: Available monthly on the 15th day of the
    --     month by 24:00 UTC. Data includes metered transactions (e.g. hourly)
    --     from one month prior, and up-front software charges (e.g. annual)
    --     from one month prior.
    --
    -- -   __us_sales_and_use_tax_records__
    --
    --     From 2017-09-15 to present: Available monthly on the 15th day of the
    --     month by 24:00 UTC.
    --
    -- -   __disbursed_amount_by_product_with_uncollected_funds__
    --
    --     This data set is deprecated. Download related reports from AMMP
    --     instead!
    --
    -- -   __customer_profile_by_industry__
    --
    --     This data set is deprecated. Download related reports from AMMP
    --     instead!
    --
    -- -   __customer_profile_by_revenue__
    --
    --     This data set is deprecated. Download related reports from AMMP
    --     instead!
    --
    -- -   __customer_profile_by_geography__
    --
    --     This data set is deprecated. Download related reports from AMMP
    --     instead!
    GenerateDataSet -> DataSetType
dataSetType :: DataSetType,
    -- | The date a data set was published. For daily data sets, provide a date
    -- with day-level granularity for the desired day. For monthly data sets
    -- except those with prefix disbursed_amount, provide a date with
    -- month-level granularity for the desired month (the day value will be
    -- ignored). For data sets with prefix disbursed_amount, provide a date
    -- with day-level granularity for the desired day. For these data sets we
    -- will look backwards in time over the range of 31 days until the first
    -- data set is found (the latest one).
    GenerateDataSet -> POSIX
dataSetPublicationDate :: Data.POSIX,
    -- | The Amazon Resource Name (ARN) of the Role with an attached permissions
    -- policy to interact with the provided AWS services.
    GenerateDataSet -> Text
roleNameArn :: Prelude.Text,
    -- | The name (friendly name, not ARN) of the destination S3 bucket.
    GenerateDataSet -> Text
destinationS3BucketName :: Prelude.Text,
    -- | Amazon Resource Name (ARN) for the SNS Topic that will be notified when
    -- the data set has been published or if an error has occurred.
    GenerateDataSet -> Text
snsTopicArn :: Prelude.Text
  }
  deriving (GenerateDataSet -> GenerateDataSet -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GenerateDataSet -> GenerateDataSet -> Bool
$c/= :: GenerateDataSet -> GenerateDataSet -> Bool
== :: GenerateDataSet -> GenerateDataSet -> Bool
$c== :: GenerateDataSet -> GenerateDataSet -> Bool
Prelude.Eq, ReadPrec [GenerateDataSet]
ReadPrec GenerateDataSet
Int -> ReadS GenerateDataSet
ReadS [GenerateDataSet]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GenerateDataSet]
$creadListPrec :: ReadPrec [GenerateDataSet]
readPrec :: ReadPrec GenerateDataSet
$creadPrec :: ReadPrec GenerateDataSet
readList :: ReadS [GenerateDataSet]
$creadList :: ReadS [GenerateDataSet]
readsPrec :: Int -> ReadS GenerateDataSet
$creadsPrec :: Int -> ReadS GenerateDataSet
Prelude.Read, Int -> GenerateDataSet -> ShowS
[GenerateDataSet] -> ShowS
GenerateDataSet -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GenerateDataSet] -> ShowS
$cshowList :: [GenerateDataSet] -> ShowS
show :: GenerateDataSet -> String
$cshow :: GenerateDataSet -> String
showsPrec :: Int -> GenerateDataSet -> ShowS
$cshowsPrec :: Int -> GenerateDataSet -> ShowS
Prelude.Show, forall x. Rep GenerateDataSet x -> GenerateDataSet
forall x. GenerateDataSet -> Rep GenerateDataSet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GenerateDataSet x -> GenerateDataSet
$cfrom :: forall x. GenerateDataSet -> Rep GenerateDataSet x
Prelude.Generic)

-- |
-- Create a value of 'GenerateDataSet' 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:
--
-- 'customerDefinedValues', 'generateDataSet_customerDefinedValues' - (Optional) Key-value pairs which will be returned, unmodified, in the
-- Amazon SNS notification message and the data set metadata file. These
-- key-value pairs can be used to correlated responses with tracking
-- information from other systems.
--
-- 'destinationS3Prefix', 'generateDataSet_destinationS3Prefix' - (Optional) The desired S3 prefix for the published data set, similar to
-- a directory path in standard file systems. For example, if given the
-- bucket name \"mybucket\" and the prefix \"myprefix\/mydatasets\", the
-- output file \"outputfile\" would be published to
-- \"s3:\/\/mybucket\/myprefix\/mydatasets\/outputfile\". If the prefix
-- directory structure does not exist, it will be created. If no prefix is
-- provided, the data set will be published to the S3 bucket root.
--
-- 'dataSetType', 'generateDataSet_dataSetType' - The desired data set type.
--
-- -   __customer_subscriber_hourly_monthly_subscriptions__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __customer_subscriber_annual_subscriptions__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_usage_by_instance_type__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_fees__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_free_trial_conversions__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_new_instances__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_new_product_subscribers__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_canceled_product_subscribers__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __monthly_revenue_billing_and_revenue_data__
--
--     From 2017-09-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC. Data includes metered transactions (e.g. hourly)
--     from one month prior.
--
-- -   __monthly_revenue_annual_subscriptions__
--
--     From 2017-09-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC. Data includes up-front software charges (e.g.
--     annual) from one month prior.
--
-- -   __monthly_revenue_field_demonstration_usage__
--
--     From 2018-03-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC.
--
-- -   __monthly_revenue_flexible_payment_schedule__
--
--     From 2018-11-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC.
--
-- -   __disbursed_amount_by_product__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_instance_hours__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_customer_geo__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_age_of_uncollected_funds__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_age_of_disbursed_funds__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_age_of_past_due_funds__
--
--     From 2018-04-07 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_uncollected_funds_breakdown__
--
--     From 2019-10-04 to present: Available every 30 days by 24:00 UTC.
--
-- -   __sales_compensation_billed_revenue__
--
--     From 2017-09-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC. Data includes metered transactions (e.g. hourly)
--     from one month prior, and up-front software charges (e.g. annual)
--     from one month prior.
--
-- -   __us_sales_and_use_tax_records__
--
--     From 2017-09-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC.
--
-- -   __disbursed_amount_by_product_with_uncollected_funds__
--
--     This data set is deprecated. Download related reports from AMMP
--     instead!
--
-- -   __customer_profile_by_industry__
--
--     This data set is deprecated. Download related reports from AMMP
--     instead!
--
-- -   __customer_profile_by_revenue__
--
--     This data set is deprecated. Download related reports from AMMP
--     instead!
--
-- -   __customer_profile_by_geography__
--
--     This data set is deprecated. Download related reports from AMMP
--     instead!
--
-- 'dataSetPublicationDate', 'generateDataSet_dataSetPublicationDate' - The date a data set was published. For daily data sets, provide a date
-- with day-level granularity for the desired day. For monthly data sets
-- except those with prefix disbursed_amount, provide a date with
-- month-level granularity for the desired month (the day value will be
-- ignored). For data sets with prefix disbursed_amount, provide a date
-- with day-level granularity for the desired day. For these data sets we
-- will look backwards in time over the range of 31 days until the first
-- data set is found (the latest one).
--
-- 'roleNameArn', 'generateDataSet_roleNameArn' - The Amazon Resource Name (ARN) of the Role with an attached permissions
-- policy to interact with the provided AWS services.
--
-- 'destinationS3BucketName', 'generateDataSet_destinationS3BucketName' - The name (friendly name, not ARN) of the destination S3 bucket.
--
-- 'snsTopicArn', 'generateDataSet_snsTopicArn' - Amazon Resource Name (ARN) for the SNS Topic that will be notified when
-- the data set has been published or if an error has occurred.
newGenerateDataSet ::
  -- | 'dataSetType'
  DataSetType ->
  -- | 'dataSetPublicationDate'
  Prelude.UTCTime ->
  -- | 'roleNameArn'
  Prelude.Text ->
  -- | 'destinationS3BucketName'
  Prelude.Text ->
  -- | 'snsTopicArn'
  Prelude.Text ->
  GenerateDataSet
newGenerateDataSet :: DataSetType -> UTCTime -> Text -> Text -> Text -> GenerateDataSet
newGenerateDataSet
  DataSetType
pDataSetType_
  UTCTime
pDataSetPublicationDate_
  Text
pRoleNameArn_
  Text
pDestinationS3BucketName_
  Text
pSnsTopicArn_ =
    GenerateDataSet'
      { $sel:customerDefinedValues:GenerateDataSet' :: Maybe (HashMap Text Text)
customerDefinedValues =
          forall a. Maybe a
Prelude.Nothing,
        $sel:destinationS3Prefix:GenerateDataSet' :: Maybe Text
destinationS3Prefix = forall a. Maybe a
Prelude.Nothing,
        $sel:dataSetType:GenerateDataSet' :: DataSetType
dataSetType = DataSetType
pDataSetType_,
        $sel:dataSetPublicationDate:GenerateDataSet' :: POSIX
dataSetPublicationDate =
          forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pDataSetPublicationDate_,
        $sel:roleNameArn:GenerateDataSet' :: Text
roleNameArn = Text
pRoleNameArn_,
        $sel:destinationS3BucketName:GenerateDataSet' :: Text
destinationS3BucketName = Text
pDestinationS3BucketName_,
        $sel:snsTopicArn:GenerateDataSet' :: Text
snsTopicArn = Text
pSnsTopicArn_
      }

-- | (Optional) Key-value pairs which will be returned, unmodified, in the
-- Amazon SNS notification message and the data set metadata file. These
-- key-value pairs can be used to correlated responses with tracking
-- information from other systems.
generateDataSet_customerDefinedValues :: Lens.Lens' GenerateDataSet (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
generateDataSet_customerDefinedValues :: Lens' GenerateDataSet (Maybe (HashMap Text Text))
generateDataSet_customerDefinedValues = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateDataSet' {Maybe (HashMap Text Text)
customerDefinedValues :: Maybe (HashMap Text Text)
$sel:customerDefinedValues:GenerateDataSet' :: GenerateDataSet -> Maybe (HashMap Text Text)
customerDefinedValues} -> Maybe (HashMap Text Text)
customerDefinedValues) (\s :: GenerateDataSet
s@GenerateDataSet' {} Maybe (HashMap Text Text)
a -> GenerateDataSet
s {$sel:customerDefinedValues:GenerateDataSet' :: Maybe (HashMap Text Text)
customerDefinedValues = Maybe (HashMap Text Text)
a} :: GenerateDataSet) 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

-- | (Optional) The desired S3 prefix for the published data set, similar to
-- a directory path in standard file systems. For example, if given the
-- bucket name \"mybucket\" and the prefix \"myprefix\/mydatasets\", the
-- output file \"outputfile\" would be published to
-- \"s3:\/\/mybucket\/myprefix\/mydatasets\/outputfile\". If the prefix
-- directory structure does not exist, it will be created. If no prefix is
-- provided, the data set will be published to the S3 bucket root.
generateDataSet_destinationS3Prefix :: Lens.Lens' GenerateDataSet (Prelude.Maybe Prelude.Text)
generateDataSet_destinationS3Prefix :: Lens' GenerateDataSet (Maybe Text)
generateDataSet_destinationS3Prefix = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateDataSet' {Maybe Text
destinationS3Prefix :: Maybe Text
$sel:destinationS3Prefix:GenerateDataSet' :: GenerateDataSet -> Maybe Text
destinationS3Prefix} -> Maybe Text
destinationS3Prefix) (\s :: GenerateDataSet
s@GenerateDataSet' {} Maybe Text
a -> GenerateDataSet
s {$sel:destinationS3Prefix:GenerateDataSet' :: Maybe Text
destinationS3Prefix = Maybe Text
a} :: GenerateDataSet)

-- | The desired data set type.
--
-- -   __customer_subscriber_hourly_monthly_subscriptions__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __customer_subscriber_annual_subscriptions__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_usage_by_instance_type__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_fees__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_free_trial_conversions__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_new_instances__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_new_product_subscribers__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __daily_business_canceled_product_subscribers__
--
--     From 2017-09-15 to present: Available daily by 24:00 UTC.
--
-- -   __monthly_revenue_billing_and_revenue_data__
--
--     From 2017-09-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC. Data includes metered transactions (e.g. hourly)
--     from one month prior.
--
-- -   __monthly_revenue_annual_subscriptions__
--
--     From 2017-09-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC. Data includes up-front software charges (e.g.
--     annual) from one month prior.
--
-- -   __monthly_revenue_field_demonstration_usage__
--
--     From 2018-03-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC.
--
-- -   __monthly_revenue_flexible_payment_schedule__
--
--     From 2018-11-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC.
--
-- -   __disbursed_amount_by_product__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_instance_hours__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_customer_geo__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_age_of_uncollected_funds__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_age_of_disbursed_funds__
--
--     From 2017-09-15 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_age_of_past_due_funds__
--
--     From 2018-04-07 to present: Available every 30 days by 24:00 UTC.
--
-- -   __disbursed_amount_by_uncollected_funds_breakdown__
--
--     From 2019-10-04 to present: Available every 30 days by 24:00 UTC.
--
-- -   __sales_compensation_billed_revenue__
--
--     From 2017-09-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC. Data includes metered transactions (e.g. hourly)
--     from one month prior, and up-front software charges (e.g. annual)
--     from one month prior.
--
-- -   __us_sales_and_use_tax_records__
--
--     From 2017-09-15 to present: Available monthly on the 15th day of the
--     month by 24:00 UTC.
--
-- -   __disbursed_amount_by_product_with_uncollected_funds__
--
--     This data set is deprecated. Download related reports from AMMP
--     instead!
--
-- -   __customer_profile_by_industry__
--
--     This data set is deprecated. Download related reports from AMMP
--     instead!
--
-- -   __customer_profile_by_revenue__
--
--     This data set is deprecated. Download related reports from AMMP
--     instead!
--
-- -   __customer_profile_by_geography__
--
--     This data set is deprecated. Download related reports from AMMP
--     instead!
generateDataSet_dataSetType :: Lens.Lens' GenerateDataSet DataSetType
generateDataSet_dataSetType :: Lens' GenerateDataSet DataSetType
generateDataSet_dataSetType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateDataSet' {DataSetType
dataSetType :: DataSetType
$sel:dataSetType:GenerateDataSet' :: GenerateDataSet -> DataSetType
dataSetType} -> DataSetType
dataSetType) (\s :: GenerateDataSet
s@GenerateDataSet' {} DataSetType
a -> GenerateDataSet
s {$sel:dataSetType:GenerateDataSet' :: DataSetType
dataSetType = DataSetType
a} :: GenerateDataSet)

-- | The date a data set was published. For daily data sets, provide a date
-- with day-level granularity for the desired day. For monthly data sets
-- except those with prefix disbursed_amount, provide a date with
-- month-level granularity for the desired month (the day value will be
-- ignored). For data sets with prefix disbursed_amount, provide a date
-- with day-level granularity for the desired day. For these data sets we
-- will look backwards in time over the range of 31 days until the first
-- data set is found (the latest one).
generateDataSet_dataSetPublicationDate :: Lens.Lens' GenerateDataSet Prelude.UTCTime
generateDataSet_dataSetPublicationDate :: Lens' GenerateDataSet UTCTime
generateDataSet_dataSetPublicationDate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateDataSet' {POSIX
dataSetPublicationDate :: POSIX
$sel:dataSetPublicationDate:GenerateDataSet' :: GenerateDataSet -> POSIX
dataSetPublicationDate} -> POSIX
dataSetPublicationDate) (\s :: GenerateDataSet
s@GenerateDataSet' {} POSIX
a -> GenerateDataSet
s {$sel:dataSetPublicationDate:GenerateDataSet' :: POSIX
dataSetPublicationDate = POSIX
a} :: GenerateDataSet) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The Amazon Resource Name (ARN) of the Role with an attached permissions
-- policy to interact with the provided AWS services.
generateDataSet_roleNameArn :: Lens.Lens' GenerateDataSet Prelude.Text
generateDataSet_roleNameArn :: Lens' GenerateDataSet Text
generateDataSet_roleNameArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateDataSet' {Text
roleNameArn :: Text
$sel:roleNameArn:GenerateDataSet' :: GenerateDataSet -> Text
roleNameArn} -> Text
roleNameArn) (\s :: GenerateDataSet
s@GenerateDataSet' {} Text
a -> GenerateDataSet
s {$sel:roleNameArn:GenerateDataSet' :: Text
roleNameArn = Text
a} :: GenerateDataSet)

-- | The name (friendly name, not ARN) of the destination S3 bucket.
generateDataSet_destinationS3BucketName :: Lens.Lens' GenerateDataSet Prelude.Text
generateDataSet_destinationS3BucketName :: Lens' GenerateDataSet Text
generateDataSet_destinationS3BucketName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateDataSet' {Text
destinationS3BucketName :: Text
$sel:destinationS3BucketName:GenerateDataSet' :: GenerateDataSet -> Text
destinationS3BucketName} -> Text
destinationS3BucketName) (\s :: GenerateDataSet
s@GenerateDataSet' {} Text
a -> GenerateDataSet
s {$sel:destinationS3BucketName:GenerateDataSet' :: Text
destinationS3BucketName = Text
a} :: GenerateDataSet)

-- | Amazon Resource Name (ARN) for the SNS Topic that will be notified when
-- the data set has been published or if an error has occurred.
generateDataSet_snsTopicArn :: Lens.Lens' GenerateDataSet Prelude.Text
generateDataSet_snsTopicArn :: Lens' GenerateDataSet Text
generateDataSet_snsTopicArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateDataSet' {Text
snsTopicArn :: Text
$sel:snsTopicArn:GenerateDataSet' :: GenerateDataSet -> Text
snsTopicArn} -> Text
snsTopicArn) (\s :: GenerateDataSet
s@GenerateDataSet' {} Text
a -> GenerateDataSet
s {$sel:snsTopicArn:GenerateDataSet' :: Text
snsTopicArn = Text
a} :: GenerateDataSet)

instance Core.AWSRequest GenerateDataSet where
  type
    AWSResponse GenerateDataSet =
      GenerateDataSetResponse
  request :: (Service -> Service) -> GenerateDataSet -> Request GenerateDataSet
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 GenerateDataSet
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GenerateDataSet)))
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 -> GenerateDataSetResponse
GenerateDataSetResponse'
            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
"dataSetRequestId")
            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))
      )

instance Prelude.Hashable GenerateDataSet where
  hashWithSalt :: Int -> GenerateDataSet -> Int
hashWithSalt Int
_salt GenerateDataSet' {Maybe Text
Maybe (HashMap Text Text)
Text
POSIX
DataSetType
snsTopicArn :: Text
destinationS3BucketName :: Text
roleNameArn :: Text
dataSetPublicationDate :: POSIX
dataSetType :: DataSetType
destinationS3Prefix :: Maybe Text
customerDefinedValues :: Maybe (HashMap Text Text)
$sel:snsTopicArn:GenerateDataSet' :: GenerateDataSet -> Text
$sel:destinationS3BucketName:GenerateDataSet' :: GenerateDataSet -> Text
$sel:roleNameArn:GenerateDataSet' :: GenerateDataSet -> Text
$sel:dataSetPublicationDate:GenerateDataSet' :: GenerateDataSet -> POSIX
$sel:dataSetType:GenerateDataSet' :: GenerateDataSet -> DataSetType
$sel:destinationS3Prefix:GenerateDataSet' :: GenerateDataSet -> Maybe Text
$sel:customerDefinedValues:GenerateDataSet' :: GenerateDataSet -> Maybe (HashMap Text Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
customerDefinedValues
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
destinationS3Prefix
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DataSetType
dataSetType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
dataSetPublicationDate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
roleNameArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
destinationS3BucketName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
snsTopicArn

instance Prelude.NFData GenerateDataSet where
  rnf :: GenerateDataSet -> ()
rnf GenerateDataSet' {Maybe Text
Maybe (HashMap Text Text)
Text
POSIX
DataSetType
snsTopicArn :: Text
destinationS3BucketName :: Text
roleNameArn :: Text
dataSetPublicationDate :: POSIX
dataSetType :: DataSetType
destinationS3Prefix :: Maybe Text
customerDefinedValues :: Maybe (HashMap Text Text)
$sel:snsTopicArn:GenerateDataSet' :: GenerateDataSet -> Text
$sel:destinationS3BucketName:GenerateDataSet' :: GenerateDataSet -> Text
$sel:roleNameArn:GenerateDataSet' :: GenerateDataSet -> Text
$sel:dataSetPublicationDate:GenerateDataSet' :: GenerateDataSet -> POSIX
$sel:dataSetType:GenerateDataSet' :: GenerateDataSet -> DataSetType
$sel:destinationS3Prefix:GenerateDataSet' :: GenerateDataSet -> Maybe Text
$sel:customerDefinedValues:GenerateDataSet' :: GenerateDataSet -> Maybe (HashMap Text Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
customerDefinedValues
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
destinationS3Prefix
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DataSetType
dataSetType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
dataSetPublicationDate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
roleNameArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
destinationS3BucketName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
snsTopicArn

instance Data.ToHeaders GenerateDataSet where
  toHeaders :: GenerateDataSet -> 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
"MarketplaceCommerceAnalytics20150701.GenerateDataSet" ::
                          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 GenerateDataSet where
  toJSON :: GenerateDataSet -> Value
toJSON GenerateDataSet' {Maybe Text
Maybe (HashMap Text Text)
Text
POSIX
DataSetType
snsTopicArn :: Text
destinationS3BucketName :: Text
roleNameArn :: Text
dataSetPublicationDate :: POSIX
dataSetType :: DataSetType
destinationS3Prefix :: Maybe Text
customerDefinedValues :: Maybe (HashMap Text Text)
$sel:snsTopicArn:GenerateDataSet' :: GenerateDataSet -> Text
$sel:destinationS3BucketName:GenerateDataSet' :: GenerateDataSet -> Text
$sel:roleNameArn:GenerateDataSet' :: GenerateDataSet -> Text
$sel:dataSetPublicationDate:GenerateDataSet' :: GenerateDataSet -> POSIX
$sel:dataSetType:GenerateDataSet' :: GenerateDataSet -> DataSetType
$sel:destinationS3Prefix:GenerateDataSet' :: GenerateDataSet -> Maybe Text
$sel:customerDefinedValues:GenerateDataSet' :: GenerateDataSet -> Maybe (HashMap Text Text)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"customerDefinedValues" 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 (HashMap Text Text)
customerDefinedValues,
            (Key
"destinationS3Prefix" 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
destinationS3Prefix,
            forall a. a -> Maybe a
Prelude.Just (Key
"dataSetType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DataSetType
dataSetType),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"dataSetPublicationDate"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= POSIX
dataSetPublicationDate
              ),
            forall a. a -> Maybe a
Prelude.Just (Key
"roleNameArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
roleNameArn),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"destinationS3BucketName"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
destinationS3BucketName
              ),
            forall a. a -> Maybe a
Prelude.Just (Key
"snsTopicArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
snsTopicArn)
          ]
      )

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

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

-- | Container for the result of the GenerateDataSet operation.
--
-- /See:/ 'newGenerateDataSetResponse' smart constructor.
data GenerateDataSetResponse = GenerateDataSetResponse'
  { -- | A unique identifier representing a specific request to the
    -- GenerateDataSet operation. This identifier can be used to correlate a
    -- request with notifications from the SNS topic.
    GenerateDataSetResponse -> Maybe Text
dataSetRequestId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GenerateDataSetResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GenerateDataSetResponse -> GenerateDataSetResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GenerateDataSetResponse -> GenerateDataSetResponse -> Bool
$c/= :: GenerateDataSetResponse -> GenerateDataSetResponse -> Bool
== :: GenerateDataSetResponse -> GenerateDataSetResponse -> Bool
$c== :: GenerateDataSetResponse -> GenerateDataSetResponse -> Bool
Prelude.Eq, ReadPrec [GenerateDataSetResponse]
ReadPrec GenerateDataSetResponse
Int -> ReadS GenerateDataSetResponse
ReadS [GenerateDataSetResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GenerateDataSetResponse]
$creadListPrec :: ReadPrec [GenerateDataSetResponse]
readPrec :: ReadPrec GenerateDataSetResponse
$creadPrec :: ReadPrec GenerateDataSetResponse
readList :: ReadS [GenerateDataSetResponse]
$creadList :: ReadS [GenerateDataSetResponse]
readsPrec :: Int -> ReadS GenerateDataSetResponse
$creadsPrec :: Int -> ReadS GenerateDataSetResponse
Prelude.Read, Int -> GenerateDataSetResponse -> ShowS
[GenerateDataSetResponse] -> ShowS
GenerateDataSetResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GenerateDataSetResponse] -> ShowS
$cshowList :: [GenerateDataSetResponse] -> ShowS
show :: GenerateDataSetResponse -> String
$cshow :: GenerateDataSetResponse -> String
showsPrec :: Int -> GenerateDataSetResponse -> ShowS
$cshowsPrec :: Int -> GenerateDataSetResponse -> ShowS
Prelude.Show, forall x. Rep GenerateDataSetResponse x -> GenerateDataSetResponse
forall x. GenerateDataSetResponse -> Rep GenerateDataSetResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GenerateDataSetResponse x -> GenerateDataSetResponse
$cfrom :: forall x. GenerateDataSetResponse -> Rep GenerateDataSetResponse x
Prelude.Generic)

-- |
-- Create a value of 'GenerateDataSetResponse' 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:
--
-- 'dataSetRequestId', 'generateDataSetResponse_dataSetRequestId' - A unique identifier representing a specific request to the
-- GenerateDataSet operation. This identifier can be used to correlate a
-- request with notifications from the SNS topic.
--
-- 'httpStatus', 'generateDataSetResponse_httpStatus' - The response's http status code.
newGenerateDataSetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GenerateDataSetResponse
newGenerateDataSetResponse :: Int -> GenerateDataSetResponse
newGenerateDataSetResponse Int
pHttpStatus_ =
  GenerateDataSetResponse'
    { $sel:dataSetRequestId:GenerateDataSetResponse' :: Maybe Text
dataSetRequestId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GenerateDataSetResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A unique identifier representing a specific request to the
-- GenerateDataSet operation. This identifier can be used to correlate a
-- request with notifications from the SNS topic.
generateDataSetResponse_dataSetRequestId :: Lens.Lens' GenerateDataSetResponse (Prelude.Maybe Prelude.Text)
generateDataSetResponse_dataSetRequestId :: Lens' GenerateDataSetResponse (Maybe Text)
generateDataSetResponse_dataSetRequestId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateDataSetResponse' {Maybe Text
dataSetRequestId :: Maybe Text
$sel:dataSetRequestId:GenerateDataSetResponse' :: GenerateDataSetResponse -> Maybe Text
dataSetRequestId} -> Maybe Text
dataSetRequestId) (\s :: GenerateDataSetResponse
s@GenerateDataSetResponse' {} Maybe Text
a -> GenerateDataSetResponse
s {$sel:dataSetRequestId:GenerateDataSetResponse' :: Maybe Text
dataSetRequestId = Maybe Text
a} :: GenerateDataSetResponse)

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

instance Prelude.NFData GenerateDataSetResponse where
  rnf :: GenerateDataSetResponse -> ()
rnf GenerateDataSetResponse' {Int
Maybe Text
httpStatus :: Int
dataSetRequestId :: Maybe Text
$sel:httpStatus:GenerateDataSetResponse' :: GenerateDataSetResponse -> Int
$sel:dataSetRequestId:GenerateDataSetResponse' :: GenerateDataSetResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
dataSetRequestId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus