{-# 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.Firehose.CreateDeliveryStream
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a Kinesis Data Firehose delivery stream.
--
-- By default, you can create up to 50 delivery streams per Amazon Web
-- Services Region.
--
-- This is an asynchronous operation that immediately returns. The initial
-- status of the delivery stream is @CREATING@. After the delivery stream
-- is created, its status is @ACTIVE@ and it now accepts data. If the
-- delivery stream creation fails, the status transitions to
-- @CREATING_FAILED@. Attempts to send data to a delivery stream that is
-- not in the @ACTIVE@ state cause an exception. To check the state of a
-- delivery stream, use DescribeDeliveryStream.
--
-- If the status of a delivery stream is @CREATING_FAILED@, this status
-- doesn\'t change, and you can\'t invoke @CreateDeliveryStream@ again on
-- it. However, you can invoke the DeleteDeliveryStream operation to delete
-- it.
--
-- A Kinesis Data Firehose delivery stream can be configured to receive
-- records directly from providers using PutRecord or PutRecordBatch, or it
-- can be configured to use an existing Kinesis stream as its source. To
-- specify a Kinesis data stream as input, set the @DeliveryStreamType@
-- parameter to @KinesisStreamAsSource@, and provide the Kinesis stream
-- Amazon Resource Name (ARN) and role ARN in the
-- @KinesisStreamSourceConfiguration@ parameter.
--
-- To create a delivery stream with server-side encryption (SSE) enabled,
-- include DeliveryStreamEncryptionConfigurationInput in your request. This
-- is optional. You can also invoke StartDeliveryStreamEncryption to turn
-- on SSE for an existing delivery stream that doesn\'t have SSE enabled.
--
-- A delivery stream is configured with a single destination: Amazon S3,
-- Amazon ES, Amazon Redshift, or Splunk. You must specify only one of the
-- following destination configuration parameters:
-- @ExtendedS3DestinationConfiguration@, @S3DestinationConfiguration@,
-- @ElasticsearchDestinationConfiguration@,
-- @RedshiftDestinationConfiguration@, or @SplunkDestinationConfiguration@.
--
-- When you specify @S3DestinationConfiguration@, you can also provide the
-- following optional values: BufferingHints, @EncryptionConfiguration@,
-- and @CompressionFormat@. By default, if no @BufferingHints@ value is
-- provided, Kinesis Data Firehose buffers data up to 5 MB or for 5
-- minutes, whichever condition is satisfied first. @BufferingHints@ is a
-- hint, so there are some cases where the service cannot adhere to these
-- conditions strictly. For example, record boundaries might be such that
-- the size is a little over or under the configured buffering size. By
-- default, no encryption is performed. We strongly recommend that you
-- enable encryption to ensure secure data storage in Amazon S3.
--
-- A few notes about Amazon Redshift as a destination:
--
-- -   An Amazon Redshift destination requires an S3 bucket as intermediate
--     location. Kinesis Data Firehose first delivers data to Amazon S3 and
--     then uses @COPY@ syntax to load data into an Amazon Redshift table.
--     This is specified in the
--     @RedshiftDestinationConfiguration.S3Configuration@ parameter.
--
-- -   The compression formats @SNAPPY@ or @ZIP@ cannot be specified in
--     @RedshiftDestinationConfiguration.S3Configuration@ because the
--     Amazon Redshift @COPY@ operation that reads from the S3 bucket
--     doesn\'t support these compression formats.
--
-- -   We strongly recommend that you use the user name and password you
--     provide exclusively with Kinesis Data Firehose, and that the
--     permissions for the account are restricted for Amazon Redshift
--     @INSERT@ permissions.
--
-- Kinesis Data Firehose assumes the IAM role that is configured as part of
-- the destination. The role should allow the Kinesis Data Firehose
-- principal to assume the role, and the role should have permissions that
-- allow the service to deliver the data. For more information, see
-- <https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Grant Kinesis Data Firehose Access to an Amazon S3 Destination>
-- in the /Amazon Kinesis Data Firehose Developer Guide/.
module Amazonka.Firehose.CreateDeliveryStream
  ( -- * Creating a Request
    CreateDeliveryStream (..),
    newCreateDeliveryStream,

    -- * Request Lenses
    createDeliveryStream_amazonOpenSearchServerlessDestinationConfiguration,
    createDeliveryStream_amazonopensearchserviceDestinationConfiguration,
    createDeliveryStream_deliveryStreamEncryptionConfigurationInput,
    createDeliveryStream_deliveryStreamType,
    createDeliveryStream_elasticsearchDestinationConfiguration,
    createDeliveryStream_extendedS3DestinationConfiguration,
    createDeliveryStream_httpEndpointDestinationConfiguration,
    createDeliveryStream_kinesisStreamSourceConfiguration,
    createDeliveryStream_redshiftDestinationConfiguration,
    createDeliveryStream_s3DestinationConfiguration,
    createDeliveryStream_splunkDestinationConfiguration,
    createDeliveryStream_tags,
    createDeliveryStream_deliveryStreamName,

    -- * Destructuring the Response
    CreateDeliveryStreamResponse (..),
    newCreateDeliveryStreamResponse,

    -- * Response Lenses
    createDeliveryStreamResponse_deliveryStreamARN,
    createDeliveryStreamResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateDeliveryStream' smart constructor.
data CreateDeliveryStream = CreateDeliveryStream'
  { -- | The destination in the Serverless offering for Amazon OpenSearch
    -- Service. You can specify only one destination.
    CreateDeliveryStream
-> Maybe AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration :: Prelude.Maybe AmazonOpenSearchServerlessDestinationConfiguration,
    -- | The destination in Amazon OpenSearch Service. You can specify only one
    -- destination.
    CreateDeliveryStream
-> Maybe AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration :: Prelude.Maybe AmazonopensearchserviceDestinationConfiguration,
    -- | Used to specify the type and Amazon Resource Name (ARN) of the KMS key
    -- needed for Server-Side Encryption (SSE).
    CreateDeliveryStream
-> Maybe DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput :: Prelude.Maybe DeliveryStreamEncryptionConfigurationInput,
    -- | The delivery stream type. This parameter can be one of the following
    -- values:
    --
    -- -   @DirectPut@: Provider applications access the delivery stream
    --     directly.
    --
    -- -   @KinesisStreamAsSource@: The delivery stream uses a Kinesis data
    --     stream as a source.
    CreateDeliveryStream -> Maybe DeliveryStreamType
deliveryStreamType :: Prelude.Maybe DeliveryStreamType,
    -- | The destination in Amazon ES. You can specify only one destination.
    CreateDeliveryStream -> Maybe ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration :: Prelude.Maybe ElasticsearchDestinationConfiguration,
    -- | The destination in Amazon S3. You can specify only one destination.
    CreateDeliveryStream -> Maybe ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration :: Prelude.Maybe ExtendedS3DestinationConfiguration,
    -- | Enables configuring Kinesis Firehose to deliver data to any HTTP
    -- endpoint destination. You can specify only one destination.
    CreateDeliveryStream -> Maybe HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration :: Prelude.Maybe HttpEndpointDestinationConfiguration,
    -- | When a Kinesis data stream is used as the source for the delivery
    -- stream, a KinesisStreamSourceConfiguration containing the Kinesis data
    -- stream Amazon Resource Name (ARN) and the role ARN for the source
    -- stream.
    CreateDeliveryStream -> Maybe KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration :: Prelude.Maybe KinesisStreamSourceConfiguration,
    -- | The destination in Amazon Redshift. You can specify only one
    -- destination.
    CreateDeliveryStream -> Maybe RedshiftDestinationConfiguration
redshiftDestinationConfiguration :: Prelude.Maybe RedshiftDestinationConfiguration,
    -- | [Deprecated] The destination in Amazon S3. You can specify only one
    -- destination.
    CreateDeliveryStream -> Maybe S3DestinationConfiguration
s3DestinationConfiguration :: Prelude.Maybe S3DestinationConfiguration,
    -- | The destination in Splunk. You can specify only one destination.
    CreateDeliveryStream -> Maybe SplunkDestinationConfiguration
splunkDestinationConfiguration :: Prelude.Maybe SplunkDestinationConfiguration,
    -- | A set of tags to assign to the delivery stream. A tag is a key-value
    -- pair that you can define and assign to Amazon Web Services resources.
    -- Tags are metadata. For example, you can add friendly names and
    -- descriptions or other types of information that can help you distinguish
    -- the delivery stream. For more information about tags, see
    -- <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html Using Cost Allocation Tags>
    -- in the Amazon Web Services Billing and Cost Management User Guide.
    --
    -- You can specify up to 50 tags when creating a delivery stream.
    CreateDeliveryStream -> Maybe (NonEmpty Tag)
tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
    -- | The name of the delivery stream. This name must be unique per Amazon Web
    -- Services account in the same Amazon Web Services Region. If the delivery
    -- streams are in different accounts or different Regions, you can have
    -- multiple delivery streams with the same name.
    CreateDeliveryStream -> Text
deliveryStreamName :: Prelude.Text
  }
  deriving (CreateDeliveryStream -> CreateDeliveryStream -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDeliveryStream -> CreateDeliveryStream -> Bool
$c/= :: CreateDeliveryStream -> CreateDeliveryStream -> Bool
== :: CreateDeliveryStream -> CreateDeliveryStream -> Bool
$c== :: CreateDeliveryStream -> CreateDeliveryStream -> Bool
Prelude.Eq, Int -> CreateDeliveryStream -> ShowS
[CreateDeliveryStream] -> ShowS
CreateDeliveryStream -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDeliveryStream] -> ShowS
$cshowList :: [CreateDeliveryStream] -> ShowS
show :: CreateDeliveryStream -> String
$cshow :: CreateDeliveryStream -> String
showsPrec :: Int -> CreateDeliveryStream -> ShowS
$cshowsPrec :: Int -> CreateDeliveryStream -> ShowS
Prelude.Show, forall x. Rep CreateDeliveryStream x -> CreateDeliveryStream
forall x. CreateDeliveryStream -> Rep CreateDeliveryStream x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDeliveryStream x -> CreateDeliveryStream
$cfrom :: forall x. CreateDeliveryStream -> Rep CreateDeliveryStream x
Prelude.Generic)

-- |
-- Create a value of 'CreateDeliveryStream' 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:
--
-- 'amazonOpenSearchServerlessDestinationConfiguration', 'createDeliveryStream_amazonOpenSearchServerlessDestinationConfiguration' - The destination in the Serverless offering for Amazon OpenSearch
-- Service. You can specify only one destination.
--
-- 'amazonopensearchserviceDestinationConfiguration', 'createDeliveryStream_amazonopensearchserviceDestinationConfiguration' - The destination in Amazon OpenSearch Service. You can specify only one
-- destination.
--
-- 'deliveryStreamEncryptionConfigurationInput', 'createDeliveryStream_deliveryStreamEncryptionConfigurationInput' - Used to specify the type and Amazon Resource Name (ARN) of the KMS key
-- needed for Server-Side Encryption (SSE).
--
-- 'deliveryStreamType', 'createDeliveryStream_deliveryStreamType' - The delivery stream type. This parameter can be one of the following
-- values:
--
-- -   @DirectPut@: Provider applications access the delivery stream
--     directly.
--
-- -   @KinesisStreamAsSource@: The delivery stream uses a Kinesis data
--     stream as a source.
--
-- 'elasticsearchDestinationConfiguration', 'createDeliveryStream_elasticsearchDestinationConfiguration' - The destination in Amazon ES. You can specify only one destination.
--
-- 'extendedS3DestinationConfiguration', 'createDeliveryStream_extendedS3DestinationConfiguration' - The destination in Amazon S3. You can specify only one destination.
--
-- 'httpEndpointDestinationConfiguration', 'createDeliveryStream_httpEndpointDestinationConfiguration' - Enables configuring Kinesis Firehose to deliver data to any HTTP
-- endpoint destination. You can specify only one destination.
--
-- 'kinesisStreamSourceConfiguration', 'createDeliveryStream_kinesisStreamSourceConfiguration' - When a Kinesis data stream is used as the source for the delivery
-- stream, a KinesisStreamSourceConfiguration containing the Kinesis data
-- stream Amazon Resource Name (ARN) and the role ARN for the source
-- stream.
--
-- 'redshiftDestinationConfiguration', 'createDeliveryStream_redshiftDestinationConfiguration' - The destination in Amazon Redshift. You can specify only one
-- destination.
--
-- 's3DestinationConfiguration', 'createDeliveryStream_s3DestinationConfiguration' - [Deprecated] The destination in Amazon S3. You can specify only one
-- destination.
--
-- 'splunkDestinationConfiguration', 'createDeliveryStream_splunkDestinationConfiguration' - The destination in Splunk. You can specify only one destination.
--
-- 'tags', 'createDeliveryStream_tags' - A set of tags to assign to the delivery stream. A tag is a key-value
-- pair that you can define and assign to Amazon Web Services resources.
-- Tags are metadata. For example, you can add friendly names and
-- descriptions or other types of information that can help you distinguish
-- the delivery stream. For more information about tags, see
-- <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html Using Cost Allocation Tags>
-- in the Amazon Web Services Billing and Cost Management User Guide.
--
-- You can specify up to 50 tags when creating a delivery stream.
--
-- 'deliveryStreamName', 'createDeliveryStream_deliveryStreamName' - The name of the delivery stream. This name must be unique per Amazon Web
-- Services account in the same Amazon Web Services Region. If the delivery
-- streams are in different accounts or different Regions, you can have
-- multiple delivery streams with the same name.
newCreateDeliveryStream ::
  -- | 'deliveryStreamName'
  Prelude.Text ->
  CreateDeliveryStream
newCreateDeliveryStream :: Text -> CreateDeliveryStream
newCreateDeliveryStream Text
pDeliveryStreamName_ =
  CreateDeliveryStream'
    { $sel:amazonOpenSearchServerlessDestinationConfiguration:CreateDeliveryStream' :: Maybe AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration =
        forall a. Maybe a
Prelude.Nothing,
      $sel:amazonopensearchserviceDestinationConfiguration:CreateDeliveryStream' :: Maybe AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration =
        forall a. Maybe a
Prelude.Nothing,
      $sel:deliveryStreamEncryptionConfigurationInput:CreateDeliveryStream' :: Maybe DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput =
        forall a. Maybe a
Prelude.Nothing,
      $sel:deliveryStreamType:CreateDeliveryStream' :: Maybe DeliveryStreamType
deliveryStreamType = forall a. Maybe a
Prelude.Nothing,
      $sel:elasticsearchDestinationConfiguration:CreateDeliveryStream' :: Maybe ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration =
        forall a. Maybe a
Prelude.Nothing,
      $sel:extendedS3DestinationConfiguration:CreateDeliveryStream' :: Maybe ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:httpEndpointDestinationConfiguration:CreateDeliveryStream' :: Maybe HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration =
        forall a. Maybe a
Prelude.Nothing,
      $sel:kinesisStreamSourceConfiguration:CreateDeliveryStream' :: Maybe KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:redshiftDestinationConfiguration:CreateDeliveryStream' :: Maybe RedshiftDestinationConfiguration
redshiftDestinationConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:s3DestinationConfiguration:CreateDeliveryStream' :: Maybe S3DestinationConfiguration
s3DestinationConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:splunkDestinationConfiguration:CreateDeliveryStream' :: Maybe SplunkDestinationConfiguration
splunkDestinationConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateDeliveryStream' :: Maybe (NonEmpty Tag)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:deliveryStreamName:CreateDeliveryStream' :: Text
deliveryStreamName = Text
pDeliveryStreamName_
    }

-- | The destination in the Serverless offering for Amazon OpenSearch
-- Service. You can specify only one destination.
createDeliveryStream_amazonOpenSearchServerlessDestinationConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe AmazonOpenSearchServerlessDestinationConfiguration)
createDeliveryStream_amazonOpenSearchServerlessDestinationConfiguration :: Lens'
  CreateDeliveryStream
  (Maybe AmazonOpenSearchServerlessDestinationConfiguration)
createDeliveryStream_amazonOpenSearchServerlessDestinationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration :: Maybe AmazonOpenSearchServerlessDestinationConfiguration
$sel:amazonOpenSearchServerlessDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration} -> Maybe AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe AmazonOpenSearchServerlessDestinationConfiguration
a -> CreateDeliveryStream
s {$sel:amazonOpenSearchServerlessDestinationConfiguration:CreateDeliveryStream' :: Maybe AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration = Maybe AmazonOpenSearchServerlessDestinationConfiguration
a} :: CreateDeliveryStream)

-- | The destination in Amazon OpenSearch Service. You can specify only one
-- destination.
createDeliveryStream_amazonopensearchserviceDestinationConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe AmazonopensearchserviceDestinationConfiguration)
createDeliveryStream_amazonopensearchserviceDestinationConfiguration :: Lens'
  CreateDeliveryStream
  (Maybe AmazonopensearchserviceDestinationConfiguration)
createDeliveryStream_amazonopensearchserviceDestinationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration :: Maybe AmazonopensearchserviceDestinationConfiguration
$sel:amazonopensearchserviceDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration} -> Maybe AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe AmazonopensearchserviceDestinationConfiguration
a -> CreateDeliveryStream
s {$sel:amazonopensearchserviceDestinationConfiguration:CreateDeliveryStream' :: Maybe AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration = Maybe AmazonopensearchserviceDestinationConfiguration
a} :: CreateDeliveryStream)

-- | Used to specify the type and Amazon Resource Name (ARN) of the KMS key
-- needed for Server-Side Encryption (SSE).
createDeliveryStream_deliveryStreamEncryptionConfigurationInput :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe DeliveryStreamEncryptionConfigurationInput)
createDeliveryStream_deliveryStreamEncryptionConfigurationInput :: Lens'
  CreateDeliveryStream
  (Maybe DeliveryStreamEncryptionConfigurationInput)
createDeliveryStream_deliveryStreamEncryptionConfigurationInput = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput :: Maybe DeliveryStreamEncryptionConfigurationInput
$sel:deliveryStreamEncryptionConfigurationInput:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput} -> Maybe DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe DeliveryStreamEncryptionConfigurationInput
a -> CreateDeliveryStream
s {$sel:deliveryStreamEncryptionConfigurationInput:CreateDeliveryStream' :: Maybe DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput = Maybe DeliveryStreamEncryptionConfigurationInput
a} :: CreateDeliveryStream)

-- | The delivery stream type. This parameter can be one of the following
-- values:
--
-- -   @DirectPut@: Provider applications access the delivery stream
--     directly.
--
-- -   @KinesisStreamAsSource@: The delivery stream uses a Kinesis data
--     stream as a source.
createDeliveryStream_deliveryStreamType :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe DeliveryStreamType)
createDeliveryStream_deliveryStreamType :: Lens' CreateDeliveryStream (Maybe DeliveryStreamType)
createDeliveryStream_deliveryStreamType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe DeliveryStreamType
deliveryStreamType :: Maybe DeliveryStreamType
$sel:deliveryStreamType:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe DeliveryStreamType
deliveryStreamType} -> Maybe DeliveryStreamType
deliveryStreamType) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe DeliveryStreamType
a -> CreateDeliveryStream
s {$sel:deliveryStreamType:CreateDeliveryStream' :: Maybe DeliveryStreamType
deliveryStreamType = Maybe DeliveryStreamType
a} :: CreateDeliveryStream)

-- | The destination in Amazon ES. You can specify only one destination.
createDeliveryStream_elasticsearchDestinationConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe ElasticsearchDestinationConfiguration)
createDeliveryStream_elasticsearchDestinationConfiguration :: Lens'
  CreateDeliveryStream (Maybe ElasticsearchDestinationConfiguration)
createDeliveryStream_elasticsearchDestinationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration :: Maybe ElasticsearchDestinationConfiguration
$sel:elasticsearchDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration} -> Maybe ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe ElasticsearchDestinationConfiguration
a -> CreateDeliveryStream
s {$sel:elasticsearchDestinationConfiguration:CreateDeliveryStream' :: Maybe ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration = Maybe ElasticsearchDestinationConfiguration
a} :: CreateDeliveryStream)

-- | The destination in Amazon S3. You can specify only one destination.
createDeliveryStream_extendedS3DestinationConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe ExtendedS3DestinationConfiguration)
createDeliveryStream_extendedS3DestinationConfiguration :: Lens'
  CreateDeliveryStream (Maybe ExtendedS3DestinationConfiguration)
createDeliveryStream_extendedS3DestinationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration :: Maybe ExtendedS3DestinationConfiguration
$sel:extendedS3DestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration} -> Maybe ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe ExtendedS3DestinationConfiguration
a -> CreateDeliveryStream
s {$sel:extendedS3DestinationConfiguration:CreateDeliveryStream' :: Maybe ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration = Maybe ExtendedS3DestinationConfiguration
a} :: CreateDeliveryStream)

-- | Enables configuring Kinesis Firehose to deliver data to any HTTP
-- endpoint destination. You can specify only one destination.
createDeliveryStream_httpEndpointDestinationConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe HttpEndpointDestinationConfiguration)
createDeliveryStream_httpEndpointDestinationConfiguration :: Lens'
  CreateDeliveryStream (Maybe HttpEndpointDestinationConfiguration)
createDeliveryStream_httpEndpointDestinationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration :: Maybe HttpEndpointDestinationConfiguration
$sel:httpEndpointDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration} -> Maybe HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe HttpEndpointDestinationConfiguration
a -> CreateDeliveryStream
s {$sel:httpEndpointDestinationConfiguration:CreateDeliveryStream' :: Maybe HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration = Maybe HttpEndpointDestinationConfiguration
a} :: CreateDeliveryStream)

-- | When a Kinesis data stream is used as the source for the delivery
-- stream, a KinesisStreamSourceConfiguration containing the Kinesis data
-- stream Amazon Resource Name (ARN) and the role ARN for the source
-- stream.
createDeliveryStream_kinesisStreamSourceConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe KinesisStreamSourceConfiguration)
createDeliveryStream_kinesisStreamSourceConfiguration :: Lens' CreateDeliveryStream (Maybe KinesisStreamSourceConfiguration)
createDeliveryStream_kinesisStreamSourceConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration :: Maybe KinesisStreamSourceConfiguration
$sel:kinesisStreamSourceConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration} -> Maybe KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe KinesisStreamSourceConfiguration
a -> CreateDeliveryStream
s {$sel:kinesisStreamSourceConfiguration:CreateDeliveryStream' :: Maybe KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration = Maybe KinesisStreamSourceConfiguration
a} :: CreateDeliveryStream)

-- | The destination in Amazon Redshift. You can specify only one
-- destination.
createDeliveryStream_redshiftDestinationConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe RedshiftDestinationConfiguration)
createDeliveryStream_redshiftDestinationConfiguration :: Lens' CreateDeliveryStream (Maybe RedshiftDestinationConfiguration)
createDeliveryStream_redshiftDestinationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe RedshiftDestinationConfiguration
redshiftDestinationConfiguration :: Maybe RedshiftDestinationConfiguration
$sel:redshiftDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe RedshiftDestinationConfiguration
redshiftDestinationConfiguration} -> Maybe RedshiftDestinationConfiguration
redshiftDestinationConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe RedshiftDestinationConfiguration
a -> CreateDeliveryStream
s {$sel:redshiftDestinationConfiguration:CreateDeliveryStream' :: Maybe RedshiftDestinationConfiguration
redshiftDestinationConfiguration = Maybe RedshiftDestinationConfiguration
a} :: CreateDeliveryStream)

-- | [Deprecated] The destination in Amazon S3. You can specify only one
-- destination.
createDeliveryStream_s3DestinationConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe S3DestinationConfiguration)
createDeliveryStream_s3DestinationConfiguration :: Lens' CreateDeliveryStream (Maybe S3DestinationConfiguration)
createDeliveryStream_s3DestinationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe S3DestinationConfiguration
s3DestinationConfiguration :: Maybe S3DestinationConfiguration
$sel:s3DestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe S3DestinationConfiguration
s3DestinationConfiguration} -> Maybe S3DestinationConfiguration
s3DestinationConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe S3DestinationConfiguration
a -> CreateDeliveryStream
s {$sel:s3DestinationConfiguration:CreateDeliveryStream' :: Maybe S3DestinationConfiguration
s3DestinationConfiguration = Maybe S3DestinationConfiguration
a} :: CreateDeliveryStream)

-- | The destination in Splunk. You can specify only one destination.
createDeliveryStream_splunkDestinationConfiguration :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe SplunkDestinationConfiguration)
createDeliveryStream_splunkDestinationConfiguration :: Lens' CreateDeliveryStream (Maybe SplunkDestinationConfiguration)
createDeliveryStream_splunkDestinationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe SplunkDestinationConfiguration
splunkDestinationConfiguration :: Maybe SplunkDestinationConfiguration
$sel:splunkDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe SplunkDestinationConfiguration
splunkDestinationConfiguration} -> Maybe SplunkDestinationConfiguration
splunkDestinationConfiguration) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe SplunkDestinationConfiguration
a -> CreateDeliveryStream
s {$sel:splunkDestinationConfiguration:CreateDeliveryStream' :: Maybe SplunkDestinationConfiguration
splunkDestinationConfiguration = Maybe SplunkDestinationConfiguration
a} :: CreateDeliveryStream)

-- | A set of tags to assign to the delivery stream. A tag is a key-value
-- pair that you can define and assign to Amazon Web Services resources.
-- Tags are metadata. For example, you can add friendly names and
-- descriptions or other types of information that can help you distinguish
-- the delivery stream. For more information about tags, see
-- <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html Using Cost Allocation Tags>
-- in the Amazon Web Services Billing and Cost Management User Guide.
--
-- You can specify up to 50 tags when creating a delivery stream.
createDeliveryStream_tags :: Lens.Lens' CreateDeliveryStream (Prelude.Maybe (Prelude.NonEmpty Tag))
createDeliveryStream_tags :: Lens' CreateDeliveryStream (Maybe (NonEmpty Tag))
createDeliveryStream_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Maybe (NonEmpty Tag)
tags :: Maybe (NonEmpty Tag)
$sel:tags:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe (NonEmpty Tag)
tags} -> Maybe (NonEmpty Tag)
tags) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Maybe (NonEmpty Tag)
a -> CreateDeliveryStream
s {$sel:tags:CreateDeliveryStream' :: Maybe (NonEmpty Tag)
tags = Maybe (NonEmpty Tag)
a} :: CreateDeliveryStream) 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 name of the delivery stream. This name must be unique per Amazon Web
-- Services account in the same Amazon Web Services Region. If the delivery
-- streams are in different accounts or different Regions, you can have
-- multiple delivery streams with the same name.
createDeliveryStream_deliveryStreamName :: Lens.Lens' CreateDeliveryStream Prelude.Text
createDeliveryStream_deliveryStreamName :: Lens' CreateDeliveryStream Text
createDeliveryStream_deliveryStreamName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStream' {Text
deliveryStreamName :: Text
$sel:deliveryStreamName:CreateDeliveryStream' :: CreateDeliveryStream -> Text
deliveryStreamName} -> Text
deliveryStreamName) (\s :: CreateDeliveryStream
s@CreateDeliveryStream' {} Text
a -> CreateDeliveryStream
s {$sel:deliveryStreamName:CreateDeliveryStream' :: Text
deliveryStreamName = Text
a} :: CreateDeliveryStream)

instance Core.AWSRequest CreateDeliveryStream where
  type
    AWSResponse CreateDeliveryStream =
      CreateDeliveryStreamResponse
  request :: (Service -> Service)
-> CreateDeliveryStream -> Request CreateDeliveryStream
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 CreateDeliveryStream
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateDeliveryStream)))
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 -> CreateDeliveryStreamResponse
CreateDeliveryStreamResponse'
            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
"DeliveryStreamARN")
            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 CreateDeliveryStream where
  hashWithSalt :: Int -> CreateDeliveryStream -> Int
hashWithSalt Int
_salt CreateDeliveryStream' {Maybe (NonEmpty Tag)
Maybe DeliveryStreamType
Maybe DeliveryStreamEncryptionConfigurationInput
Maybe KinesisStreamSourceConfiguration
Maybe S3DestinationConfiguration
Maybe RedshiftDestinationConfiguration
Maybe HttpEndpointDestinationConfiguration
Maybe ExtendedS3DestinationConfiguration
Maybe SplunkDestinationConfiguration
Maybe ElasticsearchDestinationConfiguration
Maybe AmazonopensearchserviceDestinationConfiguration
Maybe AmazonOpenSearchServerlessDestinationConfiguration
Text
deliveryStreamName :: Text
tags :: Maybe (NonEmpty Tag)
splunkDestinationConfiguration :: Maybe SplunkDestinationConfiguration
s3DestinationConfiguration :: Maybe S3DestinationConfiguration
redshiftDestinationConfiguration :: Maybe RedshiftDestinationConfiguration
kinesisStreamSourceConfiguration :: Maybe KinesisStreamSourceConfiguration
httpEndpointDestinationConfiguration :: Maybe HttpEndpointDestinationConfiguration
extendedS3DestinationConfiguration :: Maybe ExtendedS3DestinationConfiguration
elasticsearchDestinationConfiguration :: Maybe ElasticsearchDestinationConfiguration
deliveryStreamType :: Maybe DeliveryStreamType
deliveryStreamEncryptionConfigurationInput :: Maybe DeliveryStreamEncryptionConfigurationInput
amazonopensearchserviceDestinationConfiguration :: Maybe AmazonopensearchserviceDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration :: Maybe AmazonOpenSearchServerlessDestinationConfiguration
$sel:deliveryStreamName:CreateDeliveryStream' :: CreateDeliveryStream -> Text
$sel:tags:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe (NonEmpty Tag)
$sel:splunkDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe SplunkDestinationConfiguration
$sel:s3DestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe S3DestinationConfiguration
$sel:redshiftDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe RedshiftDestinationConfiguration
$sel:kinesisStreamSourceConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe KinesisStreamSourceConfiguration
$sel:httpEndpointDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe HttpEndpointDestinationConfiguration
$sel:extendedS3DestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe ExtendedS3DestinationConfiguration
$sel:elasticsearchDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe ElasticsearchDestinationConfiguration
$sel:deliveryStreamType:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe DeliveryStreamType
$sel:deliveryStreamEncryptionConfigurationInput:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe DeliveryStreamEncryptionConfigurationInput
$sel:amazonopensearchserviceDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe AmazonopensearchserviceDestinationConfiguration
$sel:amazonOpenSearchServerlessDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe AmazonOpenSearchServerlessDestinationConfiguration
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DeliveryStreamType
deliveryStreamType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RedshiftDestinationConfiguration
redshiftDestinationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe S3DestinationConfiguration
s3DestinationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SplunkDestinationConfiguration
splunkDestinationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Tag)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
deliveryStreamName

instance Prelude.NFData CreateDeliveryStream where
  rnf :: CreateDeliveryStream -> ()
rnf CreateDeliveryStream' {Maybe (NonEmpty Tag)
Maybe DeliveryStreamType
Maybe DeliveryStreamEncryptionConfigurationInput
Maybe KinesisStreamSourceConfiguration
Maybe S3DestinationConfiguration
Maybe RedshiftDestinationConfiguration
Maybe HttpEndpointDestinationConfiguration
Maybe ExtendedS3DestinationConfiguration
Maybe SplunkDestinationConfiguration
Maybe ElasticsearchDestinationConfiguration
Maybe AmazonopensearchserviceDestinationConfiguration
Maybe AmazonOpenSearchServerlessDestinationConfiguration
Text
deliveryStreamName :: Text
tags :: Maybe (NonEmpty Tag)
splunkDestinationConfiguration :: Maybe SplunkDestinationConfiguration
s3DestinationConfiguration :: Maybe S3DestinationConfiguration
redshiftDestinationConfiguration :: Maybe RedshiftDestinationConfiguration
kinesisStreamSourceConfiguration :: Maybe KinesisStreamSourceConfiguration
httpEndpointDestinationConfiguration :: Maybe HttpEndpointDestinationConfiguration
extendedS3DestinationConfiguration :: Maybe ExtendedS3DestinationConfiguration
elasticsearchDestinationConfiguration :: Maybe ElasticsearchDestinationConfiguration
deliveryStreamType :: Maybe DeliveryStreamType
deliveryStreamEncryptionConfigurationInput :: Maybe DeliveryStreamEncryptionConfigurationInput
amazonopensearchserviceDestinationConfiguration :: Maybe AmazonopensearchserviceDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration :: Maybe AmazonOpenSearchServerlessDestinationConfiguration
$sel:deliveryStreamName:CreateDeliveryStream' :: CreateDeliveryStream -> Text
$sel:tags:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe (NonEmpty Tag)
$sel:splunkDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe SplunkDestinationConfiguration
$sel:s3DestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe S3DestinationConfiguration
$sel:redshiftDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe RedshiftDestinationConfiguration
$sel:kinesisStreamSourceConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe KinesisStreamSourceConfiguration
$sel:httpEndpointDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe HttpEndpointDestinationConfiguration
$sel:extendedS3DestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe ExtendedS3DestinationConfiguration
$sel:elasticsearchDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe ElasticsearchDestinationConfiguration
$sel:deliveryStreamType:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe DeliveryStreamType
$sel:deliveryStreamEncryptionConfigurationInput:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe DeliveryStreamEncryptionConfigurationInput
$sel:amazonopensearchserviceDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe AmazonopensearchserviceDestinationConfiguration
$sel:amazonOpenSearchServerlessDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe AmazonOpenSearchServerlessDestinationConfiguration
..} =
    forall a. NFData a => a -> ()
Prelude.rnf
      Maybe AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DeliveryStreamType
deliveryStreamType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RedshiftDestinationConfiguration
redshiftDestinationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe S3DestinationConfiguration
s3DestinationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SplunkDestinationConfiguration
splunkDestinationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Tag)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
deliveryStreamName

instance Data.ToHeaders CreateDeliveryStream where
  toHeaders :: CreateDeliveryStream -> 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
"Firehose_20150804.CreateDeliveryStream" ::
                          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 CreateDeliveryStream where
  toJSON :: CreateDeliveryStream -> Value
toJSON CreateDeliveryStream' {Maybe (NonEmpty Tag)
Maybe DeliveryStreamType
Maybe DeliveryStreamEncryptionConfigurationInput
Maybe KinesisStreamSourceConfiguration
Maybe S3DestinationConfiguration
Maybe RedshiftDestinationConfiguration
Maybe HttpEndpointDestinationConfiguration
Maybe ExtendedS3DestinationConfiguration
Maybe SplunkDestinationConfiguration
Maybe ElasticsearchDestinationConfiguration
Maybe AmazonopensearchserviceDestinationConfiguration
Maybe AmazonOpenSearchServerlessDestinationConfiguration
Text
deliveryStreamName :: Text
tags :: Maybe (NonEmpty Tag)
splunkDestinationConfiguration :: Maybe SplunkDestinationConfiguration
s3DestinationConfiguration :: Maybe S3DestinationConfiguration
redshiftDestinationConfiguration :: Maybe RedshiftDestinationConfiguration
kinesisStreamSourceConfiguration :: Maybe KinesisStreamSourceConfiguration
httpEndpointDestinationConfiguration :: Maybe HttpEndpointDestinationConfiguration
extendedS3DestinationConfiguration :: Maybe ExtendedS3DestinationConfiguration
elasticsearchDestinationConfiguration :: Maybe ElasticsearchDestinationConfiguration
deliveryStreamType :: Maybe DeliveryStreamType
deliveryStreamEncryptionConfigurationInput :: Maybe DeliveryStreamEncryptionConfigurationInput
amazonopensearchserviceDestinationConfiguration :: Maybe AmazonopensearchserviceDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration :: Maybe AmazonOpenSearchServerlessDestinationConfiguration
$sel:deliveryStreamName:CreateDeliveryStream' :: CreateDeliveryStream -> Text
$sel:tags:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe (NonEmpty Tag)
$sel:splunkDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe SplunkDestinationConfiguration
$sel:s3DestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe S3DestinationConfiguration
$sel:redshiftDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe RedshiftDestinationConfiguration
$sel:kinesisStreamSourceConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe KinesisStreamSourceConfiguration
$sel:httpEndpointDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe HttpEndpointDestinationConfiguration
$sel:extendedS3DestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe ExtendedS3DestinationConfiguration
$sel:elasticsearchDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe ElasticsearchDestinationConfiguration
$sel:deliveryStreamType:CreateDeliveryStream' :: CreateDeliveryStream -> Maybe DeliveryStreamType
$sel:deliveryStreamEncryptionConfigurationInput:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe DeliveryStreamEncryptionConfigurationInput
$sel:amazonopensearchserviceDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe AmazonopensearchserviceDestinationConfiguration
$sel:amazonOpenSearchServerlessDestinationConfiguration:CreateDeliveryStream' :: CreateDeliveryStream
-> Maybe AmazonOpenSearchServerlessDestinationConfiguration
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ ( Key
"AmazonOpenSearchServerlessDestinationConfiguration"
                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 AmazonOpenSearchServerlessDestinationConfiguration
amazonOpenSearchServerlessDestinationConfiguration,
            ( Key
"AmazonopensearchserviceDestinationConfiguration"
                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 AmazonopensearchserviceDestinationConfiguration
amazonopensearchserviceDestinationConfiguration,
            ( Key
"DeliveryStreamEncryptionConfigurationInput"
                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 DeliveryStreamEncryptionConfigurationInput
deliveryStreamEncryptionConfigurationInput,
            (Key
"DeliveryStreamType" 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 DeliveryStreamType
deliveryStreamType,
            (Key
"ElasticsearchDestinationConfiguration" 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 ElasticsearchDestinationConfiguration
elasticsearchDestinationConfiguration,
            (Key
"ExtendedS3DestinationConfiguration" 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 ExtendedS3DestinationConfiguration
extendedS3DestinationConfiguration,
            (Key
"HttpEndpointDestinationConfiguration" 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 HttpEndpointDestinationConfiguration
httpEndpointDestinationConfiguration,
            (Key
"KinesisStreamSourceConfiguration" 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 KinesisStreamSourceConfiguration
kinesisStreamSourceConfiguration,
            (Key
"RedshiftDestinationConfiguration" 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 RedshiftDestinationConfiguration
redshiftDestinationConfiguration,
            (Key
"S3DestinationConfiguration" 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 S3DestinationConfiguration
s3DestinationConfiguration,
            (Key
"SplunkDestinationConfiguration" 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 SplunkDestinationConfiguration
splunkDestinationConfiguration,
            (Key
"Tags" 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 (NonEmpty Tag)
tags,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"DeliveryStreamName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
deliveryStreamName)
          ]
      )

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

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

-- | /See:/ 'newCreateDeliveryStreamResponse' smart constructor.
data CreateDeliveryStreamResponse = CreateDeliveryStreamResponse'
  { -- | The ARN of the delivery stream.
    CreateDeliveryStreamResponse -> Maybe Text
deliveryStreamARN :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateDeliveryStreamResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateDeliveryStreamResponse
-> CreateDeliveryStreamResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDeliveryStreamResponse
-> CreateDeliveryStreamResponse -> Bool
$c/= :: CreateDeliveryStreamResponse
-> CreateDeliveryStreamResponse -> Bool
== :: CreateDeliveryStreamResponse
-> CreateDeliveryStreamResponse -> Bool
$c== :: CreateDeliveryStreamResponse
-> CreateDeliveryStreamResponse -> Bool
Prelude.Eq, ReadPrec [CreateDeliveryStreamResponse]
ReadPrec CreateDeliveryStreamResponse
Int -> ReadS CreateDeliveryStreamResponse
ReadS [CreateDeliveryStreamResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDeliveryStreamResponse]
$creadListPrec :: ReadPrec [CreateDeliveryStreamResponse]
readPrec :: ReadPrec CreateDeliveryStreamResponse
$creadPrec :: ReadPrec CreateDeliveryStreamResponse
readList :: ReadS [CreateDeliveryStreamResponse]
$creadList :: ReadS [CreateDeliveryStreamResponse]
readsPrec :: Int -> ReadS CreateDeliveryStreamResponse
$creadsPrec :: Int -> ReadS CreateDeliveryStreamResponse
Prelude.Read, Int -> CreateDeliveryStreamResponse -> ShowS
[CreateDeliveryStreamResponse] -> ShowS
CreateDeliveryStreamResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDeliveryStreamResponse] -> ShowS
$cshowList :: [CreateDeliveryStreamResponse] -> ShowS
show :: CreateDeliveryStreamResponse -> String
$cshow :: CreateDeliveryStreamResponse -> String
showsPrec :: Int -> CreateDeliveryStreamResponse -> ShowS
$cshowsPrec :: Int -> CreateDeliveryStreamResponse -> ShowS
Prelude.Show, forall x.
Rep CreateDeliveryStreamResponse x -> CreateDeliveryStreamResponse
forall x.
CreateDeliveryStreamResponse -> Rep CreateDeliveryStreamResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateDeliveryStreamResponse x -> CreateDeliveryStreamResponse
$cfrom :: forall x.
CreateDeliveryStreamResponse -> Rep CreateDeliveryStreamResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateDeliveryStreamResponse' 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:
--
-- 'deliveryStreamARN', 'createDeliveryStreamResponse_deliveryStreamARN' - The ARN of the delivery stream.
--
-- 'httpStatus', 'createDeliveryStreamResponse_httpStatus' - The response's http status code.
newCreateDeliveryStreamResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateDeliveryStreamResponse
newCreateDeliveryStreamResponse :: Int -> CreateDeliveryStreamResponse
newCreateDeliveryStreamResponse Int
pHttpStatus_ =
  CreateDeliveryStreamResponse'
    { $sel:deliveryStreamARN:CreateDeliveryStreamResponse' :: Maybe Text
deliveryStreamARN =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateDeliveryStreamResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ARN of the delivery stream.
createDeliveryStreamResponse_deliveryStreamARN :: Lens.Lens' CreateDeliveryStreamResponse (Prelude.Maybe Prelude.Text)
createDeliveryStreamResponse_deliveryStreamARN :: Lens' CreateDeliveryStreamResponse (Maybe Text)
createDeliveryStreamResponse_deliveryStreamARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDeliveryStreamResponse' {Maybe Text
deliveryStreamARN :: Maybe Text
$sel:deliveryStreamARN:CreateDeliveryStreamResponse' :: CreateDeliveryStreamResponse -> Maybe Text
deliveryStreamARN} -> Maybe Text
deliveryStreamARN) (\s :: CreateDeliveryStreamResponse
s@CreateDeliveryStreamResponse' {} Maybe Text
a -> CreateDeliveryStreamResponse
s {$sel:deliveryStreamARN:CreateDeliveryStreamResponse' :: Maybe Text
deliveryStreamARN = Maybe Text
a} :: CreateDeliveryStreamResponse)

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

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