diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.5.0`
+`1.6.0`
 
 
 ## Description
diff --git a/amazonka-kinesis-firehose.cabal b/amazonka-kinesis-firehose.cabal
--- a/amazonka-kinesis-firehose.cabal
+++ b/amazonka-kinesis-firehose.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-kinesis-firehose
-version:               1.5.0
+version:               1.6.0
 synopsis:              Amazon Kinesis Firehose SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -7,7 +7,7 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-copyright:             Copyright (c) 2013-2017 Brendan Hay
+copyright:             Copyright (c) 2013-2018 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -48,11 +48,13 @@
         , Network.AWS.Firehose.CreateDeliveryStream
         , Network.AWS.Firehose.DeleteDeliveryStream
         , Network.AWS.Firehose.DescribeDeliveryStream
-        , Network.AWS.Firehose.GetKinesisStream
         , Network.AWS.Firehose.ListDeliveryStreams
+        , Network.AWS.Firehose.ListTagsForDeliveryStream
         , Network.AWS.Firehose.PutRecord
         , Network.AWS.Firehose.PutRecordBatch
+        , Network.AWS.Firehose.TagDeliveryStream
         , Network.AWS.Firehose.Types
+        , Network.AWS.Firehose.UntagDeliveryStream
         , Network.AWS.Firehose.UpdateDestination
         , Network.AWS.Firehose.Waiters
 
@@ -61,7 +63,7 @@
         , Network.AWS.Firehose.Types.Sum
 
     build-depends:
-          amazonka-core == 1.5.0.*
+          amazonka-core == 1.6.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-kinesis-firehose-test
@@ -81,8 +83,8 @@
         , Test.AWS.Firehose.Internal
 
     build-depends:
-          amazonka-core == 1.5.0.*
-        , amazonka-test == 1.5.0.*
+          amazonka-core == 1.6.0.*
+        , amazonka-test == 1.6.0.*
         , amazonka-kinesis-firehose
         , base
         , bytestring
diff --git a/fixture/ListTagsForDeliveryStream.yaml b/fixture/ListTagsForDeliveryStream.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForDeliveryStream.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/firehose/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  firehose.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForDeliveryStreamResponse.proto b/fixture/ListTagsForDeliveryStreamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForDeliveryStreamResponse.proto
diff --git a/fixture/TagDeliveryStream.yaml b/fixture/TagDeliveryStream.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagDeliveryStream.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/firehose/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  firehose.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagDeliveryStreamResponse.proto b/fixture/TagDeliveryStreamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagDeliveryStreamResponse.proto
diff --git a/fixture/UntagDeliveryStream.yaml b/fixture/UntagDeliveryStream.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagDeliveryStream.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/firehose/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  firehose.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagDeliveryStreamResponse.proto b/fixture/UntagDeliveryStreamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagDeliveryStreamResponse.proto
diff --git a/gen/Network/AWS/Firehose.hs b/gen/Network/AWS/Firehose.hs
--- a/gen/Network/AWS/Firehose.hs
+++ b/gen/Network/AWS/Firehose.hs
@@ -5,15 +5,15 @@
 
 -- |
 -- Module      : Network.AWS.Firehose
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- __Amazon Kinesis Firehose API Reference__
+-- __Amazon Kinesis Data Firehose API Reference__
 --
--- Amazon Kinesis Firehose is a fully managed service that delivers real-time streaming data to destinations such as Amazon Simple Storage Service (Amazon S3), Amazon Elasticsearch Service (Amazon ES), and Amazon Redshift.
+-- Amazon Kinesis Data Firehose is a fully managed service that delivers real-time streaming data to destinations such as Amazon Simple Storage Service (Amazon S3), Amazon Elasticsearch Service (Amazon ES), Amazon Redshift, and Splunk.
 --
 module Network.AWS.Firehose
     (
@@ -23,9 +23,6 @@
     -- * Errors
     -- $errors
 
-    -- ** InvalidStreamTypeException
-    , _InvalidStreamTypeException
-
     -- ** InvalidArgumentException
     , _InvalidArgumentException
 
@@ -53,8 +50,8 @@
     -- ** PutRecord
     , module Network.AWS.Firehose.PutRecord
 
-    -- ** GetKinesisStream
-    , module Network.AWS.Firehose.GetKinesisStream
+    -- ** TagDeliveryStream
+    , module Network.AWS.Firehose.TagDeliveryStream
 
     -- ** UpdateDestination
     , module Network.AWS.Firehose.UpdateDestination
@@ -62,12 +59,18 @@
     -- ** PutRecordBatch
     , module Network.AWS.Firehose.PutRecordBatch
 
+    -- ** UntagDeliveryStream
+    , module Network.AWS.Firehose.UntagDeliveryStream
+
     -- ** CreateDeliveryStream
     , module Network.AWS.Firehose.CreateDeliveryStream
 
     -- ** DescribeDeliveryStream
     , module Network.AWS.Firehose.DescribeDeliveryStream
 
+    -- ** ListTagsForDeliveryStream
+    , module Network.AWS.Firehose.ListTagsForDeliveryStream
+
     -- ** ListDeliveryStreams
     , module Network.AWS.Firehose.ListDeliveryStreams
 
@@ -91,9 +94,24 @@
     -- ** ElasticsearchS3BackupMode
     , ElasticsearchS3BackupMode (..)
 
+    -- ** HECEndpointType
+    , HECEndpointType (..)
+
     -- ** NoEncryptionConfig
     , NoEncryptionConfig (..)
 
+    -- ** OrcCompression
+    , OrcCompression (..)
+
+    -- ** OrcFormatVersion
+    , OrcFormatVersion (..)
+
+    -- ** ParquetCompression
+    , ParquetCompression (..)
+
+    -- ** ParquetWriterVersion
+    , ParquetWriterVersion (..)
+
     -- ** ProcessorParameterName
     , ProcessorParameterName (..)
 
@@ -106,6 +124,9 @@
     -- ** S3BackupMode
     , S3BackupMode (..)
 
+    -- ** SplunkS3BackupMode
+    , SplunkS3BackupMode (..)
+
     -- ** BufferingHints
     , BufferingHints
     , bufferingHints
@@ -126,6 +147,14 @@
     , ccDataTableColumns
     , ccDataTableName
 
+    -- ** DataFormatConversionConfiguration
+    , DataFormatConversionConfiguration
+    , dataFormatConversionConfiguration
+    , dfccOutputFormatConfiguration
+    , dfccEnabled
+    , dfccSchemaConfiguration
+    , dfccInputFormatConfiguration
+
     -- ** DeliveryStreamDescription
     , DeliveryStreamDescription
     , deliveryStreamDescription
@@ -140,9 +169,16 @@
     , dsdDestinations
     , dsdHasMoreDestinations
 
+    -- ** Deserializer
+    , Deserializer
+    , deserializer
+    , dOpenXJSONSerDe
+    , dHiveJSONSerDe
+
     -- ** DestinationDescription
     , DestinationDescription
     , destinationDescription
+    , ddSplunkDestinationDescription
     , ddS3DestinationDescription
     , ddExtendedS3DestinationDescription
     , ddElasticsearchDestinationDescription
@@ -220,6 +256,7 @@
     , esdcEncryptionConfiguration
     , esdcCompressionFormat
     , esdcBufferingHints
+    , esdcDataFormatConversionConfiguration
     , esdcProcessingConfiguration
     , esdcRoleARN
     , esdcBucketARN
@@ -231,6 +268,7 @@
     , esddS3BackupDescription
     , esddPrefix
     , esddCloudWatchLoggingOptions
+    , esddDataFormatConversionConfiguration
     , esddProcessingConfiguration
     , esddRoleARN
     , esddBucketARN
@@ -248,10 +286,21 @@
     , esduEncryptionConfiguration
     , esduCompressionFormat
     , esduBufferingHints
+    , esduDataFormatConversionConfiguration
     , esduBucketARN
     , esduProcessingConfiguration
     , esduRoleARN
 
+    -- ** HiveJSONSerDe
+    , HiveJSONSerDe
+    , hiveJSONSerDe
+    , hjsdTimestampFormats
+
+    -- ** InputFormatConfiguration
+    , InputFormatConfiguration
+    , inputFormatConfiguration
+    , ifcDeserializer
+
     -- ** KMSEncryptionConfig
     , KMSEncryptionConfig
     , kmsEncryptionConfig
@@ -270,6 +319,42 @@
     , kssdKinesisStreamARN
     , kssdRoleARN
 
+    -- ** OpenXJSONSerDe
+    , OpenXJSONSerDe
+    , openXJSONSerDe
+    , oxjsdColumnToJSONKeyMappings
+    , oxjsdCaseInsensitive
+    , oxjsdConvertDotsInJSONKeysToUnderscores
+
+    -- ** OrcSerDe
+    , OrcSerDe
+    , orcSerDe
+    , osdBloomFilterFalsePositiveProbability
+    , osdDictionaryKeyThreshold
+    , osdEnablePadding
+    , osdCompression
+    , osdBloomFilterColumns
+    , osdRowIndexStride
+    , osdFormatVersion
+    , osdBlockSizeBytes
+    , osdStripeSizeBytes
+    , osdPaddingTolerance
+
+    -- ** OutputFormatConfiguration
+    , OutputFormatConfiguration
+    , outputFormatConfiguration
+    , ofcSerializer
+
+    -- ** ParquetSerDe
+    , ParquetSerDe
+    , parquetSerDe
+    , psdWriterVersion
+    , psdCompression
+    , psdMaxPaddingBytes
+    , psdEnableDictionaryCompression
+    , psdPageSizeBytes
+    , psdBlockSizeBytes
+
     -- ** ProcessingConfiguration
     , ProcessingConfiguration
     , processingConfiguration
@@ -363,47 +448,107 @@
     -- ** S3DestinationDescription
     , S3DestinationDescription
     , s3DestinationDescription
-    , sddPrefix
-    , sddCloudWatchLoggingOptions
-    , sddRoleARN
-    , sddBucketARN
-    , sddBufferingHints
-    , sddCompressionFormat
-    , sddEncryptionConfiguration
+    , s3Prefix
+    , s3CloudWatchLoggingOptions
+    , s3RoleARN
+    , s3BucketARN
+    , s3BufferingHints
+    , s3CompressionFormat
+    , s3EncryptionConfiguration
 
     -- ** S3DestinationUpdate
     , S3DestinationUpdate
     , s3DestinationUpdate
-    , sduPrefix
-    , sduCloudWatchLoggingOptions
-    , sduEncryptionConfiguration
-    , sduCompressionFormat
-    , sduBufferingHints
-    , sduBucketARN
-    , sduRoleARN
+    , sPrefix
+    , sCloudWatchLoggingOptions
+    , sEncryptionConfiguration
+    , sCompressionFormat
+    , sBufferingHints
+    , sBucketARN
+    , sRoleARN
 
-    -- ** SessionCredentials
-    , SessionCredentials
-    , sessionCredentials
-    , scAccessKeyId
-    , scSecretAccessKey
-    , scSessionToken
-    , scExpiration
+    -- ** SchemaConfiguration
+    , SchemaConfiguration
+    , schemaConfiguration
+    , scVersionId
+    , scCatalogId
+    , scDatabaseName
+    , scRegion
+    , scTableName
+    , scRoleARN
 
+    -- ** Serializer
+    , Serializer
+    , serializer
+    , sOrcSerDe
+    , sParquetSerDe
+
     -- ** SourceDescription
     , SourceDescription
     , sourceDescription
     , sdKinesisStreamSourceDescription
+
+    -- ** SplunkDestinationConfiguration
+    , SplunkDestinationConfiguration
+    , splunkDestinationConfiguration
+    , splS3BackupMode
+    , splCloudWatchLoggingOptions
+    , splHECAcknowledgmentTimeoutInSeconds
+    , splRetryOptions
+    , splProcessingConfiguration
+    , splHECEndpoint
+    , splHECEndpointType
+    , splHECToken
+    , splS3Configuration
+
+    -- ** SplunkDestinationDescription
+    , SplunkDestinationDescription
+    , splunkDestinationDescription
+    , sddS3BackupMode
+    , sddHECToken
+    , sddHECEndpointType
+    , sddCloudWatchLoggingOptions
+    , sddHECAcknowledgmentTimeoutInSeconds
+    , sddS3DestinationDescription
+    , sddHECEndpoint
+    , sddRetryOptions
+    , sddProcessingConfiguration
+
+    -- ** SplunkDestinationUpdate
+    , SplunkDestinationUpdate
+    , splunkDestinationUpdate
+    , sduS3BackupMode
+    , sduHECToken
+    , sduHECEndpointType
+    , sduCloudWatchLoggingOptions
+    , sduHECAcknowledgmentTimeoutInSeconds
+    , sduS3Update
+    , sduHECEndpoint
+    , sduRetryOptions
+    , sduProcessingConfiguration
+
+    -- ** SplunkRetryOptions
+    , SplunkRetryOptions
+    , splunkRetryOptions
+    , sroDurationInSeconds
+
+    -- ** Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
     ) where
 
 import Network.AWS.Firehose.CreateDeliveryStream
 import Network.AWS.Firehose.DeleteDeliveryStream
 import Network.AWS.Firehose.DescribeDeliveryStream
-import Network.AWS.Firehose.GetKinesisStream
 import Network.AWS.Firehose.ListDeliveryStreams
+import Network.AWS.Firehose.ListTagsForDeliveryStream
 import Network.AWS.Firehose.PutRecord
 import Network.AWS.Firehose.PutRecordBatch
+import Network.AWS.Firehose.TagDeliveryStream
 import Network.AWS.Firehose.Types
+import Network.AWS.Firehose.UntagDeliveryStream
 import Network.AWS.Firehose.UpdateDestination
 import Network.AWS.Firehose.Waiters
 
diff --git a/gen/Network/AWS/Firehose/CreateDeliveryStream.hs b/gen/Network/AWS/Firehose/CreateDeliveryStream.hs
--- a/gen/Network/AWS/Firehose/CreateDeliveryStream.hs
+++ b/gen/Network/AWS/Firehose/CreateDeliveryStream.hs
@@ -12,36 +12,36 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.CreateDeliveryStream
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates a delivery stream.
+-- Creates a Kinesis Data Firehose delivery stream.
 --
 --
--- By default, you can create up to 20 delivery streams per region.
+-- By default, you can create up to 50 delivery streams per AWS 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. 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' .
 --
--- A Kinesis 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 stream as input, set the @DeliveryStreamType@ parameter to @KinesisStreamAsSource@ , and provide the Kinesis stream ARN and role ARN in the @KinesisStreamSourceConfiguration@ parameter.
+-- 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.
 --
--- A delivery stream is configured with a single destination: Amazon S3, Amazon ES, or Amazon Redshift. You must specify only one of the following destination configuration parameters: __ExtendedS3DestinationConfiguration__ , __S3DestinationConfiguration__ , __ElasticsearchDestinationConfiguration__ , or __RedshiftDestinationConfiguration__ .
+-- 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 Firehose buffers data up to 5 MB or for 5 minutes, whichever condition is satisfied first. Note that __BufferingHints__ is a hint, so there are some cases where the service cannot adhere to these conditions strictly; for example, record boundaries are 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.
+-- 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, as Kinesis Firehose first delivers data to S3 and then uses @COPY@ syntax to load data into an Amazon Redshift table. This is specified in the __RedshiftDestinationConfiguration.S3Configuration__ parameter.
+--     * 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.
+--     * 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 Firehose, and that the permissions for the account are restricted for Amazon Redshift @INSERT@ permissions.
+--     * 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 Firehose assumes the IAM role that is configured as part of the destination. The role should allow the Kinesis Firehose principal to assume the role, and the role should have permissions that allow the service to deliver the data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Amazon S3 Bucket Access> in the /Amazon Kinesis Firehose Developer Guide/ .
+-- 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 <http://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 Network.AWS.Firehose.CreateDeliveryStream
     (
@@ -55,6 +55,7 @@
     , cdsExtendedS3DestinationConfiguration
     , cdsKinesisStreamSourceConfiguration
     , cdsDeliveryStreamType
+    , cdsSplunkDestinationConfiguration
     , cdsDeliveryStreamName
 
     -- * Destructuring the Response
@@ -80,6 +81,7 @@
   , _cdsExtendedS3DestinationConfiguration :: !(Maybe ExtendedS3DestinationConfiguration)
   , _cdsKinesisStreamSourceConfiguration :: !(Maybe KinesisStreamSourceConfiguration)
   , _cdsDeliveryStreamType :: !(Maybe DeliveryStreamType)
+  , _cdsSplunkDestinationConfiguration :: !(Maybe SplunkDestinationConfiguration)
   , _cdsDeliveryStreamName :: !Text
   } deriving (Eq, Show, Data, Typeable, Generic)
 
@@ -96,53 +98,60 @@
 --
 -- * 'cdsExtendedS3DestinationConfiguration' - The destination in Amazon S3. You can specify only one destination.
 --
--- * 'cdsKinesisStreamSourceConfiguration' - When a Kinesis stream is used as the source for the delivery stream, a 'KinesisStreamSourceConfiguration' containing the Kinesis stream ARN and the role ARN for the source stream.
+-- * 'cdsKinesisStreamSourceConfiguration' - 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.
 --
--- * 'cdsDeliveryStreamType' - 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 stream as a source.
+-- * 'cdsDeliveryStreamType' - 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.
 --
--- * 'cdsDeliveryStreamName' - The name of the delivery stream. This name must be unique per AWS account in the same region. If the delivery streams are in different accounts or different regions, you can have multiple delivery streams with the same name.
+-- * 'cdsSplunkDestinationConfiguration' - The destination in Splunk. You can specify only one destination.
+--
+-- * 'cdsDeliveryStreamName' - The name of the delivery stream. This name must be unique per AWS account in the same AWS Region. If the delivery streams are in different accounts or different Regions, you can have multiple delivery streams with the same name.
 createDeliveryStream
     :: Text -- ^ 'cdsDeliveryStreamName'
     -> CreateDeliveryStream
 createDeliveryStream pDeliveryStreamName_ =
   CreateDeliveryStream'
-  { _cdsS3DestinationConfiguration = Nothing
-  , _cdsRedshiftDestinationConfiguration = Nothing
-  , _cdsElasticsearchDestinationConfiguration = Nothing
-  , _cdsExtendedS3DestinationConfiguration = Nothing
-  , _cdsKinesisStreamSourceConfiguration = Nothing
-  , _cdsDeliveryStreamType = Nothing
-  , _cdsDeliveryStreamName = pDeliveryStreamName_
-  }
+    { _cdsS3DestinationConfiguration = Nothing
+    , _cdsRedshiftDestinationConfiguration = Nothing
+    , _cdsElasticsearchDestinationConfiguration = Nothing
+    , _cdsExtendedS3DestinationConfiguration = Nothing
+    , _cdsKinesisStreamSourceConfiguration = Nothing
+    , _cdsDeliveryStreamType = Nothing
+    , _cdsSplunkDestinationConfiguration = Nothing
+    , _cdsDeliveryStreamName = pDeliveryStreamName_
+    }
 
 
 -- | [Deprecated] The destination in Amazon S3. You can specify only one destination.
 cdsS3DestinationConfiguration :: Lens' CreateDeliveryStream (Maybe S3DestinationConfiguration)
-cdsS3DestinationConfiguration = lens _cdsS3DestinationConfiguration (\ s a -> s{_cdsS3DestinationConfiguration = a});
+cdsS3DestinationConfiguration = lens _cdsS3DestinationConfiguration (\ s a -> s{_cdsS3DestinationConfiguration = a})
 
 -- | The destination in Amazon Redshift. You can specify only one destination.
 cdsRedshiftDestinationConfiguration :: Lens' CreateDeliveryStream (Maybe RedshiftDestinationConfiguration)
-cdsRedshiftDestinationConfiguration = lens _cdsRedshiftDestinationConfiguration (\ s a -> s{_cdsRedshiftDestinationConfiguration = a});
+cdsRedshiftDestinationConfiguration = lens _cdsRedshiftDestinationConfiguration (\ s a -> s{_cdsRedshiftDestinationConfiguration = a})
 
 -- | The destination in Amazon ES. You can specify only one destination.
 cdsElasticsearchDestinationConfiguration :: Lens' CreateDeliveryStream (Maybe ElasticsearchDestinationConfiguration)
-cdsElasticsearchDestinationConfiguration = lens _cdsElasticsearchDestinationConfiguration (\ s a -> s{_cdsElasticsearchDestinationConfiguration = a});
+cdsElasticsearchDestinationConfiguration = lens _cdsElasticsearchDestinationConfiguration (\ s a -> s{_cdsElasticsearchDestinationConfiguration = a})
 
 -- | The destination in Amazon S3. You can specify only one destination.
 cdsExtendedS3DestinationConfiguration :: Lens' CreateDeliveryStream (Maybe ExtendedS3DestinationConfiguration)
-cdsExtendedS3DestinationConfiguration = lens _cdsExtendedS3DestinationConfiguration (\ s a -> s{_cdsExtendedS3DestinationConfiguration = a});
+cdsExtendedS3DestinationConfiguration = lens _cdsExtendedS3DestinationConfiguration (\ s a -> s{_cdsExtendedS3DestinationConfiguration = a})
 
--- | When a Kinesis stream is used as the source for the delivery stream, a 'KinesisStreamSourceConfiguration' containing the Kinesis stream ARN and the role ARN for the source stream.
+-- | 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.
 cdsKinesisStreamSourceConfiguration :: Lens' CreateDeliveryStream (Maybe KinesisStreamSourceConfiguration)
-cdsKinesisStreamSourceConfiguration = lens _cdsKinesisStreamSourceConfiguration (\ s a -> s{_cdsKinesisStreamSourceConfiguration = a});
+cdsKinesisStreamSourceConfiguration = lens _cdsKinesisStreamSourceConfiguration (\ s a -> s{_cdsKinesisStreamSourceConfiguration = a})
 
--- | 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 stream as a source.
+-- | 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.
 cdsDeliveryStreamType :: Lens' CreateDeliveryStream (Maybe DeliveryStreamType)
-cdsDeliveryStreamType = lens _cdsDeliveryStreamType (\ s a -> s{_cdsDeliveryStreamType = a});
+cdsDeliveryStreamType = lens _cdsDeliveryStreamType (\ s a -> s{_cdsDeliveryStreamType = a})
 
--- | The name of the delivery stream. This name must be unique per AWS account in the same region. If the delivery streams are in different accounts or different regions, you can have multiple delivery streams with the same name.
+-- | The destination in Splunk. You can specify only one destination.
+cdsSplunkDestinationConfiguration :: Lens' CreateDeliveryStream (Maybe SplunkDestinationConfiguration)
+cdsSplunkDestinationConfiguration = lens _cdsSplunkDestinationConfiguration (\ s a -> s{_cdsSplunkDestinationConfiguration = a})
+
+-- | The name of the delivery stream. This name must be unique per AWS account in the same AWS Region. If the delivery streams are in different accounts or different Regions, you can have multiple delivery streams with the same name.
 cdsDeliveryStreamName :: Lens' CreateDeliveryStream Text
-cdsDeliveryStreamName = lens _cdsDeliveryStreamName (\ s a -> s{_cdsDeliveryStreamName = a});
+cdsDeliveryStreamName = lens _cdsDeliveryStreamName (\ s a -> s{_cdsDeliveryStreamName = a})
 
 instance AWSRequest CreateDeliveryStream where
         type Rs CreateDeliveryStream =
@@ -183,6 +192,8 @@
                   ("KinesisStreamSourceConfiguration" .=) <$>
                     _cdsKinesisStreamSourceConfiguration,
                   ("DeliveryStreamType" .=) <$> _cdsDeliveryStreamType,
+                  ("SplunkDestinationConfiguration" .=) <$>
+                    _cdsSplunkDestinationConfiguration,
                   Just
                     ("DeliveryStreamName" .= _cdsDeliveryStreamName)])
 
@@ -211,15 +222,15 @@
     -> CreateDeliveryStreamResponse
 createDeliveryStreamResponse pResponseStatus_ =
   CreateDeliveryStreamResponse'
-  {_cdsrsDeliveryStreamARN = Nothing, _cdsrsResponseStatus = pResponseStatus_}
+    {_cdsrsDeliveryStreamARN = Nothing, _cdsrsResponseStatus = pResponseStatus_}
 
 
 -- | The ARN of the delivery stream.
 cdsrsDeliveryStreamARN :: Lens' CreateDeliveryStreamResponse (Maybe Text)
-cdsrsDeliveryStreamARN = lens _cdsrsDeliveryStreamARN (\ s a -> s{_cdsrsDeliveryStreamARN = a});
+cdsrsDeliveryStreamARN = lens _cdsrsDeliveryStreamARN (\ s a -> s{_cdsrsDeliveryStreamARN = a})
 
 -- | -- | The response status code.
 cdsrsResponseStatus :: Lens' CreateDeliveryStreamResponse Int
-cdsrsResponseStatus = lens _cdsrsResponseStatus (\ s a -> s{_cdsrsResponseStatus = a});
+cdsrsResponseStatus = lens _cdsrsResponseStatus (\ s a -> s{_cdsrsResponseStatus = a})
 
 instance NFData CreateDeliveryStreamResponse where
diff --git a/gen/Network/AWS/Firehose/DeleteDeliveryStream.hs b/gen/Network/AWS/Firehose/DeleteDeliveryStream.hs
--- a/gen/Network/AWS/Firehose/DeleteDeliveryStream.hs
+++ b/gen/Network/AWS/Firehose/DeleteDeliveryStream.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.DeleteDeliveryStream
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -25,7 +25,7 @@
 --
 -- To check the state of a delivery stream, use 'DescribeDeliveryStream' .
 --
--- While the delivery stream is @DELETING@ state, the service may continue to accept the records, but the service doesn't make any guarantees with respect to delivering the data. Therefore, as a best practice, you should first stop any applications that are sending records before deleting a delivery stream.
+-- While the delivery stream is @DELETING@ state, the service might continue to accept the records, but it doesn't make any guarantees with respect to delivering the data. Therefore, as a best practice, you should first stop any applications that are sending records before deleting a delivery stream.
 --
 module Network.AWS.Firehose.DeleteDeliveryStream
     (
@@ -69,7 +69,7 @@
 
 -- | The name of the delivery stream.
 dDeliveryStreamName :: Lens' DeleteDeliveryStream Text
-dDeliveryStreamName = lens _dDeliveryStreamName (\ s a -> s{_dDeliveryStreamName = a});
+dDeliveryStreamName = lens _dDeliveryStreamName (\ s a -> s{_dDeliveryStreamName = a})
 
 instance AWSRequest DeleteDeliveryStream where
         type Rs DeleteDeliveryStream =
@@ -128,6 +128,6 @@
 
 -- | -- | The response status code.
 drsResponseStatus :: Lens' DeleteDeliveryStreamResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a})
 
 instance NFData DeleteDeliveryStreamResponse where
diff --git a/gen/Network/AWS/Firehose/DescribeDeliveryStream.hs b/gen/Network/AWS/Firehose/DescribeDeliveryStream.hs
--- a/gen/Network/AWS/Firehose/DescribeDeliveryStream.hs
+++ b/gen/Network/AWS/Firehose/DescribeDeliveryStream.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.DescribeDeliveryStream
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the specified delivery stream and gets the status. For example, after your delivery stream is created, call 'DescribeDeliveryStream' to see if the delivery stream is @ACTIVE@ and therefore ready for data to be sent to it.
+-- Describes the specified delivery stream and gets the status. For example, after your delivery stream is created, call @DescribeDeliveryStream@ to see whether the delivery stream is @ACTIVE@ and therefore ready for data to be sent to it.
 --
 --
 module Network.AWS.Firehose.DescribeDeliveryStream
@@ -58,9 +58,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ddsExclusiveStartDestinationId' - The ID of the destination to start returning the destination information. Currently, Kinesis Firehose supports one destination per delivery stream.
+-- * 'ddsExclusiveStartDestinationId' - The ID of the destination to start returning the destination information. Kinesis Data Firehose supports one destination per delivery stream.
 --
--- * 'ddsLimit' - The limit on the number of destinations to return. Currently, you can have one destination per delivery stream.
+-- * 'ddsLimit' - The limit on the number of destinations to return. You can have one destination per delivery stream.
 --
 -- * 'ddsDeliveryStreamName' - The name of the delivery stream.
 describeDeliveryStream
@@ -68,23 +68,23 @@
     -> DescribeDeliveryStream
 describeDeliveryStream pDeliveryStreamName_ =
   DescribeDeliveryStream'
-  { _ddsExclusiveStartDestinationId = Nothing
-  , _ddsLimit = Nothing
-  , _ddsDeliveryStreamName = pDeliveryStreamName_
-  }
+    { _ddsExclusiveStartDestinationId = Nothing
+    , _ddsLimit = Nothing
+    , _ddsDeliveryStreamName = pDeliveryStreamName_
+    }
 
 
--- | The ID of the destination to start returning the destination information. Currently, Kinesis Firehose supports one destination per delivery stream.
+-- | The ID of the destination to start returning the destination information. Kinesis Data Firehose supports one destination per delivery stream.
 ddsExclusiveStartDestinationId :: Lens' DescribeDeliveryStream (Maybe Text)
-ddsExclusiveStartDestinationId = lens _ddsExclusiveStartDestinationId (\ s a -> s{_ddsExclusiveStartDestinationId = a});
+ddsExclusiveStartDestinationId = lens _ddsExclusiveStartDestinationId (\ s a -> s{_ddsExclusiveStartDestinationId = a})
 
--- | The limit on the number of destinations to return. Currently, you can have one destination per delivery stream.
+-- | The limit on the number of destinations to return. You can have one destination per delivery stream.
 ddsLimit :: Lens' DescribeDeliveryStream (Maybe Natural)
-ddsLimit = lens _ddsLimit (\ s a -> s{_ddsLimit = a}) . mapping _Nat;
+ddsLimit = lens _ddsLimit (\ s a -> s{_ddsLimit = a}) . mapping _Nat
 
 -- | The name of the delivery stream.
 ddsDeliveryStreamName :: Lens' DescribeDeliveryStream Text
-ddsDeliveryStreamName = lens _ddsDeliveryStreamName (\ s a -> s{_ddsDeliveryStreamName = a});
+ddsDeliveryStreamName = lens _ddsDeliveryStreamName (\ s a -> s{_ddsDeliveryStreamName = a})
 
 instance AWSRequest DescribeDeliveryStream where
         type Rs DescribeDeliveryStream =
@@ -147,17 +147,17 @@
     -> DescribeDeliveryStreamResponse
 describeDeliveryStreamResponse pResponseStatus_ pDeliveryStreamDescription_ =
   DescribeDeliveryStreamResponse'
-  { _ddsrsResponseStatus = pResponseStatus_
-  , _ddsrsDeliveryStreamDescription = pDeliveryStreamDescription_
-  }
+    { _ddsrsResponseStatus = pResponseStatus_
+    , _ddsrsDeliveryStreamDescription = pDeliveryStreamDescription_
+    }
 
 
 -- | -- | The response status code.
 ddsrsResponseStatus :: Lens' DescribeDeliveryStreamResponse Int
-ddsrsResponseStatus = lens _ddsrsResponseStatus (\ s a -> s{_ddsrsResponseStatus = a});
+ddsrsResponseStatus = lens _ddsrsResponseStatus (\ s a -> s{_ddsrsResponseStatus = a})
 
 -- | Information about the delivery stream.
 ddsrsDeliveryStreamDescription :: Lens' DescribeDeliveryStreamResponse DeliveryStreamDescription
-ddsrsDeliveryStreamDescription = lens _ddsrsDeliveryStreamDescription (\ s a -> s{_ddsrsDeliveryStreamDescription = a});
+ddsrsDeliveryStreamDescription = lens _ddsrsDeliveryStreamDescription (\ s a -> s{_ddsrsDeliveryStreamDescription = a})
 
 instance NFData DescribeDeliveryStreamResponse where
diff --git a/gen/Network/AWS/Firehose/GetKinesisStream.hs b/gen/Network/AWS/Firehose/GetKinesisStream.hs
deleted file mode 100644
--- a/gen/Network/AWS/Firehose/GetKinesisStream.hs
+++ /dev/null
@@ -1,145 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Firehose.GetKinesisStream
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Undocumented operation.
-module Network.AWS.Firehose.GetKinesisStream
-    (
-    -- * Creating a Request
-      getKinesisStream
-    , GetKinesisStream
-    -- * Request Lenses
-    , gksDeliveryStreamARN
-
-    -- * Destructuring the Response
-    , getKinesisStreamResponse
-    , GetKinesisStreamResponse
-    -- * Response Lenses
-    , gksrsCredentialsForReadingKinesisStream
-    , gksrsKinesisStreamARN
-    , gksrsResponseStatus
-    ) where
-
-import Network.AWS.Firehose.Types
-import Network.AWS.Firehose.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getKinesisStream' smart constructor.
-newtype GetKinesisStream = GetKinesisStream'
-  { _gksDeliveryStreamARN :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetKinesisStream' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gksDeliveryStreamARN' - Undocumented member.
-getKinesisStream
-    :: Text -- ^ 'gksDeliveryStreamARN'
-    -> GetKinesisStream
-getKinesisStream pDeliveryStreamARN_ =
-  GetKinesisStream' {_gksDeliveryStreamARN = pDeliveryStreamARN_}
-
-
--- | Undocumented member.
-gksDeliveryStreamARN :: Lens' GetKinesisStream Text
-gksDeliveryStreamARN = lens _gksDeliveryStreamARN (\ s a -> s{_gksDeliveryStreamARN = a});
-
-instance AWSRequest GetKinesisStream where
-        type Rs GetKinesisStream = GetKinesisStreamResponse
-        request = postJSON firehose
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetKinesisStreamResponse' <$>
-                   (x .?> "CredentialsForReadingKinesisStream") <*>
-                     (x .?> "KinesisStreamARN")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetKinesisStream where
-
-instance NFData GetKinesisStream where
-
-instance ToHeaders GetKinesisStream where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Firehose_20150804.GetKinesisStream" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetKinesisStream where
-        toJSON GetKinesisStream'{..}
-          = object
-              (catMaybes
-                 [Just
-                    ("DeliveryStreamARN" .= _gksDeliveryStreamARN)])
-
-instance ToPath GetKinesisStream where
-        toPath = const "/"
-
-instance ToQuery GetKinesisStream where
-        toQuery = const mempty
-
--- | /See:/ 'getKinesisStreamResponse' smart constructor.
-data GetKinesisStreamResponse = GetKinesisStreamResponse'
-  { _gksrsCredentialsForReadingKinesisStream :: !(Maybe SessionCredentials)
-  , _gksrsKinesisStreamARN                   :: !(Maybe Text)
-  , _gksrsResponseStatus                     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetKinesisStreamResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gksrsCredentialsForReadingKinesisStream' - Undocumented member.
---
--- * 'gksrsKinesisStreamARN' - Undocumented member.
---
--- * 'gksrsResponseStatus' - -- | The response status code.
-getKinesisStreamResponse
-    :: Int -- ^ 'gksrsResponseStatus'
-    -> GetKinesisStreamResponse
-getKinesisStreamResponse pResponseStatus_ =
-  GetKinesisStreamResponse'
-  { _gksrsCredentialsForReadingKinesisStream = Nothing
-  , _gksrsKinesisStreamARN = Nothing
-  , _gksrsResponseStatus = pResponseStatus_
-  }
-
-
--- | Undocumented member.
-gksrsCredentialsForReadingKinesisStream :: Lens' GetKinesisStreamResponse (Maybe SessionCredentials)
-gksrsCredentialsForReadingKinesisStream = lens _gksrsCredentialsForReadingKinesisStream (\ s a -> s{_gksrsCredentialsForReadingKinesisStream = a});
-
--- | Undocumented member.
-gksrsKinesisStreamARN :: Lens' GetKinesisStreamResponse (Maybe Text)
-gksrsKinesisStreamARN = lens _gksrsKinesisStreamARN (\ s a -> s{_gksrsKinesisStreamARN = a});
-
--- | -- | The response status code.
-gksrsResponseStatus :: Lens' GetKinesisStreamResponse Int
-gksrsResponseStatus = lens _gksrsResponseStatus (\ s a -> s{_gksrsResponseStatus = a});
-
-instance NFData GetKinesisStreamResponse where
diff --git a/gen/Network/AWS/Firehose/ListDeliveryStreams.hs b/gen/Network/AWS/Firehose/ListDeliveryStreams.hs
--- a/gen/Network/AWS/Firehose/ListDeliveryStreams.hs
+++ b/gen/Network/AWS/Firehose/ListDeliveryStreams.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.ListDeliveryStreams
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -21,7 +21,7 @@
 -- Lists your delivery streams.
 --
 --
--- The number of delivery streams might be too large to return using a single call to 'ListDeliveryStreams' . You can limit the number of delivery streams returned, using the __Limit__ parameter. To determine whether there are more delivery streams to list, check the value of __HasMoreDeliveryStreams__ in the output. If there are more delivery streams to list, you can request them by specifying the name of the last delivery stream returned in the call in the __ExclusiveStartDeliveryStreamName__ parameter of a subsequent call.
+-- The number of delivery streams might be too large to return using a single call to @ListDeliveryStreams@ . You can limit the number of delivery streams returned, using the __Limit__ parameter. To determine whether there are more delivery streams to list, check the value of @HasMoreDeliveryStreams@ in the output. If there are more delivery streams to list, you can request them by specifying the name of the last delivery stream returned in the call in the @ExclusiveStartDeliveryStreamName@ parameter of a subsequent call.
 --
 module Network.AWS.Firehose.ListDeliveryStreams
     (
@@ -61,32 +61,32 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ldsLimit' - The maximum number of delivery streams to list.
+-- * 'ldsLimit' - The maximum number of delivery streams to list. The default value is 10.
 --
--- * 'ldsDeliveryStreamType' - The delivery stream type. This can be one of the following values:     * @DirectPut@ : Provider applications access the delivery stream directly.     * @KinesisStreamAsSource@ : The delivery stream uses a Kinesis stream as a source. This parameter is optional. If this parameter is omitted, delivery streams of all types are returned.
+-- * 'ldsDeliveryStreamType' - The delivery stream type. This 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. This parameter is optional. If this parameter is omitted, delivery streams of all types are returned.
 --
 -- * 'ldsExclusiveStartDeliveryStreamName' - The name of the delivery stream to start the list with.
 listDeliveryStreams
     :: ListDeliveryStreams
 listDeliveryStreams =
   ListDeliveryStreams'
-  { _ldsLimit = Nothing
-  , _ldsDeliveryStreamType = Nothing
-  , _ldsExclusiveStartDeliveryStreamName = Nothing
-  }
+    { _ldsLimit = Nothing
+    , _ldsDeliveryStreamType = Nothing
+    , _ldsExclusiveStartDeliveryStreamName = Nothing
+    }
 
 
--- | The maximum number of delivery streams to list.
+-- | The maximum number of delivery streams to list. The default value is 10.
 ldsLimit :: Lens' ListDeliveryStreams (Maybe Natural)
-ldsLimit = lens _ldsLimit (\ s a -> s{_ldsLimit = a}) . mapping _Nat;
+ldsLimit = lens _ldsLimit (\ s a -> s{_ldsLimit = a}) . mapping _Nat
 
--- | The delivery stream type. This can be one of the following values:     * @DirectPut@ : Provider applications access the delivery stream directly.     * @KinesisStreamAsSource@ : The delivery stream uses a Kinesis stream as a source. This parameter is optional. If this parameter is omitted, delivery streams of all types are returned.
+-- | The delivery stream type. This 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. This parameter is optional. If this parameter is omitted, delivery streams of all types are returned.
 ldsDeliveryStreamType :: Lens' ListDeliveryStreams (Maybe DeliveryStreamType)
-ldsDeliveryStreamType = lens _ldsDeliveryStreamType (\ s a -> s{_ldsDeliveryStreamType = a});
+ldsDeliveryStreamType = lens _ldsDeliveryStreamType (\ s a -> s{_ldsDeliveryStreamType = a})
 
 -- | The name of the delivery stream to start the list with.
 ldsExclusiveStartDeliveryStreamName :: Lens' ListDeliveryStreams (Maybe Text)
-ldsExclusiveStartDeliveryStreamName = lens _ldsExclusiveStartDeliveryStreamName (\ s a -> s{_ldsExclusiveStartDeliveryStreamName = a});
+ldsExclusiveStartDeliveryStreamName = lens _ldsExclusiveStartDeliveryStreamName (\ s a -> s{_ldsExclusiveStartDeliveryStreamName = a})
 
 instance AWSRequest ListDeliveryStreams where
         type Rs ListDeliveryStreams =
@@ -152,22 +152,22 @@
     -> ListDeliveryStreamsResponse
 listDeliveryStreamsResponse pResponseStatus_ pHasMoreDeliveryStreams_ =
   ListDeliveryStreamsResponse'
-  { _ldsrsResponseStatus = pResponseStatus_
-  , _ldsrsDeliveryStreamNames = mempty
-  , _ldsrsHasMoreDeliveryStreams = pHasMoreDeliveryStreams_
-  }
+    { _ldsrsResponseStatus = pResponseStatus_
+    , _ldsrsDeliveryStreamNames = mempty
+    , _ldsrsHasMoreDeliveryStreams = pHasMoreDeliveryStreams_
+    }
 
 
 -- | -- | The response status code.
 ldsrsResponseStatus :: Lens' ListDeliveryStreamsResponse Int
-ldsrsResponseStatus = lens _ldsrsResponseStatus (\ s a -> s{_ldsrsResponseStatus = a});
+ldsrsResponseStatus = lens _ldsrsResponseStatus (\ s a -> s{_ldsrsResponseStatus = a})
 
 -- | The names of the delivery streams.
 ldsrsDeliveryStreamNames :: Lens' ListDeliveryStreamsResponse [Text]
-ldsrsDeliveryStreamNames = lens _ldsrsDeliveryStreamNames (\ s a -> s{_ldsrsDeliveryStreamNames = a}) . _Coerce;
+ldsrsDeliveryStreamNames = lens _ldsrsDeliveryStreamNames (\ s a -> s{_ldsrsDeliveryStreamNames = a}) . _Coerce
 
 -- | Indicates whether there are more delivery streams available to list.
 ldsrsHasMoreDeliveryStreams :: Lens' ListDeliveryStreamsResponse Bool
-ldsrsHasMoreDeliveryStreams = lens _ldsrsHasMoreDeliveryStreams (\ s a -> s{_ldsrsHasMoreDeliveryStreams = a});
+ldsrsHasMoreDeliveryStreams = lens _ldsrsHasMoreDeliveryStreams (\ s a -> s{_ldsrsHasMoreDeliveryStreams = a})
 
 instance NFData ListDeliveryStreamsResponse where
diff --git a/gen/Network/AWS/Firehose/ListTagsForDeliveryStream.hs b/gen/Network/AWS/Firehose/ListTagsForDeliveryStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Firehose/ListTagsForDeliveryStream.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Firehose.ListTagsForDeliveryStream
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the tags for the specified delivery stream. This operation has a limit of five transactions per second per account.
+--
+--
+module Network.AWS.Firehose.ListTagsForDeliveryStream
+    (
+    -- * Creating a Request
+      listTagsForDeliveryStream
+    , ListTagsForDeliveryStream
+    -- * Request Lenses
+    , ltfdsLimit
+    , ltfdsExclusiveStartTagKey
+    , ltfdsDeliveryStreamName
+
+    -- * Destructuring the Response
+    , listTagsForDeliveryStreamResponse
+    , ListTagsForDeliveryStreamResponse
+    -- * Response Lenses
+    , ltfdsrsResponseStatus
+    , ltfdsrsTags
+    , ltfdsrsHasMoreTags
+    ) where
+
+import Network.AWS.Firehose.Types
+import Network.AWS.Firehose.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'listTagsForDeliveryStream' smart constructor.
+data ListTagsForDeliveryStream = ListTagsForDeliveryStream'
+  { _ltfdsLimit                :: !(Maybe Nat)
+  , _ltfdsExclusiveStartTagKey :: !(Maybe Text)
+  , _ltfdsDeliveryStreamName   :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListTagsForDeliveryStream' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltfdsLimit' - The number of tags to return. If this number is less than the total number of tags associated with the delivery stream, @HasMoreTags@ is set to @true@ in the response. To list additional tags, set @ExclusiveStartTagKey@ to the last key in the response.
+--
+-- * 'ltfdsExclusiveStartTagKey' - The key to use as the starting point for the list of tags. If you set this parameter, @ListTagsForDeliveryStream@ gets all tags that occur after @ExclusiveStartTagKey@ .
+--
+-- * 'ltfdsDeliveryStreamName' - The name of the delivery stream whose tags you want to list.
+listTagsForDeliveryStream
+    :: Text -- ^ 'ltfdsDeliveryStreamName'
+    -> ListTagsForDeliveryStream
+listTagsForDeliveryStream pDeliveryStreamName_ =
+  ListTagsForDeliveryStream'
+    { _ltfdsLimit = Nothing
+    , _ltfdsExclusiveStartTagKey = Nothing
+    , _ltfdsDeliveryStreamName = pDeliveryStreamName_
+    }
+
+
+-- | The number of tags to return. If this number is less than the total number of tags associated with the delivery stream, @HasMoreTags@ is set to @true@ in the response. To list additional tags, set @ExclusiveStartTagKey@ to the last key in the response.
+ltfdsLimit :: Lens' ListTagsForDeliveryStream (Maybe Natural)
+ltfdsLimit = lens _ltfdsLimit (\ s a -> s{_ltfdsLimit = a}) . mapping _Nat
+
+-- | The key to use as the starting point for the list of tags. If you set this parameter, @ListTagsForDeliveryStream@ gets all tags that occur after @ExclusiveStartTagKey@ .
+ltfdsExclusiveStartTagKey :: Lens' ListTagsForDeliveryStream (Maybe Text)
+ltfdsExclusiveStartTagKey = lens _ltfdsExclusiveStartTagKey (\ s a -> s{_ltfdsExclusiveStartTagKey = a})
+
+-- | The name of the delivery stream whose tags you want to list.
+ltfdsDeliveryStreamName :: Lens' ListTagsForDeliveryStream Text
+ltfdsDeliveryStreamName = lens _ltfdsDeliveryStreamName (\ s a -> s{_ltfdsDeliveryStreamName = a})
+
+instance AWSRequest ListTagsForDeliveryStream where
+        type Rs ListTagsForDeliveryStream =
+             ListTagsForDeliveryStreamResponse
+        request = postJSON firehose
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTagsForDeliveryStreamResponse' <$>
+                   (pure (fromEnum s)) <*> (x .?> "Tags" .!@ mempty) <*>
+                     (x .:> "HasMoreTags"))
+
+instance Hashable ListTagsForDeliveryStream where
+
+instance NFData ListTagsForDeliveryStream where
+
+instance ToHeaders ListTagsForDeliveryStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Firehose_20150804.ListTagsForDeliveryStream" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListTagsForDeliveryStream where
+        toJSON ListTagsForDeliveryStream'{..}
+          = object
+              (catMaybes
+                 [("Limit" .=) <$> _ltfdsLimit,
+                  ("ExclusiveStartTagKey" .=) <$>
+                    _ltfdsExclusiveStartTagKey,
+                  Just
+                    ("DeliveryStreamName" .= _ltfdsDeliveryStreamName)])
+
+instance ToPath ListTagsForDeliveryStream where
+        toPath = const "/"
+
+instance ToQuery ListTagsForDeliveryStream where
+        toQuery = const mempty
+
+-- | /See:/ 'listTagsForDeliveryStreamResponse' smart constructor.
+data ListTagsForDeliveryStreamResponse = ListTagsForDeliveryStreamResponse'
+  { _ltfdsrsResponseStatus :: !Int
+  , _ltfdsrsTags           :: ![Tag]
+  , _ltfdsrsHasMoreTags    :: !Bool
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListTagsForDeliveryStreamResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltfdsrsResponseStatus' - -- | The response status code.
+--
+-- * 'ltfdsrsTags' - A list of tags associated with @DeliveryStreamName@ , starting with the first tag after @ExclusiveStartTagKey@ and up to the specified @Limit@ .
+--
+-- * 'ltfdsrsHasMoreTags' - If this is @true@ in the response, more tags are available. To list the remaining tags, set @ExclusiveStartTagKey@ to the key of the last tag returned and call @ListTagsForDeliveryStream@ again.
+listTagsForDeliveryStreamResponse
+    :: Int -- ^ 'ltfdsrsResponseStatus'
+    -> Bool -- ^ 'ltfdsrsHasMoreTags'
+    -> ListTagsForDeliveryStreamResponse
+listTagsForDeliveryStreamResponse pResponseStatus_ pHasMoreTags_ =
+  ListTagsForDeliveryStreamResponse'
+    { _ltfdsrsResponseStatus = pResponseStatus_
+    , _ltfdsrsTags = mempty
+    , _ltfdsrsHasMoreTags = pHasMoreTags_
+    }
+
+
+-- | -- | The response status code.
+ltfdsrsResponseStatus :: Lens' ListTagsForDeliveryStreamResponse Int
+ltfdsrsResponseStatus = lens _ltfdsrsResponseStatus (\ s a -> s{_ltfdsrsResponseStatus = a})
+
+-- | A list of tags associated with @DeliveryStreamName@ , starting with the first tag after @ExclusiveStartTagKey@ and up to the specified @Limit@ .
+ltfdsrsTags :: Lens' ListTagsForDeliveryStreamResponse [Tag]
+ltfdsrsTags = lens _ltfdsrsTags (\ s a -> s{_ltfdsrsTags = a}) . _Coerce
+
+-- | If this is @true@ in the response, more tags are available. To list the remaining tags, set @ExclusiveStartTagKey@ to the key of the last tag returned and call @ListTagsForDeliveryStream@ again.
+ltfdsrsHasMoreTags :: Lens' ListTagsForDeliveryStreamResponse Bool
+ltfdsrsHasMoreTags = lens _ltfdsrsHasMoreTags (\ s a -> s{_ltfdsrsHasMoreTags = a})
+
+instance NFData ListTagsForDeliveryStreamResponse
+         where
diff --git a/gen/Network/AWS/Firehose/PutRecord.hs b/gen/Network/AWS/Firehose/PutRecord.hs
--- a/gen/Network/AWS/Firehose/PutRecord.hs
+++ b/gen/Network/AWS/Firehose/PutRecord.hs
@@ -12,26 +12,26 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.PutRecord
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Writes a single data record into an Amazon Kinesis Firehose delivery stream. To write multiple data records into a delivery stream, use 'PutRecordBatch' . Applications using these operations are referred to as producers.
+-- Writes a single data record into an Amazon Kinesis Data Firehose delivery stream. To write multiple data records into a delivery stream, use 'PutRecordBatch' . Applications using these operations are referred to as producers.
 --
 --
--- By default, each delivery stream can take in up to 2,000 transactions per second, 5,000 records per second, or 5 MB per second. Note that if you use 'PutRecord' and 'PutRecordBatch' , the limits are an aggregate across these two operations for each delivery stream. For more information about limits and how to request an increase, see <http://docs.aws.amazon.com/firehose/latest/dev/limits.html Amazon Kinesis Firehose Limits> .
+-- By default, each delivery stream can take in up to 2,000 transactions per second, 5,000 records per second, or 5 MB per second. If you use 'PutRecord' and 'PutRecordBatch' , the limits are an aggregate across these two operations for each delivery stream. For more information about limits and how to request an increase, see <http://docs.aws.amazon.com/firehose/latest/dev/limits.html Amazon Kinesis Data Firehose Limits> .
 --
--- You must specify the name of the delivery stream and the data record when using 'PutRecord' . The data record consists of a data blob that can be up to 1,000 KB in size, and any kind of data, for example, a segment from a log file, geographic location data, website clickstream data, and so on.
+-- You must specify the name of the delivery stream and the data record when using 'PutRecord' . The data record consists of a data blob that can be up to 1,000 KB in size, and any kind of data. For example, it can be a segment from a log file, geographic location data, website clickstream data, and so on.
 --
--- Kinesis Firehose buffers records before delivering them to the destination. To disambiguate the data blobs at the destination, a common solution is to use delimiters in the data, such as a newline (@\n@ ) or some other character unique within the data. This allows the consumer application to parse individual data items when reading the data from the destination.
+-- Kinesis Data Firehose buffers records before delivering them to the destination. To disambiguate the data blobs at the destination, a common solution is to use delimiters in the data, such as a newline (@\n@ ) or some other character unique within the data. This allows the consumer application to parse individual data items when reading the data from the destination.
 --
--- The 'PutRecord' operation returns a __RecordId__ , which is a unique string assigned to each record. Producer applications can use this ID for purposes such as auditability and investigation.
+-- The @PutRecord@ operation returns a @RecordId@ , which is a unique string assigned to each record. Producer applications can use this ID for purposes such as auditability and investigation.
 --
--- If the 'PutRecord' operation throws a __ServiceUnavailableException__ , back off and retry. If the exception persists, it is possible that the throughput limits have been exceeded for the delivery stream.
+-- If the @PutRecord@ operation throws a @ServiceUnavailableException@ , back off and retry. If the exception persists, it is possible that the throughput limits have been exceeded for the delivery stream.
 --
--- Data records sent to Kinesis Firehose are stored for 24 hours from the time they are added to a delivery stream as it attempts to send the records to the destination. If the destination is unreachable for more than 24 hours, the data is no longer available.
+-- Data records sent to Kinesis Data Firehose are stored for 24 hours from the time they are added to a delivery stream as it tries to send the records to the destination. If the destination is unreachable for more than 24 hours, the data is no longer available.
 --
 module Network.AWS.Firehose.PutRecord
     (
@@ -77,16 +77,16 @@
     -> PutRecord
 putRecord pDeliveryStreamName_ pRecord_ =
   PutRecord'
-  {_prDeliveryStreamName = pDeliveryStreamName_, _prRecord = pRecord_}
+    {_prDeliveryStreamName = pDeliveryStreamName_, _prRecord = pRecord_}
 
 
 -- | The name of the delivery stream.
 prDeliveryStreamName :: Lens' PutRecord Text
-prDeliveryStreamName = lens _prDeliveryStreamName (\ s a -> s{_prDeliveryStreamName = a});
+prDeliveryStreamName = lens _prDeliveryStreamName (\ s a -> s{_prDeliveryStreamName = a})
 
 -- | The record.
 prRecord :: Lens' PutRecord Record
-prRecord = lens _prRecord (\ s a -> s{_prRecord = a});
+prRecord = lens _prRecord (\ s a -> s{_prRecord = a})
 
 instance AWSRequest PutRecord where
         type Rs PutRecord = PutRecordResponse
@@ -144,15 +144,15 @@
     -> PutRecordResponse
 putRecordResponse pResponseStatus_ pRecordId_ =
   PutRecordResponse'
-  {_prrsResponseStatus = pResponseStatus_, _prrsRecordId = pRecordId_}
+    {_prrsResponseStatus = pResponseStatus_, _prrsRecordId = pRecordId_}
 
 
 -- | -- | The response status code.
 prrsResponseStatus :: Lens' PutRecordResponse Int
-prrsResponseStatus = lens _prrsResponseStatus (\ s a -> s{_prrsResponseStatus = a});
+prrsResponseStatus = lens _prrsResponseStatus (\ s a -> s{_prrsResponseStatus = a})
 
 -- | The ID of the record.
 prrsRecordId :: Lens' PutRecordResponse Text
-prrsRecordId = lens _prrsRecordId (\ s a -> s{_prrsRecordId = a});
+prrsRecordId = lens _prrsRecordId (\ s a -> s{_prrsRecordId = a})
 
 instance NFData PutRecordResponse where
diff --git a/gen/Network/AWS/Firehose/PutRecordBatch.hs b/gen/Network/AWS/Firehose/PutRecordBatch.hs
--- a/gen/Network/AWS/Firehose/PutRecordBatch.hs
+++ b/gen/Network/AWS/Firehose/PutRecordBatch.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.PutRecordBatch
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -21,15 +21,15 @@
 -- Writes multiple data records into a delivery stream in a single call, which can achieve higher throughput per producer than when writing single records. To write single data records into a delivery stream, use 'PutRecord' . Applications using these operations are referred to as producers.
 --
 --
--- By default, each delivery stream can take in up to 2,000 transactions per second, 5,000 records per second, or 5 MB per second. If you use 'PutRecord' and 'PutRecordBatch' , the limits are an aggregate across these two operations for each delivery stream. For more information about limits, see <http://docs.aws.amazon.com/firehose/latest/dev/limits.html Amazon Kinesis Firehose Limits> .
+-- By default, each delivery stream can take in up to 2,000 transactions per second, 5,000 records per second, or 5 MB per second. If you use 'PutRecord' and 'PutRecordBatch' , the limits are an aggregate across these two operations for each delivery stream. For more information about limits, see <http://docs.aws.amazon.com/firehose/latest/dev/limits.html Amazon Kinesis Data Firehose Limits> .
 --
 -- Each 'PutRecordBatch' request supports up to 500 records. Each record in the request can be as large as 1,000 KB (before 64-bit encoding), up to a limit of 4 MB for the entire request. These limits cannot be changed.
 --
--- You must specify the name of the delivery stream and the data record when using 'PutRecord' . The data record consists of a data blob that can be up to 1,000 KB in size, and any kind of data. For example, it could be a segment from a log file, geographic location data, web site clickstream data, and so on.
+-- You must specify the name of the delivery stream and the data record when using 'PutRecord' . The data record consists of a data blob that can be up to 1,000 KB in size, and any kind of data. For example, it could be a segment from a log file, geographic location data, website clickstream data, and so on.
 --
--- Kinesis Firehose buffers records before delivering them to the destination. To disambiguate the data blobs at the destination, a common solution is to use delimiters in the data, such as a newline (@\n@ ) or some other character unique within the data. This allows the consumer application to parse individual data items when reading the data from the destination.
+-- Kinesis Data Firehose buffers records before delivering them to the destination. To disambiguate the data blobs at the destination, a common solution is to use delimiters in the data, such as a newline (@\n@ ) or some other character unique within the data. This allows the consumer application to parse individual data items when reading the data from the destination.
 --
--- The 'PutRecordBatch' response includes a count of failed records, __FailedPutCount__ , and an array of responses, __RequestResponses__ . Each entry in the __RequestResponses__ array provides additional information about the processed record. It directly correlates with a record in the request array using the same ordering, from the top to the bottom. The response array always includes the same number of records as the request array. __RequestResponses__ includes both successfully and unsuccessfully processed records. Kinesis Firehose attempts to process all records in each 'PutRecordBatch' request. A single record failure does not stop the processing of subsequent records.
+-- The 'PutRecordBatch' response includes a count of failed records, __FailedPutCount__ , and an array of responses, __RequestResponses__ . Each entry in the __RequestResponses__ array provides additional information about the processed record. It directly correlates with a record in the request array using the same ordering, from the top to the bottom. The response array always includes the same number of records as the request array. __RequestResponses__ includes both successfully and unsuccessfully processed records. Kinesis Data Firehose tries to process all records in each 'PutRecordBatch' request. A single record failure does not stop the processing of subsequent records.
 --
 -- A successfully processed record includes a __RecordId__ value, which is unique for the record. An unsuccessfully processed record includes __ErrorCode__ and __ErrorMessage__ values. __ErrorCode__ reflects the type of error, and is one of the following values: @ServiceUnavailable@ or @InternalFailure@ . __ErrorMessage__ provides more detailed information about the error.
 --
@@ -37,7 +37,7 @@
 --
 -- If 'PutRecordBatch' throws __ServiceUnavailableException__ , back off and retry. If the exception persists, it is possible that the throughput limits have been exceeded for the delivery stream.
 --
--- Data records sent to Kinesis Firehose are stored for 24 hours from the time they are added to a delivery stream as it attempts to send the records to the destination. If the destination is unreachable for more than 24 hours, the data is no longer available.
+-- Data records sent to Kinesis Data Firehose are stored for 24 hours from the time they are added to a delivery stream as it attempts to send the records to the destination. If the destination is unreachable for more than 24 hours, the data is no longer available.
 --
 module Network.AWS.Firehose.PutRecordBatch
     (
@@ -84,18 +84,18 @@
     -> PutRecordBatch
 putRecordBatch pDeliveryStreamName_ pRecords_ =
   PutRecordBatch'
-  { _prbDeliveryStreamName = pDeliveryStreamName_
-  , _prbRecords = _List1 # pRecords_
-  }
+    { _prbDeliveryStreamName = pDeliveryStreamName_
+    , _prbRecords = _List1 # pRecords_
+    }
 
 
 -- | The name of the delivery stream.
 prbDeliveryStreamName :: Lens' PutRecordBatch Text
-prbDeliveryStreamName = lens _prbDeliveryStreamName (\ s a -> s{_prbDeliveryStreamName = a});
+prbDeliveryStreamName = lens _prbDeliveryStreamName (\ s a -> s{_prbDeliveryStreamName = a})
 
 -- | One or more records.
 prbRecords :: Lens' PutRecordBatch (NonEmpty Record)
-prbRecords = lens _prbRecords (\ s a -> s{_prbRecords = a}) . _List1;
+prbRecords = lens _prbRecords (\ s a -> s{_prbRecords = a}) . _List1
 
 instance AWSRequest PutRecordBatch where
         type Rs PutRecordBatch = PutRecordBatchResponse
@@ -158,22 +158,22 @@
     -> PutRecordBatchResponse
 putRecordBatchResponse pResponseStatus_ pFailedPutCount_ pRequestResponses_ =
   PutRecordBatchResponse'
-  { _prbrsResponseStatus = pResponseStatus_
-  , _prbrsFailedPutCount = _Nat # pFailedPutCount_
-  , _prbrsRequestResponses = _List1 # pRequestResponses_
-  }
+    { _prbrsResponseStatus = pResponseStatus_
+    , _prbrsFailedPutCount = _Nat # pFailedPutCount_
+    , _prbrsRequestResponses = _List1 # pRequestResponses_
+    }
 
 
 -- | -- | The response status code.
 prbrsResponseStatus :: Lens' PutRecordBatchResponse Int
-prbrsResponseStatus = lens _prbrsResponseStatus (\ s a -> s{_prbrsResponseStatus = a});
+prbrsResponseStatus = lens _prbrsResponseStatus (\ s a -> s{_prbrsResponseStatus = a})
 
 -- | The number of records that might have failed processing.
 prbrsFailedPutCount :: Lens' PutRecordBatchResponse Natural
-prbrsFailedPutCount = lens _prbrsFailedPutCount (\ s a -> s{_prbrsFailedPutCount = a}) . _Nat;
+prbrsFailedPutCount = lens _prbrsFailedPutCount (\ s a -> s{_prbrsFailedPutCount = a}) . _Nat
 
 -- | The results array. For each record, the index of the response element is the same as the index used in the request array.
 prbrsRequestResponses :: Lens' PutRecordBatchResponse (NonEmpty PutRecordBatchResponseEntry)
-prbrsRequestResponses = lens _prbrsRequestResponses (\ s a -> s{_prbrsRequestResponses = a}) . _List1;
+prbrsRequestResponses = lens _prbrsRequestResponses (\ s a -> s{_prbrsRequestResponses = a}) . _List1
 
 instance NFData PutRecordBatchResponse where
diff --git a/gen/Network/AWS/Firehose/TagDeliveryStream.hs b/gen/Network/AWS/Firehose/TagDeliveryStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Firehose/TagDeliveryStream.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Firehose.TagDeliveryStream
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates tags for the specified delivery stream. A tag is a key-value pair (the value is optional) that you can define and assign to AWS resources. If you specify a tag that already exists, the tag value is replaced with the value that you specify in the request. 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 /AWS Billing and Cost Management User Guide/ .
+--
+--
+-- Each delivery stream can have up to 50 tags.
+--
+-- This operation has a limit of five transactions per second per account.
+--
+module Network.AWS.Firehose.TagDeliveryStream
+    (
+    -- * Creating a Request
+      tagDeliveryStream
+    , TagDeliveryStream
+    -- * Request Lenses
+    , tdsDeliveryStreamName
+    , tdsTags
+
+    -- * Destructuring the Response
+    , tagDeliveryStreamResponse
+    , TagDeliveryStreamResponse
+    -- * Response Lenses
+    , tdsrsResponseStatus
+    ) where
+
+import Network.AWS.Firehose.Types
+import Network.AWS.Firehose.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'tagDeliveryStream' smart constructor.
+data TagDeliveryStream = TagDeliveryStream'
+  { _tdsDeliveryStreamName :: !Text
+  , _tdsTags               :: !(List1 Tag)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TagDeliveryStream' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdsDeliveryStreamName' - The name of the delivery stream to which you want to add the tags.
+--
+-- * 'tdsTags' - A set of key-value pairs to use to create the tags.
+tagDeliveryStream
+    :: Text -- ^ 'tdsDeliveryStreamName'
+    -> NonEmpty Tag -- ^ 'tdsTags'
+    -> TagDeliveryStream
+tagDeliveryStream pDeliveryStreamName_ pTags_ =
+  TagDeliveryStream'
+    {_tdsDeliveryStreamName = pDeliveryStreamName_, _tdsTags = _List1 # pTags_}
+
+
+-- | The name of the delivery stream to which you want to add the tags.
+tdsDeliveryStreamName :: Lens' TagDeliveryStream Text
+tdsDeliveryStreamName = lens _tdsDeliveryStreamName (\ s a -> s{_tdsDeliveryStreamName = a})
+
+-- | A set of key-value pairs to use to create the tags.
+tdsTags :: Lens' TagDeliveryStream (NonEmpty Tag)
+tdsTags = lens _tdsTags (\ s a -> s{_tdsTags = a}) . _List1
+
+instance AWSRequest TagDeliveryStream where
+        type Rs TagDeliveryStream = TagDeliveryStreamResponse
+        request = postJSON firehose
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 TagDeliveryStreamResponse' <$> (pure (fromEnum s)))
+
+instance Hashable TagDeliveryStream where
+
+instance NFData TagDeliveryStream where
+
+instance ToHeaders TagDeliveryStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Firehose_20150804.TagDeliveryStream" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON TagDeliveryStream where
+        toJSON TagDeliveryStream'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("DeliveryStreamName" .= _tdsDeliveryStreamName),
+                  Just ("Tags" .= _tdsTags)])
+
+instance ToPath TagDeliveryStream where
+        toPath = const "/"
+
+instance ToQuery TagDeliveryStream where
+        toQuery = const mempty
+
+-- | /See:/ 'tagDeliveryStreamResponse' smart constructor.
+newtype TagDeliveryStreamResponse = TagDeliveryStreamResponse'
+  { _tdsrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TagDeliveryStreamResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdsrsResponseStatus' - -- | The response status code.
+tagDeliveryStreamResponse
+    :: Int -- ^ 'tdsrsResponseStatus'
+    -> TagDeliveryStreamResponse
+tagDeliveryStreamResponse pResponseStatus_ =
+  TagDeliveryStreamResponse' {_tdsrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+tdsrsResponseStatus :: Lens' TagDeliveryStreamResponse Int
+tdsrsResponseStatus = lens _tdsrsResponseStatus (\ s a -> s{_tdsrsResponseStatus = a})
+
+instance NFData TagDeliveryStreamResponse where
diff --git a/gen/Network/AWS/Firehose/Types.hs b/gen/Network/AWS/Firehose/Types.hs
--- a/gen/Network/AWS/Firehose/Types.hs
+++ b/gen/Network/AWS/Firehose/Types.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.Types
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -16,7 +16,6 @@
       firehose
 
     -- * Errors
-    , _InvalidStreamTypeException
     , _InvalidArgumentException
     , _ConcurrentModificationException
     , _ServiceUnavailableException
@@ -39,9 +38,24 @@
     -- * ElasticsearchS3BackupMode
     , ElasticsearchS3BackupMode (..)
 
+    -- * HECEndpointType
+    , HECEndpointType (..)
+
     -- * NoEncryptionConfig
     , NoEncryptionConfig (..)
 
+    -- * OrcCompression
+    , OrcCompression (..)
+
+    -- * OrcFormatVersion
+    , OrcFormatVersion (..)
+
+    -- * ParquetCompression
+    , ParquetCompression (..)
+
+    -- * ParquetWriterVersion
+    , ParquetWriterVersion (..)
+
     -- * ProcessorParameterName
     , ProcessorParameterName (..)
 
@@ -54,6 +68,9 @@
     -- * S3BackupMode
     , S3BackupMode (..)
 
+    -- * SplunkS3BackupMode
+    , SplunkS3BackupMode (..)
+
     -- * BufferingHints
     , BufferingHints
     , bufferingHints
@@ -74,6 +91,14 @@
     , ccDataTableColumns
     , ccDataTableName
 
+    -- * DataFormatConversionConfiguration
+    , DataFormatConversionConfiguration
+    , dataFormatConversionConfiguration
+    , dfccOutputFormatConfiguration
+    , dfccEnabled
+    , dfccSchemaConfiguration
+    , dfccInputFormatConfiguration
+
     -- * DeliveryStreamDescription
     , DeliveryStreamDescription
     , deliveryStreamDescription
@@ -88,9 +113,16 @@
     , dsdDestinations
     , dsdHasMoreDestinations
 
+    -- * Deserializer
+    , Deserializer
+    , deserializer
+    , dOpenXJSONSerDe
+    , dHiveJSONSerDe
+
     -- * DestinationDescription
     , DestinationDescription
     , destinationDescription
+    , ddSplunkDestinationDescription
     , ddS3DestinationDescription
     , ddExtendedS3DestinationDescription
     , ddElasticsearchDestinationDescription
@@ -168,6 +200,7 @@
     , esdcEncryptionConfiguration
     , esdcCompressionFormat
     , esdcBufferingHints
+    , esdcDataFormatConversionConfiguration
     , esdcProcessingConfiguration
     , esdcRoleARN
     , esdcBucketARN
@@ -179,6 +212,7 @@
     , esddS3BackupDescription
     , esddPrefix
     , esddCloudWatchLoggingOptions
+    , esddDataFormatConversionConfiguration
     , esddProcessingConfiguration
     , esddRoleARN
     , esddBucketARN
@@ -196,10 +230,21 @@
     , esduEncryptionConfiguration
     , esduCompressionFormat
     , esduBufferingHints
+    , esduDataFormatConversionConfiguration
     , esduBucketARN
     , esduProcessingConfiguration
     , esduRoleARN
 
+    -- * HiveJSONSerDe
+    , HiveJSONSerDe
+    , hiveJSONSerDe
+    , hjsdTimestampFormats
+
+    -- * InputFormatConfiguration
+    , InputFormatConfiguration
+    , inputFormatConfiguration
+    , ifcDeserializer
+
     -- * KMSEncryptionConfig
     , KMSEncryptionConfig
     , kmsEncryptionConfig
@@ -218,6 +263,42 @@
     , kssdKinesisStreamARN
     , kssdRoleARN
 
+    -- * OpenXJSONSerDe
+    , OpenXJSONSerDe
+    , openXJSONSerDe
+    , oxjsdColumnToJSONKeyMappings
+    , oxjsdCaseInsensitive
+    , oxjsdConvertDotsInJSONKeysToUnderscores
+
+    -- * OrcSerDe
+    , OrcSerDe
+    , orcSerDe
+    , osdBloomFilterFalsePositiveProbability
+    , osdDictionaryKeyThreshold
+    , osdEnablePadding
+    , osdCompression
+    , osdBloomFilterColumns
+    , osdRowIndexStride
+    , osdFormatVersion
+    , osdBlockSizeBytes
+    , osdStripeSizeBytes
+    , osdPaddingTolerance
+
+    -- * OutputFormatConfiguration
+    , OutputFormatConfiguration
+    , outputFormatConfiguration
+    , ofcSerializer
+
+    -- * ParquetSerDe
+    , ParquetSerDe
+    , parquetSerDe
+    , psdWriterVersion
+    , psdCompression
+    , psdMaxPaddingBytes
+    , psdEnableDictionaryCompression
+    , psdPageSizeBytes
+    , psdBlockSizeBytes
+
     -- * ProcessingConfiguration
     , ProcessingConfiguration
     , processingConfiguration
@@ -311,37 +392,95 @@
     -- * S3DestinationDescription
     , S3DestinationDescription
     , s3DestinationDescription
-    , sddPrefix
-    , sddCloudWatchLoggingOptions
-    , sddRoleARN
-    , sddBucketARN
-    , sddBufferingHints
-    , sddCompressionFormat
-    , sddEncryptionConfiguration
+    , s3Prefix
+    , s3CloudWatchLoggingOptions
+    , s3RoleARN
+    , s3BucketARN
+    , s3BufferingHints
+    , s3CompressionFormat
+    , s3EncryptionConfiguration
 
     -- * S3DestinationUpdate
     , S3DestinationUpdate
     , s3DestinationUpdate
-    , sduPrefix
-    , sduCloudWatchLoggingOptions
-    , sduEncryptionConfiguration
-    , sduCompressionFormat
-    , sduBufferingHints
-    , sduBucketARN
-    , sduRoleARN
+    , sPrefix
+    , sCloudWatchLoggingOptions
+    , sEncryptionConfiguration
+    , sCompressionFormat
+    , sBufferingHints
+    , sBucketARN
+    , sRoleARN
 
-    -- * SessionCredentials
-    , SessionCredentials
-    , sessionCredentials
-    , scAccessKeyId
-    , scSecretAccessKey
-    , scSessionToken
-    , scExpiration
+    -- * SchemaConfiguration
+    , SchemaConfiguration
+    , schemaConfiguration
+    , scVersionId
+    , scCatalogId
+    , scDatabaseName
+    , scRegion
+    , scTableName
+    , scRoleARN
 
+    -- * Serializer
+    , Serializer
+    , serializer
+    , sOrcSerDe
+    , sParquetSerDe
+
     -- * SourceDescription
     , SourceDescription
     , sourceDescription
     , sdKinesisStreamSourceDescription
+
+    -- * SplunkDestinationConfiguration
+    , SplunkDestinationConfiguration
+    , splunkDestinationConfiguration
+    , splS3BackupMode
+    , splCloudWatchLoggingOptions
+    , splHECAcknowledgmentTimeoutInSeconds
+    , splRetryOptions
+    , splProcessingConfiguration
+    , splHECEndpoint
+    , splHECEndpointType
+    , splHECToken
+    , splS3Configuration
+
+    -- * SplunkDestinationDescription
+    , SplunkDestinationDescription
+    , splunkDestinationDescription
+    , sddS3BackupMode
+    , sddHECToken
+    , sddHECEndpointType
+    , sddCloudWatchLoggingOptions
+    , sddHECAcknowledgmentTimeoutInSeconds
+    , sddS3DestinationDescription
+    , sddHECEndpoint
+    , sddRetryOptions
+    , sddProcessingConfiguration
+
+    -- * SplunkDestinationUpdate
+    , SplunkDestinationUpdate
+    , splunkDestinationUpdate
+    , sduS3BackupMode
+    , sduHECToken
+    , sduHECEndpointType
+    , sduCloudWatchLoggingOptions
+    , sduHECAcknowledgmentTimeoutInSeconds
+    , sduS3Update
+    , sduHECEndpoint
+    , sduRetryOptions
+    , sduProcessingConfiguration
+
+    -- * SplunkRetryOptions
+    , SplunkRetryOptions
+    , splunkRetryOptions
+    , sroDurationInSeconds
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
     ) where
 
 import Network.AWS.Firehose.Types.Product
@@ -354,24 +493,24 @@
 firehose :: Service
 firehose =
   Service
-  { _svcAbbrev = "Firehose"
-  , _svcSigner = v4
-  , _svcPrefix = "firehose"
-  , _svcVersion = "2015-08-04"
-  , _svcEndpoint = defaultEndpoint firehose
-  , _svcTimeout = Just 70
-  , _svcCheck = statusSuccess
-  , _svcError = parseJSONError "Firehose"
-  , _svcRetry = retry
-  }
+    { _svcAbbrev = "Firehose"
+    , _svcSigner = v4
+    , _svcPrefix = "firehose"
+    , _svcVersion = "2015-08-04"
+    , _svcEndpoint = defaultEndpoint firehose
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError "Firehose"
+    , _svcRetry = retry
+    }
   where
     retry =
       Exponential
-      { _retryBase = 5.0e-2
-      , _retryGrowth = 2
-      , _retryAttempts = 5
-      , _retryCheck = check
-      }
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
     check e
       | has (hasCode "ThrottledException" . hasStatus 400) e =
         Just "throttled_exception"
@@ -380,6 +519,8 @@
         Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
       | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
+        Just "request_throttled_exception"
       | has (hasStatus 502) e = Just "bad_gateway"
       | has (hasStatus 503) e = Just "service_unavailable"
       | has (hasStatus 500) e = Just "general_server_error"
@@ -387,12 +528,6 @@
       | otherwise = Nothing
 
 
--- | Prism for InvalidStreamTypeException' errors.
-_InvalidStreamTypeException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidStreamTypeException =
-  _MatchServiceError firehose "InvalidStreamTypeException"
-
-
 -- | The specified input parameter has a value that is not valid.
 --
 --
@@ -409,7 +544,7 @@
   _MatchServiceError firehose "ConcurrentModificationException"
 
 
--- | The service is unavailable, back off and retry the operation. If you continue to see the exception, throughput limits for the delivery stream may have been exceeded. For more information about limits and how to request an increase, see <http://docs.aws.amazon.com/firehose/latest/dev/limits.html Amazon Kinesis Firehose Limits> .
+-- | The service is unavailable. Back off and retry the operation. If you continue to see the exception, throughput limits for the delivery stream may have been exceeded. For more information about limits and how to request an increase, see <http://docs.aws.amazon.com/firehose/latest/dev/limits.html Amazon Kinesis Data Firehose Limits> .
 --
 --
 _ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
diff --git a/gen/Network/AWS/Firehose/Types/Product.hs b/gen/Network/AWS/Firehose/Types/Product.hs
--- a/gen/Network/AWS/Firehose/Types/Product.hs
+++ b/gen/Network/AWS/Firehose/Types/Product.hs
@@ -9,2513 +9,3604 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.Types.Product
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.Firehose.Types.Product where
-
-import Network.AWS.Firehose.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-
--- | Describes hints for the buffering to perform before delivering data to the destination. Please note that these options are treated as hints, and therefore Kinesis Firehose may choose to use different values when it is optimal.
---
---
---
--- /See:/ 'bufferingHints' smart constructor.
-data BufferingHints = BufferingHints'
-  { _bhSizeInMBs         :: !(Maybe Nat)
-  , _bhIntervalInSeconds :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BufferingHints' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bhSizeInMBs' - Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5. We recommend setting this parameter to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.
---
--- * 'bhIntervalInSeconds' - Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
-bufferingHints
-    :: BufferingHints
-bufferingHints =
-  BufferingHints' {_bhSizeInMBs = Nothing, _bhIntervalInSeconds = Nothing}
-
-
--- | Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5. We recommend setting this parameter to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.
-bhSizeInMBs :: Lens' BufferingHints (Maybe Natural)
-bhSizeInMBs = lens _bhSizeInMBs (\ s a -> s{_bhSizeInMBs = a}) . mapping _Nat;
-
--- | Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
-bhIntervalInSeconds :: Lens' BufferingHints (Maybe Natural)
-bhIntervalInSeconds = lens _bhIntervalInSeconds (\ s a -> s{_bhIntervalInSeconds = a}) . mapping _Nat;
-
-instance FromJSON BufferingHints where
-        parseJSON
-          = withObject "BufferingHints"
-              (\ x ->
-                 BufferingHints' <$>
-                   (x .:? "SizeInMBs") <*> (x .:? "IntervalInSeconds"))
-
-instance Hashable BufferingHints where
-
-instance NFData BufferingHints where
-
-instance ToJSON BufferingHints where
-        toJSON BufferingHints'{..}
-          = object
-              (catMaybes
-                 [("SizeInMBs" .=) <$> _bhSizeInMBs,
-                  ("IntervalInSeconds" .=) <$> _bhIntervalInSeconds])
-
--- | Describes the Amazon CloudWatch logging options for your delivery stream.
---
---
---
--- /See:/ 'cloudWatchLoggingOptions' smart constructor.
-data CloudWatchLoggingOptions = CloudWatchLoggingOptions'
-  { _cwloEnabled       :: !(Maybe Bool)
-  , _cwloLogGroupName  :: !(Maybe Text)
-  , _cwloLogStreamName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CloudWatchLoggingOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cwloEnabled' - Enables or disables CloudWatch logging.
---
--- * 'cwloLogGroupName' - The CloudWatch group name for logging. This value is required if CloudWatch logging is enabled.
---
--- * 'cwloLogStreamName' - The CloudWatch log stream name for logging. This value is required if CloudWatch logging is enabled.
-cloudWatchLoggingOptions
-    :: CloudWatchLoggingOptions
-cloudWatchLoggingOptions =
-  CloudWatchLoggingOptions'
-  { _cwloEnabled = Nothing
-  , _cwloLogGroupName = Nothing
-  , _cwloLogStreamName = Nothing
-  }
-
-
--- | Enables or disables CloudWatch logging.
-cwloEnabled :: Lens' CloudWatchLoggingOptions (Maybe Bool)
-cwloEnabled = lens _cwloEnabled (\ s a -> s{_cwloEnabled = a});
-
--- | The CloudWatch group name for logging. This value is required if CloudWatch logging is enabled.
-cwloLogGroupName :: Lens' CloudWatchLoggingOptions (Maybe Text)
-cwloLogGroupName = lens _cwloLogGroupName (\ s a -> s{_cwloLogGroupName = a});
-
--- | The CloudWatch log stream name for logging. This value is required if CloudWatch logging is enabled.
-cwloLogStreamName :: Lens' CloudWatchLoggingOptions (Maybe Text)
-cwloLogStreamName = lens _cwloLogStreamName (\ s a -> s{_cwloLogStreamName = a});
-
-instance FromJSON CloudWatchLoggingOptions where
-        parseJSON
-          = withObject "CloudWatchLoggingOptions"
-              (\ x ->
-                 CloudWatchLoggingOptions' <$>
-                   (x .:? "Enabled") <*> (x .:? "LogGroupName") <*>
-                     (x .:? "LogStreamName"))
-
-instance Hashable CloudWatchLoggingOptions where
-
-instance NFData CloudWatchLoggingOptions where
-
-instance ToJSON CloudWatchLoggingOptions where
-        toJSON CloudWatchLoggingOptions'{..}
-          = object
-              (catMaybes
-                 [("Enabled" .=) <$> _cwloEnabled,
-                  ("LogGroupName" .=) <$> _cwloLogGroupName,
-                  ("LogStreamName" .=) <$> _cwloLogStreamName])
-
--- | Describes a @COPY@ command for Amazon Redshift.
---
---
---
--- /See:/ 'copyCommand' smart constructor.
-data CopyCommand = CopyCommand'
-  { _ccCopyOptions      :: !(Maybe Text)
-  , _ccDataTableColumns :: !(Maybe Text)
-  , _ccDataTableName    :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CopyCommand' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccCopyOptions' - Optional parameters to use with the Amazon Redshift @COPY@ command. For more information, see the "Optional Parameters" section of <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html Amazon Redshift COPY command> . Some possible examples that would apply to Kinesis Firehose are as follows: @delimiter '\t' lzop;@ - fields are delimited with "\t" (TAB character) and compressed using lzop. @delimiter '|'@ - fields are delimited with "|" (this is the default delimiter). @delimiter '|' escape@ - the delimiter should be escaped. @fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6'@ - fields are fixed width in the source, with each width specified after every column in the table. @JSON 's3://mybucket/jsonpaths.txt'@ - data is in JSON format, and the path specified is the format of the data. For more examples, see <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html Amazon Redshift COPY command examples> .
---
--- * 'ccDataTableColumns' - A comma-separated list of column names.
---
--- * 'ccDataTableName' - The name of the target table. The table must already exist in the database.
-copyCommand
-    :: Text -- ^ 'ccDataTableName'
-    -> CopyCommand
-copyCommand pDataTableName_ =
-  CopyCommand'
-  { _ccCopyOptions = Nothing
-  , _ccDataTableColumns = Nothing
-  , _ccDataTableName = pDataTableName_
-  }
-
-
--- | Optional parameters to use with the Amazon Redshift @COPY@ command. For more information, see the "Optional Parameters" section of <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html Amazon Redshift COPY command> . Some possible examples that would apply to Kinesis Firehose are as follows: @delimiter '\t' lzop;@ - fields are delimited with "\t" (TAB character) and compressed using lzop. @delimiter '|'@ - fields are delimited with "|" (this is the default delimiter). @delimiter '|' escape@ - the delimiter should be escaped. @fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6'@ - fields are fixed width in the source, with each width specified after every column in the table. @JSON 's3://mybucket/jsonpaths.txt'@ - data is in JSON format, and the path specified is the format of the data. For more examples, see <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html Amazon Redshift COPY command examples> .
-ccCopyOptions :: Lens' CopyCommand (Maybe Text)
-ccCopyOptions = lens _ccCopyOptions (\ s a -> s{_ccCopyOptions = a});
-
--- | A comma-separated list of column names.
-ccDataTableColumns :: Lens' CopyCommand (Maybe Text)
-ccDataTableColumns = lens _ccDataTableColumns (\ s a -> s{_ccDataTableColumns = a});
-
--- | The name of the target table. The table must already exist in the database.
-ccDataTableName :: Lens' CopyCommand Text
-ccDataTableName = lens _ccDataTableName (\ s a -> s{_ccDataTableName = a});
-
-instance FromJSON CopyCommand where
-        parseJSON
-          = withObject "CopyCommand"
-              (\ x ->
-                 CopyCommand' <$>
-                   (x .:? "CopyOptions") <*> (x .:? "DataTableColumns")
-                     <*> (x .: "DataTableName"))
-
-instance Hashable CopyCommand where
-
-instance NFData CopyCommand where
-
-instance ToJSON CopyCommand where
-        toJSON CopyCommand'{..}
-          = object
-              (catMaybes
-                 [("CopyOptions" .=) <$> _ccCopyOptions,
-                  ("DataTableColumns" .=) <$> _ccDataTableColumns,
-                  Just ("DataTableName" .= _ccDataTableName)])
-
--- | Contains information about a delivery stream.
---
---
---
--- /See:/ 'deliveryStreamDescription' smart constructor.
-data DeliveryStreamDescription = DeliveryStreamDescription'
-  { _dsdCreateTimestamp      :: !(Maybe POSIX)
-  , _dsdSource               :: !(Maybe SourceDescription)
-  , _dsdLastUpdateTimestamp  :: !(Maybe POSIX)
-  , _dsdDeliveryStreamName   :: !Text
-  , _dsdDeliveryStreamARN    :: !Text
-  , _dsdDeliveryStreamStatus :: !DeliveryStreamStatus
-  , _dsdDeliveryStreamType   :: !DeliveryStreamType
-  , _dsdVersionId            :: !Text
-  , _dsdDestinations         :: ![DestinationDescription]
-  , _dsdHasMoreDestinations  :: !Bool
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeliveryStreamDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsdCreateTimestamp' - The date and time that the delivery stream was created.
---
--- * 'dsdSource' - If the @DeliveryStreamType@ parameter is @KinesisStreamAsSource@ , a 'SourceDescription' object describing the source Kinesis stream.
---
--- * 'dsdLastUpdateTimestamp' - The date and time that the delivery stream was last updated.
---
--- * 'dsdDeliveryStreamName' - The name of the delivery stream.
---
--- * 'dsdDeliveryStreamARN' - The Amazon Resource Name (ARN) of the delivery stream.
---
--- * 'dsdDeliveryStreamStatus' - The status of the delivery stream.
---
--- * 'dsdDeliveryStreamType' - The delivery stream type. This can be one of the following values:     * @DirectPut@ : Provider applications access the delivery stream directly.     * @KinesisStreamAsSource@ : The delivery stream uses a Kinesis stream as a source.
---
--- * 'dsdVersionId' - Each time the destination is updated for a delivery stream, the version ID is changed, and the current version ID is required when updating the destination. This is so that the service knows it is applying the changes to the correct version of the delivery stream.
---
--- * 'dsdDestinations' - The destinations.
---
--- * 'dsdHasMoreDestinations' - Indicates whether there are more destinations available to list.
-deliveryStreamDescription
-    :: Text -- ^ 'dsdDeliveryStreamName'
-    -> Text -- ^ 'dsdDeliveryStreamARN'
-    -> DeliveryStreamStatus -- ^ 'dsdDeliveryStreamStatus'
-    -> DeliveryStreamType -- ^ 'dsdDeliveryStreamType'
-    -> Text -- ^ 'dsdVersionId'
-    -> Bool -- ^ 'dsdHasMoreDestinations'
-    -> DeliveryStreamDescription
-deliveryStreamDescription pDeliveryStreamName_ pDeliveryStreamARN_ pDeliveryStreamStatus_ pDeliveryStreamType_ pVersionId_ pHasMoreDestinations_ =
-  DeliveryStreamDescription'
-  { _dsdCreateTimestamp = Nothing
-  , _dsdSource = Nothing
-  , _dsdLastUpdateTimestamp = Nothing
-  , _dsdDeliveryStreamName = pDeliveryStreamName_
-  , _dsdDeliveryStreamARN = pDeliveryStreamARN_
-  , _dsdDeliveryStreamStatus = pDeliveryStreamStatus_
-  , _dsdDeliveryStreamType = pDeliveryStreamType_
-  , _dsdVersionId = pVersionId_
-  , _dsdDestinations = mempty
-  , _dsdHasMoreDestinations = pHasMoreDestinations_
-  }
-
-
--- | The date and time that the delivery stream was created.
-dsdCreateTimestamp :: Lens' DeliveryStreamDescription (Maybe UTCTime)
-dsdCreateTimestamp = lens _dsdCreateTimestamp (\ s a -> s{_dsdCreateTimestamp = a}) . mapping _Time;
-
--- | If the @DeliveryStreamType@ parameter is @KinesisStreamAsSource@ , a 'SourceDescription' object describing the source Kinesis stream.
-dsdSource :: Lens' DeliveryStreamDescription (Maybe SourceDescription)
-dsdSource = lens _dsdSource (\ s a -> s{_dsdSource = a});
-
--- | The date and time that the delivery stream was last updated.
-dsdLastUpdateTimestamp :: Lens' DeliveryStreamDescription (Maybe UTCTime)
-dsdLastUpdateTimestamp = lens _dsdLastUpdateTimestamp (\ s a -> s{_dsdLastUpdateTimestamp = a}) . mapping _Time;
-
--- | The name of the delivery stream.
-dsdDeliveryStreamName :: Lens' DeliveryStreamDescription Text
-dsdDeliveryStreamName = lens _dsdDeliveryStreamName (\ s a -> s{_dsdDeliveryStreamName = a});
-
--- | The Amazon Resource Name (ARN) of the delivery stream.
-dsdDeliveryStreamARN :: Lens' DeliveryStreamDescription Text
-dsdDeliveryStreamARN = lens _dsdDeliveryStreamARN (\ s a -> s{_dsdDeliveryStreamARN = a});
-
--- | The status of the delivery stream.
-dsdDeliveryStreamStatus :: Lens' DeliveryStreamDescription DeliveryStreamStatus
-dsdDeliveryStreamStatus = lens _dsdDeliveryStreamStatus (\ s a -> s{_dsdDeliveryStreamStatus = a});
-
--- | The delivery stream type. This can be one of the following values:     * @DirectPut@ : Provider applications access the delivery stream directly.     * @KinesisStreamAsSource@ : The delivery stream uses a Kinesis stream as a source.
-dsdDeliveryStreamType :: Lens' DeliveryStreamDescription DeliveryStreamType
-dsdDeliveryStreamType = lens _dsdDeliveryStreamType (\ s a -> s{_dsdDeliveryStreamType = a});
-
--- | Each time the destination is updated for a delivery stream, the version ID is changed, and the current version ID is required when updating the destination. This is so that the service knows it is applying the changes to the correct version of the delivery stream.
-dsdVersionId :: Lens' DeliveryStreamDescription Text
-dsdVersionId = lens _dsdVersionId (\ s a -> s{_dsdVersionId = a});
-
--- | The destinations.
-dsdDestinations :: Lens' DeliveryStreamDescription [DestinationDescription]
-dsdDestinations = lens _dsdDestinations (\ s a -> s{_dsdDestinations = a}) . _Coerce;
-
--- | Indicates whether there are more destinations available to list.
-dsdHasMoreDestinations :: Lens' DeliveryStreamDescription Bool
-dsdHasMoreDestinations = lens _dsdHasMoreDestinations (\ s a -> s{_dsdHasMoreDestinations = a});
-
-instance FromJSON DeliveryStreamDescription where
-        parseJSON
-          = withObject "DeliveryStreamDescription"
-              (\ x ->
-                 DeliveryStreamDescription' <$>
-                   (x .:? "CreateTimestamp") <*> (x .:? "Source") <*>
-                     (x .:? "LastUpdateTimestamp")
-                     <*> (x .: "DeliveryStreamName")
-                     <*> (x .: "DeliveryStreamARN")
-                     <*> (x .: "DeliveryStreamStatus")
-                     <*> (x .: "DeliveryStreamType")
-                     <*> (x .: "VersionId")
-                     <*> (x .:? "Destinations" .!= mempty)
-                     <*> (x .: "HasMoreDestinations"))
-
-instance Hashable DeliveryStreamDescription where
-
-instance NFData DeliveryStreamDescription where
-
--- | Describes the destination for a delivery stream.
---
---
---
--- /See:/ 'destinationDescription' smart constructor.
-data DestinationDescription = DestinationDescription'
-  { _ddS3DestinationDescription :: !(Maybe S3DestinationDescription)
-  , _ddExtendedS3DestinationDescription :: !(Maybe ExtendedS3DestinationDescription)
-  , _ddElasticsearchDestinationDescription :: !(Maybe ElasticsearchDestinationDescription)
-  , _ddRedshiftDestinationDescription :: !(Maybe RedshiftDestinationDescription)
-  , _ddDestinationId :: !Text
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DestinationDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddS3DestinationDescription' - [Deprecated] The destination in Amazon S3.
---
--- * 'ddExtendedS3DestinationDescription' - The destination in Amazon S3.
---
--- * 'ddElasticsearchDestinationDescription' - The destination in Amazon ES.
---
--- * 'ddRedshiftDestinationDescription' - The destination in Amazon Redshift.
---
--- * 'ddDestinationId' - The ID of the destination.
-destinationDescription
-    :: Text -- ^ 'ddDestinationId'
-    -> DestinationDescription
-destinationDescription pDestinationId_ =
-  DestinationDescription'
-  { _ddS3DestinationDescription = Nothing
-  , _ddExtendedS3DestinationDescription = Nothing
-  , _ddElasticsearchDestinationDescription = Nothing
-  , _ddRedshiftDestinationDescription = Nothing
-  , _ddDestinationId = pDestinationId_
-  }
-
-
--- | [Deprecated] The destination in Amazon S3.
-ddS3DestinationDescription :: Lens' DestinationDescription (Maybe S3DestinationDescription)
-ddS3DestinationDescription = lens _ddS3DestinationDescription (\ s a -> s{_ddS3DestinationDescription = a});
-
--- | The destination in Amazon S3.
-ddExtendedS3DestinationDescription :: Lens' DestinationDescription (Maybe ExtendedS3DestinationDescription)
-ddExtendedS3DestinationDescription = lens _ddExtendedS3DestinationDescription (\ s a -> s{_ddExtendedS3DestinationDescription = a});
-
--- | The destination in Amazon ES.
-ddElasticsearchDestinationDescription :: Lens' DestinationDescription (Maybe ElasticsearchDestinationDescription)
-ddElasticsearchDestinationDescription = lens _ddElasticsearchDestinationDescription (\ s a -> s{_ddElasticsearchDestinationDescription = a});
-
--- | The destination in Amazon Redshift.
-ddRedshiftDestinationDescription :: Lens' DestinationDescription (Maybe RedshiftDestinationDescription)
-ddRedshiftDestinationDescription = lens _ddRedshiftDestinationDescription (\ s a -> s{_ddRedshiftDestinationDescription = a});
-
--- | The ID of the destination.
-ddDestinationId :: Lens' DestinationDescription Text
-ddDestinationId = lens _ddDestinationId (\ s a -> s{_ddDestinationId = a});
-
-instance FromJSON DestinationDescription where
-        parseJSON
-          = withObject "DestinationDescription"
-              (\ x ->
-                 DestinationDescription' <$>
-                   (x .:? "S3DestinationDescription") <*>
-                     (x .:? "ExtendedS3DestinationDescription")
-                     <*> (x .:? "ElasticsearchDestinationDescription")
-                     <*> (x .:? "RedshiftDestinationDescription")
-                     <*> (x .: "DestinationId"))
-
-instance Hashable DestinationDescription where
-
-instance NFData DestinationDescription where
-
--- | Describes the buffering to perform before delivering data to the Amazon ES destination.
---
---
---
--- /See:/ 'elasticsearchBufferingHints' smart constructor.
-data ElasticsearchBufferingHints = ElasticsearchBufferingHints'
-  { _ebhSizeInMBs         :: !(Maybe Nat)
-  , _ebhIntervalInSeconds :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ElasticsearchBufferingHints' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ebhSizeInMBs' - Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5. We recommend setting this parameter to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.
---
--- * 'ebhIntervalInSeconds' - Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300 (5 minutes).
-elasticsearchBufferingHints
-    :: ElasticsearchBufferingHints
-elasticsearchBufferingHints =
-  ElasticsearchBufferingHints'
-  {_ebhSizeInMBs = Nothing, _ebhIntervalInSeconds = Nothing}
-
-
--- | Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5. We recommend setting this parameter to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.
-ebhSizeInMBs :: Lens' ElasticsearchBufferingHints (Maybe Natural)
-ebhSizeInMBs = lens _ebhSizeInMBs (\ s a -> s{_ebhSizeInMBs = a}) . mapping _Nat;
-
--- | Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300 (5 minutes).
-ebhIntervalInSeconds :: Lens' ElasticsearchBufferingHints (Maybe Natural)
-ebhIntervalInSeconds = lens _ebhIntervalInSeconds (\ s a -> s{_ebhIntervalInSeconds = a}) . mapping _Nat;
-
-instance FromJSON ElasticsearchBufferingHints where
-        parseJSON
-          = withObject "ElasticsearchBufferingHints"
-              (\ x ->
-                 ElasticsearchBufferingHints' <$>
-                   (x .:? "SizeInMBs") <*> (x .:? "IntervalInSeconds"))
-
-instance Hashable ElasticsearchBufferingHints where
-
-instance NFData ElasticsearchBufferingHints where
-
-instance ToJSON ElasticsearchBufferingHints where
-        toJSON ElasticsearchBufferingHints'{..}
-          = object
-              (catMaybes
-                 [("SizeInMBs" .=) <$> _ebhSizeInMBs,
-                  ("IntervalInSeconds" .=) <$> _ebhIntervalInSeconds])
-
--- | Describes the configuration of a destination in Amazon ES.
---
---
---
--- /See:/ 'elasticsearchDestinationConfiguration' smart constructor.
-data ElasticsearchDestinationConfiguration = ElasticsearchDestinationConfiguration'
-  { _edcIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
-  , _edcS3BackupMode             :: !(Maybe ElasticsearchS3BackupMode)
-  , _edcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _edcBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
-  , _edcRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
-  , _edcProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _edcRoleARN                  :: !Text
-  , _edcDomainARN                :: !Text
-  , _edcIndexName                :: !Text
-  , _edcTypeName                 :: !Text
-  , _edcS3Configuration          :: !S3DestinationConfiguration
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ElasticsearchDestinationConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'edcIndexRotationPeriod' - The Elasticsearch index rotation period. Index rotation appends a time stamp to the IndexName to facilitate the expiration of old data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for Amazon Elasticsearch Service Destination> . The default value is @OneDay@ .
---
--- * 'edcS3BackupMode' - Defines how documents should be delivered to Amazon S3. When set to FailedDocumentsOnly, Kinesis Firehose writes any documents that could not be indexed to the configured Amazon S3 destination, with elasticsearch-failed/ appended to the key prefix. When set to AllDocuments, Kinesis Firehose delivers all incoming records to Amazon S3, and also writes failed documents with elasticsearch-failed/ appended to the prefix. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-s3-backup Amazon S3 Backup for Amazon Elasticsearch Service Destination> . Default value is FailedDocumentsOnly.
---
--- * 'edcCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'edcBufferingHints' - The buffering options. If no value is specified, the default values for __ElasticsearchBufferingHints__ are used.
---
--- * 'edcRetryOptions' - The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).
---
--- * 'edcProcessingConfiguration' - The data processing configuration.
---
--- * 'edcRoleARN' - The ARN of the IAM role to be assumed by Kinesis Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Amazon S3 Bucket Access> .
---
--- * 'edcDomainARN' - The ARN of the Amazon ES domain. The IAM role must have permissions for @DescribeElasticsearchDomain@ , @DescribeElasticsearchDomains@ , and @DescribeElasticsearchDomainConfig@ after assuming the role specified in __RoleARN__ .
---
--- * 'edcIndexName' - The Elasticsearch index name.
---
--- * 'edcTypeName' - The Elasticsearch type name.
---
--- * 'edcS3Configuration' - The configuration for the backup Amazon S3 location.
-elasticsearchDestinationConfiguration
-    :: Text -- ^ 'edcRoleARN'
-    -> Text -- ^ 'edcDomainARN'
-    -> Text -- ^ 'edcIndexName'
-    -> Text -- ^ 'edcTypeName'
-    -> S3DestinationConfiguration -- ^ 'edcS3Configuration'
-    -> ElasticsearchDestinationConfiguration
-elasticsearchDestinationConfiguration pRoleARN_ pDomainARN_ pIndexName_ pTypeName_ pS3Configuration_ =
-  ElasticsearchDestinationConfiguration'
-  { _edcIndexRotationPeriod = Nothing
-  , _edcS3BackupMode = Nothing
-  , _edcCloudWatchLoggingOptions = Nothing
-  , _edcBufferingHints = Nothing
-  , _edcRetryOptions = Nothing
-  , _edcProcessingConfiguration = Nothing
-  , _edcRoleARN = pRoleARN_
-  , _edcDomainARN = pDomainARN_
-  , _edcIndexName = pIndexName_
-  , _edcTypeName = pTypeName_
-  , _edcS3Configuration = pS3Configuration_
-  }
-
-
--- | The Elasticsearch index rotation period. Index rotation appends a time stamp to the IndexName to facilitate the expiration of old data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for Amazon Elasticsearch Service Destination> . The default value is @OneDay@ .
-edcIndexRotationPeriod :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchIndexRotationPeriod)
-edcIndexRotationPeriod = lens _edcIndexRotationPeriod (\ s a -> s{_edcIndexRotationPeriod = a});
-
--- | Defines how documents should be delivered to Amazon S3. When set to FailedDocumentsOnly, Kinesis Firehose writes any documents that could not be indexed to the configured Amazon S3 destination, with elasticsearch-failed/ appended to the key prefix. When set to AllDocuments, Kinesis Firehose delivers all incoming records to Amazon S3, and also writes failed documents with elasticsearch-failed/ appended to the prefix. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-s3-backup Amazon S3 Backup for Amazon Elasticsearch Service Destination> . Default value is FailedDocumentsOnly.
-edcS3BackupMode :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchS3BackupMode)
-edcS3BackupMode = lens _edcS3BackupMode (\ s a -> s{_edcS3BackupMode = a});
-
--- | The CloudWatch logging options for your delivery stream.
-edcCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationConfiguration (Maybe CloudWatchLoggingOptions)
-edcCloudWatchLoggingOptions = lens _edcCloudWatchLoggingOptions (\ s a -> s{_edcCloudWatchLoggingOptions = a});
-
--- | The buffering options. If no value is specified, the default values for __ElasticsearchBufferingHints__ are used.
-edcBufferingHints :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchBufferingHints)
-edcBufferingHints = lens _edcBufferingHints (\ s a -> s{_edcBufferingHints = a});
-
--- | The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).
-edcRetryOptions :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchRetryOptions)
-edcRetryOptions = lens _edcRetryOptions (\ s a -> s{_edcRetryOptions = a});
-
--- | The data processing configuration.
-edcProcessingConfiguration :: Lens' ElasticsearchDestinationConfiguration (Maybe ProcessingConfiguration)
-edcProcessingConfiguration = lens _edcProcessingConfiguration (\ s a -> s{_edcProcessingConfiguration = a});
-
--- | The ARN of the IAM role to be assumed by Kinesis Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Amazon S3 Bucket Access> .
-edcRoleARN :: Lens' ElasticsearchDestinationConfiguration Text
-edcRoleARN = lens _edcRoleARN (\ s a -> s{_edcRoleARN = a});
-
--- | The ARN of the Amazon ES domain. The IAM role must have permissions for @DescribeElasticsearchDomain@ , @DescribeElasticsearchDomains@ , and @DescribeElasticsearchDomainConfig@ after assuming the role specified in __RoleARN__ .
-edcDomainARN :: Lens' ElasticsearchDestinationConfiguration Text
-edcDomainARN = lens _edcDomainARN (\ s a -> s{_edcDomainARN = a});
-
--- | The Elasticsearch index name.
-edcIndexName :: Lens' ElasticsearchDestinationConfiguration Text
-edcIndexName = lens _edcIndexName (\ s a -> s{_edcIndexName = a});
-
--- | The Elasticsearch type name.
-edcTypeName :: Lens' ElasticsearchDestinationConfiguration Text
-edcTypeName = lens _edcTypeName (\ s a -> s{_edcTypeName = a});
-
--- | The configuration for the backup Amazon S3 location.
-edcS3Configuration :: Lens' ElasticsearchDestinationConfiguration S3DestinationConfiguration
-edcS3Configuration = lens _edcS3Configuration (\ s a -> s{_edcS3Configuration = a});
-
-instance Hashable
-           ElasticsearchDestinationConfiguration
-         where
-
-instance NFData ElasticsearchDestinationConfiguration
-         where
-
-instance ToJSON ElasticsearchDestinationConfiguration
-         where
-        toJSON ElasticsearchDestinationConfiguration'{..}
-          = object
-              (catMaybes
-                 [("IndexRotationPeriod" .=) <$>
-                    _edcIndexRotationPeriod,
-                  ("S3BackupMode" .=) <$> _edcS3BackupMode,
-                  ("CloudWatchLoggingOptions" .=) <$>
-                    _edcCloudWatchLoggingOptions,
-                  ("BufferingHints" .=) <$> _edcBufferingHints,
-                  ("RetryOptions" .=) <$> _edcRetryOptions,
-                  ("ProcessingConfiguration" .=) <$>
-                    _edcProcessingConfiguration,
-                  Just ("RoleARN" .= _edcRoleARN),
-                  Just ("DomainARN" .= _edcDomainARN),
-                  Just ("IndexName" .= _edcIndexName),
-                  Just ("TypeName" .= _edcTypeName),
-                  Just ("S3Configuration" .= _edcS3Configuration)])
-
--- | The destination description in Amazon ES.
---
---
---
--- /See:/ 'elasticsearchDestinationDescription' smart constructor.
-data ElasticsearchDestinationDescription = ElasticsearchDestinationDescription'
-  { _eddIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
-  , _eddTypeName                 :: !(Maybe Text)
-  , _eddS3BackupMode             :: !(Maybe ElasticsearchS3BackupMode)
-  , _eddDomainARN                :: !(Maybe Text)
-  , _eddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _eddS3DestinationDescription :: !(Maybe S3DestinationDescription)
-  , _eddBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
-  , _eddRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
-  , _eddProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _eddRoleARN                  :: !(Maybe Text)
-  , _eddIndexName                :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ElasticsearchDestinationDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eddIndexRotationPeriod' - The Elasticsearch index rotation period
---
--- * 'eddTypeName' - The Elasticsearch type name.
---
--- * 'eddS3BackupMode' - The Amazon S3 backup mode.
---
--- * 'eddDomainARN' - The ARN of the Amazon ES domain.
---
--- * 'eddCloudWatchLoggingOptions' - The CloudWatch logging options.
---
--- * 'eddS3DestinationDescription' - The Amazon S3 destination.
---
--- * 'eddBufferingHints' - The buffering options.
---
--- * 'eddRetryOptions' - The Amazon ES retry options.
---
--- * 'eddProcessingConfiguration' - The data processing configuration.
---
--- * 'eddRoleARN' - The ARN of the AWS credentials.
---
--- * 'eddIndexName' - The Elasticsearch index name.
-elasticsearchDestinationDescription
-    :: ElasticsearchDestinationDescription
-elasticsearchDestinationDescription =
-  ElasticsearchDestinationDescription'
-  { _eddIndexRotationPeriod = Nothing
-  , _eddTypeName = Nothing
-  , _eddS3BackupMode = Nothing
-  , _eddDomainARN = Nothing
-  , _eddCloudWatchLoggingOptions = Nothing
-  , _eddS3DestinationDescription = Nothing
-  , _eddBufferingHints = Nothing
-  , _eddRetryOptions = Nothing
-  , _eddProcessingConfiguration = Nothing
-  , _eddRoleARN = Nothing
-  , _eddIndexName = Nothing
-  }
-
-
--- | The Elasticsearch index rotation period
-eddIndexRotationPeriod :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchIndexRotationPeriod)
-eddIndexRotationPeriod = lens _eddIndexRotationPeriod (\ s a -> s{_eddIndexRotationPeriod = a});
-
--- | The Elasticsearch type name.
-eddTypeName :: Lens' ElasticsearchDestinationDescription (Maybe Text)
-eddTypeName = lens _eddTypeName (\ s a -> s{_eddTypeName = a});
-
--- | The Amazon S3 backup mode.
-eddS3BackupMode :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchS3BackupMode)
-eddS3BackupMode = lens _eddS3BackupMode (\ s a -> s{_eddS3BackupMode = a});
-
--- | The ARN of the Amazon ES domain.
-eddDomainARN :: Lens' ElasticsearchDestinationDescription (Maybe Text)
-eddDomainARN = lens _eddDomainARN (\ s a -> s{_eddDomainARN = a});
-
--- | The CloudWatch logging options.
-eddCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationDescription (Maybe CloudWatchLoggingOptions)
-eddCloudWatchLoggingOptions = lens _eddCloudWatchLoggingOptions (\ s a -> s{_eddCloudWatchLoggingOptions = a});
-
--- | The Amazon S3 destination.
-eddS3DestinationDescription :: Lens' ElasticsearchDestinationDescription (Maybe S3DestinationDescription)
-eddS3DestinationDescription = lens _eddS3DestinationDescription (\ s a -> s{_eddS3DestinationDescription = a});
-
--- | The buffering options.
-eddBufferingHints :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchBufferingHints)
-eddBufferingHints = lens _eddBufferingHints (\ s a -> s{_eddBufferingHints = a});
-
--- | The Amazon ES retry options.
-eddRetryOptions :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchRetryOptions)
-eddRetryOptions = lens _eddRetryOptions (\ s a -> s{_eddRetryOptions = a});
-
--- | The data processing configuration.
-eddProcessingConfiguration :: Lens' ElasticsearchDestinationDescription (Maybe ProcessingConfiguration)
-eddProcessingConfiguration = lens _eddProcessingConfiguration (\ s a -> s{_eddProcessingConfiguration = a});
-
--- | The ARN of the AWS credentials.
-eddRoleARN :: Lens' ElasticsearchDestinationDescription (Maybe Text)
-eddRoleARN = lens _eddRoleARN (\ s a -> s{_eddRoleARN = a});
-
--- | The Elasticsearch index name.
-eddIndexName :: Lens' ElasticsearchDestinationDescription (Maybe Text)
-eddIndexName = lens _eddIndexName (\ s a -> s{_eddIndexName = a});
-
-instance FromJSON ElasticsearchDestinationDescription
-         where
-        parseJSON
-          = withObject "ElasticsearchDestinationDescription"
-              (\ x ->
-                 ElasticsearchDestinationDescription' <$>
-                   (x .:? "IndexRotationPeriod") <*> (x .:? "TypeName")
-                     <*> (x .:? "S3BackupMode")
-                     <*> (x .:? "DomainARN")
-                     <*> (x .:? "CloudWatchLoggingOptions")
-                     <*> (x .:? "S3DestinationDescription")
-                     <*> (x .:? "BufferingHints")
-                     <*> (x .:? "RetryOptions")
-                     <*> (x .:? "ProcessingConfiguration")
-                     <*> (x .:? "RoleARN")
-                     <*> (x .:? "IndexName"))
-
-instance Hashable ElasticsearchDestinationDescription
-         where
-
-instance NFData ElasticsearchDestinationDescription
-         where
-
--- | Describes an update for a destination in Amazon ES.
---
---
---
--- /See:/ 'elasticsearchDestinationUpdate' smart constructor.
-data ElasticsearchDestinationUpdate = ElasticsearchDestinationUpdate'
-  { _eduIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
-  , _eduTypeName                 :: !(Maybe Text)
-  , _eduDomainARN                :: !(Maybe Text)
-  , _eduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _eduS3Update                 :: !(Maybe S3DestinationUpdate)
-  , _eduBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
-  , _eduRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
-  , _eduProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _eduRoleARN                  :: !(Maybe Text)
-  , _eduIndexName                :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ElasticsearchDestinationUpdate' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eduIndexRotationPeriod' - The Elasticsearch index rotation period. Index rotation appends a time stamp to IndexName to facilitate the expiration of old data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for Amazon Elasticsearch Service Destination> . Default value is @OneDay@ .
---
--- * 'eduTypeName' - The Elasticsearch type name.
---
--- * 'eduDomainARN' - The ARN of the Amazon ES domain. The IAM role must have permissions for @DescribeElasticsearchDomain@ , @DescribeElasticsearchDomains@ , and @DescribeElasticsearchDomainConfig@ after assuming the IAM role specified in __RoleARN__ .
---
--- * 'eduCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'eduS3Update' - The Amazon S3 destination.
---
--- * 'eduBufferingHints' - The buffering options. If no value is specified, __ElasticsearchBufferingHints__ object default values are used.
---
--- * 'eduRetryOptions' - The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).
---
--- * 'eduProcessingConfiguration' - The data processing configuration.
---
--- * 'eduRoleARN' - The ARN of the IAM role to be assumed by Kinesis Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Amazon S3 Bucket Access> .
---
--- * 'eduIndexName' - The Elasticsearch index name.
-elasticsearchDestinationUpdate
-    :: ElasticsearchDestinationUpdate
-elasticsearchDestinationUpdate =
-  ElasticsearchDestinationUpdate'
-  { _eduIndexRotationPeriod = Nothing
-  , _eduTypeName = Nothing
-  , _eduDomainARN = Nothing
-  , _eduCloudWatchLoggingOptions = Nothing
-  , _eduS3Update = Nothing
-  , _eduBufferingHints = Nothing
-  , _eduRetryOptions = Nothing
-  , _eduProcessingConfiguration = Nothing
-  , _eduRoleARN = Nothing
-  , _eduIndexName = Nothing
-  }
-
-
--- | The Elasticsearch index rotation period. Index rotation appends a time stamp to IndexName to facilitate the expiration of old data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for Amazon Elasticsearch Service Destination> . Default value is @OneDay@ .
-eduIndexRotationPeriod :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchIndexRotationPeriod)
-eduIndexRotationPeriod = lens _eduIndexRotationPeriod (\ s a -> s{_eduIndexRotationPeriod = a});
-
--- | The Elasticsearch type name.
-eduTypeName :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
-eduTypeName = lens _eduTypeName (\ s a -> s{_eduTypeName = a});
-
--- | The ARN of the Amazon ES domain. The IAM role must have permissions for @DescribeElasticsearchDomain@ , @DescribeElasticsearchDomains@ , and @DescribeElasticsearchDomainConfig@ after assuming the IAM role specified in __RoleARN__ .
-eduDomainARN :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
-eduDomainARN = lens _eduDomainARN (\ s a -> s{_eduDomainARN = a});
-
--- | The CloudWatch logging options for your delivery stream.
-eduCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationUpdate (Maybe CloudWatchLoggingOptions)
-eduCloudWatchLoggingOptions = lens _eduCloudWatchLoggingOptions (\ s a -> s{_eduCloudWatchLoggingOptions = a});
-
--- | The Amazon S3 destination.
-eduS3Update :: Lens' ElasticsearchDestinationUpdate (Maybe S3DestinationUpdate)
-eduS3Update = lens _eduS3Update (\ s a -> s{_eduS3Update = a});
-
--- | The buffering options. If no value is specified, __ElasticsearchBufferingHints__ object default values are used.
-eduBufferingHints :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchBufferingHints)
-eduBufferingHints = lens _eduBufferingHints (\ s a -> s{_eduBufferingHints = a});
-
--- | The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).
-eduRetryOptions :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchRetryOptions)
-eduRetryOptions = lens _eduRetryOptions (\ s a -> s{_eduRetryOptions = a});
-
--- | The data processing configuration.
-eduProcessingConfiguration :: Lens' ElasticsearchDestinationUpdate (Maybe ProcessingConfiguration)
-eduProcessingConfiguration = lens _eduProcessingConfiguration (\ s a -> s{_eduProcessingConfiguration = a});
-
--- | The ARN of the IAM role to be assumed by Kinesis Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Amazon S3 Bucket Access> .
-eduRoleARN :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
-eduRoleARN = lens _eduRoleARN (\ s a -> s{_eduRoleARN = a});
-
--- | The Elasticsearch index name.
-eduIndexName :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
-eduIndexName = lens _eduIndexName (\ s a -> s{_eduIndexName = a});
-
-instance Hashable ElasticsearchDestinationUpdate
-         where
-
-instance NFData ElasticsearchDestinationUpdate where
-
-instance ToJSON ElasticsearchDestinationUpdate where
-        toJSON ElasticsearchDestinationUpdate'{..}
-          = object
-              (catMaybes
-                 [("IndexRotationPeriod" .=) <$>
-                    _eduIndexRotationPeriod,
-                  ("TypeName" .=) <$> _eduTypeName,
-                  ("DomainARN" .=) <$> _eduDomainARN,
-                  ("CloudWatchLoggingOptions" .=) <$>
-                    _eduCloudWatchLoggingOptions,
-                  ("S3Update" .=) <$> _eduS3Update,
-                  ("BufferingHints" .=) <$> _eduBufferingHints,
-                  ("RetryOptions" .=) <$> _eduRetryOptions,
-                  ("ProcessingConfiguration" .=) <$>
-                    _eduProcessingConfiguration,
-                  ("RoleARN" .=) <$> _eduRoleARN,
-                  ("IndexName" .=) <$> _eduIndexName])
-
--- | Configures retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon ES.
---
---
---
--- /See:/ 'elasticsearchRetryOptions' smart constructor.
-newtype ElasticsearchRetryOptions = ElasticsearchRetryOptions'
-  { _eroDurationInSeconds :: Maybe Nat
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ElasticsearchRetryOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eroDurationInSeconds' - After an initial failure to deliver to Amazon ES, the total amount of time during which Kinesis Firehose re-attempts delivery (including the first attempt). After this time has elapsed, the failed documents are written to Amazon S3. Default value is 300 seconds (5 minutes). A value of 0 (zero) results in no retries.
-elasticsearchRetryOptions
-    :: ElasticsearchRetryOptions
-elasticsearchRetryOptions =
-  ElasticsearchRetryOptions' {_eroDurationInSeconds = Nothing}
-
-
--- | After an initial failure to deliver to Amazon ES, the total amount of time during which Kinesis Firehose re-attempts delivery (including the first attempt). After this time has elapsed, the failed documents are written to Amazon S3. Default value is 300 seconds (5 minutes). A value of 0 (zero) results in no retries.
-eroDurationInSeconds :: Lens' ElasticsearchRetryOptions (Maybe Natural)
-eroDurationInSeconds = lens _eroDurationInSeconds (\ s a -> s{_eroDurationInSeconds = a}) . mapping _Nat;
-
-instance FromJSON ElasticsearchRetryOptions where
-        parseJSON
-          = withObject "ElasticsearchRetryOptions"
-              (\ x ->
-                 ElasticsearchRetryOptions' <$>
-                   (x .:? "DurationInSeconds"))
-
-instance Hashable ElasticsearchRetryOptions where
-
-instance NFData ElasticsearchRetryOptions where
-
-instance ToJSON ElasticsearchRetryOptions where
-        toJSON ElasticsearchRetryOptions'{..}
-          = object
-              (catMaybes
-                 [("DurationInSeconds" .=) <$> _eroDurationInSeconds])
-
--- | Describes the encryption for a destination in Amazon S3.
---
---
---
--- /See:/ 'encryptionConfiguration' smart constructor.
-data EncryptionConfiguration = EncryptionConfiguration'
-  { _ecNoEncryptionConfig  :: !(Maybe NoEncryptionConfig)
-  , _ecKMSEncryptionConfig :: !(Maybe KMSEncryptionConfig)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'EncryptionConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ecNoEncryptionConfig' - Specifically override existing encryption information to ensure that no encryption is used.
---
--- * 'ecKMSEncryptionConfig' - The encryption key.
-encryptionConfiguration
-    :: EncryptionConfiguration
-encryptionConfiguration =
-  EncryptionConfiguration'
-  {_ecNoEncryptionConfig = Nothing, _ecKMSEncryptionConfig = Nothing}
-
-
--- | Specifically override existing encryption information to ensure that no encryption is used.
-ecNoEncryptionConfig :: Lens' EncryptionConfiguration (Maybe NoEncryptionConfig)
-ecNoEncryptionConfig = lens _ecNoEncryptionConfig (\ s a -> s{_ecNoEncryptionConfig = a});
-
--- | The encryption key.
-ecKMSEncryptionConfig :: Lens' EncryptionConfiguration (Maybe KMSEncryptionConfig)
-ecKMSEncryptionConfig = lens _ecKMSEncryptionConfig (\ s a -> s{_ecKMSEncryptionConfig = a});
-
-instance FromJSON EncryptionConfiguration where
-        parseJSON
-          = withObject "EncryptionConfiguration"
-              (\ x ->
-                 EncryptionConfiguration' <$>
-                   (x .:? "NoEncryptionConfig") <*>
-                     (x .:? "KMSEncryptionConfig"))
-
-instance Hashable EncryptionConfiguration where
-
-instance NFData EncryptionConfiguration where
-
-instance ToJSON EncryptionConfiguration where
-        toJSON EncryptionConfiguration'{..}
-          = object
-              (catMaybes
-                 [("NoEncryptionConfig" .=) <$> _ecNoEncryptionConfig,
-                  ("KMSEncryptionConfig" .=) <$>
-                    _ecKMSEncryptionConfig])
-
--- | Describes the configuration of a destination in Amazon S3.
---
---
---
--- /See:/ 'extendedS3DestinationConfiguration' smart constructor.
-data ExtendedS3DestinationConfiguration = ExtendedS3DestinationConfiguration'
-  { _esdcS3BackupMode             :: !(Maybe S3BackupMode)
-  , _esdcPrefix                   :: !(Maybe Text)
-  , _esdcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _esdcS3BackupConfiguration    :: !(Maybe S3DestinationConfiguration)
-  , _esdcEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
-  , _esdcCompressionFormat        :: !(Maybe CompressionFormat)
-  , _esdcBufferingHints           :: !(Maybe BufferingHints)
-  , _esdcProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _esdcRoleARN                  :: !Text
-  , _esdcBucketARN                :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExtendedS3DestinationConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'esdcS3BackupMode' - The Amazon S3 backup mode.
---
--- * 'esdcPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
---
--- * 'esdcCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'esdcS3BackupConfiguration' - The configuration for backup in Amazon S3.
---
--- * 'esdcEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
---
--- * 'esdcCompressionFormat' - The compression format. If no value is specified, the default is UNCOMPRESSED.
---
--- * 'esdcBufferingHints' - The buffering option.
---
--- * 'esdcProcessingConfiguration' - The data processing configuration.
---
--- * 'esdcRoleARN' - The ARN of the AWS credentials.
---
--- * 'esdcBucketARN' - The ARN of the S3 bucket.
-extendedS3DestinationConfiguration
-    :: Text -- ^ 'esdcRoleARN'
-    -> Text -- ^ 'esdcBucketARN'
-    -> ExtendedS3DestinationConfiguration
-extendedS3DestinationConfiguration pRoleARN_ pBucketARN_ =
-  ExtendedS3DestinationConfiguration'
-  { _esdcS3BackupMode = Nothing
-  , _esdcPrefix = Nothing
-  , _esdcCloudWatchLoggingOptions = Nothing
-  , _esdcS3BackupConfiguration = Nothing
-  , _esdcEncryptionConfiguration = Nothing
-  , _esdcCompressionFormat = Nothing
-  , _esdcBufferingHints = Nothing
-  , _esdcProcessingConfiguration = Nothing
-  , _esdcRoleARN = pRoleARN_
-  , _esdcBucketARN = pBucketARN_
-  }
-
-
--- | The Amazon S3 backup mode.
-esdcS3BackupMode :: Lens' ExtendedS3DestinationConfiguration (Maybe S3BackupMode)
-esdcS3BackupMode = lens _esdcS3BackupMode (\ s a -> s{_esdcS3BackupMode = a});
-
--- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
-esdcPrefix :: Lens' ExtendedS3DestinationConfiguration (Maybe Text)
-esdcPrefix = lens _esdcPrefix (\ s a -> s{_esdcPrefix = a});
-
--- | The CloudWatch logging options for your delivery stream.
-esdcCloudWatchLoggingOptions :: Lens' ExtendedS3DestinationConfiguration (Maybe CloudWatchLoggingOptions)
-esdcCloudWatchLoggingOptions = lens _esdcCloudWatchLoggingOptions (\ s a -> s{_esdcCloudWatchLoggingOptions = a});
-
--- | The configuration for backup in Amazon S3.
-esdcS3BackupConfiguration :: Lens' ExtendedS3DestinationConfiguration (Maybe S3DestinationConfiguration)
-esdcS3BackupConfiguration = lens _esdcS3BackupConfiguration (\ s a -> s{_esdcS3BackupConfiguration = a});
-
--- | The encryption configuration. If no value is specified, the default is no encryption.
-esdcEncryptionConfiguration :: Lens' ExtendedS3DestinationConfiguration (Maybe EncryptionConfiguration)
-esdcEncryptionConfiguration = lens _esdcEncryptionConfiguration (\ s a -> s{_esdcEncryptionConfiguration = a});
-
--- | The compression format. If no value is specified, the default is UNCOMPRESSED.
-esdcCompressionFormat :: Lens' ExtendedS3DestinationConfiguration (Maybe CompressionFormat)
-esdcCompressionFormat = lens _esdcCompressionFormat (\ s a -> s{_esdcCompressionFormat = a});
-
--- | The buffering option.
-esdcBufferingHints :: Lens' ExtendedS3DestinationConfiguration (Maybe BufferingHints)
-esdcBufferingHints = lens _esdcBufferingHints (\ s a -> s{_esdcBufferingHints = a});
-
--- | The data processing configuration.
-esdcProcessingConfiguration :: Lens' ExtendedS3DestinationConfiguration (Maybe ProcessingConfiguration)
-esdcProcessingConfiguration = lens _esdcProcessingConfiguration (\ s a -> s{_esdcProcessingConfiguration = a});
-
--- | The ARN of the AWS credentials.
-esdcRoleARN :: Lens' ExtendedS3DestinationConfiguration Text
-esdcRoleARN = lens _esdcRoleARN (\ s a -> s{_esdcRoleARN = a});
-
--- | The ARN of the S3 bucket.
-esdcBucketARN :: Lens' ExtendedS3DestinationConfiguration Text
-esdcBucketARN = lens _esdcBucketARN (\ s a -> s{_esdcBucketARN = a});
-
-instance Hashable ExtendedS3DestinationConfiguration
-         where
-
-instance NFData ExtendedS3DestinationConfiguration
-         where
-
-instance ToJSON ExtendedS3DestinationConfiguration
-         where
-        toJSON ExtendedS3DestinationConfiguration'{..}
-          = object
-              (catMaybes
-                 [("S3BackupMode" .=) <$> _esdcS3BackupMode,
-                  ("Prefix" .=) <$> _esdcPrefix,
-                  ("CloudWatchLoggingOptions" .=) <$>
-                    _esdcCloudWatchLoggingOptions,
-                  ("S3BackupConfiguration" .=) <$>
-                    _esdcS3BackupConfiguration,
-                  ("EncryptionConfiguration" .=) <$>
-                    _esdcEncryptionConfiguration,
-                  ("CompressionFormat" .=) <$> _esdcCompressionFormat,
-                  ("BufferingHints" .=) <$> _esdcBufferingHints,
-                  ("ProcessingConfiguration" .=) <$>
-                    _esdcProcessingConfiguration,
-                  Just ("RoleARN" .= _esdcRoleARN),
-                  Just ("BucketARN" .= _esdcBucketARN)])
-
--- | Describes a destination in Amazon S3.
---
---
---
--- /See:/ 'extendedS3DestinationDescription' smart constructor.
-data ExtendedS3DestinationDescription = ExtendedS3DestinationDescription'
-  { _esddS3BackupMode             :: !(Maybe S3BackupMode)
-  , _esddS3BackupDescription      :: !(Maybe S3DestinationDescription)
-  , _esddPrefix                   :: !(Maybe Text)
-  , _esddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _esddProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _esddRoleARN                  :: !Text
-  , _esddBucketARN                :: !Text
-  , _esddBufferingHints           :: !BufferingHints
-  , _esddCompressionFormat        :: !CompressionFormat
-  , _esddEncryptionConfiguration  :: !EncryptionConfiguration
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExtendedS3DestinationDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'esddS3BackupMode' - The Amazon S3 backup mode.
---
--- * 'esddS3BackupDescription' - The configuration for backup in Amazon S3.
---
--- * 'esddPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
---
--- * 'esddCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'esddProcessingConfiguration' - The data processing configuration.
---
--- * 'esddRoleARN' - The ARN of the AWS credentials.
---
--- * 'esddBucketARN' - The ARN of the S3 bucket.
---
--- * 'esddBufferingHints' - The buffering option.
---
--- * 'esddCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
---
--- * 'esddEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
-extendedS3DestinationDescription
-    :: Text -- ^ 'esddRoleARN'
-    -> Text -- ^ 'esddBucketARN'
-    -> BufferingHints -- ^ 'esddBufferingHints'
-    -> CompressionFormat -- ^ 'esddCompressionFormat'
-    -> EncryptionConfiguration -- ^ 'esddEncryptionConfiguration'
-    -> ExtendedS3DestinationDescription
-extendedS3DestinationDescription pRoleARN_ pBucketARN_ pBufferingHints_ pCompressionFormat_ pEncryptionConfiguration_ =
-  ExtendedS3DestinationDescription'
-  { _esddS3BackupMode = Nothing
-  , _esddS3BackupDescription = Nothing
-  , _esddPrefix = Nothing
-  , _esddCloudWatchLoggingOptions = Nothing
-  , _esddProcessingConfiguration = Nothing
-  , _esddRoleARN = pRoleARN_
-  , _esddBucketARN = pBucketARN_
-  , _esddBufferingHints = pBufferingHints_
-  , _esddCompressionFormat = pCompressionFormat_
-  , _esddEncryptionConfiguration = pEncryptionConfiguration_
-  }
-
-
--- | The Amazon S3 backup mode.
-esddS3BackupMode :: Lens' ExtendedS3DestinationDescription (Maybe S3BackupMode)
-esddS3BackupMode = lens _esddS3BackupMode (\ s a -> s{_esddS3BackupMode = a});
-
--- | The configuration for backup in Amazon S3.
-esddS3BackupDescription :: Lens' ExtendedS3DestinationDescription (Maybe S3DestinationDescription)
-esddS3BackupDescription = lens _esddS3BackupDescription (\ s a -> s{_esddS3BackupDescription = a});
-
--- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
-esddPrefix :: Lens' ExtendedS3DestinationDescription (Maybe Text)
-esddPrefix = lens _esddPrefix (\ s a -> s{_esddPrefix = a});
-
--- | The CloudWatch logging options for your delivery stream.
-esddCloudWatchLoggingOptions :: Lens' ExtendedS3DestinationDescription (Maybe CloudWatchLoggingOptions)
-esddCloudWatchLoggingOptions = lens _esddCloudWatchLoggingOptions (\ s a -> s{_esddCloudWatchLoggingOptions = a});
-
--- | The data processing configuration.
-esddProcessingConfiguration :: Lens' ExtendedS3DestinationDescription (Maybe ProcessingConfiguration)
-esddProcessingConfiguration = lens _esddProcessingConfiguration (\ s a -> s{_esddProcessingConfiguration = a});
-
--- | The ARN of the AWS credentials.
-esddRoleARN :: Lens' ExtendedS3DestinationDescription Text
-esddRoleARN = lens _esddRoleARN (\ s a -> s{_esddRoleARN = a});
-
--- | The ARN of the S3 bucket.
-esddBucketARN :: Lens' ExtendedS3DestinationDescription Text
-esddBucketARN = lens _esddBucketARN (\ s a -> s{_esddBucketARN = a});
-
--- | The buffering option.
-esddBufferingHints :: Lens' ExtendedS3DestinationDescription BufferingHints
-esddBufferingHints = lens _esddBufferingHints (\ s a -> s{_esddBufferingHints = a});
-
--- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
-esddCompressionFormat :: Lens' ExtendedS3DestinationDescription CompressionFormat
-esddCompressionFormat = lens _esddCompressionFormat (\ s a -> s{_esddCompressionFormat = a});
-
--- | The encryption configuration. If no value is specified, the default is no encryption.
-esddEncryptionConfiguration :: Lens' ExtendedS3DestinationDescription EncryptionConfiguration
-esddEncryptionConfiguration = lens _esddEncryptionConfiguration (\ s a -> s{_esddEncryptionConfiguration = a});
-
-instance FromJSON ExtendedS3DestinationDescription
-         where
-        parseJSON
-          = withObject "ExtendedS3DestinationDescription"
-              (\ x ->
-                 ExtendedS3DestinationDescription' <$>
-                   (x .:? "S3BackupMode") <*>
-                     (x .:? "S3BackupDescription")
-                     <*> (x .:? "Prefix")
-                     <*> (x .:? "CloudWatchLoggingOptions")
-                     <*> (x .:? "ProcessingConfiguration")
-                     <*> (x .: "RoleARN")
-                     <*> (x .: "BucketARN")
-                     <*> (x .: "BufferingHints")
-                     <*> (x .: "CompressionFormat")
-                     <*> (x .: "EncryptionConfiguration"))
-
-instance Hashable ExtendedS3DestinationDescription
-         where
-
-instance NFData ExtendedS3DestinationDescription
-         where
-
--- | Describes an update for a destination in Amazon S3.
---
---
---
--- /See:/ 'extendedS3DestinationUpdate' smart constructor.
-data ExtendedS3DestinationUpdate = ExtendedS3DestinationUpdate'
-  { _esduS3BackupMode             :: !(Maybe S3BackupMode)
-  , _esduPrefix                   :: !(Maybe Text)
-  , _esduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _esduS3BackupUpdate           :: !(Maybe S3DestinationUpdate)
-  , _esduEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
-  , _esduCompressionFormat        :: !(Maybe CompressionFormat)
-  , _esduBufferingHints           :: !(Maybe BufferingHints)
-  , _esduBucketARN                :: !(Maybe Text)
-  , _esduProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _esduRoleARN                  :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExtendedS3DestinationUpdate' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'esduS3BackupMode' - Enables or disables Amazon S3 backup mode.
---
--- * 'esduPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
---
--- * 'esduCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'esduS3BackupUpdate' - The Amazon S3 destination for backup.
---
--- * 'esduEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
---
--- * 'esduCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
---
--- * 'esduBufferingHints' - The buffering option.
---
--- * 'esduBucketARN' - The ARN of the S3 bucket.
---
--- * 'esduProcessingConfiguration' - The data processing configuration.
---
--- * 'esduRoleARN' - The ARN of the AWS credentials.
-extendedS3DestinationUpdate
-    :: ExtendedS3DestinationUpdate
-extendedS3DestinationUpdate =
-  ExtendedS3DestinationUpdate'
-  { _esduS3BackupMode = Nothing
-  , _esduPrefix = Nothing
-  , _esduCloudWatchLoggingOptions = Nothing
-  , _esduS3BackupUpdate = Nothing
-  , _esduEncryptionConfiguration = Nothing
-  , _esduCompressionFormat = Nothing
-  , _esduBufferingHints = Nothing
-  , _esduBucketARN = Nothing
-  , _esduProcessingConfiguration = Nothing
-  , _esduRoleARN = Nothing
-  }
-
-
--- | Enables or disables Amazon S3 backup mode.
-esduS3BackupMode :: Lens' ExtendedS3DestinationUpdate (Maybe S3BackupMode)
-esduS3BackupMode = lens _esduS3BackupMode (\ s a -> s{_esduS3BackupMode = a});
-
--- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
-esduPrefix :: Lens' ExtendedS3DestinationUpdate (Maybe Text)
-esduPrefix = lens _esduPrefix (\ s a -> s{_esduPrefix = a});
-
--- | The CloudWatch logging options for your delivery stream.
-esduCloudWatchLoggingOptions :: Lens' ExtendedS3DestinationUpdate (Maybe CloudWatchLoggingOptions)
-esduCloudWatchLoggingOptions = lens _esduCloudWatchLoggingOptions (\ s a -> s{_esduCloudWatchLoggingOptions = a});
-
--- | The Amazon S3 destination for backup.
-esduS3BackupUpdate :: Lens' ExtendedS3DestinationUpdate (Maybe S3DestinationUpdate)
-esduS3BackupUpdate = lens _esduS3BackupUpdate (\ s a -> s{_esduS3BackupUpdate = a});
-
--- | The encryption configuration. If no value is specified, the default is no encryption.
-esduEncryptionConfiguration :: Lens' ExtendedS3DestinationUpdate (Maybe EncryptionConfiguration)
-esduEncryptionConfiguration = lens _esduEncryptionConfiguration (\ s a -> s{_esduEncryptionConfiguration = a});
-
--- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
-esduCompressionFormat :: Lens' ExtendedS3DestinationUpdate (Maybe CompressionFormat)
-esduCompressionFormat = lens _esduCompressionFormat (\ s a -> s{_esduCompressionFormat = a});
-
--- | The buffering option.
-esduBufferingHints :: Lens' ExtendedS3DestinationUpdate (Maybe BufferingHints)
-esduBufferingHints = lens _esduBufferingHints (\ s a -> s{_esduBufferingHints = a});
-
--- | The ARN of the S3 bucket.
-esduBucketARN :: Lens' ExtendedS3DestinationUpdate (Maybe Text)
-esduBucketARN = lens _esduBucketARN (\ s a -> s{_esduBucketARN = a});
-
--- | The data processing configuration.
-esduProcessingConfiguration :: Lens' ExtendedS3DestinationUpdate (Maybe ProcessingConfiguration)
-esduProcessingConfiguration = lens _esduProcessingConfiguration (\ s a -> s{_esduProcessingConfiguration = a});
-
--- | The ARN of the AWS credentials.
-esduRoleARN :: Lens' ExtendedS3DestinationUpdate (Maybe Text)
-esduRoleARN = lens _esduRoleARN (\ s a -> s{_esduRoleARN = a});
-
-instance Hashable ExtendedS3DestinationUpdate where
-
-instance NFData ExtendedS3DestinationUpdate where
-
-instance ToJSON ExtendedS3DestinationUpdate where
-        toJSON ExtendedS3DestinationUpdate'{..}
-          = object
-              (catMaybes
-                 [("S3BackupMode" .=) <$> _esduS3BackupMode,
-                  ("Prefix" .=) <$> _esduPrefix,
-                  ("CloudWatchLoggingOptions" .=) <$>
-                    _esduCloudWatchLoggingOptions,
-                  ("S3BackupUpdate" .=) <$> _esduS3BackupUpdate,
-                  ("EncryptionConfiguration" .=) <$>
-                    _esduEncryptionConfiguration,
-                  ("CompressionFormat" .=) <$> _esduCompressionFormat,
-                  ("BufferingHints" .=) <$> _esduBufferingHints,
-                  ("BucketARN" .=) <$> _esduBucketARN,
-                  ("ProcessingConfiguration" .=) <$>
-                    _esduProcessingConfiguration,
-                  ("RoleARN" .=) <$> _esduRoleARN])
-
--- | Describes an encryption key for a destination in Amazon S3.
---
---
---
--- /See:/ 'kmsEncryptionConfig' smart constructor.
-newtype KMSEncryptionConfig = KMSEncryptionConfig'
-  { _kecAWSKMSKeyARN :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'KMSEncryptionConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'kecAWSKMSKeyARN' - The ARN of the encryption key. Must belong to the same region as the destination Amazon S3 bucket.
-kmsEncryptionConfig
-    :: Text -- ^ 'kecAWSKMSKeyARN'
-    -> KMSEncryptionConfig
-kmsEncryptionConfig pAWSKMSKeyARN_ =
-  KMSEncryptionConfig' {_kecAWSKMSKeyARN = pAWSKMSKeyARN_}
-
-
--- | The ARN of the encryption key. Must belong to the same region as the destination Amazon S3 bucket.
-kecAWSKMSKeyARN :: Lens' KMSEncryptionConfig Text
-kecAWSKMSKeyARN = lens _kecAWSKMSKeyARN (\ s a -> s{_kecAWSKMSKeyARN = a});
-
-instance FromJSON KMSEncryptionConfig where
-        parseJSON
-          = withObject "KMSEncryptionConfig"
-              (\ x ->
-                 KMSEncryptionConfig' <$> (x .: "AWSKMSKeyARN"))
-
-instance Hashable KMSEncryptionConfig where
-
-instance NFData KMSEncryptionConfig where
-
-instance ToJSON KMSEncryptionConfig where
-        toJSON KMSEncryptionConfig'{..}
-          = object
-              (catMaybes
-                 [Just ("AWSKMSKeyARN" .= _kecAWSKMSKeyARN)])
-
--- | The stream and role ARNs for a Kinesis stream used as the source for a delivery stream.
---
---
---
--- /See:/ 'kinesisStreamSourceConfiguration' smart constructor.
-data KinesisStreamSourceConfiguration = KinesisStreamSourceConfiguration'
-  { _ksscKinesisStreamARN :: !Text
-  , _ksscRoleARN          :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'KinesisStreamSourceConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ksscKinesisStreamARN' - The ARN of the source Kinesis stream.
---
--- * 'ksscRoleARN' - The ARN of the role that provides access to the source Kinesis stream.
-kinesisStreamSourceConfiguration
-    :: Text -- ^ 'ksscKinesisStreamARN'
-    -> Text -- ^ 'ksscRoleARN'
-    -> KinesisStreamSourceConfiguration
-kinesisStreamSourceConfiguration pKinesisStreamARN_ pRoleARN_ =
-  KinesisStreamSourceConfiguration'
-  {_ksscKinesisStreamARN = pKinesisStreamARN_, _ksscRoleARN = pRoleARN_}
-
-
--- | The ARN of the source Kinesis stream.
-ksscKinesisStreamARN :: Lens' KinesisStreamSourceConfiguration Text
-ksscKinesisStreamARN = lens _ksscKinesisStreamARN (\ s a -> s{_ksscKinesisStreamARN = a});
-
--- | The ARN of the role that provides access to the source Kinesis stream.
-ksscRoleARN :: Lens' KinesisStreamSourceConfiguration Text
-ksscRoleARN = lens _ksscRoleARN (\ s a -> s{_ksscRoleARN = a});
-
-instance Hashable KinesisStreamSourceConfiguration
-         where
-
-instance NFData KinesisStreamSourceConfiguration
-         where
-
-instance ToJSON KinesisStreamSourceConfiguration
-         where
-        toJSON KinesisStreamSourceConfiguration'{..}
-          = object
-              (catMaybes
-                 [Just ("KinesisStreamARN" .= _ksscKinesisStreamARN),
-                  Just ("RoleARN" .= _ksscRoleARN)])
-
--- | Details about a Kinesis stream used as the source for a Kinesis Firehose delivery stream.
---
---
---
--- /See:/ 'kinesisStreamSourceDescription' smart constructor.
-data KinesisStreamSourceDescription = KinesisStreamSourceDescription'
-  { _kssdDeliveryStartTimestamp :: !(Maybe POSIX)
-  , _kssdKinesisStreamARN       :: !(Maybe Text)
-  , _kssdRoleARN                :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'KinesisStreamSourceDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'kssdDeliveryStartTimestamp' - Kinesis Firehose starts retrieving records from the Kinesis stream starting with this time stamp.
---
--- * 'kssdKinesisStreamARN' - The ARN of the source Kinesis stream.
---
--- * 'kssdRoleARN' - The ARN of the role used by the source Kinesis stream.
-kinesisStreamSourceDescription
-    :: KinesisStreamSourceDescription
-kinesisStreamSourceDescription =
-  KinesisStreamSourceDescription'
-  { _kssdDeliveryStartTimestamp = Nothing
-  , _kssdKinesisStreamARN = Nothing
-  , _kssdRoleARN = Nothing
-  }
-
-
--- | Kinesis Firehose starts retrieving records from the Kinesis stream starting with this time stamp.
-kssdDeliveryStartTimestamp :: Lens' KinesisStreamSourceDescription (Maybe UTCTime)
-kssdDeliveryStartTimestamp = lens _kssdDeliveryStartTimestamp (\ s a -> s{_kssdDeliveryStartTimestamp = a}) . mapping _Time;
-
--- | The ARN of the source Kinesis stream.
-kssdKinesisStreamARN :: Lens' KinesisStreamSourceDescription (Maybe Text)
-kssdKinesisStreamARN = lens _kssdKinesisStreamARN (\ s a -> s{_kssdKinesisStreamARN = a});
-
--- | The ARN of the role used by the source Kinesis stream.
-kssdRoleARN :: Lens' KinesisStreamSourceDescription (Maybe Text)
-kssdRoleARN = lens _kssdRoleARN (\ s a -> s{_kssdRoleARN = a});
-
-instance FromJSON KinesisStreamSourceDescription
-         where
-        parseJSON
-          = withObject "KinesisStreamSourceDescription"
-              (\ x ->
-                 KinesisStreamSourceDescription' <$>
-                   (x .:? "DeliveryStartTimestamp") <*>
-                     (x .:? "KinesisStreamARN")
-                     <*> (x .:? "RoleARN"))
-
-instance Hashable KinesisStreamSourceDescription
-         where
-
-instance NFData KinesisStreamSourceDescription where
-
--- | Describes a data processing configuration.
---
---
---
--- /See:/ 'processingConfiguration' smart constructor.
-data ProcessingConfiguration = ProcessingConfiguration'
-  { _pcEnabled    :: !(Maybe Bool)
-  , _pcProcessors :: !(Maybe [Processor])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ProcessingConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pcEnabled' - Enables or disables data processing.
---
--- * 'pcProcessors' - The data processors.
-processingConfiguration
-    :: ProcessingConfiguration
-processingConfiguration =
-  ProcessingConfiguration' {_pcEnabled = Nothing, _pcProcessors = Nothing}
-
-
--- | Enables or disables data processing.
-pcEnabled :: Lens' ProcessingConfiguration (Maybe Bool)
-pcEnabled = lens _pcEnabled (\ s a -> s{_pcEnabled = a});
-
--- | The data processors.
-pcProcessors :: Lens' ProcessingConfiguration [Processor]
-pcProcessors = lens _pcProcessors (\ s a -> s{_pcProcessors = a}) . _Default . _Coerce;
-
-instance FromJSON ProcessingConfiguration where
-        parseJSON
-          = withObject "ProcessingConfiguration"
-              (\ x ->
-                 ProcessingConfiguration' <$>
-                   (x .:? "Enabled") <*>
-                     (x .:? "Processors" .!= mempty))
-
-instance Hashable ProcessingConfiguration where
-
-instance NFData ProcessingConfiguration where
-
-instance ToJSON ProcessingConfiguration where
-        toJSON ProcessingConfiguration'{..}
-          = object
-              (catMaybes
-                 [("Enabled" .=) <$> _pcEnabled,
-                  ("Processors" .=) <$> _pcProcessors])
-
--- | Describes a data processor.
---
---
---
--- /See:/ 'processor' smart constructor.
-data Processor = Processor'
-  { _pParameters :: !(Maybe [ProcessorParameter])
-  , _pType       :: !ProcessorType
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Processor' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pParameters' - The processor parameters.
---
--- * 'pType' - The type of processor.
-processor
-    :: ProcessorType -- ^ 'pType'
-    -> Processor
-processor pType_ = Processor' {_pParameters = Nothing, _pType = pType_}
-
-
--- | The processor parameters.
-pParameters :: Lens' Processor [ProcessorParameter]
-pParameters = lens _pParameters (\ s a -> s{_pParameters = a}) . _Default . _Coerce;
-
--- | The type of processor.
-pType :: Lens' Processor ProcessorType
-pType = lens _pType (\ s a -> s{_pType = a});
-
-instance FromJSON Processor where
-        parseJSON
-          = withObject "Processor"
-              (\ x ->
-                 Processor' <$>
-                   (x .:? "Parameters" .!= mempty) <*> (x .: "Type"))
-
-instance Hashable Processor where
-
-instance NFData Processor where
-
-instance ToJSON Processor where
-        toJSON Processor'{..}
-          = object
-              (catMaybes
-                 [("Parameters" .=) <$> _pParameters,
-                  Just ("Type" .= _pType)])
-
--- | Describes the processor parameter.
---
---
---
--- /See:/ 'processorParameter' smart constructor.
-data ProcessorParameter = ProcessorParameter'
-  { _ppParameterName  :: !ProcessorParameterName
-  , _ppParameterValue :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ProcessorParameter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ppParameterName' - The name of the parameter.
---
--- * 'ppParameterValue' - The parameter value.
-processorParameter
-    :: ProcessorParameterName -- ^ 'ppParameterName'
-    -> Text -- ^ 'ppParameterValue'
-    -> ProcessorParameter
-processorParameter pParameterName_ pParameterValue_ =
-  ProcessorParameter'
-  {_ppParameterName = pParameterName_, _ppParameterValue = pParameterValue_}
-
-
--- | The name of the parameter.
-ppParameterName :: Lens' ProcessorParameter ProcessorParameterName
-ppParameterName = lens _ppParameterName (\ s a -> s{_ppParameterName = a});
-
--- | The parameter value.
-ppParameterValue :: Lens' ProcessorParameter Text
-ppParameterValue = lens _ppParameterValue (\ s a -> s{_ppParameterValue = a});
-
-instance FromJSON ProcessorParameter where
-        parseJSON
-          = withObject "ProcessorParameter"
-              (\ x ->
-                 ProcessorParameter' <$>
-                   (x .: "ParameterName") <*> (x .: "ParameterValue"))
-
-instance Hashable ProcessorParameter where
-
-instance NFData ProcessorParameter where
-
-instance ToJSON ProcessorParameter where
-        toJSON ProcessorParameter'{..}
-          = object
-              (catMaybes
-                 [Just ("ParameterName" .= _ppParameterName),
-                  Just ("ParameterValue" .= _ppParameterValue)])
-
--- | Contains the result for an individual record from a 'PutRecordBatch' request. If the record is successfully added to your delivery stream, it receives a record ID. If the record fails to be added to your delivery stream, the result includes an error code and an error message.
---
---
---
--- /See:/ 'putRecordBatchResponseEntry' smart constructor.
-data PutRecordBatchResponseEntry = PutRecordBatchResponseEntry'
-  { _prbreRecordId     :: !(Maybe Text)
-  , _prbreErrorCode    :: !(Maybe Text)
-  , _prbreErrorMessage :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutRecordBatchResponseEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prbreRecordId' - The ID of the record.
---
--- * 'prbreErrorCode' - The error code for an individual record result.
---
--- * 'prbreErrorMessage' - The error message for an individual record result.
-putRecordBatchResponseEntry
-    :: PutRecordBatchResponseEntry
-putRecordBatchResponseEntry =
-  PutRecordBatchResponseEntry'
-  { _prbreRecordId = Nothing
-  , _prbreErrorCode = Nothing
-  , _prbreErrorMessage = Nothing
-  }
-
-
--- | The ID of the record.
-prbreRecordId :: Lens' PutRecordBatchResponseEntry (Maybe Text)
-prbreRecordId = lens _prbreRecordId (\ s a -> s{_prbreRecordId = a});
-
--- | The error code for an individual record result.
-prbreErrorCode :: Lens' PutRecordBatchResponseEntry (Maybe Text)
-prbreErrorCode = lens _prbreErrorCode (\ s a -> s{_prbreErrorCode = a});
-
--- | The error message for an individual record result.
-prbreErrorMessage :: Lens' PutRecordBatchResponseEntry (Maybe Text)
-prbreErrorMessage = lens _prbreErrorMessage (\ s a -> s{_prbreErrorMessage = a});
-
-instance FromJSON PutRecordBatchResponseEntry where
-        parseJSON
-          = withObject "PutRecordBatchResponseEntry"
-              (\ x ->
-                 PutRecordBatchResponseEntry' <$>
-                   (x .:? "RecordId") <*> (x .:? "ErrorCode") <*>
-                     (x .:? "ErrorMessage"))
-
-instance Hashable PutRecordBatchResponseEntry where
-
-instance NFData PutRecordBatchResponseEntry where
-
--- | The unit of data in a delivery stream.
---
---
---
--- /See:/ 'record' smart constructor.
-newtype Record = Record'
-  { _rData :: Base64
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Record' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rData' - The data blob, which is base64-encoded when the blob is serialized. The maximum size of the data blob, before base64-encoding, is 1,000 KB.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
-record
-    :: ByteString -- ^ 'rData'
-    -> Record
-record pData_ = Record' {_rData = _Base64 # pData_}
-
-
--- | The data blob, which is base64-encoded when the blob is serialized. The maximum size of the data blob, before base64-encoding, is 1,000 KB.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
-rData :: Lens' Record ByteString
-rData = lens _rData (\ s a -> s{_rData = a}) . _Base64;
-
-instance Hashable Record where
-
-instance NFData Record where
-
-instance ToJSON Record where
-        toJSON Record'{..}
-          = object (catMaybes [Just ("Data" .= _rData)])
-
--- | Describes the configuration of a destination in Amazon Redshift.
---
---
---
--- /See:/ 'redshiftDestinationConfiguration' smart constructor.
-data RedshiftDestinationConfiguration = RedshiftDestinationConfiguration'
-  { _rdcS3BackupMode             :: !(Maybe RedshiftS3BackupMode)
-  , _rdcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _rdcS3BackupConfiguration    :: !(Maybe S3DestinationConfiguration)
-  , _rdcRetryOptions             :: !(Maybe RedshiftRetryOptions)
-  , _rdcProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _rdcRoleARN                  :: !Text
-  , _rdcClusterJDBCURL           :: !Text
-  , _rdcCopyCommand              :: !CopyCommand
-  , _rdcUsername                 :: !(Sensitive Text)
-  , _rdcPassword                 :: !(Sensitive Text)
-  , _rdcS3Configuration          :: !S3DestinationConfiguration
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RedshiftDestinationConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rdcS3BackupMode' - The Amazon S3 backup mode.
---
--- * 'rdcCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'rdcS3BackupConfiguration' - The configuration for backup in Amazon S3.
---
--- * 'rdcRetryOptions' - The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
---
--- * 'rdcProcessingConfiguration' - The data processing configuration.
---
--- * 'rdcRoleARN' - The ARN of the AWS credentials.
---
--- * 'rdcClusterJDBCURL' - The database connection string.
---
--- * 'rdcCopyCommand' - The @COPY@ command.
---
--- * 'rdcUsername' - The name of the user.
---
--- * 'rdcPassword' - The user password.
---
--- * 'rdcS3Configuration' - The configuration for the intermediate Amazon S3 location from which Amazon Redshift obtains data. Restrictions are described in the topic for 'CreateDeliveryStream' . 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.
-redshiftDestinationConfiguration
-    :: Text -- ^ 'rdcRoleARN'
-    -> Text -- ^ 'rdcClusterJDBCURL'
-    -> CopyCommand -- ^ 'rdcCopyCommand'
-    -> Text -- ^ 'rdcUsername'
-    -> Text -- ^ 'rdcPassword'
-    -> S3DestinationConfiguration -- ^ 'rdcS3Configuration'
-    -> RedshiftDestinationConfiguration
-redshiftDestinationConfiguration pRoleARN_ pClusterJDBCURL_ pCopyCommand_ pUsername_ pPassword_ pS3Configuration_ =
-  RedshiftDestinationConfiguration'
-  { _rdcS3BackupMode = Nothing
-  , _rdcCloudWatchLoggingOptions = Nothing
-  , _rdcS3BackupConfiguration = Nothing
-  , _rdcRetryOptions = Nothing
-  , _rdcProcessingConfiguration = Nothing
-  , _rdcRoleARN = pRoleARN_
-  , _rdcClusterJDBCURL = pClusterJDBCURL_
-  , _rdcCopyCommand = pCopyCommand_
-  , _rdcUsername = _Sensitive # pUsername_
-  , _rdcPassword = _Sensitive # pPassword_
-  , _rdcS3Configuration = pS3Configuration_
-  }
-
-
--- | The Amazon S3 backup mode.
-rdcS3BackupMode :: Lens' RedshiftDestinationConfiguration (Maybe RedshiftS3BackupMode)
-rdcS3BackupMode = lens _rdcS3BackupMode (\ s a -> s{_rdcS3BackupMode = a});
-
--- | The CloudWatch logging options for your delivery stream.
-rdcCloudWatchLoggingOptions :: Lens' RedshiftDestinationConfiguration (Maybe CloudWatchLoggingOptions)
-rdcCloudWatchLoggingOptions = lens _rdcCloudWatchLoggingOptions (\ s a -> s{_rdcCloudWatchLoggingOptions = a});
-
--- | The configuration for backup in Amazon S3.
-rdcS3BackupConfiguration :: Lens' RedshiftDestinationConfiguration (Maybe S3DestinationConfiguration)
-rdcS3BackupConfiguration = lens _rdcS3BackupConfiguration (\ s a -> s{_rdcS3BackupConfiguration = a});
-
--- | The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
-rdcRetryOptions :: Lens' RedshiftDestinationConfiguration (Maybe RedshiftRetryOptions)
-rdcRetryOptions = lens _rdcRetryOptions (\ s a -> s{_rdcRetryOptions = a});
-
--- | The data processing configuration.
-rdcProcessingConfiguration :: Lens' RedshiftDestinationConfiguration (Maybe ProcessingConfiguration)
-rdcProcessingConfiguration = lens _rdcProcessingConfiguration (\ s a -> s{_rdcProcessingConfiguration = a});
-
--- | The ARN of the AWS credentials.
-rdcRoleARN :: Lens' RedshiftDestinationConfiguration Text
-rdcRoleARN = lens _rdcRoleARN (\ s a -> s{_rdcRoleARN = a});
-
--- | The database connection string.
-rdcClusterJDBCURL :: Lens' RedshiftDestinationConfiguration Text
-rdcClusterJDBCURL = lens _rdcClusterJDBCURL (\ s a -> s{_rdcClusterJDBCURL = a});
-
--- | The @COPY@ command.
-rdcCopyCommand :: Lens' RedshiftDestinationConfiguration CopyCommand
-rdcCopyCommand = lens _rdcCopyCommand (\ s a -> s{_rdcCopyCommand = a});
-
--- | The name of the user.
-rdcUsername :: Lens' RedshiftDestinationConfiguration Text
-rdcUsername = lens _rdcUsername (\ s a -> s{_rdcUsername = a}) . _Sensitive;
-
--- | The user password.
-rdcPassword :: Lens' RedshiftDestinationConfiguration Text
-rdcPassword = lens _rdcPassword (\ s a -> s{_rdcPassword = a}) . _Sensitive;
-
--- | The configuration for the intermediate Amazon S3 location from which Amazon Redshift obtains data. Restrictions are described in the topic for 'CreateDeliveryStream' . 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.
-rdcS3Configuration :: Lens' RedshiftDestinationConfiguration S3DestinationConfiguration
-rdcS3Configuration = lens _rdcS3Configuration (\ s a -> s{_rdcS3Configuration = a});
-
-instance Hashable RedshiftDestinationConfiguration
-         where
-
-instance NFData RedshiftDestinationConfiguration
-         where
-
-instance ToJSON RedshiftDestinationConfiguration
-         where
-        toJSON RedshiftDestinationConfiguration'{..}
-          = object
-              (catMaybes
-                 [("S3BackupMode" .=) <$> _rdcS3BackupMode,
-                  ("CloudWatchLoggingOptions" .=) <$>
-                    _rdcCloudWatchLoggingOptions,
-                  ("S3BackupConfiguration" .=) <$>
-                    _rdcS3BackupConfiguration,
-                  ("RetryOptions" .=) <$> _rdcRetryOptions,
-                  ("ProcessingConfiguration" .=) <$>
-                    _rdcProcessingConfiguration,
-                  Just ("RoleARN" .= _rdcRoleARN),
-                  Just ("ClusterJDBCURL" .= _rdcClusterJDBCURL),
-                  Just ("CopyCommand" .= _rdcCopyCommand),
-                  Just ("Username" .= _rdcUsername),
-                  Just ("Password" .= _rdcPassword),
-                  Just ("S3Configuration" .= _rdcS3Configuration)])
-
--- | Describes a destination in Amazon Redshift.
---
---
---
--- /See:/ 'redshiftDestinationDescription' smart constructor.
-data RedshiftDestinationDescription = RedshiftDestinationDescription'
-  { _rddS3BackupMode             :: !(Maybe RedshiftS3BackupMode)
-  , _rddS3BackupDescription      :: !(Maybe S3DestinationDescription)
-  , _rddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _rddRetryOptions             :: !(Maybe RedshiftRetryOptions)
-  , _rddProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _rddRoleARN                  :: !Text
-  , _rddClusterJDBCURL           :: !Text
-  , _rddCopyCommand              :: !CopyCommand
-  , _rddUsername                 :: !(Sensitive Text)
-  , _rddS3DestinationDescription :: !S3DestinationDescription
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RedshiftDestinationDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rddS3BackupMode' - The Amazon S3 backup mode.
---
--- * 'rddS3BackupDescription' - The configuration for backup in Amazon S3.
---
--- * 'rddCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'rddRetryOptions' - The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
---
--- * 'rddProcessingConfiguration' - The data processing configuration.
---
--- * 'rddRoleARN' - The ARN of the AWS credentials.
---
--- * 'rddClusterJDBCURL' - The database connection string.
---
--- * 'rddCopyCommand' - The @COPY@ command.
---
--- * 'rddUsername' - The name of the user.
---
--- * 'rddS3DestinationDescription' - The Amazon S3 destination.
-redshiftDestinationDescription
-    :: Text -- ^ 'rddRoleARN'
-    -> Text -- ^ 'rddClusterJDBCURL'
-    -> CopyCommand -- ^ 'rddCopyCommand'
-    -> Text -- ^ 'rddUsername'
-    -> S3DestinationDescription -- ^ 'rddS3DestinationDescription'
-    -> RedshiftDestinationDescription
-redshiftDestinationDescription pRoleARN_ pClusterJDBCURL_ pCopyCommand_ pUsername_ pS3DestinationDescription_ =
-  RedshiftDestinationDescription'
-  { _rddS3BackupMode = Nothing
-  , _rddS3BackupDescription = Nothing
-  , _rddCloudWatchLoggingOptions = Nothing
-  , _rddRetryOptions = Nothing
-  , _rddProcessingConfiguration = Nothing
-  , _rddRoleARN = pRoleARN_
-  , _rddClusterJDBCURL = pClusterJDBCURL_
-  , _rddCopyCommand = pCopyCommand_
-  , _rddUsername = _Sensitive # pUsername_
-  , _rddS3DestinationDescription = pS3DestinationDescription_
-  }
-
-
--- | The Amazon S3 backup mode.
-rddS3BackupMode :: Lens' RedshiftDestinationDescription (Maybe RedshiftS3BackupMode)
-rddS3BackupMode = lens _rddS3BackupMode (\ s a -> s{_rddS3BackupMode = a});
-
--- | The configuration for backup in Amazon S3.
-rddS3BackupDescription :: Lens' RedshiftDestinationDescription (Maybe S3DestinationDescription)
-rddS3BackupDescription = lens _rddS3BackupDescription (\ s a -> s{_rddS3BackupDescription = a});
-
--- | The CloudWatch logging options for your delivery stream.
-rddCloudWatchLoggingOptions :: Lens' RedshiftDestinationDescription (Maybe CloudWatchLoggingOptions)
-rddCloudWatchLoggingOptions = lens _rddCloudWatchLoggingOptions (\ s a -> s{_rddCloudWatchLoggingOptions = a});
-
--- | The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
-rddRetryOptions :: Lens' RedshiftDestinationDescription (Maybe RedshiftRetryOptions)
-rddRetryOptions = lens _rddRetryOptions (\ s a -> s{_rddRetryOptions = a});
-
--- | The data processing configuration.
-rddProcessingConfiguration :: Lens' RedshiftDestinationDescription (Maybe ProcessingConfiguration)
-rddProcessingConfiguration = lens _rddProcessingConfiguration (\ s a -> s{_rddProcessingConfiguration = a});
-
--- | The ARN of the AWS credentials.
-rddRoleARN :: Lens' RedshiftDestinationDescription Text
-rddRoleARN = lens _rddRoleARN (\ s a -> s{_rddRoleARN = a});
-
--- | The database connection string.
-rddClusterJDBCURL :: Lens' RedshiftDestinationDescription Text
-rddClusterJDBCURL = lens _rddClusterJDBCURL (\ s a -> s{_rddClusterJDBCURL = a});
-
--- | The @COPY@ command.
-rddCopyCommand :: Lens' RedshiftDestinationDescription CopyCommand
-rddCopyCommand = lens _rddCopyCommand (\ s a -> s{_rddCopyCommand = a});
-
--- | The name of the user.
-rddUsername :: Lens' RedshiftDestinationDescription Text
-rddUsername = lens _rddUsername (\ s a -> s{_rddUsername = a}) . _Sensitive;
-
--- | The Amazon S3 destination.
-rddS3DestinationDescription :: Lens' RedshiftDestinationDescription S3DestinationDescription
-rddS3DestinationDescription = lens _rddS3DestinationDescription (\ s a -> s{_rddS3DestinationDescription = a});
-
-instance FromJSON RedshiftDestinationDescription
-         where
-        parseJSON
-          = withObject "RedshiftDestinationDescription"
-              (\ x ->
-                 RedshiftDestinationDescription' <$>
-                   (x .:? "S3BackupMode") <*>
-                     (x .:? "S3BackupDescription")
-                     <*> (x .:? "CloudWatchLoggingOptions")
-                     <*> (x .:? "RetryOptions")
-                     <*> (x .:? "ProcessingConfiguration")
-                     <*> (x .: "RoleARN")
-                     <*> (x .: "ClusterJDBCURL")
-                     <*> (x .: "CopyCommand")
-                     <*> (x .: "Username")
-                     <*> (x .: "S3DestinationDescription"))
-
-instance Hashable RedshiftDestinationDescription
-         where
-
-instance NFData RedshiftDestinationDescription where
-
--- | Describes an update for a destination in Amazon Redshift.
---
---
---
--- /See:/ 'redshiftDestinationUpdate' smart constructor.
-data RedshiftDestinationUpdate = RedshiftDestinationUpdate'
-  { _rduS3BackupMode             :: !(Maybe RedshiftS3BackupMode)
-  , _rduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _rduUsername                 :: !(Maybe (Sensitive Text))
-  , _rduS3Update                 :: !(Maybe S3DestinationUpdate)
-  , _rduPassword                 :: !(Maybe (Sensitive Text))
-  , _rduS3BackupUpdate           :: !(Maybe S3DestinationUpdate)
-  , _rduCopyCommand              :: !(Maybe CopyCommand)
-  , _rduRetryOptions             :: !(Maybe RedshiftRetryOptions)
-  , _rduProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
-  , _rduClusterJDBCURL           :: !(Maybe Text)
-  , _rduRoleARN                  :: !(Maybe Text)
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RedshiftDestinationUpdate' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rduS3BackupMode' - The Amazon S3 backup mode.
---
--- * 'rduCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'rduUsername' - The name of the user.
---
--- * 'rduS3Update' - The Amazon S3 destination. The compression formats @SNAPPY@ or @ZIP@ cannot be specified in __RedshiftDestinationUpdate.S3Update__ because the Amazon Redshift @COPY@ operation that reads from the S3 bucket doesn't support these compression formats.
---
--- * 'rduPassword' - The user password.
---
--- * 'rduS3BackupUpdate' - The Amazon S3 destination for backup.
---
--- * 'rduCopyCommand' - The @COPY@ command.
---
--- * 'rduRetryOptions' - The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
---
--- * 'rduProcessingConfiguration' - The data processing configuration.
---
--- * 'rduClusterJDBCURL' - The database connection string.
---
--- * 'rduRoleARN' - The ARN of the AWS credentials.
-redshiftDestinationUpdate
-    :: RedshiftDestinationUpdate
-redshiftDestinationUpdate =
-  RedshiftDestinationUpdate'
-  { _rduS3BackupMode = Nothing
-  , _rduCloudWatchLoggingOptions = Nothing
-  , _rduUsername = Nothing
-  , _rduS3Update = Nothing
-  , _rduPassword = Nothing
-  , _rduS3BackupUpdate = Nothing
-  , _rduCopyCommand = Nothing
-  , _rduRetryOptions = Nothing
-  , _rduProcessingConfiguration = Nothing
-  , _rduClusterJDBCURL = Nothing
-  , _rduRoleARN = Nothing
-  }
-
-
--- | The Amazon S3 backup mode.
-rduS3BackupMode :: Lens' RedshiftDestinationUpdate (Maybe RedshiftS3BackupMode)
-rduS3BackupMode = lens _rduS3BackupMode (\ s a -> s{_rduS3BackupMode = a});
-
--- | The CloudWatch logging options for your delivery stream.
-rduCloudWatchLoggingOptions :: Lens' RedshiftDestinationUpdate (Maybe CloudWatchLoggingOptions)
-rduCloudWatchLoggingOptions = lens _rduCloudWatchLoggingOptions (\ s a -> s{_rduCloudWatchLoggingOptions = a});
-
--- | The name of the user.
-rduUsername :: Lens' RedshiftDestinationUpdate (Maybe Text)
-rduUsername = lens _rduUsername (\ s a -> s{_rduUsername = a}) . mapping _Sensitive;
-
--- | The Amazon S3 destination. The compression formats @SNAPPY@ or @ZIP@ cannot be specified in __RedshiftDestinationUpdate.S3Update__ because the Amazon Redshift @COPY@ operation that reads from the S3 bucket doesn't support these compression formats.
-rduS3Update :: Lens' RedshiftDestinationUpdate (Maybe S3DestinationUpdate)
-rduS3Update = lens _rduS3Update (\ s a -> s{_rduS3Update = a});
-
--- | The user password.
-rduPassword :: Lens' RedshiftDestinationUpdate (Maybe Text)
-rduPassword = lens _rduPassword (\ s a -> s{_rduPassword = a}) . mapping _Sensitive;
-
--- | The Amazon S3 destination for backup.
-rduS3BackupUpdate :: Lens' RedshiftDestinationUpdate (Maybe S3DestinationUpdate)
-rduS3BackupUpdate = lens _rduS3BackupUpdate (\ s a -> s{_rduS3BackupUpdate = a});
-
--- | The @COPY@ command.
-rduCopyCommand :: Lens' RedshiftDestinationUpdate (Maybe CopyCommand)
-rduCopyCommand = lens _rduCopyCommand (\ s a -> s{_rduCopyCommand = a});
-
--- | The retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
-rduRetryOptions :: Lens' RedshiftDestinationUpdate (Maybe RedshiftRetryOptions)
-rduRetryOptions = lens _rduRetryOptions (\ s a -> s{_rduRetryOptions = a});
-
--- | The data processing configuration.
-rduProcessingConfiguration :: Lens' RedshiftDestinationUpdate (Maybe ProcessingConfiguration)
-rduProcessingConfiguration = lens _rduProcessingConfiguration (\ s a -> s{_rduProcessingConfiguration = a});
-
--- | The database connection string.
-rduClusterJDBCURL :: Lens' RedshiftDestinationUpdate (Maybe Text)
-rduClusterJDBCURL = lens _rduClusterJDBCURL (\ s a -> s{_rduClusterJDBCURL = a});
-
--- | The ARN of the AWS credentials.
-rduRoleARN :: Lens' RedshiftDestinationUpdate (Maybe Text)
-rduRoleARN = lens _rduRoleARN (\ s a -> s{_rduRoleARN = a});
-
-instance Hashable RedshiftDestinationUpdate where
-
-instance NFData RedshiftDestinationUpdate where
-
-instance ToJSON RedshiftDestinationUpdate where
-        toJSON RedshiftDestinationUpdate'{..}
-          = object
-              (catMaybes
-                 [("S3BackupMode" .=) <$> _rduS3BackupMode,
-                  ("CloudWatchLoggingOptions" .=) <$>
-                    _rduCloudWatchLoggingOptions,
-                  ("Username" .=) <$> _rduUsername,
-                  ("S3Update" .=) <$> _rduS3Update,
-                  ("Password" .=) <$> _rduPassword,
-                  ("S3BackupUpdate" .=) <$> _rduS3BackupUpdate,
-                  ("CopyCommand" .=) <$> _rduCopyCommand,
-                  ("RetryOptions" .=) <$> _rduRetryOptions,
-                  ("ProcessingConfiguration" .=) <$>
-                    _rduProcessingConfiguration,
-                  ("ClusterJDBCURL" .=) <$> _rduClusterJDBCURL,
-                  ("RoleARN" .=) <$> _rduRoleARN])
-
--- | Configures retry behavior in case Kinesis Firehose is unable to deliver documents to Amazon Redshift.
---
---
---
--- /See:/ 'redshiftRetryOptions' smart constructor.
-newtype RedshiftRetryOptions = RedshiftRetryOptions'
-  { _rroDurationInSeconds :: Maybe Nat
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RedshiftRetryOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rroDurationInSeconds' - The length of time during which Kinesis Firehose retries delivery after a failure, starting from the initial request and including the first attempt. The default value is 3600 seconds (60 minutes). Kinesis Firehose does not retry if the value of @DurationInSeconds@ is 0 (zero) or if the first delivery attempt takes longer than the current value.
-redshiftRetryOptions
-    :: RedshiftRetryOptions
-redshiftRetryOptions = RedshiftRetryOptions' {_rroDurationInSeconds = Nothing}
-
-
--- | The length of time during which Kinesis Firehose retries delivery after a failure, starting from the initial request and including the first attempt. The default value is 3600 seconds (60 minutes). Kinesis Firehose does not retry if the value of @DurationInSeconds@ is 0 (zero) or if the first delivery attempt takes longer than the current value.
-rroDurationInSeconds :: Lens' RedshiftRetryOptions (Maybe Natural)
-rroDurationInSeconds = lens _rroDurationInSeconds (\ s a -> s{_rroDurationInSeconds = a}) . mapping _Nat;
-
-instance FromJSON RedshiftRetryOptions where
-        parseJSON
-          = withObject "RedshiftRetryOptions"
-              (\ x ->
-                 RedshiftRetryOptions' <$>
-                   (x .:? "DurationInSeconds"))
-
-instance Hashable RedshiftRetryOptions where
-
-instance NFData RedshiftRetryOptions where
-
-instance ToJSON RedshiftRetryOptions where
-        toJSON RedshiftRetryOptions'{..}
-          = object
-              (catMaybes
-                 [("DurationInSeconds" .=) <$> _rroDurationInSeconds])
-
--- | Describes the configuration of a destination in Amazon S3.
---
---
---
--- /See:/ 's3DestinationConfiguration' smart constructor.
-data S3DestinationConfiguration = S3DestinationConfiguration'
-  { _sdcPrefix                   :: !(Maybe Text)
-  , _sdcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _sdcEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
-  , _sdcCompressionFormat        :: !(Maybe CompressionFormat)
-  , _sdcBufferingHints           :: !(Maybe BufferingHints)
-  , _sdcRoleARN                  :: !Text
-  , _sdcBucketARN                :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'S3DestinationConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdcPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
---
--- * 'sdcCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'sdcEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
---
--- * 'sdcCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ . The compression formats @SNAPPY@ or @ZIP@ cannot be specified for Amazon Redshift destinations because they are not supported by the Amazon Redshift @COPY@ operation that reads from the S3 bucket.
---
--- * 'sdcBufferingHints' - The buffering option. If no value is specified, __BufferingHints__ object default values are used.
---
--- * 'sdcRoleARN' - The ARN of the AWS credentials.
---
--- * 'sdcBucketARN' - The ARN of the S3 bucket.
-s3DestinationConfiguration
-    :: Text -- ^ 'sdcRoleARN'
-    -> Text -- ^ 'sdcBucketARN'
-    -> S3DestinationConfiguration
-s3DestinationConfiguration pRoleARN_ pBucketARN_ =
-  S3DestinationConfiguration'
-  { _sdcPrefix = Nothing
-  , _sdcCloudWatchLoggingOptions = Nothing
-  , _sdcEncryptionConfiguration = Nothing
-  , _sdcCompressionFormat = Nothing
-  , _sdcBufferingHints = Nothing
-  , _sdcRoleARN = pRoleARN_
-  , _sdcBucketARN = pBucketARN_
-  }
-
-
--- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
-sdcPrefix :: Lens' S3DestinationConfiguration (Maybe Text)
-sdcPrefix = lens _sdcPrefix (\ s a -> s{_sdcPrefix = a});
-
--- | The CloudWatch logging options for your delivery stream.
-sdcCloudWatchLoggingOptions :: Lens' S3DestinationConfiguration (Maybe CloudWatchLoggingOptions)
-sdcCloudWatchLoggingOptions = lens _sdcCloudWatchLoggingOptions (\ s a -> s{_sdcCloudWatchLoggingOptions = a});
-
--- | The encryption configuration. If no value is specified, the default is no encryption.
-sdcEncryptionConfiguration :: Lens' S3DestinationConfiguration (Maybe EncryptionConfiguration)
-sdcEncryptionConfiguration = lens _sdcEncryptionConfiguration (\ s a -> s{_sdcEncryptionConfiguration = a});
-
--- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ . The compression formats @SNAPPY@ or @ZIP@ cannot be specified for Amazon Redshift destinations because they are not supported by the Amazon Redshift @COPY@ operation that reads from the S3 bucket.
-sdcCompressionFormat :: Lens' S3DestinationConfiguration (Maybe CompressionFormat)
-sdcCompressionFormat = lens _sdcCompressionFormat (\ s a -> s{_sdcCompressionFormat = a});
-
--- | The buffering option. If no value is specified, __BufferingHints__ object default values are used.
-sdcBufferingHints :: Lens' S3DestinationConfiguration (Maybe BufferingHints)
-sdcBufferingHints = lens _sdcBufferingHints (\ s a -> s{_sdcBufferingHints = a});
-
--- | The ARN of the AWS credentials.
-sdcRoleARN :: Lens' S3DestinationConfiguration Text
-sdcRoleARN = lens _sdcRoleARN (\ s a -> s{_sdcRoleARN = a});
-
--- | The ARN of the S3 bucket.
-sdcBucketARN :: Lens' S3DestinationConfiguration Text
-sdcBucketARN = lens _sdcBucketARN (\ s a -> s{_sdcBucketARN = a});
-
-instance Hashable S3DestinationConfiguration where
-
-instance NFData S3DestinationConfiguration where
-
-instance ToJSON S3DestinationConfiguration where
-        toJSON S3DestinationConfiguration'{..}
-          = object
-              (catMaybes
-                 [("Prefix" .=) <$> _sdcPrefix,
-                  ("CloudWatchLoggingOptions" .=) <$>
-                    _sdcCloudWatchLoggingOptions,
-                  ("EncryptionConfiguration" .=) <$>
-                    _sdcEncryptionConfiguration,
-                  ("CompressionFormat" .=) <$> _sdcCompressionFormat,
-                  ("BufferingHints" .=) <$> _sdcBufferingHints,
-                  Just ("RoleARN" .= _sdcRoleARN),
-                  Just ("BucketARN" .= _sdcBucketARN)])
-
--- | Describes a destination in Amazon S3.
---
---
---
--- /See:/ 's3DestinationDescription' smart constructor.
-data S3DestinationDescription = S3DestinationDescription'
-  { _sddPrefix                   :: !(Maybe Text)
-  , _sddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _sddRoleARN                  :: !Text
-  , _sddBucketARN                :: !Text
-  , _sddBufferingHints           :: !BufferingHints
-  , _sddCompressionFormat        :: !CompressionFormat
-  , _sddEncryptionConfiguration  :: !EncryptionConfiguration
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'S3DestinationDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sddPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
---
--- * 'sddCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'sddRoleARN' - The ARN of the AWS credentials.
---
--- * 'sddBucketARN' - The ARN of the S3 bucket.
---
--- * 'sddBufferingHints' - The buffering option. If no value is specified, __BufferingHints__ object default values are used.
---
--- * 'sddCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
---
--- * 'sddEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
-s3DestinationDescription
-    :: Text -- ^ 'sddRoleARN'
-    -> Text -- ^ 'sddBucketARN'
-    -> BufferingHints -- ^ 'sddBufferingHints'
-    -> CompressionFormat -- ^ 'sddCompressionFormat'
-    -> EncryptionConfiguration -- ^ 'sddEncryptionConfiguration'
-    -> S3DestinationDescription
-s3DestinationDescription pRoleARN_ pBucketARN_ pBufferingHints_ pCompressionFormat_ pEncryptionConfiguration_ =
-  S3DestinationDescription'
-  { _sddPrefix = Nothing
-  , _sddCloudWatchLoggingOptions = Nothing
-  , _sddRoleARN = pRoleARN_
-  , _sddBucketARN = pBucketARN_
-  , _sddBufferingHints = pBufferingHints_
-  , _sddCompressionFormat = pCompressionFormat_
-  , _sddEncryptionConfiguration = pEncryptionConfiguration_
-  }
-
-
--- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
-sddPrefix :: Lens' S3DestinationDescription (Maybe Text)
-sddPrefix = lens _sddPrefix (\ s a -> s{_sddPrefix = a});
-
--- | The CloudWatch logging options for your delivery stream.
-sddCloudWatchLoggingOptions :: Lens' S3DestinationDescription (Maybe CloudWatchLoggingOptions)
-sddCloudWatchLoggingOptions = lens _sddCloudWatchLoggingOptions (\ s a -> s{_sddCloudWatchLoggingOptions = a});
-
--- | The ARN of the AWS credentials.
-sddRoleARN :: Lens' S3DestinationDescription Text
-sddRoleARN = lens _sddRoleARN (\ s a -> s{_sddRoleARN = a});
-
--- | The ARN of the S3 bucket.
-sddBucketARN :: Lens' S3DestinationDescription Text
-sddBucketARN = lens _sddBucketARN (\ s a -> s{_sddBucketARN = a});
-
--- | The buffering option. If no value is specified, __BufferingHints__ object default values are used.
-sddBufferingHints :: Lens' S3DestinationDescription BufferingHints
-sddBufferingHints = lens _sddBufferingHints (\ s a -> s{_sddBufferingHints = a});
-
--- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
-sddCompressionFormat :: Lens' S3DestinationDescription CompressionFormat
-sddCompressionFormat = lens _sddCompressionFormat (\ s a -> s{_sddCompressionFormat = a});
-
--- | The encryption configuration. If no value is specified, the default is no encryption.
-sddEncryptionConfiguration :: Lens' S3DestinationDescription EncryptionConfiguration
-sddEncryptionConfiguration = lens _sddEncryptionConfiguration (\ s a -> s{_sddEncryptionConfiguration = a});
-
-instance FromJSON S3DestinationDescription where
-        parseJSON
-          = withObject "S3DestinationDescription"
-              (\ x ->
-                 S3DestinationDescription' <$>
-                   (x .:? "Prefix") <*>
-                     (x .:? "CloudWatchLoggingOptions")
-                     <*> (x .: "RoleARN")
-                     <*> (x .: "BucketARN")
-                     <*> (x .: "BufferingHints")
-                     <*> (x .: "CompressionFormat")
-                     <*> (x .: "EncryptionConfiguration"))
-
-instance Hashable S3DestinationDescription where
-
-instance NFData S3DestinationDescription where
-
--- | Describes an update for a destination in Amazon S3.
---
---
---
--- /See:/ 's3DestinationUpdate' smart constructor.
-data S3DestinationUpdate = S3DestinationUpdate'
-  { _sduPrefix                   :: !(Maybe Text)
-  , _sduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
-  , _sduEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
-  , _sduCompressionFormat        :: !(Maybe CompressionFormat)
-  , _sduBufferingHints           :: !(Maybe BufferingHints)
-  , _sduBucketARN                :: !(Maybe Text)
-  , _sduRoleARN                  :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'S3DestinationUpdate' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sduPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
---
--- * 'sduCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
---
--- * 'sduEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
---
--- * 'sduCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ . The compression formats @SNAPPY@ or @ZIP@ cannot be specified for Amazon Redshift destinations because they are not supported by the Amazon Redshift @COPY@ operation that reads from the S3 bucket.
---
--- * 'sduBufferingHints' - The buffering option. If no value is specified, __BufferingHints__ object default values are used.
---
--- * 'sduBucketARN' - The ARN of the S3 bucket.
---
--- * 'sduRoleARN' - The ARN of the AWS credentials.
-s3DestinationUpdate
-    :: S3DestinationUpdate
-s3DestinationUpdate =
-  S3DestinationUpdate'
-  { _sduPrefix = Nothing
-  , _sduCloudWatchLoggingOptions = Nothing
-  , _sduEncryptionConfiguration = Nothing
-  , _sduCompressionFormat = Nothing
-  , _sduBufferingHints = Nothing
-  , _sduBucketARN = Nothing
-  , _sduRoleARN = Nothing
-  }
-
-
--- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html Amazon S3 Object Name Format> in the /Amazon Kinesis Firehose Developer Guide/ .
-sduPrefix :: Lens' S3DestinationUpdate (Maybe Text)
-sduPrefix = lens _sduPrefix (\ s a -> s{_sduPrefix = a});
-
--- | The CloudWatch logging options for your delivery stream.
-sduCloudWatchLoggingOptions :: Lens' S3DestinationUpdate (Maybe CloudWatchLoggingOptions)
-sduCloudWatchLoggingOptions = lens _sduCloudWatchLoggingOptions (\ s a -> s{_sduCloudWatchLoggingOptions = a});
-
--- | The encryption configuration. If no value is specified, the default is no encryption.
-sduEncryptionConfiguration :: Lens' S3DestinationUpdate (Maybe EncryptionConfiguration)
-sduEncryptionConfiguration = lens _sduEncryptionConfiguration (\ s a -> s{_sduEncryptionConfiguration = a});
-
--- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ . The compression formats @SNAPPY@ or @ZIP@ cannot be specified for Amazon Redshift destinations because they are not supported by the Amazon Redshift @COPY@ operation that reads from the S3 bucket.
-sduCompressionFormat :: Lens' S3DestinationUpdate (Maybe CompressionFormat)
-sduCompressionFormat = lens _sduCompressionFormat (\ s a -> s{_sduCompressionFormat = a});
-
--- | The buffering option. If no value is specified, __BufferingHints__ object default values are used.
-sduBufferingHints :: Lens' S3DestinationUpdate (Maybe BufferingHints)
-sduBufferingHints = lens _sduBufferingHints (\ s a -> s{_sduBufferingHints = a});
-
--- | The ARN of the S3 bucket.
-sduBucketARN :: Lens' S3DestinationUpdate (Maybe Text)
-sduBucketARN = lens _sduBucketARN (\ s a -> s{_sduBucketARN = a});
-
--- | The ARN of the AWS credentials.
-sduRoleARN :: Lens' S3DestinationUpdate (Maybe Text)
-sduRoleARN = lens _sduRoleARN (\ s a -> s{_sduRoleARN = a});
-
-instance Hashable S3DestinationUpdate where
-
-instance NFData S3DestinationUpdate where
-
-instance ToJSON S3DestinationUpdate where
-        toJSON S3DestinationUpdate'{..}
-          = object
-              (catMaybes
-                 [("Prefix" .=) <$> _sduPrefix,
-                  ("CloudWatchLoggingOptions" .=) <$>
-                    _sduCloudWatchLoggingOptions,
-                  ("EncryptionConfiguration" .=) <$>
-                    _sduEncryptionConfiguration,
-                  ("CompressionFormat" .=) <$> _sduCompressionFormat,
-                  ("BufferingHints" .=) <$> _sduBufferingHints,
-                  ("BucketARN" .=) <$> _sduBucketARN,
-                  ("RoleARN" .=) <$> _sduRoleARN])
-
--- | /See:/ 'sessionCredentials' smart constructor.
-data SessionCredentials = SessionCredentials'
-  { _scAccessKeyId     :: !Text
-  , _scSecretAccessKey :: !Text
-  , _scSessionToken    :: !Text
-  , _scExpiration      :: !POSIX
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SessionCredentials' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scAccessKeyId' - Undocumented member.
---
--- * 'scSecretAccessKey' - Undocumented member.
---
--- * 'scSessionToken' - Undocumented member.
---
--- * 'scExpiration' - Undocumented member.
-sessionCredentials
-    :: Text -- ^ 'scAccessKeyId'
-    -> Text -- ^ 'scSecretAccessKey'
-    -> Text -- ^ 'scSessionToken'
-    -> UTCTime -- ^ 'scExpiration'
-    -> SessionCredentials
-sessionCredentials pAccessKeyId_ pSecretAccessKey_ pSessionToken_ pExpiration_ =
-  SessionCredentials'
-  { _scAccessKeyId = pAccessKeyId_
-  , _scSecretAccessKey = pSecretAccessKey_
-  , _scSessionToken = pSessionToken_
-  , _scExpiration = _Time # pExpiration_
-  }
-
-
--- | Undocumented member.
-scAccessKeyId :: Lens' SessionCredentials Text
-scAccessKeyId = lens _scAccessKeyId (\ s a -> s{_scAccessKeyId = a});
-
--- | Undocumented member.
-scSecretAccessKey :: Lens' SessionCredentials Text
-scSecretAccessKey = lens _scSecretAccessKey (\ s a -> s{_scSecretAccessKey = a});
-
--- | Undocumented member.
-scSessionToken :: Lens' SessionCredentials Text
-scSessionToken = lens _scSessionToken (\ s a -> s{_scSessionToken = a});
-
--- | Undocumented member.
-scExpiration :: Lens' SessionCredentials UTCTime
-scExpiration = lens _scExpiration (\ s a -> s{_scExpiration = a}) . _Time;
-
-instance FromJSON SessionCredentials where
-        parseJSON
-          = withObject "SessionCredentials"
-              (\ x ->
-                 SessionCredentials' <$>
-                   (x .: "AccessKeyId") <*> (x .: "SecretAccessKey") <*>
-                     (x .: "SessionToken")
-                     <*> (x .: "Expiration"))
-
-instance Hashable SessionCredentials where
-
-instance NFData SessionCredentials where
-
--- | Details about a Kinesis stream used as the source for a Kinesis Firehose delivery stream.
---
---
---
--- /See:/ 'sourceDescription' smart constructor.
-newtype SourceDescription = SourceDescription'
-  { _sdKinesisStreamSourceDescription :: Maybe KinesisStreamSourceDescription
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SourceDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdKinesisStreamSourceDescription' - The 'KinesisStreamSourceDescription' value for the source Kinesis stream.
-sourceDescription
-    :: SourceDescription
-sourceDescription =
-  SourceDescription' {_sdKinesisStreamSourceDescription = Nothing}
-
-
--- | The 'KinesisStreamSourceDescription' value for the source Kinesis stream.
-sdKinesisStreamSourceDescription :: Lens' SourceDescription (Maybe KinesisStreamSourceDescription)
-sdKinesisStreamSourceDescription = lens _sdKinesisStreamSourceDescription (\ s a -> s{_sdKinesisStreamSourceDescription = a});
-
-instance FromJSON SourceDescription where
-        parseJSON
-          = withObject "SourceDescription"
-              (\ x ->
-                 SourceDescription' <$>
-                   (x .:? "KinesisStreamSourceDescription"))
-
-instance Hashable SourceDescription where
-
-instance NFData SourceDescription where
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Firehose.Types.Product where
+
+import Network.AWS.Firehose.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+
+-- | Describes hints for the buffering to perform before delivering data to the destination. These options are treated as hints, and therefore Kinesis Data Firehose might choose to use different values when it is optimal.
+--
+--
+--
+-- /See:/ 'bufferingHints' smart constructor.
+data BufferingHints = BufferingHints'
+  { _bhSizeInMBs         :: !(Maybe Nat)
+  , _bhIntervalInSeconds :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BufferingHints' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bhSizeInMBs' - Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5. We recommend setting this parameter to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.
+--
+-- * 'bhIntervalInSeconds' - Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
+bufferingHints
+    :: BufferingHints
+bufferingHints =
+  BufferingHints' {_bhSizeInMBs = Nothing, _bhIntervalInSeconds = Nothing}
+
+
+-- | Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5. We recommend setting this parameter to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.
+bhSizeInMBs :: Lens' BufferingHints (Maybe Natural)
+bhSizeInMBs = lens _bhSizeInMBs (\ s a -> s{_bhSizeInMBs = a}) . mapping _Nat
+
+-- | Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
+bhIntervalInSeconds :: Lens' BufferingHints (Maybe Natural)
+bhIntervalInSeconds = lens _bhIntervalInSeconds (\ s a -> s{_bhIntervalInSeconds = a}) . mapping _Nat
+
+instance FromJSON BufferingHints where
+        parseJSON
+          = withObject "BufferingHints"
+              (\ x ->
+                 BufferingHints' <$>
+                   (x .:? "SizeInMBs") <*> (x .:? "IntervalInSeconds"))
+
+instance Hashable BufferingHints where
+
+instance NFData BufferingHints where
+
+instance ToJSON BufferingHints where
+        toJSON BufferingHints'{..}
+          = object
+              (catMaybes
+                 [("SizeInMBs" .=) <$> _bhSizeInMBs,
+                  ("IntervalInSeconds" .=) <$> _bhIntervalInSeconds])
+
+-- | Describes the Amazon CloudWatch logging options for your delivery stream.
+--
+--
+--
+-- /See:/ 'cloudWatchLoggingOptions' smart constructor.
+data CloudWatchLoggingOptions = CloudWatchLoggingOptions'
+  { _cwloEnabled       :: !(Maybe Bool)
+  , _cwloLogGroupName  :: !(Maybe Text)
+  , _cwloLogStreamName :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CloudWatchLoggingOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cwloEnabled' - Enables or disables CloudWatch logging.
+--
+-- * 'cwloLogGroupName' - The CloudWatch group name for logging. This value is required if CloudWatch logging is enabled.
+--
+-- * 'cwloLogStreamName' - The CloudWatch log stream name for logging. This value is required if CloudWatch logging is enabled.
+cloudWatchLoggingOptions
+    :: CloudWatchLoggingOptions
+cloudWatchLoggingOptions =
+  CloudWatchLoggingOptions'
+    { _cwloEnabled = Nothing
+    , _cwloLogGroupName = Nothing
+    , _cwloLogStreamName = Nothing
+    }
+
+
+-- | Enables or disables CloudWatch logging.
+cwloEnabled :: Lens' CloudWatchLoggingOptions (Maybe Bool)
+cwloEnabled = lens _cwloEnabled (\ s a -> s{_cwloEnabled = a})
+
+-- | The CloudWatch group name for logging. This value is required if CloudWatch logging is enabled.
+cwloLogGroupName :: Lens' CloudWatchLoggingOptions (Maybe Text)
+cwloLogGroupName = lens _cwloLogGroupName (\ s a -> s{_cwloLogGroupName = a})
+
+-- | The CloudWatch log stream name for logging. This value is required if CloudWatch logging is enabled.
+cwloLogStreamName :: Lens' CloudWatchLoggingOptions (Maybe Text)
+cwloLogStreamName = lens _cwloLogStreamName (\ s a -> s{_cwloLogStreamName = a})
+
+instance FromJSON CloudWatchLoggingOptions where
+        parseJSON
+          = withObject "CloudWatchLoggingOptions"
+              (\ x ->
+                 CloudWatchLoggingOptions' <$>
+                   (x .:? "Enabled") <*> (x .:? "LogGroupName") <*>
+                     (x .:? "LogStreamName"))
+
+instance Hashable CloudWatchLoggingOptions where
+
+instance NFData CloudWatchLoggingOptions where
+
+instance ToJSON CloudWatchLoggingOptions where
+        toJSON CloudWatchLoggingOptions'{..}
+          = object
+              (catMaybes
+                 [("Enabled" .=) <$> _cwloEnabled,
+                  ("LogGroupName" .=) <$> _cwloLogGroupName,
+                  ("LogStreamName" .=) <$> _cwloLogStreamName])
+
+-- | Describes a @COPY@ command for Amazon Redshift.
+--
+--
+--
+-- /See:/ 'copyCommand' smart constructor.
+data CopyCommand = CopyCommand'
+  { _ccCopyOptions      :: !(Maybe Text)
+  , _ccDataTableColumns :: !(Maybe Text)
+  , _ccDataTableName    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CopyCommand' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccCopyOptions' - Optional parameters to use with the Amazon Redshift @COPY@ command. For more information, see the "Optional Parameters" section of <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html Amazon Redshift COPY command> . Some possible examples that would apply to Kinesis Data Firehose are as follows: @delimiter '\t' lzop;@ - fields are delimited with "\t" (TAB character) and compressed using lzop. @delimiter '|'@ - fields are delimited with "|" (this is the default delimiter). @delimiter '|' escape@ - the delimiter should be escaped. @fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6'@ - fields are fixed width in the source, with each width specified after every column in the table. @JSON 's3://mybucket/jsonpaths.txt'@ - data is in JSON format, and the path specified is the format of the data. For more examples, see <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html Amazon Redshift COPY command examples> .
+--
+-- * 'ccDataTableColumns' - A comma-separated list of column names.
+--
+-- * 'ccDataTableName' - The name of the target table. The table must already exist in the database.
+copyCommand
+    :: Text -- ^ 'ccDataTableName'
+    -> CopyCommand
+copyCommand pDataTableName_ =
+  CopyCommand'
+    { _ccCopyOptions = Nothing
+    , _ccDataTableColumns = Nothing
+    , _ccDataTableName = pDataTableName_
+    }
+
+
+-- | Optional parameters to use with the Amazon Redshift @COPY@ command. For more information, see the "Optional Parameters" section of <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html Amazon Redshift COPY command> . Some possible examples that would apply to Kinesis Data Firehose are as follows: @delimiter '\t' lzop;@ - fields are delimited with "\t" (TAB character) and compressed using lzop. @delimiter '|'@ - fields are delimited with "|" (this is the default delimiter). @delimiter '|' escape@ - the delimiter should be escaped. @fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6'@ - fields are fixed width in the source, with each width specified after every column in the table. @JSON 's3://mybucket/jsonpaths.txt'@ - data is in JSON format, and the path specified is the format of the data. For more examples, see <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html Amazon Redshift COPY command examples> .
+ccCopyOptions :: Lens' CopyCommand (Maybe Text)
+ccCopyOptions = lens _ccCopyOptions (\ s a -> s{_ccCopyOptions = a})
+
+-- | A comma-separated list of column names.
+ccDataTableColumns :: Lens' CopyCommand (Maybe Text)
+ccDataTableColumns = lens _ccDataTableColumns (\ s a -> s{_ccDataTableColumns = a})
+
+-- | The name of the target table. The table must already exist in the database.
+ccDataTableName :: Lens' CopyCommand Text
+ccDataTableName = lens _ccDataTableName (\ s a -> s{_ccDataTableName = a})
+
+instance FromJSON CopyCommand where
+        parseJSON
+          = withObject "CopyCommand"
+              (\ x ->
+                 CopyCommand' <$>
+                   (x .:? "CopyOptions") <*> (x .:? "DataTableColumns")
+                     <*> (x .: "DataTableName"))
+
+instance Hashable CopyCommand where
+
+instance NFData CopyCommand where
+
+instance ToJSON CopyCommand where
+        toJSON CopyCommand'{..}
+          = object
+              (catMaybes
+                 [("CopyOptions" .=) <$> _ccCopyOptions,
+                  ("DataTableColumns" .=) <$> _ccDataTableColumns,
+                  Just ("DataTableName" .= _ccDataTableName)])
+
+-- | Specifies that you want Kinesis Data Firehose to convert data from the JSON format to the Parquet or ORC format before writing it to Amazon S3. Kinesis Data Firehose uses the serializer and deserializer that you specify, in addition to the column information from the AWS Glue table, to deserialize your input data from JSON and then serialize it to the Parquet or ORC format. For more information, see <https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html Kinesis Data Firehose Record Format Conversion> .
+--
+--
+--
+-- /See:/ 'dataFormatConversionConfiguration' smart constructor.
+data DataFormatConversionConfiguration = DataFormatConversionConfiguration'
+  { _dfccOutputFormatConfiguration :: !(Maybe OutputFormatConfiguration)
+  , _dfccEnabled                   :: !(Maybe Bool)
+  , _dfccSchemaConfiguration       :: !(Maybe SchemaConfiguration)
+  , _dfccInputFormatConfiguration  :: !(Maybe InputFormatConfiguration)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DataFormatConversionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfccOutputFormatConfiguration' - Specifies the serializer that you want Kinesis Data Firehose to use to convert the format of your data to the Parquet or ORC format.
+--
+-- * 'dfccEnabled' - Defaults to @true@ . Set it to @false@ if you want to disable format conversion while preserving the configuration details.
+--
+-- * 'dfccSchemaConfiguration' - Specifies the AWS Glue Data Catalog table that contains the column information.
+--
+-- * 'dfccInputFormatConfiguration' - Specifies the deserializer that you want Kinesis Data Firehose to use to convert the format of your data from JSON.
+dataFormatConversionConfiguration
+    :: DataFormatConversionConfiguration
+dataFormatConversionConfiguration =
+  DataFormatConversionConfiguration'
+    { _dfccOutputFormatConfiguration = Nothing
+    , _dfccEnabled = Nothing
+    , _dfccSchemaConfiguration = Nothing
+    , _dfccInputFormatConfiguration = Nothing
+    }
+
+
+-- | Specifies the serializer that you want Kinesis Data Firehose to use to convert the format of your data to the Parquet or ORC format.
+dfccOutputFormatConfiguration :: Lens' DataFormatConversionConfiguration (Maybe OutputFormatConfiguration)
+dfccOutputFormatConfiguration = lens _dfccOutputFormatConfiguration (\ s a -> s{_dfccOutputFormatConfiguration = a})
+
+-- | Defaults to @true@ . Set it to @false@ if you want to disable format conversion while preserving the configuration details.
+dfccEnabled :: Lens' DataFormatConversionConfiguration (Maybe Bool)
+dfccEnabled = lens _dfccEnabled (\ s a -> s{_dfccEnabled = a})
+
+-- | Specifies the AWS Glue Data Catalog table that contains the column information.
+dfccSchemaConfiguration :: Lens' DataFormatConversionConfiguration (Maybe SchemaConfiguration)
+dfccSchemaConfiguration = lens _dfccSchemaConfiguration (\ s a -> s{_dfccSchemaConfiguration = a})
+
+-- | Specifies the deserializer that you want Kinesis Data Firehose to use to convert the format of your data from JSON.
+dfccInputFormatConfiguration :: Lens' DataFormatConversionConfiguration (Maybe InputFormatConfiguration)
+dfccInputFormatConfiguration = lens _dfccInputFormatConfiguration (\ s a -> s{_dfccInputFormatConfiguration = a})
+
+instance FromJSON DataFormatConversionConfiguration
+         where
+        parseJSON
+          = withObject "DataFormatConversionConfiguration"
+              (\ x ->
+                 DataFormatConversionConfiguration' <$>
+                   (x .:? "OutputFormatConfiguration") <*>
+                     (x .:? "Enabled")
+                     <*> (x .:? "SchemaConfiguration")
+                     <*> (x .:? "InputFormatConfiguration"))
+
+instance Hashable DataFormatConversionConfiguration
+         where
+
+instance NFData DataFormatConversionConfiguration
+         where
+
+instance ToJSON DataFormatConversionConfiguration
+         where
+        toJSON DataFormatConversionConfiguration'{..}
+          = object
+              (catMaybes
+                 [("OutputFormatConfiguration" .=) <$>
+                    _dfccOutputFormatConfiguration,
+                  ("Enabled" .=) <$> _dfccEnabled,
+                  ("SchemaConfiguration" .=) <$>
+                    _dfccSchemaConfiguration,
+                  ("InputFormatConfiguration" .=) <$>
+                    _dfccInputFormatConfiguration])
+
+-- | Contains information about a delivery stream.
+--
+--
+--
+-- /See:/ 'deliveryStreamDescription' smart constructor.
+data DeliveryStreamDescription = DeliveryStreamDescription'
+  { _dsdCreateTimestamp      :: !(Maybe POSIX)
+  , _dsdSource               :: !(Maybe SourceDescription)
+  , _dsdLastUpdateTimestamp  :: !(Maybe POSIX)
+  , _dsdDeliveryStreamName   :: !Text
+  , _dsdDeliveryStreamARN    :: !Text
+  , _dsdDeliveryStreamStatus :: !DeliveryStreamStatus
+  , _dsdDeliveryStreamType   :: !DeliveryStreamType
+  , _dsdVersionId            :: !Text
+  , _dsdDestinations         :: ![DestinationDescription]
+  , _dsdHasMoreDestinations  :: !Bool
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeliveryStreamDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsdCreateTimestamp' - The date and time that the delivery stream was created.
+--
+-- * 'dsdSource' - If the @DeliveryStreamType@ parameter is @KinesisStreamAsSource@ , a 'SourceDescription' object describing the source Kinesis data stream.
+--
+-- * 'dsdLastUpdateTimestamp' - The date and time that the delivery stream was last updated.
+--
+-- * 'dsdDeliveryStreamName' - The name of the delivery stream.
+--
+-- * 'dsdDeliveryStreamARN' - The Amazon Resource Name (ARN) of the delivery stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'dsdDeliveryStreamStatus' - The status of the delivery stream.
+--
+-- * 'dsdDeliveryStreamType' - The delivery stream type. This 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.
+--
+-- * 'dsdVersionId' - Each time the destination is updated for a delivery stream, the version ID is changed, and the current version ID is required when updating the destination. This is so that the service knows it is applying the changes to the correct version of the delivery stream.
+--
+-- * 'dsdDestinations' - The destinations.
+--
+-- * 'dsdHasMoreDestinations' - Indicates whether there are more destinations available to list.
+deliveryStreamDescription
+    :: Text -- ^ 'dsdDeliveryStreamName'
+    -> Text -- ^ 'dsdDeliveryStreamARN'
+    -> DeliveryStreamStatus -- ^ 'dsdDeliveryStreamStatus'
+    -> DeliveryStreamType -- ^ 'dsdDeliveryStreamType'
+    -> Text -- ^ 'dsdVersionId'
+    -> Bool -- ^ 'dsdHasMoreDestinations'
+    -> DeliveryStreamDescription
+deliveryStreamDescription pDeliveryStreamName_ pDeliveryStreamARN_ pDeliveryStreamStatus_ pDeliveryStreamType_ pVersionId_ pHasMoreDestinations_ =
+  DeliveryStreamDescription'
+    { _dsdCreateTimestamp = Nothing
+    , _dsdSource = Nothing
+    , _dsdLastUpdateTimestamp = Nothing
+    , _dsdDeliveryStreamName = pDeliveryStreamName_
+    , _dsdDeliveryStreamARN = pDeliveryStreamARN_
+    , _dsdDeliveryStreamStatus = pDeliveryStreamStatus_
+    , _dsdDeliveryStreamType = pDeliveryStreamType_
+    , _dsdVersionId = pVersionId_
+    , _dsdDestinations = mempty
+    , _dsdHasMoreDestinations = pHasMoreDestinations_
+    }
+
+
+-- | The date and time that the delivery stream was created.
+dsdCreateTimestamp :: Lens' DeliveryStreamDescription (Maybe UTCTime)
+dsdCreateTimestamp = lens _dsdCreateTimestamp (\ s a -> s{_dsdCreateTimestamp = a}) . mapping _Time
+
+-- | If the @DeliveryStreamType@ parameter is @KinesisStreamAsSource@ , a 'SourceDescription' object describing the source Kinesis data stream.
+dsdSource :: Lens' DeliveryStreamDescription (Maybe SourceDescription)
+dsdSource = lens _dsdSource (\ s a -> s{_dsdSource = a})
+
+-- | The date and time that the delivery stream was last updated.
+dsdLastUpdateTimestamp :: Lens' DeliveryStreamDescription (Maybe UTCTime)
+dsdLastUpdateTimestamp = lens _dsdLastUpdateTimestamp (\ s a -> s{_dsdLastUpdateTimestamp = a}) . mapping _Time
+
+-- | The name of the delivery stream.
+dsdDeliveryStreamName :: Lens' DeliveryStreamDescription Text
+dsdDeliveryStreamName = lens _dsdDeliveryStreamName (\ s a -> s{_dsdDeliveryStreamName = a})
+
+-- | The Amazon Resource Name (ARN) of the delivery stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+dsdDeliveryStreamARN :: Lens' DeliveryStreamDescription Text
+dsdDeliveryStreamARN = lens _dsdDeliveryStreamARN (\ s a -> s{_dsdDeliveryStreamARN = a})
+
+-- | The status of the delivery stream.
+dsdDeliveryStreamStatus :: Lens' DeliveryStreamDescription DeliveryStreamStatus
+dsdDeliveryStreamStatus = lens _dsdDeliveryStreamStatus (\ s a -> s{_dsdDeliveryStreamStatus = a})
+
+-- | The delivery stream type. This 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.
+dsdDeliveryStreamType :: Lens' DeliveryStreamDescription DeliveryStreamType
+dsdDeliveryStreamType = lens _dsdDeliveryStreamType (\ s a -> s{_dsdDeliveryStreamType = a})
+
+-- | Each time the destination is updated for a delivery stream, the version ID is changed, and the current version ID is required when updating the destination. This is so that the service knows it is applying the changes to the correct version of the delivery stream.
+dsdVersionId :: Lens' DeliveryStreamDescription Text
+dsdVersionId = lens _dsdVersionId (\ s a -> s{_dsdVersionId = a})
+
+-- | The destinations.
+dsdDestinations :: Lens' DeliveryStreamDescription [DestinationDescription]
+dsdDestinations = lens _dsdDestinations (\ s a -> s{_dsdDestinations = a}) . _Coerce
+
+-- | Indicates whether there are more destinations available to list.
+dsdHasMoreDestinations :: Lens' DeliveryStreamDescription Bool
+dsdHasMoreDestinations = lens _dsdHasMoreDestinations (\ s a -> s{_dsdHasMoreDestinations = a})
+
+instance FromJSON DeliveryStreamDescription where
+        parseJSON
+          = withObject "DeliveryStreamDescription"
+              (\ x ->
+                 DeliveryStreamDescription' <$>
+                   (x .:? "CreateTimestamp") <*> (x .:? "Source") <*>
+                     (x .:? "LastUpdateTimestamp")
+                     <*> (x .: "DeliveryStreamName")
+                     <*> (x .: "DeliveryStreamARN")
+                     <*> (x .: "DeliveryStreamStatus")
+                     <*> (x .: "DeliveryStreamType")
+                     <*> (x .: "VersionId")
+                     <*> (x .:? "Destinations" .!= mempty)
+                     <*> (x .: "HasMoreDestinations"))
+
+instance Hashable DeliveryStreamDescription where
+
+instance NFData DeliveryStreamDescription where
+
+-- | The deserializer you want Kinesis Data Firehose to use for converting the input data from JSON. Kinesis Data Firehose then serializes the data to its final format using the 'Serializer' . Kinesis Data Firehose supports two types of deserializers: the <https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON Apache Hive JSON SerDe> and the <https://github.com/rcongiu/Hive-JSON-Serde OpenX JSON SerDe> .
+--
+--
+--
+-- /See:/ 'deserializer' smart constructor.
+data Deserializer = Deserializer'
+  { _dOpenXJSONSerDe :: !(Maybe OpenXJSONSerDe)
+  , _dHiveJSONSerDe  :: !(Maybe HiveJSONSerDe)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Deserializer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dOpenXJSONSerDe' - The OpenX SerDe. Used by Kinesis Data Firehose for deserializing data, which means converting it from the JSON format in preparation for serializing it to the Parquet or ORC format. This is one of two deserializers you can choose, depending on which one offers the functionality you need. The other option is the native Hive / HCatalog JsonSerDe.
+--
+-- * 'dHiveJSONSerDe' - The native Hive / HCatalog JsonSerDe. Used by Kinesis Data Firehose for deserializing data, which means converting it from the JSON format in preparation for serializing it to the Parquet or ORC format. This is one of two deserializers you can choose, depending on which one offers the functionality you need. The other option is the OpenX SerDe.
+deserializer
+    :: Deserializer
+deserializer =
+  Deserializer' {_dOpenXJSONSerDe = Nothing, _dHiveJSONSerDe = Nothing}
+
+
+-- | The OpenX SerDe. Used by Kinesis Data Firehose for deserializing data, which means converting it from the JSON format in preparation for serializing it to the Parquet or ORC format. This is one of two deserializers you can choose, depending on which one offers the functionality you need. The other option is the native Hive / HCatalog JsonSerDe.
+dOpenXJSONSerDe :: Lens' Deserializer (Maybe OpenXJSONSerDe)
+dOpenXJSONSerDe = lens _dOpenXJSONSerDe (\ s a -> s{_dOpenXJSONSerDe = a})
+
+-- | The native Hive / HCatalog JsonSerDe. Used by Kinesis Data Firehose for deserializing data, which means converting it from the JSON format in preparation for serializing it to the Parquet or ORC format. This is one of two deserializers you can choose, depending on which one offers the functionality you need. The other option is the OpenX SerDe.
+dHiveJSONSerDe :: Lens' Deserializer (Maybe HiveJSONSerDe)
+dHiveJSONSerDe = lens _dHiveJSONSerDe (\ s a -> s{_dHiveJSONSerDe = a})
+
+instance FromJSON Deserializer where
+        parseJSON
+          = withObject "Deserializer"
+              (\ x ->
+                 Deserializer' <$>
+                   (x .:? "OpenXJsonSerDe") <*> (x .:? "HiveJsonSerDe"))
+
+instance Hashable Deserializer where
+
+instance NFData Deserializer where
+
+instance ToJSON Deserializer where
+        toJSON Deserializer'{..}
+          = object
+              (catMaybes
+                 [("OpenXJsonSerDe" .=) <$> _dOpenXJSONSerDe,
+                  ("HiveJsonSerDe" .=) <$> _dHiveJSONSerDe])
+
+-- | Describes the destination for a delivery stream.
+--
+--
+--
+-- /See:/ 'destinationDescription' smart constructor.
+data DestinationDescription = DestinationDescription'
+  { _ddSplunkDestinationDescription :: !(Maybe SplunkDestinationDescription)
+  , _ddS3DestinationDescription :: !(Maybe S3DestinationDescription)
+  , _ddExtendedS3DestinationDescription :: !(Maybe ExtendedS3DestinationDescription)
+  , _ddElasticsearchDestinationDescription :: !(Maybe ElasticsearchDestinationDescription)
+  , _ddRedshiftDestinationDescription :: !(Maybe RedshiftDestinationDescription)
+  , _ddDestinationId :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DestinationDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddSplunkDestinationDescription' - The destination in Splunk.
+--
+-- * 'ddS3DestinationDescription' - [Deprecated] The destination in Amazon S3.
+--
+-- * 'ddExtendedS3DestinationDescription' - The destination in Amazon S3.
+--
+-- * 'ddElasticsearchDestinationDescription' - The destination in Amazon ES.
+--
+-- * 'ddRedshiftDestinationDescription' - The destination in Amazon Redshift.
+--
+-- * 'ddDestinationId' - The ID of the destination.
+destinationDescription
+    :: Text -- ^ 'ddDestinationId'
+    -> DestinationDescription
+destinationDescription pDestinationId_ =
+  DestinationDescription'
+    { _ddSplunkDestinationDescription = Nothing
+    , _ddS3DestinationDescription = Nothing
+    , _ddExtendedS3DestinationDescription = Nothing
+    , _ddElasticsearchDestinationDescription = Nothing
+    , _ddRedshiftDestinationDescription = Nothing
+    , _ddDestinationId = pDestinationId_
+    }
+
+
+-- | The destination in Splunk.
+ddSplunkDestinationDescription :: Lens' DestinationDescription (Maybe SplunkDestinationDescription)
+ddSplunkDestinationDescription = lens _ddSplunkDestinationDescription (\ s a -> s{_ddSplunkDestinationDescription = a})
+
+-- | [Deprecated] The destination in Amazon S3.
+ddS3DestinationDescription :: Lens' DestinationDescription (Maybe S3DestinationDescription)
+ddS3DestinationDescription = lens _ddS3DestinationDescription (\ s a -> s{_ddS3DestinationDescription = a})
+
+-- | The destination in Amazon S3.
+ddExtendedS3DestinationDescription :: Lens' DestinationDescription (Maybe ExtendedS3DestinationDescription)
+ddExtendedS3DestinationDescription = lens _ddExtendedS3DestinationDescription (\ s a -> s{_ddExtendedS3DestinationDescription = a})
+
+-- | The destination in Amazon ES.
+ddElasticsearchDestinationDescription :: Lens' DestinationDescription (Maybe ElasticsearchDestinationDescription)
+ddElasticsearchDestinationDescription = lens _ddElasticsearchDestinationDescription (\ s a -> s{_ddElasticsearchDestinationDescription = a})
+
+-- | The destination in Amazon Redshift.
+ddRedshiftDestinationDescription :: Lens' DestinationDescription (Maybe RedshiftDestinationDescription)
+ddRedshiftDestinationDescription = lens _ddRedshiftDestinationDescription (\ s a -> s{_ddRedshiftDestinationDescription = a})
+
+-- | The ID of the destination.
+ddDestinationId :: Lens' DestinationDescription Text
+ddDestinationId = lens _ddDestinationId (\ s a -> s{_ddDestinationId = a})
+
+instance FromJSON DestinationDescription where
+        parseJSON
+          = withObject "DestinationDescription"
+              (\ x ->
+                 DestinationDescription' <$>
+                   (x .:? "SplunkDestinationDescription") <*>
+                     (x .:? "S3DestinationDescription")
+                     <*> (x .:? "ExtendedS3DestinationDescription")
+                     <*> (x .:? "ElasticsearchDestinationDescription")
+                     <*> (x .:? "RedshiftDestinationDescription")
+                     <*> (x .: "DestinationId"))
+
+instance Hashable DestinationDescription where
+
+instance NFData DestinationDescription where
+
+-- | Describes the buffering to perform before delivering data to the Amazon ES destination.
+--
+--
+--
+-- /See:/ 'elasticsearchBufferingHints' smart constructor.
+data ElasticsearchBufferingHints = ElasticsearchBufferingHints'
+  { _ebhSizeInMBs         :: !(Maybe Nat)
+  , _ebhIntervalInSeconds :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ElasticsearchBufferingHints' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ebhSizeInMBs' - Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5. We recommend setting this parameter to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.
+--
+-- * 'ebhIntervalInSeconds' - Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300 (5 minutes).
+elasticsearchBufferingHints
+    :: ElasticsearchBufferingHints
+elasticsearchBufferingHints =
+  ElasticsearchBufferingHints'
+    {_ebhSizeInMBs = Nothing, _ebhIntervalInSeconds = Nothing}
+
+
+-- | Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5. We recommend setting this parameter to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.
+ebhSizeInMBs :: Lens' ElasticsearchBufferingHints (Maybe Natural)
+ebhSizeInMBs = lens _ebhSizeInMBs (\ s a -> s{_ebhSizeInMBs = a}) . mapping _Nat
+
+-- | Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300 (5 minutes).
+ebhIntervalInSeconds :: Lens' ElasticsearchBufferingHints (Maybe Natural)
+ebhIntervalInSeconds = lens _ebhIntervalInSeconds (\ s a -> s{_ebhIntervalInSeconds = a}) . mapping _Nat
+
+instance FromJSON ElasticsearchBufferingHints where
+        parseJSON
+          = withObject "ElasticsearchBufferingHints"
+              (\ x ->
+                 ElasticsearchBufferingHints' <$>
+                   (x .:? "SizeInMBs") <*> (x .:? "IntervalInSeconds"))
+
+instance Hashable ElasticsearchBufferingHints where
+
+instance NFData ElasticsearchBufferingHints where
+
+instance ToJSON ElasticsearchBufferingHints where
+        toJSON ElasticsearchBufferingHints'{..}
+          = object
+              (catMaybes
+                 [("SizeInMBs" .=) <$> _ebhSizeInMBs,
+                  ("IntervalInSeconds" .=) <$> _ebhIntervalInSeconds])
+
+-- | Describes the configuration of a destination in Amazon ES.
+--
+--
+--
+-- /See:/ 'elasticsearchDestinationConfiguration' smart constructor.
+data ElasticsearchDestinationConfiguration = ElasticsearchDestinationConfiguration'
+  { _edcIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
+  , _edcS3BackupMode             :: !(Maybe ElasticsearchS3BackupMode)
+  , _edcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _edcBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
+  , _edcRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
+  , _edcProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
+  , _edcRoleARN                  :: !Text
+  , _edcDomainARN                :: !Text
+  , _edcIndexName                :: !Text
+  , _edcTypeName                 :: !Text
+  , _edcS3Configuration          :: !S3DestinationConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ElasticsearchDestinationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edcIndexRotationPeriod' - The Elasticsearch index rotation period. Index rotation appends a time stamp to the @IndexName@ to facilitate the expiration of old data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for the Amazon ES Destination> . The default value is @OneDay@ .
+--
+-- * 'edcS3BackupMode' - Defines how documents should be delivered to Amazon S3. When it is set to @FailedDocumentsOnly@ , Kinesis Data Firehose writes any documents that could not be indexed to the configured Amazon S3 destination, with @elasticsearch-failed/@ appended to the key prefix. When set to @AllDocuments@ , Kinesis Data Firehose delivers all incoming records to Amazon S3, and also writes failed documents with @elasticsearch-failed/@ appended to the prefix. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-s3-backup Amazon S3 Backup for the Amazon ES Destination> . Default value is @FailedDocumentsOnly@ .
+--
+-- * 'edcCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'edcBufferingHints' - The buffering options. If no value is specified, the default values for @ElasticsearchBufferingHints@ are used.
+--
+-- * 'edcRetryOptions' - The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).
+--
+-- * 'edcProcessingConfiguration' - The data processing configuration.
+--
+-- * 'edcRoleARN' - The Amazon Resource Name (ARN) of the IAM role to be assumed by Kinesis Data Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Grant Kinesis Data Firehose Access to an Amazon S3 Destination> and <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'edcDomainARN' - The ARN of the Amazon ES domain. The IAM role must have permissions for @DescribeElasticsearchDomain@ , @DescribeElasticsearchDomains@ , and @DescribeElasticsearchDomainConfig@ after assuming the role specified in __RoleARN__ . For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'edcIndexName' - The Elasticsearch index name.
+--
+-- * 'edcTypeName' - The Elasticsearch type name. For Elasticsearch 6.x, there can be only one type per index. If you try to specify a new type for an existing index that already has another type, Kinesis Data Firehose returns an error during run time.
+--
+-- * 'edcS3Configuration' - The configuration for the backup Amazon S3 location.
+elasticsearchDestinationConfiguration
+    :: Text -- ^ 'edcRoleARN'
+    -> Text -- ^ 'edcDomainARN'
+    -> Text -- ^ 'edcIndexName'
+    -> Text -- ^ 'edcTypeName'
+    -> S3DestinationConfiguration -- ^ 'edcS3Configuration'
+    -> ElasticsearchDestinationConfiguration
+elasticsearchDestinationConfiguration pRoleARN_ pDomainARN_ pIndexName_ pTypeName_ pS3Configuration_ =
+  ElasticsearchDestinationConfiguration'
+    { _edcIndexRotationPeriod = Nothing
+    , _edcS3BackupMode = Nothing
+    , _edcCloudWatchLoggingOptions = Nothing
+    , _edcBufferingHints = Nothing
+    , _edcRetryOptions = Nothing
+    , _edcProcessingConfiguration = Nothing
+    , _edcRoleARN = pRoleARN_
+    , _edcDomainARN = pDomainARN_
+    , _edcIndexName = pIndexName_
+    , _edcTypeName = pTypeName_
+    , _edcS3Configuration = pS3Configuration_
+    }
+
+
+-- | The Elasticsearch index rotation period. Index rotation appends a time stamp to the @IndexName@ to facilitate the expiration of old data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for the Amazon ES Destination> . The default value is @OneDay@ .
+edcIndexRotationPeriod :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchIndexRotationPeriod)
+edcIndexRotationPeriod = lens _edcIndexRotationPeriod (\ s a -> s{_edcIndexRotationPeriod = a})
+
+-- | Defines how documents should be delivered to Amazon S3. When it is set to @FailedDocumentsOnly@ , Kinesis Data Firehose writes any documents that could not be indexed to the configured Amazon S3 destination, with @elasticsearch-failed/@ appended to the key prefix. When set to @AllDocuments@ , Kinesis Data Firehose delivers all incoming records to Amazon S3, and also writes failed documents with @elasticsearch-failed/@ appended to the prefix. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-s3-backup Amazon S3 Backup for the Amazon ES Destination> . Default value is @FailedDocumentsOnly@ .
+edcS3BackupMode :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchS3BackupMode)
+edcS3BackupMode = lens _edcS3BackupMode (\ s a -> s{_edcS3BackupMode = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+edcCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationConfiguration (Maybe CloudWatchLoggingOptions)
+edcCloudWatchLoggingOptions = lens _edcCloudWatchLoggingOptions (\ s a -> s{_edcCloudWatchLoggingOptions = a})
+
+-- | The buffering options. If no value is specified, the default values for @ElasticsearchBufferingHints@ are used.
+edcBufferingHints :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchBufferingHints)
+edcBufferingHints = lens _edcBufferingHints (\ s a -> s{_edcBufferingHints = a})
+
+-- | The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).
+edcRetryOptions :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchRetryOptions)
+edcRetryOptions = lens _edcRetryOptions (\ s a -> s{_edcRetryOptions = a})
+
+-- | The data processing configuration.
+edcProcessingConfiguration :: Lens' ElasticsearchDestinationConfiguration (Maybe ProcessingConfiguration)
+edcProcessingConfiguration = lens _edcProcessingConfiguration (\ s a -> s{_edcProcessingConfiguration = a})
+
+-- | The Amazon Resource Name (ARN) of the IAM role to be assumed by Kinesis Data Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Grant Kinesis Data Firehose Access to an Amazon S3 Destination> and <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+edcRoleARN :: Lens' ElasticsearchDestinationConfiguration Text
+edcRoleARN = lens _edcRoleARN (\ s a -> s{_edcRoleARN = a})
+
+-- | The ARN of the Amazon ES domain. The IAM role must have permissions for @DescribeElasticsearchDomain@ , @DescribeElasticsearchDomains@ , and @DescribeElasticsearchDomainConfig@ after assuming the role specified in __RoleARN__ . For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+edcDomainARN :: Lens' ElasticsearchDestinationConfiguration Text
+edcDomainARN = lens _edcDomainARN (\ s a -> s{_edcDomainARN = a})
+
+-- | The Elasticsearch index name.
+edcIndexName :: Lens' ElasticsearchDestinationConfiguration Text
+edcIndexName = lens _edcIndexName (\ s a -> s{_edcIndexName = a})
+
+-- | The Elasticsearch type name. For Elasticsearch 6.x, there can be only one type per index. If you try to specify a new type for an existing index that already has another type, Kinesis Data Firehose returns an error during run time.
+edcTypeName :: Lens' ElasticsearchDestinationConfiguration Text
+edcTypeName = lens _edcTypeName (\ s a -> s{_edcTypeName = a})
+
+-- | The configuration for the backup Amazon S3 location.
+edcS3Configuration :: Lens' ElasticsearchDestinationConfiguration S3DestinationConfiguration
+edcS3Configuration = lens _edcS3Configuration (\ s a -> s{_edcS3Configuration = a})
+
+instance Hashable
+           ElasticsearchDestinationConfiguration
+         where
+
+instance NFData ElasticsearchDestinationConfiguration
+         where
+
+instance ToJSON ElasticsearchDestinationConfiguration
+         where
+        toJSON ElasticsearchDestinationConfiguration'{..}
+          = object
+              (catMaybes
+                 [("IndexRotationPeriod" .=) <$>
+                    _edcIndexRotationPeriod,
+                  ("S3BackupMode" .=) <$> _edcS3BackupMode,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _edcCloudWatchLoggingOptions,
+                  ("BufferingHints" .=) <$> _edcBufferingHints,
+                  ("RetryOptions" .=) <$> _edcRetryOptions,
+                  ("ProcessingConfiguration" .=) <$>
+                    _edcProcessingConfiguration,
+                  Just ("RoleARN" .= _edcRoleARN),
+                  Just ("DomainARN" .= _edcDomainARN),
+                  Just ("IndexName" .= _edcIndexName),
+                  Just ("TypeName" .= _edcTypeName),
+                  Just ("S3Configuration" .= _edcS3Configuration)])
+
+-- | The destination description in Amazon ES.
+--
+--
+--
+-- /See:/ 'elasticsearchDestinationDescription' smart constructor.
+data ElasticsearchDestinationDescription = ElasticsearchDestinationDescription'
+  { _eddIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
+  , _eddTypeName                 :: !(Maybe Text)
+  , _eddS3BackupMode             :: !(Maybe ElasticsearchS3BackupMode)
+  , _eddDomainARN                :: !(Maybe Text)
+  , _eddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _eddS3DestinationDescription :: !(Maybe S3DestinationDescription)
+  , _eddBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
+  , _eddRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
+  , _eddProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
+  , _eddRoleARN                  :: !(Maybe Text)
+  , _eddIndexName                :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ElasticsearchDestinationDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eddIndexRotationPeriod' - The Elasticsearch index rotation period
+--
+-- * 'eddTypeName' - The Elasticsearch type name.
+--
+-- * 'eddS3BackupMode' - The Amazon S3 backup mode.
+--
+-- * 'eddDomainARN' - The ARN of the Amazon ES domain. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'eddCloudWatchLoggingOptions' - The Amazon CloudWatch logging options.
+--
+-- * 'eddS3DestinationDescription' - The Amazon S3 destination.
+--
+-- * 'eddBufferingHints' - The buffering options.
+--
+-- * 'eddRetryOptions' - The Amazon ES retry options.
+--
+-- * 'eddProcessingConfiguration' - The data processing configuration.
+--
+-- * 'eddRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'eddIndexName' - The Elasticsearch index name.
+elasticsearchDestinationDescription
+    :: ElasticsearchDestinationDescription
+elasticsearchDestinationDescription =
+  ElasticsearchDestinationDescription'
+    { _eddIndexRotationPeriod = Nothing
+    , _eddTypeName = Nothing
+    , _eddS3BackupMode = Nothing
+    , _eddDomainARN = Nothing
+    , _eddCloudWatchLoggingOptions = Nothing
+    , _eddS3DestinationDescription = Nothing
+    , _eddBufferingHints = Nothing
+    , _eddRetryOptions = Nothing
+    , _eddProcessingConfiguration = Nothing
+    , _eddRoleARN = Nothing
+    , _eddIndexName = Nothing
+    }
+
+
+-- | The Elasticsearch index rotation period
+eddIndexRotationPeriod :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchIndexRotationPeriod)
+eddIndexRotationPeriod = lens _eddIndexRotationPeriod (\ s a -> s{_eddIndexRotationPeriod = a})
+
+-- | The Elasticsearch type name.
+eddTypeName :: Lens' ElasticsearchDestinationDescription (Maybe Text)
+eddTypeName = lens _eddTypeName (\ s a -> s{_eddTypeName = a})
+
+-- | The Amazon S3 backup mode.
+eddS3BackupMode :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchS3BackupMode)
+eddS3BackupMode = lens _eddS3BackupMode (\ s a -> s{_eddS3BackupMode = a})
+
+-- | The ARN of the Amazon ES domain. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+eddDomainARN :: Lens' ElasticsearchDestinationDescription (Maybe Text)
+eddDomainARN = lens _eddDomainARN (\ s a -> s{_eddDomainARN = a})
+
+-- | The Amazon CloudWatch logging options.
+eddCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationDescription (Maybe CloudWatchLoggingOptions)
+eddCloudWatchLoggingOptions = lens _eddCloudWatchLoggingOptions (\ s a -> s{_eddCloudWatchLoggingOptions = a})
+
+-- | The Amazon S3 destination.
+eddS3DestinationDescription :: Lens' ElasticsearchDestinationDescription (Maybe S3DestinationDescription)
+eddS3DestinationDescription = lens _eddS3DestinationDescription (\ s a -> s{_eddS3DestinationDescription = a})
+
+-- | The buffering options.
+eddBufferingHints :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchBufferingHints)
+eddBufferingHints = lens _eddBufferingHints (\ s a -> s{_eddBufferingHints = a})
+
+-- | The Amazon ES retry options.
+eddRetryOptions :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchRetryOptions)
+eddRetryOptions = lens _eddRetryOptions (\ s a -> s{_eddRetryOptions = a})
+
+-- | The data processing configuration.
+eddProcessingConfiguration :: Lens' ElasticsearchDestinationDescription (Maybe ProcessingConfiguration)
+eddProcessingConfiguration = lens _eddProcessingConfiguration (\ s a -> s{_eddProcessingConfiguration = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+eddRoleARN :: Lens' ElasticsearchDestinationDescription (Maybe Text)
+eddRoleARN = lens _eddRoleARN (\ s a -> s{_eddRoleARN = a})
+
+-- | The Elasticsearch index name.
+eddIndexName :: Lens' ElasticsearchDestinationDescription (Maybe Text)
+eddIndexName = lens _eddIndexName (\ s a -> s{_eddIndexName = a})
+
+instance FromJSON ElasticsearchDestinationDescription
+         where
+        parseJSON
+          = withObject "ElasticsearchDestinationDescription"
+              (\ x ->
+                 ElasticsearchDestinationDescription' <$>
+                   (x .:? "IndexRotationPeriod") <*> (x .:? "TypeName")
+                     <*> (x .:? "S3BackupMode")
+                     <*> (x .:? "DomainARN")
+                     <*> (x .:? "CloudWatchLoggingOptions")
+                     <*> (x .:? "S3DestinationDescription")
+                     <*> (x .:? "BufferingHints")
+                     <*> (x .:? "RetryOptions")
+                     <*> (x .:? "ProcessingConfiguration")
+                     <*> (x .:? "RoleARN")
+                     <*> (x .:? "IndexName"))
+
+instance Hashable ElasticsearchDestinationDescription
+         where
+
+instance NFData ElasticsearchDestinationDescription
+         where
+
+-- | Describes an update for a destination in Amazon ES.
+--
+--
+--
+-- /See:/ 'elasticsearchDestinationUpdate' smart constructor.
+data ElasticsearchDestinationUpdate = ElasticsearchDestinationUpdate'
+  { _eduIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
+  , _eduTypeName                 :: !(Maybe Text)
+  , _eduDomainARN                :: !(Maybe Text)
+  , _eduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _eduS3Update                 :: !(Maybe S3DestinationUpdate)
+  , _eduBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
+  , _eduRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
+  , _eduProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
+  , _eduRoleARN                  :: !(Maybe Text)
+  , _eduIndexName                :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ElasticsearchDestinationUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eduIndexRotationPeriod' - The Elasticsearch index rotation period. Index rotation appends a time stamp to @IndexName@ to facilitate the expiration of old data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for the Amazon ES Destination> . Default value is @OneDay@ .
+--
+-- * 'eduTypeName' - The Elasticsearch type name. For Elasticsearch 6.x, there can be only one type per index. If you try to specify a new type for an existing index that already has another type, Kinesis Data Firehose returns an error during runtime.
+--
+-- * 'eduDomainARN' - The ARN of the Amazon ES domain. The IAM role must have permissions for @DescribeElasticsearchDomain@ , @DescribeElasticsearchDomains@ , and @DescribeElasticsearchDomainConfig@ after assuming the IAM role specified in __RoleARN__ . For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'eduCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
+--
+-- * 'eduS3Update' - The Amazon S3 destination.
+--
+-- * 'eduBufferingHints' - The buffering options. If no value is specified, __ElasticsearchBufferingHints__ object default values are used.
+--
+-- * 'eduRetryOptions' - The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).
+--
+-- * 'eduProcessingConfiguration' - The data processing configuration.
+--
+-- * 'eduRoleARN' - The Amazon Resource Name (ARN) of the IAM role to be assumed by Kinesis Data Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Grant Kinesis Data Firehose Access to an Amazon S3 Destination> and <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'eduIndexName' - The Elasticsearch index name.
+elasticsearchDestinationUpdate
+    :: ElasticsearchDestinationUpdate
+elasticsearchDestinationUpdate =
+  ElasticsearchDestinationUpdate'
+    { _eduIndexRotationPeriod = Nothing
+    , _eduTypeName = Nothing
+    , _eduDomainARN = Nothing
+    , _eduCloudWatchLoggingOptions = Nothing
+    , _eduS3Update = Nothing
+    , _eduBufferingHints = Nothing
+    , _eduRetryOptions = Nothing
+    , _eduProcessingConfiguration = Nothing
+    , _eduRoleARN = Nothing
+    , _eduIndexName = Nothing
+    }
+
+
+-- | The Elasticsearch index rotation period. Index rotation appends a time stamp to @IndexName@ to facilitate the expiration of old data. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for the Amazon ES Destination> . Default value is @OneDay@ .
+eduIndexRotationPeriod :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchIndexRotationPeriod)
+eduIndexRotationPeriod = lens _eduIndexRotationPeriod (\ s a -> s{_eduIndexRotationPeriod = a})
+
+-- | The Elasticsearch type name. For Elasticsearch 6.x, there can be only one type per index. If you try to specify a new type for an existing index that already has another type, Kinesis Data Firehose returns an error during runtime.
+eduTypeName :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
+eduTypeName = lens _eduTypeName (\ s a -> s{_eduTypeName = a})
+
+-- | The ARN of the Amazon ES domain. The IAM role must have permissions for @DescribeElasticsearchDomain@ , @DescribeElasticsearchDomains@ , and @DescribeElasticsearchDomainConfig@ after assuming the IAM role specified in __RoleARN__ . For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+eduDomainARN :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
+eduDomainARN = lens _eduDomainARN (\ s a -> s{_eduDomainARN = a})
+
+-- | The CloudWatch logging options for your delivery stream.
+eduCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationUpdate (Maybe CloudWatchLoggingOptions)
+eduCloudWatchLoggingOptions = lens _eduCloudWatchLoggingOptions (\ s a -> s{_eduCloudWatchLoggingOptions = a})
+
+-- | The Amazon S3 destination.
+eduS3Update :: Lens' ElasticsearchDestinationUpdate (Maybe S3DestinationUpdate)
+eduS3Update = lens _eduS3Update (\ s a -> s{_eduS3Update = a})
+
+-- | The buffering options. If no value is specified, __ElasticsearchBufferingHints__ object default values are used.
+eduBufferingHints :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchBufferingHints)
+eduBufferingHints = lens _eduBufferingHints (\ s a -> s{_eduBufferingHints = a})
+
+-- | The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).
+eduRetryOptions :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchRetryOptions)
+eduRetryOptions = lens _eduRetryOptions (\ s a -> s{_eduRetryOptions = a})
+
+-- | The data processing configuration.
+eduProcessingConfiguration :: Lens' ElasticsearchDestinationUpdate (Maybe ProcessingConfiguration)
+eduProcessingConfiguration = lens _eduProcessingConfiguration (\ s a -> s{_eduProcessingConfiguration = a})
+
+-- | The Amazon Resource Name (ARN) of the IAM role to be assumed by Kinesis Data Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Grant Kinesis Data Firehose Access to an Amazon S3 Destination> and <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+eduRoleARN :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
+eduRoleARN = lens _eduRoleARN (\ s a -> s{_eduRoleARN = a})
+
+-- | The Elasticsearch index name.
+eduIndexName :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
+eduIndexName = lens _eduIndexName (\ s a -> s{_eduIndexName = a})
+
+instance Hashable ElasticsearchDestinationUpdate
+         where
+
+instance NFData ElasticsearchDestinationUpdate where
+
+instance ToJSON ElasticsearchDestinationUpdate where
+        toJSON ElasticsearchDestinationUpdate'{..}
+          = object
+              (catMaybes
+                 [("IndexRotationPeriod" .=) <$>
+                    _eduIndexRotationPeriod,
+                  ("TypeName" .=) <$> _eduTypeName,
+                  ("DomainARN" .=) <$> _eduDomainARN,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _eduCloudWatchLoggingOptions,
+                  ("S3Update" .=) <$> _eduS3Update,
+                  ("BufferingHints" .=) <$> _eduBufferingHints,
+                  ("RetryOptions" .=) <$> _eduRetryOptions,
+                  ("ProcessingConfiguration" .=) <$>
+                    _eduProcessingConfiguration,
+                  ("RoleARN" .=) <$> _eduRoleARN,
+                  ("IndexName" .=) <$> _eduIndexName])
+
+-- | Configures retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon ES.
+--
+--
+--
+-- /See:/ 'elasticsearchRetryOptions' smart constructor.
+newtype ElasticsearchRetryOptions = ElasticsearchRetryOptions'
+  { _eroDurationInSeconds :: Maybe Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ElasticsearchRetryOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eroDurationInSeconds' - After an initial failure to deliver to Amazon ES, the total amount of time during which Kinesis Data Firehose retries delivery (including the first attempt). After this time has elapsed, the failed documents are written to Amazon S3. Default value is 300 seconds (5 minutes). A value of 0 (zero) results in no retries.
+elasticsearchRetryOptions
+    :: ElasticsearchRetryOptions
+elasticsearchRetryOptions =
+  ElasticsearchRetryOptions' {_eroDurationInSeconds = Nothing}
+
+
+-- | After an initial failure to deliver to Amazon ES, the total amount of time during which Kinesis Data Firehose retries delivery (including the first attempt). After this time has elapsed, the failed documents are written to Amazon S3. Default value is 300 seconds (5 minutes). A value of 0 (zero) results in no retries.
+eroDurationInSeconds :: Lens' ElasticsearchRetryOptions (Maybe Natural)
+eroDurationInSeconds = lens _eroDurationInSeconds (\ s a -> s{_eroDurationInSeconds = a}) . mapping _Nat
+
+instance FromJSON ElasticsearchRetryOptions where
+        parseJSON
+          = withObject "ElasticsearchRetryOptions"
+              (\ x ->
+                 ElasticsearchRetryOptions' <$>
+                   (x .:? "DurationInSeconds"))
+
+instance Hashable ElasticsearchRetryOptions where
+
+instance NFData ElasticsearchRetryOptions where
+
+instance ToJSON ElasticsearchRetryOptions where
+        toJSON ElasticsearchRetryOptions'{..}
+          = object
+              (catMaybes
+                 [("DurationInSeconds" .=) <$> _eroDurationInSeconds])
+
+-- | Describes the encryption for a destination in Amazon S3.
+--
+--
+--
+-- /See:/ 'encryptionConfiguration' smart constructor.
+data EncryptionConfiguration = EncryptionConfiguration'
+  { _ecNoEncryptionConfig  :: !(Maybe NoEncryptionConfig)
+  , _ecKMSEncryptionConfig :: !(Maybe KMSEncryptionConfig)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EncryptionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecNoEncryptionConfig' - Specifically override existing encryption information to ensure that no encryption is used.
+--
+-- * 'ecKMSEncryptionConfig' - The encryption key.
+encryptionConfiguration
+    :: EncryptionConfiguration
+encryptionConfiguration =
+  EncryptionConfiguration'
+    {_ecNoEncryptionConfig = Nothing, _ecKMSEncryptionConfig = Nothing}
+
+
+-- | Specifically override existing encryption information to ensure that no encryption is used.
+ecNoEncryptionConfig :: Lens' EncryptionConfiguration (Maybe NoEncryptionConfig)
+ecNoEncryptionConfig = lens _ecNoEncryptionConfig (\ s a -> s{_ecNoEncryptionConfig = a})
+
+-- | The encryption key.
+ecKMSEncryptionConfig :: Lens' EncryptionConfiguration (Maybe KMSEncryptionConfig)
+ecKMSEncryptionConfig = lens _ecKMSEncryptionConfig (\ s a -> s{_ecKMSEncryptionConfig = a})
+
+instance FromJSON EncryptionConfiguration where
+        parseJSON
+          = withObject "EncryptionConfiguration"
+              (\ x ->
+                 EncryptionConfiguration' <$>
+                   (x .:? "NoEncryptionConfig") <*>
+                     (x .:? "KMSEncryptionConfig"))
+
+instance Hashable EncryptionConfiguration where
+
+instance NFData EncryptionConfiguration where
+
+instance ToJSON EncryptionConfiguration where
+        toJSON EncryptionConfiguration'{..}
+          = object
+              (catMaybes
+                 [("NoEncryptionConfig" .=) <$> _ecNoEncryptionConfig,
+                  ("KMSEncryptionConfig" .=) <$>
+                    _ecKMSEncryptionConfig])
+
+-- | Describes the configuration of a destination in Amazon S3.
+--
+--
+--
+-- /See:/ 'extendedS3DestinationConfiguration' smart constructor.
+data ExtendedS3DestinationConfiguration = ExtendedS3DestinationConfiguration'
+  { _esdcS3BackupMode :: !(Maybe S3BackupMode)
+  , _esdcPrefix :: !(Maybe Text)
+  , _esdcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _esdcS3BackupConfiguration :: !(Maybe S3DestinationConfiguration)
+  , _esdcEncryptionConfiguration :: !(Maybe EncryptionConfiguration)
+  , _esdcCompressionFormat :: !(Maybe CompressionFormat)
+  , _esdcBufferingHints :: !(Maybe BufferingHints)
+  , _esdcDataFormatConversionConfiguration :: !(Maybe DataFormatConversionConfiguration)
+  , _esdcProcessingConfiguration :: !(Maybe ProcessingConfiguration)
+  , _esdcRoleARN :: !Text
+  , _esdcBucketARN :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ExtendedS3DestinationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'esdcS3BackupMode' - The Amazon S3 backup mode.
+--
+-- * 'esdcPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+--
+-- * 'esdcCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'esdcS3BackupConfiguration' - The configuration for backup in Amazon S3.
+--
+-- * 'esdcEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
+--
+-- * 'esdcCompressionFormat' - The compression format. If no value is specified, the default is UNCOMPRESSED.
+--
+-- * 'esdcBufferingHints' - The buffering option.
+--
+-- * 'esdcDataFormatConversionConfiguration' - The serializer, deserializer, and schema for converting data from the JSON format to the Parquet or ORC format before writing it to Amazon S3.
+--
+-- * 'esdcProcessingConfiguration' - The data processing configuration.
+--
+-- * 'esdcRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'esdcBucketARN' - The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+extendedS3DestinationConfiguration
+    :: Text -- ^ 'esdcRoleARN'
+    -> Text -- ^ 'esdcBucketARN'
+    -> ExtendedS3DestinationConfiguration
+extendedS3DestinationConfiguration pRoleARN_ pBucketARN_ =
+  ExtendedS3DestinationConfiguration'
+    { _esdcS3BackupMode = Nothing
+    , _esdcPrefix = Nothing
+    , _esdcCloudWatchLoggingOptions = Nothing
+    , _esdcS3BackupConfiguration = Nothing
+    , _esdcEncryptionConfiguration = Nothing
+    , _esdcCompressionFormat = Nothing
+    , _esdcBufferingHints = Nothing
+    , _esdcDataFormatConversionConfiguration = Nothing
+    , _esdcProcessingConfiguration = Nothing
+    , _esdcRoleARN = pRoleARN_
+    , _esdcBucketARN = pBucketARN_
+    }
+
+
+-- | The Amazon S3 backup mode.
+esdcS3BackupMode :: Lens' ExtendedS3DestinationConfiguration (Maybe S3BackupMode)
+esdcS3BackupMode = lens _esdcS3BackupMode (\ s a -> s{_esdcS3BackupMode = a})
+
+-- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+esdcPrefix :: Lens' ExtendedS3DestinationConfiguration (Maybe Text)
+esdcPrefix = lens _esdcPrefix (\ s a -> s{_esdcPrefix = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+esdcCloudWatchLoggingOptions :: Lens' ExtendedS3DestinationConfiguration (Maybe CloudWatchLoggingOptions)
+esdcCloudWatchLoggingOptions = lens _esdcCloudWatchLoggingOptions (\ s a -> s{_esdcCloudWatchLoggingOptions = a})
+
+-- | The configuration for backup in Amazon S3.
+esdcS3BackupConfiguration :: Lens' ExtendedS3DestinationConfiguration (Maybe S3DestinationConfiguration)
+esdcS3BackupConfiguration = lens _esdcS3BackupConfiguration (\ s a -> s{_esdcS3BackupConfiguration = a})
+
+-- | The encryption configuration. If no value is specified, the default is no encryption.
+esdcEncryptionConfiguration :: Lens' ExtendedS3DestinationConfiguration (Maybe EncryptionConfiguration)
+esdcEncryptionConfiguration = lens _esdcEncryptionConfiguration (\ s a -> s{_esdcEncryptionConfiguration = a})
+
+-- | The compression format. If no value is specified, the default is UNCOMPRESSED.
+esdcCompressionFormat :: Lens' ExtendedS3DestinationConfiguration (Maybe CompressionFormat)
+esdcCompressionFormat = lens _esdcCompressionFormat (\ s a -> s{_esdcCompressionFormat = a})
+
+-- | The buffering option.
+esdcBufferingHints :: Lens' ExtendedS3DestinationConfiguration (Maybe BufferingHints)
+esdcBufferingHints = lens _esdcBufferingHints (\ s a -> s{_esdcBufferingHints = a})
+
+-- | The serializer, deserializer, and schema for converting data from the JSON format to the Parquet or ORC format before writing it to Amazon S3.
+esdcDataFormatConversionConfiguration :: Lens' ExtendedS3DestinationConfiguration (Maybe DataFormatConversionConfiguration)
+esdcDataFormatConversionConfiguration = lens _esdcDataFormatConversionConfiguration (\ s a -> s{_esdcDataFormatConversionConfiguration = a})
+
+-- | The data processing configuration.
+esdcProcessingConfiguration :: Lens' ExtendedS3DestinationConfiguration (Maybe ProcessingConfiguration)
+esdcProcessingConfiguration = lens _esdcProcessingConfiguration (\ s a -> s{_esdcProcessingConfiguration = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+esdcRoleARN :: Lens' ExtendedS3DestinationConfiguration Text
+esdcRoleARN = lens _esdcRoleARN (\ s a -> s{_esdcRoleARN = a})
+
+-- | The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+esdcBucketARN :: Lens' ExtendedS3DestinationConfiguration Text
+esdcBucketARN = lens _esdcBucketARN (\ s a -> s{_esdcBucketARN = a})
+
+instance Hashable ExtendedS3DestinationConfiguration
+         where
+
+instance NFData ExtendedS3DestinationConfiguration
+         where
+
+instance ToJSON ExtendedS3DestinationConfiguration
+         where
+        toJSON ExtendedS3DestinationConfiguration'{..}
+          = object
+              (catMaybes
+                 [("S3BackupMode" .=) <$> _esdcS3BackupMode,
+                  ("Prefix" .=) <$> _esdcPrefix,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _esdcCloudWatchLoggingOptions,
+                  ("S3BackupConfiguration" .=) <$>
+                    _esdcS3BackupConfiguration,
+                  ("EncryptionConfiguration" .=) <$>
+                    _esdcEncryptionConfiguration,
+                  ("CompressionFormat" .=) <$> _esdcCompressionFormat,
+                  ("BufferingHints" .=) <$> _esdcBufferingHints,
+                  ("DataFormatConversionConfiguration" .=) <$>
+                    _esdcDataFormatConversionConfiguration,
+                  ("ProcessingConfiguration" .=) <$>
+                    _esdcProcessingConfiguration,
+                  Just ("RoleARN" .= _esdcRoleARN),
+                  Just ("BucketARN" .= _esdcBucketARN)])
+
+-- | Describes a destination in Amazon S3.
+--
+--
+--
+-- /See:/ 'extendedS3DestinationDescription' smart constructor.
+data ExtendedS3DestinationDescription = ExtendedS3DestinationDescription'
+  { _esddS3BackupMode :: !(Maybe S3BackupMode)
+  , _esddS3BackupDescription :: !(Maybe S3DestinationDescription)
+  , _esddPrefix :: !(Maybe Text)
+  , _esddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _esddDataFormatConversionConfiguration :: !(Maybe DataFormatConversionConfiguration)
+  , _esddProcessingConfiguration :: !(Maybe ProcessingConfiguration)
+  , _esddRoleARN :: !Text
+  , _esddBucketARN :: !Text
+  , _esddBufferingHints :: !BufferingHints
+  , _esddCompressionFormat :: !CompressionFormat
+  , _esddEncryptionConfiguration :: !EncryptionConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ExtendedS3DestinationDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'esddS3BackupMode' - The Amazon S3 backup mode.
+--
+-- * 'esddS3BackupDescription' - The configuration for backup in Amazon S3.
+--
+-- * 'esddPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+--
+-- * 'esddCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'esddDataFormatConversionConfiguration' - The serializer, deserializer, and schema for converting data from the JSON format to the Parquet or ORC format before writing it to Amazon S3.
+--
+-- * 'esddProcessingConfiguration' - The data processing configuration.
+--
+-- * 'esddRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'esddBucketARN' - The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'esddBufferingHints' - The buffering option.
+--
+-- * 'esddCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
+--
+-- * 'esddEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
+extendedS3DestinationDescription
+    :: Text -- ^ 'esddRoleARN'
+    -> Text -- ^ 'esddBucketARN'
+    -> BufferingHints -- ^ 'esddBufferingHints'
+    -> CompressionFormat -- ^ 'esddCompressionFormat'
+    -> EncryptionConfiguration -- ^ 'esddEncryptionConfiguration'
+    -> ExtendedS3DestinationDescription
+extendedS3DestinationDescription pRoleARN_ pBucketARN_ pBufferingHints_ pCompressionFormat_ pEncryptionConfiguration_ =
+  ExtendedS3DestinationDescription'
+    { _esddS3BackupMode = Nothing
+    , _esddS3BackupDescription = Nothing
+    , _esddPrefix = Nothing
+    , _esddCloudWatchLoggingOptions = Nothing
+    , _esddDataFormatConversionConfiguration = Nothing
+    , _esddProcessingConfiguration = Nothing
+    , _esddRoleARN = pRoleARN_
+    , _esddBucketARN = pBucketARN_
+    , _esddBufferingHints = pBufferingHints_
+    , _esddCompressionFormat = pCompressionFormat_
+    , _esddEncryptionConfiguration = pEncryptionConfiguration_
+    }
+
+
+-- | The Amazon S3 backup mode.
+esddS3BackupMode :: Lens' ExtendedS3DestinationDescription (Maybe S3BackupMode)
+esddS3BackupMode = lens _esddS3BackupMode (\ s a -> s{_esddS3BackupMode = a})
+
+-- | The configuration for backup in Amazon S3.
+esddS3BackupDescription :: Lens' ExtendedS3DestinationDescription (Maybe S3DestinationDescription)
+esddS3BackupDescription = lens _esddS3BackupDescription (\ s a -> s{_esddS3BackupDescription = a})
+
+-- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+esddPrefix :: Lens' ExtendedS3DestinationDescription (Maybe Text)
+esddPrefix = lens _esddPrefix (\ s a -> s{_esddPrefix = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+esddCloudWatchLoggingOptions :: Lens' ExtendedS3DestinationDescription (Maybe CloudWatchLoggingOptions)
+esddCloudWatchLoggingOptions = lens _esddCloudWatchLoggingOptions (\ s a -> s{_esddCloudWatchLoggingOptions = a})
+
+-- | The serializer, deserializer, and schema for converting data from the JSON format to the Parquet or ORC format before writing it to Amazon S3.
+esddDataFormatConversionConfiguration :: Lens' ExtendedS3DestinationDescription (Maybe DataFormatConversionConfiguration)
+esddDataFormatConversionConfiguration = lens _esddDataFormatConversionConfiguration (\ s a -> s{_esddDataFormatConversionConfiguration = a})
+
+-- | The data processing configuration.
+esddProcessingConfiguration :: Lens' ExtendedS3DestinationDescription (Maybe ProcessingConfiguration)
+esddProcessingConfiguration = lens _esddProcessingConfiguration (\ s a -> s{_esddProcessingConfiguration = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+esddRoleARN :: Lens' ExtendedS3DestinationDescription Text
+esddRoleARN = lens _esddRoleARN (\ s a -> s{_esddRoleARN = a})
+
+-- | The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+esddBucketARN :: Lens' ExtendedS3DestinationDescription Text
+esddBucketARN = lens _esddBucketARN (\ s a -> s{_esddBucketARN = a})
+
+-- | The buffering option.
+esddBufferingHints :: Lens' ExtendedS3DestinationDescription BufferingHints
+esddBufferingHints = lens _esddBufferingHints (\ s a -> s{_esddBufferingHints = a})
+
+-- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
+esddCompressionFormat :: Lens' ExtendedS3DestinationDescription CompressionFormat
+esddCompressionFormat = lens _esddCompressionFormat (\ s a -> s{_esddCompressionFormat = a})
+
+-- | The encryption configuration. If no value is specified, the default is no encryption.
+esddEncryptionConfiguration :: Lens' ExtendedS3DestinationDescription EncryptionConfiguration
+esddEncryptionConfiguration = lens _esddEncryptionConfiguration (\ s a -> s{_esddEncryptionConfiguration = a})
+
+instance FromJSON ExtendedS3DestinationDescription
+         where
+        parseJSON
+          = withObject "ExtendedS3DestinationDescription"
+              (\ x ->
+                 ExtendedS3DestinationDescription' <$>
+                   (x .:? "S3BackupMode") <*>
+                     (x .:? "S3BackupDescription")
+                     <*> (x .:? "Prefix")
+                     <*> (x .:? "CloudWatchLoggingOptions")
+                     <*> (x .:? "DataFormatConversionConfiguration")
+                     <*> (x .:? "ProcessingConfiguration")
+                     <*> (x .: "RoleARN")
+                     <*> (x .: "BucketARN")
+                     <*> (x .: "BufferingHints")
+                     <*> (x .: "CompressionFormat")
+                     <*> (x .: "EncryptionConfiguration"))
+
+instance Hashable ExtendedS3DestinationDescription
+         where
+
+instance NFData ExtendedS3DestinationDescription
+         where
+
+-- | Describes an update for a destination in Amazon S3.
+--
+--
+--
+-- /See:/ 'extendedS3DestinationUpdate' smart constructor.
+data ExtendedS3DestinationUpdate = ExtendedS3DestinationUpdate'
+  { _esduS3BackupMode :: !(Maybe S3BackupMode)
+  , _esduPrefix :: !(Maybe Text)
+  , _esduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _esduS3BackupUpdate :: !(Maybe S3DestinationUpdate)
+  , _esduEncryptionConfiguration :: !(Maybe EncryptionConfiguration)
+  , _esduCompressionFormat :: !(Maybe CompressionFormat)
+  , _esduBufferingHints :: !(Maybe BufferingHints)
+  , _esduDataFormatConversionConfiguration :: !(Maybe DataFormatConversionConfiguration)
+  , _esduBucketARN :: !(Maybe Text)
+  , _esduProcessingConfiguration :: !(Maybe ProcessingConfiguration)
+  , _esduRoleARN :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ExtendedS3DestinationUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'esduS3BackupMode' - Enables or disables Amazon S3 backup mode.
+--
+-- * 'esduPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+--
+-- * 'esduCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'esduS3BackupUpdate' - The Amazon S3 destination for backup.
+--
+-- * 'esduEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
+--
+-- * 'esduCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
+--
+-- * 'esduBufferingHints' - The buffering option.
+--
+-- * 'esduDataFormatConversionConfiguration' - The serializer, deserializer, and schema for converting data from the JSON format to the Parquet or ORC format before writing it to Amazon S3.
+--
+-- * 'esduBucketARN' - The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'esduProcessingConfiguration' - The data processing configuration.
+--
+-- * 'esduRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+extendedS3DestinationUpdate
+    :: ExtendedS3DestinationUpdate
+extendedS3DestinationUpdate =
+  ExtendedS3DestinationUpdate'
+    { _esduS3BackupMode = Nothing
+    , _esduPrefix = Nothing
+    , _esduCloudWatchLoggingOptions = Nothing
+    , _esduS3BackupUpdate = Nothing
+    , _esduEncryptionConfiguration = Nothing
+    , _esduCompressionFormat = Nothing
+    , _esduBufferingHints = Nothing
+    , _esduDataFormatConversionConfiguration = Nothing
+    , _esduBucketARN = Nothing
+    , _esduProcessingConfiguration = Nothing
+    , _esduRoleARN = Nothing
+    }
+
+
+-- | Enables or disables Amazon S3 backup mode.
+esduS3BackupMode :: Lens' ExtendedS3DestinationUpdate (Maybe S3BackupMode)
+esduS3BackupMode = lens _esduS3BackupMode (\ s a -> s{_esduS3BackupMode = a})
+
+-- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+esduPrefix :: Lens' ExtendedS3DestinationUpdate (Maybe Text)
+esduPrefix = lens _esduPrefix (\ s a -> s{_esduPrefix = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+esduCloudWatchLoggingOptions :: Lens' ExtendedS3DestinationUpdate (Maybe CloudWatchLoggingOptions)
+esduCloudWatchLoggingOptions = lens _esduCloudWatchLoggingOptions (\ s a -> s{_esduCloudWatchLoggingOptions = a})
+
+-- | The Amazon S3 destination for backup.
+esduS3BackupUpdate :: Lens' ExtendedS3DestinationUpdate (Maybe S3DestinationUpdate)
+esduS3BackupUpdate = lens _esduS3BackupUpdate (\ s a -> s{_esduS3BackupUpdate = a})
+
+-- | The encryption configuration. If no value is specified, the default is no encryption.
+esduEncryptionConfiguration :: Lens' ExtendedS3DestinationUpdate (Maybe EncryptionConfiguration)
+esduEncryptionConfiguration = lens _esduEncryptionConfiguration (\ s a -> s{_esduEncryptionConfiguration = a})
+
+-- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
+esduCompressionFormat :: Lens' ExtendedS3DestinationUpdate (Maybe CompressionFormat)
+esduCompressionFormat = lens _esduCompressionFormat (\ s a -> s{_esduCompressionFormat = a})
+
+-- | The buffering option.
+esduBufferingHints :: Lens' ExtendedS3DestinationUpdate (Maybe BufferingHints)
+esduBufferingHints = lens _esduBufferingHints (\ s a -> s{_esduBufferingHints = a})
+
+-- | The serializer, deserializer, and schema for converting data from the JSON format to the Parquet or ORC format before writing it to Amazon S3.
+esduDataFormatConversionConfiguration :: Lens' ExtendedS3DestinationUpdate (Maybe DataFormatConversionConfiguration)
+esduDataFormatConversionConfiguration = lens _esduDataFormatConversionConfiguration (\ s a -> s{_esduDataFormatConversionConfiguration = a})
+
+-- | The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+esduBucketARN :: Lens' ExtendedS3DestinationUpdate (Maybe Text)
+esduBucketARN = lens _esduBucketARN (\ s a -> s{_esduBucketARN = a})
+
+-- | The data processing configuration.
+esduProcessingConfiguration :: Lens' ExtendedS3DestinationUpdate (Maybe ProcessingConfiguration)
+esduProcessingConfiguration = lens _esduProcessingConfiguration (\ s a -> s{_esduProcessingConfiguration = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+esduRoleARN :: Lens' ExtendedS3DestinationUpdate (Maybe Text)
+esduRoleARN = lens _esduRoleARN (\ s a -> s{_esduRoleARN = a})
+
+instance Hashable ExtendedS3DestinationUpdate where
+
+instance NFData ExtendedS3DestinationUpdate where
+
+instance ToJSON ExtendedS3DestinationUpdate where
+        toJSON ExtendedS3DestinationUpdate'{..}
+          = object
+              (catMaybes
+                 [("S3BackupMode" .=) <$> _esduS3BackupMode,
+                  ("Prefix" .=) <$> _esduPrefix,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _esduCloudWatchLoggingOptions,
+                  ("S3BackupUpdate" .=) <$> _esduS3BackupUpdate,
+                  ("EncryptionConfiguration" .=) <$>
+                    _esduEncryptionConfiguration,
+                  ("CompressionFormat" .=) <$> _esduCompressionFormat,
+                  ("BufferingHints" .=) <$> _esduBufferingHints,
+                  ("DataFormatConversionConfiguration" .=) <$>
+                    _esduDataFormatConversionConfiguration,
+                  ("BucketARN" .=) <$> _esduBucketARN,
+                  ("ProcessingConfiguration" .=) <$>
+                    _esduProcessingConfiguration,
+                  ("RoleARN" .=) <$> _esduRoleARN])
+
+-- | The native Hive / HCatalog JsonSerDe. Used by Kinesis Data Firehose for deserializing data, which means converting it from the JSON format in preparation for serializing it to the Parquet or ORC format. This is one of two deserializers you can choose, depending on which one offers the functionality you need. The other option is the OpenX SerDe.
+--
+--
+--
+-- /See:/ 'hiveJSONSerDe' smart constructor.
+newtype HiveJSONSerDe = HiveJSONSerDe'
+  { _hjsdTimestampFormats :: Maybe [Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'HiveJSONSerDe' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hjsdTimestampFormats' - Indicates how you want Kinesis Data Firehose to parse the date and time stamps that may be present in your input data JSON. To specify these format strings, follow the pattern syntax of JodaTime's DateTimeFormat format strings. For more information, see <https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html Class DateTimeFormat> . You can also use the special value @millis@ to parse time stamps in epoch milliseconds. If you don't specify a format, Kinesis Data Firehose uses @java.sql.Timestamp::valueOf@ by default.
+hiveJSONSerDe
+    :: HiveJSONSerDe
+hiveJSONSerDe = HiveJSONSerDe' {_hjsdTimestampFormats = Nothing}
+
+
+-- | Indicates how you want Kinesis Data Firehose to parse the date and time stamps that may be present in your input data JSON. To specify these format strings, follow the pattern syntax of JodaTime's DateTimeFormat format strings. For more information, see <https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html Class DateTimeFormat> . You can also use the special value @millis@ to parse time stamps in epoch milliseconds. If you don't specify a format, Kinesis Data Firehose uses @java.sql.Timestamp::valueOf@ by default.
+hjsdTimestampFormats :: Lens' HiveJSONSerDe [Text]
+hjsdTimestampFormats = lens _hjsdTimestampFormats (\ s a -> s{_hjsdTimestampFormats = a}) . _Default . _Coerce
+
+instance FromJSON HiveJSONSerDe where
+        parseJSON
+          = withObject "HiveJSONSerDe"
+              (\ x ->
+                 HiveJSONSerDe' <$>
+                   (x .:? "TimestampFormats" .!= mempty))
+
+instance Hashable HiveJSONSerDe where
+
+instance NFData HiveJSONSerDe where
+
+instance ToJSON HiveJSONSerDe where
+        toJSON HiveJSONSerDe'{..}
+          = object
+              (catMaybes
+                 [("TimestampFormats" .=) <$> _hjsdTimestampFormats])
+
+-- | Specifies the deserializer you want to use to convert the format of the input data.
+--
+--
+--
+-- /See:/ 'inputFormatConfiguration' smart constructor.
+newtype InputFormatConfiguration = InputFormatConfiguration'
+  { _ifcDeserializer :: Maybe Deserializer
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InputFormatConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ifcDeserializer' - Specifies which deserializer to use. You can choose either the Apache Hive JSON SerDe or the OpenX JSON SerDe. If both are non-null, the server rejects the request.
+inputFormatConfiguration
+    :: InputFormatConfiguration
+inputFormatConfiguration =
+  InputFormatConfiguration' {_ifcDeserializer = Nothing}
+
+
+-- | Specifies which deserializer to use. You can choose either the Apache Hive JSON SerDe or the OpenX JSON SerDe. If both are non-null, the server rejects the request.
+ifcDeserializer :: Lens' InputFormatConfiguration (Maybe Deserializer)
+ifcDeserializer = lens _ifcDeserializer (\ s a -> s{_ifcDeserializer = a})
+
+instance FromJSON InputFormatConfiguration where
+        parseJSON
+          = withObject "InputFormatConfiguration"
+              (\ x ->
+                 InputFormatConfiguration' <$> (x .:? "Deserializer"))
+
+instance Hashable InputFormatConfiguration where
+
+instance NFData InputFormatConfiguration where
+
+instance ToJSON InputFormatConfiguration where
+        toJSON InputFormatConfiguration'{..}
+          = object
+              (catMaybes
+                 [("Deserializer" .=) <$> _ifcDeserializer])
+
+-- | Describes an encryption key for a destination in Amazon S3.
+--
+--
+--
+-- /See:/ 'kmsEncryptionConfig' smart constructor.
+newtype KMSEncryptionConfig = KMSEncryptionConfig'
+  { _kecAWSKMSKeyARN :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'KMSEncryptionConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kecAWSKMSKeyARN' - The Amazon Resource Name (ARN) of the encryption key. Must belong to the same AWS Region as the destination Amazon S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+kmsEncryptionConfig
+    :: Text -- ^ 'kecAWSKMSKeyARN'
+    -> KMSEncryptionConfig
+kmsEncryptionConfig pAWSKMSKeyARN_ =
+  KMSEncryptionConfig' {_kecAWSKMSKeyARN = pAWSKMSKeyARN_}
+
+
+-- | The Amazon Resource Name (ARN) of the encryption key. Must belong to the same AWS Region as the destination Amazon S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+kecAWSKMSKeyARN :: Lens' KMSEncryptionConfig Text
+kecAWSKMSKeyARN = lens _kecAWSKMSKeyARN (\ s a -> s{_kecAWSKMSKeyARN = a})
+
+instance FromJSON KMSEncryptionConfig where
+        parseJSON
+          = withObject "KMSEncryptionConfig"
+              (\ x ->
+                 KMSEncryptionConfig' <$> (x .: "AWSKMSKeyARN"))
+
+instance Hashable KMSEncryptionConfig where
+
+instance NFData KMSEncryptionConfig where
+
+instance ToJSON KMSEncryptionConfig where
+        toJSON KMSEncryptionConfig'{..}
+          = object
+              (catMaybes
+                 [Just ("AWSKMSKeyARN" .= _kecAWSKMSKeyARN)])
+
+-- | The stream and role Amazon Resource Names (ARNs) for a Kinesis data stream used as the source for a delivery stream.
+--
+--
+--
+-- /See:/ 'kinesisStreamSourceConfiguration' smart constructor.
+data KinesisStreamSourceConfiguration = KinesisStreamSourceConfiguration'
+  { _ksscKinesisStreamARN :: !Text
+  , _ksscRoleARN          :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'KinesisStreamSourceConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ksscKinesisStreamARN' - The ARN of the source Kinesis data stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kinesis-streams Amazon Kinesis Data Streams ARN Format> .
+--
+-- * 'ksscRoleARN' - The ARN of the role that provides access to the source Kinesis data stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam AWS Identity and Access Management (IAM) ARN Format> .
+kinesisStreamSourceConfiguration
+    :: Text -- ^ 'ksscKinesisStreamARN'
+    -> Text -- ^ 'ksscRoleARN'
+    -> KinesisStreamSourceConfiguration
+kinesisStreamSourceConfiguration pKinesisStreamARN_ pRoleARN_ =
+  KinesisStreamSourceConfiguration'
+    {_ksscKinesisStreamARN = pKinesisStreamARN_, _ksscRoleARN = pRoleARN_}
+
+
+-- | The ARN of the source Kinesis data stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kinesis-streams Amazon Kinesis Data Streams ARN Format> .
+ksscKinesisStreamARN :: Lens' KinesisStreamSourceConfiguration Text
+ksscKinesisStreamARN = lens _ksscKinesisStreamARN (\ s a -> s{_ksscKinesisStreamARN = a})
+
+-- | The ARN of the role that provides access to the source Kinesis data stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam AWS Identity and Access Management (IAM) ARN Format> .
+ksscRoleARN :: Lens' KinesisStreamSourceConfiguration Text
+ksscRoleARN = lens _ksscRoleARN (\ s a -> s{_ksscRoleARN = a})
+
+instance Hashable KinesisStreamSourceConfiguration
+         where
+
+instance NFData KinesisStreamSourceConfiguration
+         where
+
+instance ToJSON KinesisStreamSourceConfiguration
+         where
+        toJSON KinesisStreamSourceConfiguration'{..}
+          = object
+              (catMaybes
+                 [Just ("KinesisStreamARN" .= _ksscKinesisStreamARN),
+                  Just ("RoleARN" .= _ksscRoleARN)])
+
+-- | Details about a Kinesis data stream used as the source for a Kinesis Data Firehose delivery stream.
+--
+--
+--
+-- /See:/ 'kinesisStreamSourceDescription' smart constructor.
+data KinesisStreamSourceDescription = KinesisStreamSourceDescription'
+  { _kssdDeliveryStartTimestamp :: !(Maybe POSIX)
+  , _kssdKinesisStreamARN       :: !(Maybe Text)
+  , _kssdRoleARN                :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'KinesisStreamSourceDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kssdDeliveryStartTimestamp' - Kinesis Data Firehose starts retrieving records from the Kinesis data stream starting with this time stamp.
+--
+-- * 'kssdKinesisStreamARN' - The Amazon Resource Name (ARN) of the source Kinesis data stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kinesis-streams Amazon Kinesis Data Streams ARN Format> .
+--
+-- * 'kssdRoleARN' - The ARN of the role used by the source Kinesis data stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam AWS Identity and Access Management (IAM) ARN Format> .
+kinesisStreamSourceDescription
+    :: KinesisStreamSourceDescription
+kinesisStreamSourceDescription =
+  KinesisStreamSourceDescription'
+    { _kssdDeliveryStartTimestamp = Nothing
+    , _kssdKinesisStreamARN = Nothing
+    , _kssdRoleARN = Nothing
+    }
+
+
+-- | Kinesis Data Firehose starts retrieving records from the Kinesis data stream starting with this time stamp.
+kssdDeliveryStartTimestamp :: Lens' KinesisStreamSourceDescription (Maybe UTCTime)
+kssdDeliveryStartTimestamp = lens _kssdDeliveryStartTimestamp (\ s a -> s{_kssdDeliveryStartTimestamp = a}) . mapping _Time
+
+-- | The Amazon Resource Name (ARN) of the source Kinesis data stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kinesis-streams Amazon Kinesis Data Streams ARN Format> .
+kssdKinesisStreamARN :: Lens' KinesisStreamSourceDescription (Maybe Text)
+kssdKinesisStreamARN = lens _kssdKinesisStreamARN (\ s a -> s{_kssdKinesisStreamARN = a})
+
+-- | The ARN of the role used by the source Kinesis data stream. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam AWS Identity and Access Management (IAM) ARN Format> .
+kssdRoleARN :: Lens' KinesisStreamSourceDescription (Maybe Text)
+kssdRoleARN = lens _kssdRoleARN (\ s a -> s{_kssdRoleARN = a})
+
+instance FromJSON KinesisStreamSourceDescription
+         where
+        parseJSON
+          = withObject "KinesisStreamSourceDescription"
+              (\ x ->
+                 KinesisStreamSourceDescription' <$>
+                   (x .:? "DeliveryStartTimestamp") <*>
+                     (x .:? "KinesisStreamARN")
+                     <*> (x .:? "RoleARN"))
+
+instance Hashable KinesisStreamSourceDescription
+         where
+
+instance NFData KinesisStreamSourceDescription where
+
+-- | The OpenX SerDe. Used by Kinesis Data Firehose for deserializing data, which means converting it from the JSON format in preparation for serializing it to the Parquet or ORC format. This is one of two deserializers you can choose, depending on which one offers the functionality you need. The other option is the native Hive / HCatalog JsonSerDe.
+--
+--
+--
+-- /See:/ 'openXJSONSerDe' smart constructor.
+data OpenXJSONSerDe = OpenXJSONSerDe'
+  { _oxjsdColumnToJSONKeyMappings            :: !(Maybe (Map Text Text))
+  , _oxjsdCaseInsensitive                    :: !(Maybe Bool)
+  , _oxjsdConvertDotsInJSONKeysToUnderscores :: !(Maybe Bool)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OpenXJSONSerDe' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oxjsdColumnToJSONKeyMappings' - Maps column names to JSON keys that aren't identical to the column names. This is useful when the JSON contains keys that are Hive keywords. For example, @timestamp@ is a Hive keyword. If you have a JSON key named @timestamp@ , set this parameter to @{"ts": "timestamp"}@ to map this key to a column named @ts@ .
+--
+-- * 'oxjsdCaseInsensitive' - When set to @true@ , which is the default, Kinesis Data Firehose converts JSON keys to lowercase before deserializing them.
+--
+-- * 'oxjsdConvertDotsInJSONKeysToUnderscores' - When set to @true@ , specifies that the names of the keys include dots and that you want Kinesis Data Firehose to replace them with underscores. This is useful because Apache Hive does not allow dots in column names. For example, if the JSON contains a key whose name is "a.b", you can define the column name to be "a_b" when using this option. The default is @false@ .
+openXJSONSerDe
+    :: OpenXJSONSerDe
+openXJSONSerDe =
+  OpenXJSONSerDe'
+    { _oxjsdColumnToJSONKeyMappings = Nothing
+    , _oxjsdCaseInsensitive = Nothing
+    , _oxjsdConvertDotsInJSONKeysToUnderscores = Nothing
+    }
+
+
+-- | Maps column names to JSON keys that aren't identical to the column names. This is useful when the JSON contains keys that are Hive keywords. For example, @timestamp@ is a Hive keyword. If you have a JSON key named @timestamp@ , set this parameter to @{"ts": "timestamp"}@ to map this key to a column named @ts@ .
+oxjsdColumnToJSONKeyMappings :: Lens' OpenXJSONSerDe (HashMap Text Text)
+oxjsdColumnToJSONKeyMappings = lens _oxjsdColumnToJSONKeyMappings (\ s a -> s{_oxjsdColumnToJSONKeyMappings = a}) . _Default . _Map
+
+-- | When set to @true@ , which is the default, Kinesis Data Firehose converts JSON keys to lowercase before deserializing them.
+oxjsdCaseInsensitive :: Lens' OpenXJSONSerDe (Maybe Bool)
+oxjsdCaseInsensitive = lens _oxjsdCaseInsensitive (\ s a -> s{_oxjsdCaseInsensitive = a})
+
+-- | When set to @true@ , specifies that the names of the keys include dots and that you want Kinesis Data Firehose to replace them with underscores. This is useful because Apache Hive does not allow dots in column names. For example, if the JSON contains a key whose name is "a.b", you can define the column name to be "a_b" when using this option. The default is @false@ .
+oxjsdConvertDotsInJSONKeysToUnderscores :: Lens' OpenXJSONSerDe (Maybe Bool)
+oxjsdConvertDotsInJSONKeysToUnderscores = lens _oxjsdConvertDotsInJSONKeysToUnderscores (\ s a -> s{_oxjsdConvertDotsInJSONKeysToUnderscores = a})
+
+instance FromJSON OpenXJSONSerDe where
+        parseJSON
+          = withObject "OpenXJSONSerDe"
+              (\ x ->
+                 OpenXJSONSerDe' <$>
+                   (x .:? "ColumnToJsonKeyMappings" .!= mempty) <*>
+                     (x .:? "CaseInsensitive")
+                     <*> (x .:? "ConvertDotsInJsonKeysToUnderscores"))
+
+instance Hashable OpenXJSONSerDe where
+
+instance NFData OpenXJSONSerDe where
+
+instance ToJSON OpenXJSONSerDe where
+        toJSON OpenXJSONSerDe'{..}
+          = object
+              (catMaybes
+                 [("ColumnToJsonKeyMappings" .=) <$>
+                    _oxjsdColumnToJSONKeyMappings,
+                  ("CaseInsensitive" .=) <$> _oxjsdCaseInsensitive,
+                  ("ConvertDotsInJsonKeysToUnderscores" .=) <$>
+                    _oxjsdConvertDotsInJSONKeysToUnderscores])
+
+-- | A serializer to use for converting data to the ORC format before storing it in Amazon S3. For more information, see <https://orc.apache.org/docs/ Apache ORC> .
+--
+--
+--
+-- /See:/ 'orcSerDe' smart constructor.
+data OrcSerDe = OrcSerDe'
+  { _osdBloomFilterFalsePositiveProbability :: !(Maybe Double)
+  , _osdDictionaryKeyThreshold              :: !(Maybe Double)
+  , _osdEnablePadding                       :: !(Maybe Bool)
+  , _osdCompression                         :: !(Maybe OrcCompression)
+  , _osdBloomFilterColumns                  :: !(Maybe [Text])
+  , _osdRowIndexStride                      :: !(Maybe Nat)
+  , _osdFormatVersion                       :: !(Maybe OrcFormatVersion)
+  , _osdBlockSizeBytes                      :: !(Maybe Nat)
+  , _osdStripeSizeBytes                     :: !(Maybe Nat)
+  , _osdPaddingTolerance                    :: !(Maybe Double)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OrcSerDe' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'osdBloomFilterFalsePositiveProbability' - The Bloom filter false positive probability (FPP). The lower the FPP, the bigger the Bloom filter. The default value is 0.05, the minimum is 0, and the maximum is 1.
+--
+-- * 'osdDictionaryKeyThreshold' - Represents the fraction of the total number of non-null rows. To turn off dictionary encoding, set this fraction to a number that is less than the number of distinct keys in a dictionary. To always use dictionary encoding, set this threshold to 1.
+--
+-- * 'osdEnablePadding' - Set this to @true@ to indicate that you want stripes to be padded to the HDFS block boundaries. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is @false@ .
+--
+-- * 'osdCompression' - The compression code to use over data blocks. The default is @SNAPPY@ .
+--
+-- * 'osdBloomFilterColumns' - The column names for which you want Kinesis Data Firehose to create bloom filters. The default is @null@ .
+--
+-- * 'osdRowIndexStride' - The number of rows between index entries. The default is 10,000 and the minimum is 1,000.
+--
+-- * 'osdFormatVersion' - The version of the file to write. The possible values are @V0_11@ and @V0_12@ . The default is @V0_12@ .
+--
+-- * 'osdBlockSizeBytes' - The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Kinesis Data Firehose uses this value for padding calculations.
+--
+-- * 'osdStripeSizeBytes' - The number of bytes in each stripe. The default is 64 MiB and the minimum is 8 MiB.
+--
+-- * 'osdPaddingTolerance' - A number between 0 and 1 that defines the tolerance for block padding as a decimal fraction of stripe size. The default value is 0.05, which means 5 percent of stripe size. For the default values of 64 MiB ORC stripes and 256 MiB HDFS blocks, the default block padding tolerance of 5 percent reserves a maximum of 3.2 MiB for padding within the 256 MiB block. In such a case, if the available size within the block is more than 3.2 MiB, a new, smaller stripe is inserted to fit within that space. This ensures that no stripe crosses block boundaries and causes remote reads within a node-local task. Kinesis Data Firehose ignores this parameter when 'OrcSerDe$EnablePadding' is @false@ .
+orcSerDe
+    :: OrcSerDe
+orcSerDe =
+  OrcSerDe'
+    { _osdBloomFilterFalsePositiveProbability = Nothing
+    , _osdDictionaryKeyThreshold = Nothing
+    , _osdEnablePadding = Nothing
+    , _osdCompression = Nothing
+    , _osdBloomFilterColumns = Nothing
+    , _osdRowIndexStride = Nothing
+    , _osdFormatVersion = Nothing
+    , _osdBlockSizeBytes = Nothing
+    , _osdStripeSizeBytes = Nothing
+    , _osdPaddingTolerance = Nothing
+    }
+
+
+-- | The Bloom filter false positive probability (FPP). The lower the FPP, the bigger the Bloom filter. The default value is 0.05, the minimum is 0, and the maximum is 1.
+osdBloomFilterFalsePositiveProbability :: Lens' OrcSerDe (Maybe Double)
+osdBloomFilterFalsePositiveProbability = lens _osdBloomFilterFalsePositiveProbability (\ s a -> s{_osdBloomFilterFalsePositiveProbability = a})
+
+-- | Represents the fraction of the total number of non-null rows. To turn off dictionary encoding, set this fraction to a number that is less than the number of distinct keys in a dictionary. To always use dictionary encoding, set this threshold to 1.
+osdDictionaryKeyThreshold :: Lens' OrcSerDe (Maybe Double)
+osdDictionaryKeyThreshold = lens _osdDictionaryKeyThreshold (\ s a -> s{_osdDictionaryKeyThreshold = a})
+
+-- | Set this to @true@ to indicate that you want stripes to be padded to the HDFS block boundaries. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is @false@ .
+osdEnablePadding :: Lens' OrcSerDe (Maybe Bool)
+osdEnablePadding = lens _osdEnablePadding (\ s a -> s{_osdEnablePadding = a})
+
+-- | The compression code to use over data blocks. The default is @SNAPPY@ .
+osdCompression :: Lens' OrcSerDe (Maybe OrcCompression)
+osdCompression = lens _osdCompression (\ s a -> s{_osdCompression = a})
+
+-- | The column names for which you want Kinesis Data Firehose to create bloom filters. The default is @null@ .
+osdBloomFilterColumns :: Lens' OrcSerDe [Text]
+osdBloomFilterColumns = lens _osdBloomFilterColumns (\ s a -> s{_osdBloomFilterColumns = a}) . _Default . _Coerce
+
+-- | The number of rows between index entries. The default is 10,000 and the minimum is 1,000.
+osdRowIndexStride :: Lens' OrcSerDe (Maybe Natural)
+osdRowIndexStride = lens _osdRowIndexStride (\ s a -> s{_osdRowIndexStride = a}) . mapping _Nat
+
+-- | The version of the file to write. The possible values are @V0_11@ and @V0_12@ . The default is @V0_12@ .
+osdFormatVersion :: Lens' OrcSerDe (Maybe OrcFormatVersion)
+osdFormatVersion = lens _osdFormatVersion (\ s a -> s{_osdFormatVersion = a})
+
+-- | The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Kinesis Data Firehose uses this value for padding calculations.
+osdBlockSizeBytes :: Lens' OrcSerDe (Maybe Natural)
+osdBlockSizeBytes = lens _osdBlockSizeBytes (\ s a -> s{_osdBlockSizeBytes = a}) . mapping _Nat
+
+-- | The number of bytes in each stripe. The default is 64 MiB and the minimum is 8 MiB.
+osdStripeSizeBytes :: Lens' OrcSerDe (Maybe Natural)
+osdStripeSizeBytes = lens _osdStripeSizeBytes (\ s a -> s{_osdStripeSizeBytes = a}) . mapping _Nat
+
+-- | A number between 0 and 1 that defines the tolerance for block padding as a decimal fraction of stripe size. The default value is 0.05, which means 5 percent of stripe size. For the default values of 64 MiB ORC stripes and 256 MiB HDFS blocks, the default block padding tolerance of 5 percent reserves a maximum of 3.2 MiB for padding within the 256 MiB block. In such a case, if the available size within the block is more than 3.2 MiB, a new, smaller stripe is inserted to fit within that space. This ensures that no stripe crosses block boundaries and causes remote reads within a node-local task. Kinesis Data Firehose ignores this parameter when 'OrcSerDe$EnablePadding' is @false@ .
+osdPaddingTolerance :: Lens' OrcSerDe (Maybe Double)
+osdPaddingTolerance = lens _osdPaddingTolerance (\ s a -> s{_osdPaddingTolerance = a})
+
+instance FromJSON OrcSerDe where
+        parseJSON
+          = withObject "OrcSerDe"
+              (\ x ->
+                 OrcSerDe' <$>
+                   (x .:? "BloomFilterFalsePositiveProbability") <*>
+                     (x .:? "DictionaryKeyThreshold")
+                     <*> (x .:? "EnablePadding")
+                     <*> (x .:? "Compression")
+                     <*> (x .:? "BloomFilterColumns" .!= mempty)
+                     <*> (x .:? "RowIndexStride")
+                     <*> (x .:? "FormatVersion")
+                     <*> (x .:? "BlockSizeBytes")
+                     <*> (x .:? "StripeSizeBytes")
+                     <*> (x .:? "PaddingTolerance"))
+
+instance Hashable OrcSerDe where
+
+instance NFData OrcSerDe where
+
+instance ToJSON OrcSerDe where
+        toJSON OrcSerDe'{..}
+          = object
+              (catMaybes
+                 [("BloomFilterFalsePositiveProbability" .=) <$>
+                    _osdBloomFilterFalsePositiveProbability,
+                  ("DictionaryKeyThreshold" .=) <$>
+                    _osdDictionaryKeyThreshold,
+                  ("EnablePadding" .=) <$> _osdEnablePadding,
+                  ("Compression" .=) <$> _osdCompression,
+                  ("BloomFilterColumns" .=) <$> _osdBloomFilterColumns,
+                  ("RowIndexStride" .=) <$> _osdRowIndexStride,
+                  ("FormatVersion" .=) <$> _osdFormatVersion,
+                  ("BlockSizeBytes" .=) <$> _osdBlockSizeBytes,
+                  ("StripeSizeBytes" .=) <$> _osdStripeSizeBytes,
+                  ("PaddingTolerance" .=) <$> _osdPaddingTolerance])
+
+-- | Specifies the serializer that you want Kinesis Data Firehose to use to convert the format of your data before it writes it to Amazon S3.
+--
+--
+--
+-- /See:/ 'outputFormatConfiguration' smart constructor.
+newtype OutputFormatConfiguration = OutputFormatConfiguration'
+  { _ofcSerializer :: Maybe Serializer
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OutputFormatConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ofcSerializer' - Specifies which serializer to use. You can choose either the ORC SerDe or the Parquet SerDe. If both are non-null, the server rejects the request.
+outputFormatConfiguration
+    :: OutputFormatConfiguration
+outputFormatConfiguration =
+  OutputFormatConfiguration' {_ofcSerializer = Nothing}
+
+
+-- | Specifies which serializer to use. You can choose either the ORC SerDe or the Parquet SerDe. If both are non-null, the server rejects the request.
+ofcSerializer :: Lens' OutputFormatConfiguration (Maybe Serializer)
+ofcSerializer = lens _ofcSerializer (\ s a -> s{_ofcSerializer = a})
+
+instance FromJSON OutputFormatConfiguration where
+        parseJSON
+          = withObject "OutputFormatConfiguration"
+              (\ x ->
+                 OutputFormatConfiguration' <$> (x .:? "Serializer"))
+
+instance Hashable OutputFormatConfiguration where
+
+instance NFData OutputFormatConfiguration where
+
+instance ToJSON OutputFormatConfiguration where
+        toJSON OutputFormatConfiguration'{..}
+          = object
+              (catMaybes [("Serializer" .=) <$> _ofcSerializer])
+
+-- | A serializer to use for converting data to the Parquet format before storing it in Amazon S3. For more information, see <https://parquet.apache.org/documentation/latest/ Apache Parquet> .
+--
+--
+--
+-- /See:/ 'parquetSerDe' smart constructor.
+data ParquetSerDe = ParquetSerDe'
+  { _psdWriterVersion               :: !(Maybe ParquetWriterVersion)
+  , _psdCompression                 :: !(Maybe ParquetCompression)
+  , _psdMaxPaddingBytes             :: !(Maybe Nat)
+  , _psdEnableDictionaryCompression :: !(Maybe Bool)
+  , _psdPageSizeBytes               :: !(Maybe Nat)
+  , _psdBlockSizeBytes              :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ParquetSerDe' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psdWriterVersion' - Indicates the version of row format to output. The possible values are @V1@ and @V2@ . The default is @V1@ .
+--
+-- * 'psdCompression' - The compression code to use over data blocks. The possible values are @UNCOMPRESSED@ , @SNAPPY@ , and @GZIP@ , with the default being @SNAPPY@ . Use @SNAPPY@ for higher decompression speed. Use @GZIP@ if the compression ration is more important than speed.
+--
+-- * 'psdMaxPaddingBytes' - The maximum amount of padding to apply. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 0.
+--
+-- * 'psdEnableDictionaryCompression' - Indicates whether to enable dictionary compression.
+--
+-- * 'psdPageSizeBytes' - The Parquet page size. Column chunks are divided into pages. A page is conceptually an indivisible unit (in terms of compression and encoding). The minimum value is 64 KiB and the default is 1 MiB.
+--
+-- * 'psdBlockSizeBytes' - The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Kinesis Data Firehose uses this value for padding calculations.
+parquetSerDe
+    :: ParquetSerDe
+parquetSerDe =
+  ParquetSerDe'
+    { _psdWriterVersion = Nothing
+    , _psdCompression = Nothing
+    , _psdMaxPaddingBytes = Nothing
+    , _psdEnableDictionaryCompression = Nothing
+    , _psdPageSizeBytes = Nothing
+    , _psdBlockSizeBytes = Nothing
+    }
+
+
+-- | Indicates the version of row format to output. The possible values are @V1@ and @V2@ . The default is @V1@ .
+psdWriterVersion :: Lens' ParquetSerDe (Maybe ParquetWriterVersion)
+psdWriterVersion = lens _psdWriterVersion (\ s a -> s{_psdWriterVersion = a})
+
+-- | The compression code to use over data blocks. The possible values are @UNCOMPRESSED@ , @SNAPPY@ , and @GZIP@ , with the default being @SNAPPY@ . Use @SNAPPY@ for higher decompression speed. Use @GZIP@ if the compression ration is more important than speed.
+psdCompression :: Lens' ParquetSerDe (Maybe ParquetCompression)
+psdCompression = lens _psdCompression (\ s a -> s{_psdCompression = a})
+
+-- | The maximum amount of padding to apply. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 0.
+psdMaxPaddingBytes :: Lens' ParquetSerDe (Maybe Natural)
+psdMaxPaddingBytes = lens _psdMaxPaddingBytes (\ s a -> s{_psdMaxPaddingBytes = a}) . mapping _Nat
+
+-- | Indicates whether to enable dictionary compression.
+psdEnableDictionaryCompression :: Lens' ParquetSerDe (Maybe Bool)
+psdEnableDictionaryCompression = lens _psdEnableDictionaryCompression (\ s a -> s{_psdEnableDictionaryCompression = a})
+
+-- | The Parquet page size. Column chunks are divided into pages. A page is conceptually an indivisible unit (in terms of compression and encoding). The minimum value is 64 KiB and the default is 1 MiB.
+psdPageSizeBytes :: Lens' ParquetSerDe (Maybe Natural)
+psdPageSizeBytes = lens _psdPageSizeBytes (\ s a -> s{_psdPageSizeBytes = a}) . mapping _Nat
+
+-- | The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Kinesis Data Firehose uses this value for padding calculations.
+psdBlockSizeBytes :: Lens' ParquetSerDe (Maybe Natural)
+psdBlockSizeBytes = lens _psdBlockSizeBytes (\ s a -> s{_psdBlockSizeBytes = a}) . mapping _Nat
+
+instance FromJSON ParquetSerDe where
+        parseJSON
+          = withObject "ParquetSerDe"
+              (\ x ->
+                 ParquetSerDe' <$>
+                   (x .:? "WriterVersion") <*> (x .:? "Compression") <*>
+                     (x .:? "MaxPaddingBytes")
+                     <*> (x .:? "EnableDictionaryCompression")
+                     <*> (x .:? "PageSizeBytes")
+                     <*> (x .:? "BlockSizeBytes"))
+
+instance Hashable ParquetSerDe where
+
+instance NFData ParquetSerDe where
+
+instance ToJSON ParquetSerDe where
+        toJSON ParquetSerDe'{..}
+          = object
+              (catMaybes
+                 [("WriterVersion" .=) <$> _psdWriterVersion,
+                  ("Compression" .=) <$> _psdCompression,
+                  ("MaxPaddingBytes" .=) <$> _psdMaxPaddingBytes,
+                  ("EnableDictionaryCompression" .=) <$>
+                    _psdEnableDictionaryCompression,
+                  ("PageSizeBytes" .=) <$> _psdPageSizeBytes,
+                  ("BlockSizeBytes" .=) <$> _psdBlockSizeBytes])
+
+-- | Describes a data processing configuration.
+--
+--
+--
+-- /See:/ 'processingConfiguration' smart constructor.
+data ProcessingConfiguration = ProcessingConfiguration'
+  { _pcEnabled    :: !(Maybe Bool)
+  , _pcProcessors :: !(Maybe [Processor])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ProcessingConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcEnabled' - Enables or disables data processing.
+--
+-- * 'pcProcessors' - The data processors.
+processingConfiguration
+    :: ProcessingConfiguration
+processingConfiguration =
+  ProcessingConfiguration' {_pcEnabled = Nothing, _pcProcessors = Nothing}
+
+
+-- | Enables or disables data processing.
+pcEnabled :: Lens' ProcessingConfiguration (Maybe Bool)
+pcEnabled = lens _pcEnabled (\ s a -> s{_pcEnabled = a})
+
+-- | The data processors.
+pcProcessors :: Lens' ProcessingConfiguration [Processor]
+pcProcessors = lens _pcProcessors (\ s a -> s{_pcProcessors = a}) . _Default . _Coerce
+
+instance FromJSON ProcessingConfiguration where
+        parseJSON
+          = withObject "ProcessingConfiguration"
+              (\ x ->
+                 ProcessingConfiguration' <$>
+                   (x .:? "Enabled") <*>
+                     (x .:? "Processors" .!= mempty))
+
+instance Hashable ProcessingConfiguration where
+
+instance NFData ProcessingConfiguration where
+
+instance ToJSON ProcessingConfiguration where
+        toJSON ProcessingConfiguration'{..}
+          = object
+              (catMaybes
+                 [("Enabled" .=) <$> _pcEnabled,
+                  ("Processors" .=) <$> _pcProcessors])
+
+-- | Describes a data processor.
+--
+--
+--
+-- /See:/ 'processor' smart constructor.
+data Processor = Processor'
+  { _pParameters :: !(Maybe [ProcessorParameter])
+  , _pType       :: !ProcessorType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Processor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pParameters' - The processor parameters.
+--
+-- * 'pType' - The type of processor.
+processor
+    :: ProcessorType -- ^ 'pType'
+    -> Processor
+processor pType_ = Processor' {_pParameters = Nothing, _pType = pType_}
+
+
+-- | The processor parameters.
+pParameters :: Lens' Processor [ProcessorParameter]
+pParameters = lens _pParameters (\ s a -> s{_pParameters = a}) . _Default . _Coerce
+
+-- | The type of processor.
+pType :: Lens' Processor ProcessorType
+pType = lens _pType (\ s a -> s{_pType = a})
+
+instance FromJSON Processor where
+        parseJSON
+          = withObject "Processor"
+              (\ x ->
+                 Processor' <$>
+                   (x .:? "Parameters" .!= mempty) <*> (x .: "Type"))
+
+instance Hashable Processor where
+
+instance NFData Processor where
+
+instance ToJSON Processor where
+        toJSON Processor'{..}
+          = object
+              (catMaybes
+                 [("Parameters" .=) <$> _pParameters,
+                  Just ("Type" .= _pType)])
+
+-- | Describes the processor parameter.
+--
+--
+--
+-- /See:/ 'processorParameter' smart constructor.
+data ProcessorParameter = ProcessorParameter'
+  { _ppParameterName  :: !ProcessorParameterName
+  , _ppParameterValue :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ProcessorParameter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ppParameterName' - The name of the parameter.
+--
+-- * 'ppParameterValue' - The parameter value.
+processorParameter
+    :: ProcessorParameterName -- ^ 'ppParameterName'
+    -> Text -- ^ 'ppParameterValue'
+    -> ProcessorParameter
+processorParameter pParameterName_ pParameterValue_ =
+  ProcessorParameter'
+    {_ppParameterName = pParameterName_, _ppParameterValue = pParameterValue_}
+
+
+-- | The name of the parameter.
+ppParameterName :: Lens' ProcessorParameter ProcessorParameterName
+ppParameterName = lens _ppParameterName (\ s a -> s{_ppParameterName = a})
+
+-- | The parameter value.
+ppParameterValue :: Lens' ProcessorParameter Text
+ppParameterValue = lens _ppParameterValue (\ s a -> s{_ppParameterValue = a})
+
+instance FromJSON ProcessorParameter where
+        parseJSON
+          = withObject "ProcessorParameter"
+              (\ x ->
+                 ProcessorParameter' <$>
+                   (x .: "ParameterName") <*> (x .: "ParameterValue"))
+
+instance Hashable ProcessorParameter where
+
+instance NFData ProcessorParameter where
+
+instance ToJSON ProcessorParameter where
+        toJSON ProcessorParameter'{..}
+          = object
+              (catMaybes
+                 [Just ("ParameterName" .= _ppParameterName),
+                  Just ("ParameterValue" .= _ppParameterValue)])
+
+-- | Contains the result for an individual record from a 'PutRecordBatch' request. If the record is successfully added to your delivery stream, it receives a record ID. If the record fails to be added to your delivery stream, the result includes an error code and an error message.
+--
+--
+--
+-- /See:/ 'putRecordBatchResponseEntry' smart constructor.
+data PutRecordBatchResponseEntry = PutRecordBatchResponseEntry'
+  { _prbreRecordId     :: !(Maybe Text)
+  , _prbreErrorCode    :: !(Maybe Text)
+  , _prbreErrorMessage :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutRecordBatchResponseEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prbreRecordId' - The ID of the record.
+--
+-- * 'prbreErrorCode' - The error code for an individual record result.
+--
+-- * 'prbreErrorMessage' - The error message for an individual record result.
+putRecordBatchResponseEntry
+    :: PutRecordBatchResponseEntry
+putRecordBatchResponseEntry =
+  PutRecordBatchResponseEntry'
+    { _prbreRecordId = Nothing
+    , _prbreErrorCode = Nothing
+    , _prbreErrorMessage = Nothing
+    }
+
+
+-- | The ID of the record.
+prbreRecordId :: Lens' PutRecordBatchResponseEntry (Maybe Text)
+prbreRecordId = lens _prbreRecordId (\ s a -> s{_prbreRecordId = a})
+
+-- | The error code for an individual record result.
+prbreErrorCode :: Lens' PutRecordBatchResponseEntry (Maybe Text)
+prbreErrorCode = lens _prbreErrorCode (\ s a -> s{_prbreErrorCode = a})
+
+-- | The error message for an individual record result.
+prbreErrorMessage :: Lens' PutRecordBatchResponseEntry (Maybe Text)
+prbreErrorMessage = lens _prbreErrorMessage (\ s a -> s{_prbreErrorMessage = a})
+
+instance FromJSON PutRecordBatchResponseEntry where
+        parseJSON
+          = withObject "PutRecordBatchResponseEntry"
+              (\ x ->
+                 PutRecordBatchResponseEntry' <$>
+                   (x .:? "RecordId") <*> (x .:? "ErrorCode") <*>
+                     (x .:? "ErrorMessage"))
+
+instance Hashable PutRecordBatchResponseEntry where
+
+instance NFData PutRecordBatchResponseEntry where
+
+-- | The unit of data in a delivery stream.
+--
+--
+--
+-- /See:/ 'record' smart constructor.
+newtype Record = Record'
+  { _rData :: Base64
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Record' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rData' - The data blob, which is base64-encoded when the blob is serialized. The maximum size of the data blob, before base64-encoding, is 1,000 KB.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
+record
+    :: ByteString -- ^ 'rData'
+    -> Record
+record pData_ = Record' {_rData = _Base64 # pData_}
+
+
+-- | The data blob, which is base64-encoded when the blob is serialized. The maximum size of the data blob, before base64-encoding, is 1,000 KB.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
+rData :: Lens' Record ByteString
+rData = lens _rData (\ s a -> s{_rData = a}) . _Base64
+
+instance Hashable Record where
+
+instance NFData Record where
+
+instance ToJSON Record where
+        toJSON Record'{..}
+          = object (catMaybes [Just ("Data" .= _rData)])
+
+-- | Describes the configuration of a destination in Amazon Redshift.
+--
+--
+--
+-- /See:/ 'redshiftDestinationConfiguration' smart constructor.
+data RedshiftDestinationConfiguration = RedshiftDestinationConfiguration'
+  { _rdcS3BackupMode             :: !(Maybe RedshiftS3BackupMode)
+  , _rdcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _rdcS3BackupConfiguration    :: !(Maybe S3DestinationConfiguration)
+  , _rdcRetryOptions             :: !(Maybe RedshiftRetryOptions)
+  , _rdcProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
+  , _rdcRoleARN                  :: !Text
+  , _rdcClusterJDBCURL           :: !Text
+  , _rdcCopyCommand              :: !CopyCommand
+  , _rdcUsername                 :: !(Sensitive Text)
+  , _rdcPassword                 :: !(Sensitive Text)
+  , _rdcS3Configuration          :: !S3DestinationConfiguration
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RedshiftDestinationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdcS3BackupMode' - The Amazon S3 backup mode.
+--
+-- * 'rdcCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
+--
+-- * 'rdcS3BackupConfiguration' - The configuration for backup in Amazon S3.
+--
+-- * 'rdcRetryOptions' - The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
+--
+-- * 'rdcProcessingConfiguration' - The data processing configuration.
+--
+-- * 'rdcRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'rdcClusterJDBCURL' - The database connection string.
+--
+-- * 'rdcCopyCommand' - The @COPY@ command.
+--
+-- * 'rdcUsername' - The name of the user.
+--
+-- * 'rdcPassword' - The user password.
+--
+-- * 'rdcS3Configuration' - The configuration for the intermediate Amazon S3 location from which Amazon Redshift obtains data. Restrictions are described in the topic for 'CreateDeliveryStream' . 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.
+redshiftDestinationConfiguration
+    :: Text -- ^ 'rdcRoleARN'
+    -> Text -- ^ 'rdcClusterJDBCURL'
+    -> CopyCommand -- ^ 'rdcCopyCommand'
+    -> Text -- ^ 'rdcUsername'
+    -> Text -- ^ 'rdcPassword'
+    -> S3DestinationConfiguration -- ^ 'rdcS3Configuration'
+    -> RedshiftDestinationConfiguration
+redshiftDestinationConfiguration pRoleARN_ pClusterJDBCURL_ pCopyCommand_ pUsername_ pPassword_ pS3Configuration_ =
+  RedshiftDestinationConfiguration'
+    { _rdcS3BackupMode = Nothing
+    , _rdcCloudWatchLoggingOptions = Nothing
+    , _rdcS3BackupConfiguration = Nothing
+    , _rdcRetryOptions = Nothing
+    , _rdcProcessingConfiguration = Nothing
+    , _rdcRoleARN = pRoleARN_
+    , _rdcClusterJDBCURL = pClusterJDBCURL_
+    , _rdcCopyCommand = pCopyCommand_
+    , _rdcUsername = _Sensitive # pUsername_
+    , _rdcPassword = _Sensitive # pPassword_
+    , _rdcS3Configuration = pS3Configuration_
+    }
+
+
+-- | The Amazon S3 backup mode.
+rdcS3BackupMode :: Lens' RedshiftDestinationConfiguration (Maybe RedshiftS3BackupMode)
+rdcS3BackupMode = lens _rdcS3BackupMode (\ s a -> s{_rdcS3BackupMode = a})
+
+-- | The CloudWatch logging options for your delivery stream.
+rdcCloudWatchLoggingOptions :: Lens' RedshiftDestinationConfiguration (Maybe CloudWatchLoggingOptions)
+rdcCloudWatchLoggingOptions = lens _rdcCloudWatchLoggingOptions (\ s a -> s{_rdcCloudWatchLoggingOptions = a})
+
+-- | The configuration for backup in Amazon S3.
+rdcS3BackupConfiguration :: Lens' RedshiftDestinationConfiguration (Maybe S3DestinationConfiguration)
+rdcS3BackupConfiguration = lens _rdcS3BackupConfiguration (\ s a -> s{_rdcS3BackupConfiguration = a})
+
+-- | The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
+rdcRetryOptions :: Lens' RedshiftDestinationConfiguration (Maybe RedshiftRetryOptions)
+rdcRetryOptions = lens _rdcRetryOptions (\ s a -> s{_rdcRetryOptions = a})
+
+-- | The data processing configuration.
+rdcProcessingConfiguration :: Lens' RedshiftDestinationConfiguration (Maybe ProcessingConfiguration)
+rdcProcessingConfiguration = lens _rdcProcessingConfiguration (\ s a -> s{_rdcProcessingConfiguration = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+rdcRoleARN :: Lens' RedshiftDestinationConfiguration Text
+rdcRoleARN = lens _rdcRoleARN (\ s a -> s{_rdcRoleARN = a})
+
+-- | The database connection string.
+rdcClusterJDBCURL :: Lens' RedshiftDestinationConfiguration Text
+rdcClusterJDBCURL = lens _rdcClusterJDBCURL (\ s a -> s{_rdcClusterJDBCURL = a})
+
+-- | The @COPY@ command.
+rdcCopyCommand :: Lens' RedshiftDestinationConfiguration CopyCommand
+rdcCopyCommand = lens _rdcCopyCommand (\ s a -> s{_rdcCopyCommand = a})
+
+-- | The name of the user.
+rdcUsername :: Lens' RedshiftDestinationConfiguration Text
+rdcUsername = lens _rdcUsername (\ s a -> s{_rdcUsername = a}) . _Sensitive
+
+-- | The user password.
+rdcPassword :: Lens' RedshiftDestinationConfiguration Text
+rdcPassword = lens _rdcPassword (\ s a -> s{_rdcPassword = a}) . _Sensitive
+
+-- | The configuration for the intermediate Amazon S3 location from which Amazon Redshift obtains data. Restrictions are described in the topic for 'CreateDeliveryStream' . 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.
+rdcS3Configuration :: Lens' RedshiftDestinationConfiguration S3DestinationConfiguration
+rdcS3Configuration = lens _rdcS3Configuration (\ s a -> s{_rdcS3Configuration = a})
+
+instance Hashable RedshiftDestinationConfiguration
+         where
+
+instance NFData RedshiftDestinationConfiguration
+         where
+
+instance ToJSON RedshiftDestinationConfiguration
+         where
+        toJSON RedshiftDestinationConfiguration'{..}
+          = object
+              (catMaybes
+                 [("S3BackupMode" .=) <$> _rdcS3BackupMode,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _rdcCloudWatchLoggingOptions,
+                  ("S3BackupConfiguration" .=) <$>
+                    _rdcS3BackupConfiguration,
+                  ("RetryOptions" .=) <$> _rdcRetryOptions,
+                  ("ProcessingConfiguration" .=) <$>
+                    _rdcProcessingConfiguration,
+                  Just ("RoleARN" .= _rdcRoleARN),
+                  Just ("ClusterJDBCURL" .= _rdcClusterJDBCURL),
+                  Just ("CopyCommand" .= _rdcCopyCommand),
+                  Just ("Username" .= _rdcUsername),
+                  Just ("Password" .= _rdcPassword),
+                  Just ("S3Configuration" .= _rdcS3Configuration)])
+
+-- | Describes a destination in Amazon Redshift.
+--
+--
+--
+-- /See:/ 'redshiftDestinationDescription' smart constructor.
+data RedshiftDestinationDescription = RedshiftDestinationDescription'
+  { _rddS3BackupMode             :: !(Maybe RedshiftS3BackupMode)
+  , _rddS3BackupDescription      :: !(Maybe S3DestinationDescription)
+  , _rddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _rddRetryOptions             :: !(Maybe RedshiftRetryOptions)
+  , _rddProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
+  , _rddRoleARN                  :: !Text
+  , _rddClusterJDBCURL           :: !Text
+  , _rddCopyCommand              :: !CopyCommand
+  , _rddUsername                 :: !(Sensitive Text)
+  , _rddS3DestinationDescription :: !S3DestinationDescription
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RedshiftDestinationDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rddS3BackupMode' - The Amazon S3 backup mode.
+--
+-- * 'rddS3BackupDescription' - The configuration for backup in Amazon S3.
+--
+-- * 'rddCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'rddRetryOptions' - The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
+--
+-- * 'rddProcessingConfiguration' - The data processing configuration.
+--
+-- * 'rddRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'rddClusterJDBCURL' - The database connection string.
+--
+-- * 'rddCopyCommand' - The @COPY@ command.
+--
+-- * 'rddUsername' - The name of the user.
+--
+-- * 'rddS3DestinationDescription' - The Amazon S3 destination.
+redshiftDestinationDescription
+    :: Text -- ^ 'rddRoleARN'
+    -> Text -- ^ 'rddClusterJDBCURL'
+    -> CopyCommand -- ^ 'rddCopyCommand'
+    -> Text -- ^ 'rddUsername'
+    -> S3DestinationDescription -- ^ 'rddS3DestinationDescription'
+    -> RedshiftDestinationDescription
+redshiftDestinationDescription pRoleARN_ pClusterJDBCURL_ pCopyCommand_ pUsername_ pS3DestinationDescription_ =
+  RedshiftDestinationDescription'
+    { _rddS3BackupMode = Nothing
+    , _rddS3BackupDescription = Nothing
+    , _rddCloudWatchLoggingOptions = Nothing
+    , _rddRetryOptions = Nothing
+    , _rddProcessingConfiguration = Nothing
+    , _rddRoleARN = pRoleARN_
+    , _rddClusterJDBCURL = pClusterJDBCURL_
+    , _rddCopyCommand = pCopyCommand_
+    , _rddUsername = _Sensitive # pUsername_
+    , _rddS3DestinationDescription = pS3DestinationDescription_
+    }
+
+
+-- | The Amazon S3 backup mode.
+rddS3BackupMode :: Lens' RedshiftDestinationDescription (Maybe RedshiftS3BackupMode)
+rddS3BackupMode = lens _rddS3BackupMode (\ s a -> s{_rddS3BackupMode = a})
+
+-- | The configuration for backup in Amazon S3.
+rddS3BackupDescription :: Lens' RedshiftDestinationDescription (Maybe S3DestinationDescription)
+rddS3BackupDescription = lens _rddS3BackupDescription (\ s a -> s{_rddS3BackupDescription = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+rddCloudWatchLoggingOptions :: Lens' RedshiftDestinationDescription (Maybe CloudWatchLoggingOptions)
+rddCloudWatchLoggingOptions = lens _rddCloudWatchLoggingOptions (\ s a -> s{_rddCloudWatchLoggingOptions = a})
+
+-- | The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
+rddRetryOptions :: Lens' RedshiftDestinationDescription (Maybe RedshiftRetryOptions)
+rddRetryOptions = lens _rddRetryOptions (\ s a -> s{_rddRetryOptions = a})
+
+-- | The data processing configuration.
+rddProcessingConfiguration :: Lens' RedshiftDestinationDescription (Maybe ProcessingConfiguration)
+rddProcessingConfiguration = lens _rddProcessingConfiguration (\ s a -> s{_rddProcessingConfiguration = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+rddRoleARN :: Lens' RedshiftDestinationDescription Text
+rddRoleARN = lens _rddRoleARN (\ s a -> s{_rddRoleARN = a})
+
+-- | The database connection string.
+rddClusterJDBCURL :: Lens' RedshiftDestinationDescription Text
+rddClusterJDBCURL = lens _rddClusterJDBCURL (\ s a -> s{_rddClusterJDBCURL = a})
+
+-- | The @COPY@ command.
+rddCopyCommand :: Lens' RedshiftDestinationDescription CopyCommand
+rddCopyCommand = lens _rddCopyCommand (\ s a -> s{_rddCopyCommand = a})
+
+-- | The name of the user.
+rddUsername :: Lens' RedshiftDestinationDescription Text
+rddUsername = lens _rddUsername (\ s a -> s{_rddUsername = a}) . _Sensitive
+
+-- | The Amazon S3 destination.
+rddS3DestinationDescription :: Lens' RedshiftDestinationDescription S3DestinationDescription
+rddS3DestinationDescription = lens _rddS3DestinationDescription (\ s a -> s{_rddS3DestinationDescription = a})
+
+instance FromJSON RedshiftDestinationDescription
+         where
+        parseJSON
+          = withObject "RedshiftDestinationDescription"
+              (\ x ->
+                 RedshiftDestinationDescription' <$>
+                   (x .:? "S3BackupMode") <*>
+                     (x .:? "S3BackupDescription")
+                     <*> (x .:? "CloudWatchLoggingOptions")
+                     <*> (x .:? "RetryOptions")
+                     <*> (x .:? "ProcessingConfiguration")
+                     <*> (x .: "RoleARN")
+                     <*> (x .: "ClusterJDBCURL")
+                     <*> (x .: "CopyCommand")
+                     <*> (x .: "Username")
+                     <*> (x .: "S3DestinationDescription"))
+
+instance Hashable RedshiftDestinationDescription
+         where
+
+instance NFData RedshiftDestinationDescription where
+
+-- | Describes an update for a destination in Amazon Redshift.
+--
+--
+--
+-- /See:/ 'redshiftDestinationUpdate' smart constructor.
+data RedshiftDestinationUpdate = RedshiftDestinationUpdate'
+  { _rduS3BackupMode             :: !(Maybe RedshiftS3BackupMode)
+  , _rduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _rduUsername                 :: !(Maybe (Sensitive Text))
+  , _rduS3Update                 :: !(Maybe S3DestinationUpdate)
+  , _rduPassword                 :: !(Maybe (Sensitive Text))
+  , _rduS3BackupUpdate           :: !(Maybe S3DestinationUpdate)
+  , _rduCopyCommand              :: !(Maybe CopyCommand)
+  , _rduRetryOptions             :: !(Maybe RedshiftRetryOptions)
+  , _rduProcessingConfiguration  :: !(Maybe ProcessingConfiguration)
+  , _rduClusterJDBCURL           :: !(Maybe Text)
+  , _rduRoleARN                  :: !(Maybe Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RedshiftDestinationUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rduS3BackupMode' - The Amazon S3 backup mode.
+--
+-- * 'rduCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'rduUsername' - The name of the user.
+--
+-- * 'rduS3Update' - The Amazon S3 destination. The compression formats @SNAPPY@ or @ZIP@ cannot be specified in @RedshiftDestinationUpdate.S3Update@ because the Amazon Redshift @COPY@ operation that reads from the S3 bucket doesn't support these compression formats.
+--
+-- * 'rduPassword' - The user password.
+--
+-- * 'rduS3BackupUpdate' - The Amazon S3 destination for backup.
+--
+-- * 'rduCopyCommand' - The @COPY@ command.
+--
+-- * 'rduRetryOptions' - The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
+--
+-- * 'rduProcessingConfiguration' - The data processing configuration.
+--
+-- * 'rduClusterJDBCURL' - The database connection string.
+--
+-- * 'rduRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+redshiftDestinationUpdate
+    :: RedshiftDestinationUpdate
+redshiftDestinationUpdate =
+  RedshiftDestinationUpdate'
+    { _rduS3BackupMode = Nothing
+    , _rduCloudWatchLoggingOptions = Nothing
+    , _rduUsername = Nothing
+    , _rduS3Update = Nothing
+    , _rduPassword = Nothing
+    , _rduS3BackupUpdate = Nothing
+    , _rduCopyCommand = Nothing
+    , _rduRetryOptions = Nothing
+    , _rduProcessingConfiguration = Nothing
+    , _rduClusterJDBCURL = Nothing
+    , _rduRoleARN = Nothing
+    }
+
+
+-- | The Amazon S3 backup mode.
+rduS3BackupMode :: Lens' RedshiftDestinationUpdate (Maybe RedshiftS3BackupMode)
+rduS3BackupMode = lens _rduS3BackupMode (\ s a -> s{_rduS3BackupMode = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+rduCloudWatchLoggingOptions :: Lens' RedshiftDestinationUpdate (Maybe CloudWatchLoggingOptions)
+rduCloudWatchLoggingOptions = lens _rduCloudWatchLoggingOptions (\ s a -> s{_rduCloudWatchLoggingOptions = a})
+
+-- | The name of the user.
+rduUsername :: Lens' RedshiftDestinationUpdate (Maybe Text)
+rduUsername = lens _rduUsername (\ s a -> s{_rduUsername = a}) . mapping _Sensitive
+
+-- | The Amazon S3 destination. The compression formats @SNAPPY@ or @ZIP@ cannot be specified in @RedshiftDestinationUpdate.S3Update@ because the Amazon Redshift @COPY@ operation that reads from the S3 bucket doesn't support these compression formats.
+rduS3Update :: Lens' RedshiftDestinationUpdate (Maybe S3DestinationUpdate)
+rduS3Update = lens _rduS3Update (\ s a -> s{_rduS3Update = a})
+
+-- | The user password.
+rduPassword :: Lens' RedshiftDestinationUpdate (Maybe Text)
+rduPassword = lens _rduPassword (\ s a -> s{_rduPassword = a}) . mapping _Sensitive
+
+-- | The Amazon S3 destination for backup.
+rduS3BackupUpdate :: Lens' RedshiftDestinationUpdate (Maybe S3DestinationUpdate)
+rduS3BackupUpdate = lens _rduS3BackupUpdate (\ s a -> s{_rduS3BackupUpdate = a})
+
+-- | The @COPY@ command.
+rduCopyCommand :: Lens' RedshiftDestinationUpdate (Maybe CopyCommand)
+rduCopyCommand = lens _rduCopyCommand (\ s a -> s{_rduCopyCommand = a})
+
+-- | The retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon Redshift. Default value is 3600 (60 minutes).
+rduRetryOptions :: Lens' RedshiftDestinationUpdate (Maybe RedshiftRetryOptions)
+rduRetryOptions = lens _rduRetryOptions (\ s a -> s{_rduRetryOptions = a})
+
+-- | The data processing configuration.
+rduProcessingConfiguration :: Lens' RedshiftDestinationUpdate (Maybe ProcessingConfiguration)
+rduProcessingConfiguration = lens _rduProcessingConfiguration (\ s a -> s{_rduProcessingConfiguration = a})
+
+-- | The database connection string.
+rduClusterJDBCURL :: Lens' RedshiftDestinationUpdate (Maybe Text)
+rduClusterJDBCURL = lens _rduClusterJDBCURL (\ s a -> s{_rduClusterJDBCURL = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+rduRoleARN :: Lens' RedshiftDestinationUpdate (Maybe Text)
+rduRoleARN = lens _rduRoleARN (\ s a -> s{_rduRoleARN = a})
+
+instance Hashable RedshiftDestinationUpdate where
+
+instance NFData RedshiftDestinationUpdate where
+
+instance ToJSON RedshiftDestinationUpdate where
+        toJSON RedshiftDestinationUpdate'{..}
+          = object
+              (catMaybes
+                 [("S3BackupMode" .=) <$> _rduS3BackupMode,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _rduCloudWatchLoggingOptions,
+                  ("Username" .=) <$> _rduUsername,
+                  ("S3Update" .=) <$> _rduS3Update,
+                  ("Password" .=) <$> _rduPassword,
+                  ("S3BackupUpdate" .=) <$> _rduS3BackupUpdate,
+                  ("CopyCommand" .=) <$> _rduCopyCommand,
+                  ("RetryOptions" .=) <$> _rduRetryOptions,
+                  ("ProcessingConfiguration" .=) <$>
+                    _rduProcessingConfiguration,
+                  ("ClusterJDBCURL" .=) <$> _rduClusterJDBCURL,
+                  ("RoleARN" .=) <$> _rduRoleARN])
+
+-- | Configures retry behavior in case Kinesis Data Firehose is unable to deliver documents to Amazon Redshift.
+--
+--
+--
+-- /See:/ 'redshiftRetryOptions' smart constructor.
+newtype RedshiftRetryOptions = RedshiftRetryOptions'
+  { _rroDurationInSeconds :: Maybe Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RedshiftRetryOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rroDurationInSeconds' - The length of time during which Kinesis Data Firehose retries delivery after a failure, starting from the initial request and including the first attempt. The default value is 3600 seconds (60 minutes). Kinesis Data Firehose does not retry if the value of @DurationInSeconds@ is 0 (zero) or if the first delivery attempt takes longer than the current value.
+redshiftRetryOptions
+    :: RedshiftRetryOptions
+redshiftRetryOptions = RedshiftRetryOptions' {_rroDurationInSeconds = Nothing}
+
+
+-- | The length of time during which Kinesis Data Firehose retries delivery after a failure, starting from the initial request and including the first attempt. The default value is 3600 seconds (60 minutes). Kinesis Data Firehose does not retry if the value of @DurationInSeconds@ is 0 (zero) or if the first delivery attempt takes longer than the current value.
+rroDurationInSeconds :: Lens' RedshiftRetryOptions (Maybe Natural)
+rroDurationInSeconds = lens _rroDurationInSeconds (\ s a -> s{_rroDurationInSeconds = a}) . mapping _Nat
+
+instance FromJSON RedshiftRetryOptions where
+        parseJSON
+          = withObject "RedshiftRetryOptions"
+              (\ x ->
+                 RedshiftRetryOptions' <$>
+                   (x .:? "DurationInSeconds"))
+
+instance Hashable RedshiftRetryOptions where
+
+instance NFData RedshiftRetryOptions where
+
+instance ToJSON RedshiftRetryOptions where
+        toJSON RedshiftRetryOptions'{..}
+          = object
+              (catMaybes
+                 [("DurationInSeconds" .=) <$> _rroDurationInSeconds])
+
+-- | Describes the configuration of a destination in Amazon S3.
+--
+--
+--
+-- /See:/ 's3DestinationConfiguration' smart constructor.
+data S3DestinationConfiguration = S3DestinationConfiguration'
+  { _sdcPrefix                   :: !(Maybe Text)
+  , _sdcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _sdcEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
+  , _sdcCompressionFormat        :: !(Maybe CompressionFormat)
+  , _sdcBufferingHints           :: !(Maybe BufferingHints)
+  , _sdcRoleARN                  :: !Text
+  , _sdcBucketARN                :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3DestinationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdcPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+--
+-- * 'sdcCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
+--
+-- * 'sdcEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
+--
+-- * 'sdcCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ . The compression formats @SNAPPY@ or @ZIP@ cannot be specified for Amazon Redshift destinations because they are not supported by the Amazon Redshift @COPY@ operation that reads from the S3 bucket.
+--
+-- * 'sdcBufferingHints' - The buffering option. If no value is specified, @BufferingHints@ object default values are used.
+--
+-- * 'sdcRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'sdcBucketARN' - The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+s3DestinationConfiguration
+    :: Text -- ^ 'sdcRoleARN'
+    -> Text -- ^ 'sdcBucketARN'
+    -> S3DestinationConfiguration
+s3DestinationConfiguration pRoleARN_ pBucketARN_ =
+  S3DestinationConfiguration'
+    { _sdcPrefix = Nothing
+    , _sdcCloudWatchLoggingOptions = Nothing
+    , _sdcEncryptionConfiguration = Nothing
+    , _sdcCompressionFormat = Nothing
+    , _sdcBufferingHints = Nothing
+    , _sdcRoleARN = pRoleARN_
+    , _sdcBucketARN = pBucketARN_
+    }
+
+
+-- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+sdcPrefix :: Lens' S3DestinationConfiguration (Maybe Text)
+sdcPrefix = lens _sdcPrefix (\ s a -> s{_sdcPrefix = a})
+
+-- | The CloudWatch logging options for your delivery stream.
+sdcCloudWatchLoggingOptions :: Lens' S3DestinationConfiguration (Maybe CloudWatchLoggingOptions)
+sdcCloudWatchLoggingOptions = lens _sdcCloudWatchLoggingOptions (\ s a -> s{_sdcCloudWatchLoggingOptions = a})
+
+-- | The encryption configuration. If no value is specified, the default is no encryption.
+sdcEncryptionConfiguration :: Lens' S3DestinationConfiguration (Maybe EncryptionConfiguration)
+sdcEncryptionConfiguration = lens _sdcEncryptionConfiguration (\ s a -> s{_sdcEncryptionConfiguration = a})
+
+-- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ . The compression formats @SNAPPY@ or @ZIP@ cannot be specified for Amazon Redshift destinations because they are not supported by the Amazon Redshift @COPY@ operation that reads from the S3 bucket.
+sdcCompressionFormat :: Lens' S3DestinationConfiguration (Maybe CompressionFormat)
+sdcCompressionFormat = lens _sdcCompressionFormat (\ s a -> s{_sdcCompressionFormat = a})
+
+-- | The buffering option. If no value is specified, @BufferingHints@ object default values are used.
+sdcBufferingHints :: Lens' S3DestinationConfiguration (Maybe BufferingHints)
+sdcBufferingHints = lens _sdcBufferingHints (\ s a -> s{_sdcBufferingHints = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+sdcRoleARN :: Lens' S3DestinationConfiguration Text
+sdcRoleARN = lens _sdcRoleARN (\ s a -> s{_sdcRoleARN = a})
+
+-- | The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+sdcBucketARN :: Lens' S3DestinationConfiguration Text
+sdcBucketARN = lens _sdcBucketARN (\ s a -> s{_sdcBucketARN = a})
+
+instance Hashable S3DestinationConfiguration where
+
+instance NFData S3DestinationConfiguration where
+
+instance ToJSON S3DestinationConfiguration where
+        toJSON S3DestinationConfiguration'{..}
+          = object
+              (catMaybes
+                 [("Prefix" .=) <$> _sdcPrefix,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _sdcCloudWatchLoggingOptions,
+                  ("EncryptionConfiguration" .=) <$>
+                    _sdcEncryptionConfiguration,
+                  ("CompressionFormat" .=) <$> _sdcCompressionFormat,
+                  ("BufferingHints" .=) <$> _sdcBufferingHints,
+                  Just ("RoleARN" .= _sdcRoleARN),
+                  Just ("BucketARN" .= _sdcBucketARN)])
+
+-- | Describes a destination in Amazon S3.
+--
+--
+--
+-- /See:/ 's3DestinationDescription' smart constructor.
+data S3DestinationDescription = S3DestinationDescription'
+  { _s3Prefix                   :: !(Maybe Text)
+  , _s3CloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _s3RoleARN                  :: !Text
+  , _s3BucketARN                :: !Text
+  , _s3BufferingHints           :: !BufferingHints
+  , _s3CompressionFormat        :: !CompressionFormat
+  , _s3EncryptionConfiguration  :: !EncryptionConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3DestinationDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 's3Prefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+--
+-- * 's3CloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 's3RoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 's3BucketARN' - The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 's3BufferingHints' - The buffering option. If no value is specified, @BufferingHints@ object default values are used.
+--
+-- * 's3CompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
+--
+-- * 's3EncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
+s3DestinationDescription
+    :: Text -- ^ 's3RoleARN'
+    -> Text -- ^ 's3BucketARN'
+    -> BufferingHints -- ^ 's3BufferingHints'
+    -> CompressionFormat -- ^ 's3CompressionFormat'
+    -> EncryptionConfiguration -- ^ 's3EncryptionConfiguration'
+    -> S3DestinationDescription
+s3DestinationDescription pRoleARN_ pBucketARN_ pBufferingHints_ pCompressionFormat_ pEncryptionConfiguration_ =
+  S3DestinationDescription'
+    { _s3Prefix = Nothing
+    , _s3CloudWatchLoggingOptions = Nothing
+    , _s3RoleARN = pRoleARN_
+    , _s3BucketARN = pBucketARN_
+    , _s3BufferingHints = pBufferingHints_
+    , _s3CompressionFormat = pCompressionFormat_
+    , _s3EncryptionConfiguration = pEncryptionConfiguration_
+    }
+
+
+-- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+s3Prefix :: Lens' S3DestinationDescription (Maybe Text)
+s3Prefix = lens _s3Prefix (\ s a -> s{_s3Prefix = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+s3CloudWatchLoggingOptions :: Lens' S3DestinationDescription (Maybe CloudWatchLoggingOptions)
+s3CloudWatchLoggingOptions = lens _s3CloudWatchLoggingOptions (\ s a -> s{_s3CloudWatchLoggingOptions = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+s3RoleARN :: Lens' S3DestinationDescription Text
+s3RoleARN = lens _s3RoleARN (\ s a -> s{_s3RoleARN = a})
+
+-- | The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+s3BucketARN :: Lens' S3DestinationDescription Text
+s3BucketARN = lens _s3BucketARN (\ s a -> s{_s3BucketARN = a})
+
+-- | The buffering option. If no value is specified, @BufferingHints@ object default values are used.
+s3BufferingHints :: Lens' S3DestinationDescription BufferingHints
+s3BufferingHints = lens _s3BufferingHints (\ s a -> s{_s3BufferingHints = a})
+
+-- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ .
+s3CompressionFormat :: Lens' S3DestinationDescription CompressionFormat
+s3CompressionFormat = lens _s3CompressionFormat (\ s a -> s{_s3CompressionFormat = a})
+
+-- | The encryption configuration. If no value is specified, the default is no encryption.
+s3EncryptionConfiguration :: Lens' S3DestinationDescription EncryptionConfiguration
+s3EncryptionConfiguration = lens _s3EncryptionConfiguration (\ s a -> s{_s3EncryptionConfiguration = a})
+
+instance FromJSON S3DestinationDescription where
+        parseJSON
+          = withObject "S3DestinationDescription"
+              (\ x ->
+                 S3DestinationDescription' <$>
+                   (x .:? "Prefix") <*>
+                     (x .:? "CloudWatchLoggingOptions")
+                     <*> (x .: "RoleARN")
+                     <*> (x .: "BucketARN")
+                     <*> (x .: "BufferingHints")
+                     <*> (x .: "CompressionFormat")
+                     <*> (x .: "EncryptionConfiguration"))
+
+instance Hashable S3DestinationDescription where
+
+instance NFData S3DestinationDescription where
+
+-- | Describes an update for a destination in Amazon S3.
+--
+--
+--
+-- /See:/ 's3DestinationUpdate' smart constructor.
+data S3DestinationUpdate = S3DestinationUpdate'
+  { _sPrefix                   :: !(Maybe Text)
+  , _sCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+  , _sEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
+  , _sCompressionFormat        :: !(Maybe CompressionFormat)
+  , _sBufferingHints           :: !(Maybe BufferingHints)
+  , _sBucketARN                :: !(Maybe Text)
+  , _sRoleARN                  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3DestinationUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sPrefix' - The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+--
+-- * 'sCloudWatchLoggingOptions' - The CloudWatch logging options for your delivery stream.
+--
+-- * 'sEncryptionConfiguration' - The encryption configuration. If no value is specified, the default is no encryption.
+--
+-- * 'sCompressionFormat' - The compression format. If no value is specified, the default is @UNCOMPRESSED@ . The compression formats @SNAPPY@ or @ZIP@ cannot be specified for Amazon Redshift destinations because they are not supported by the Amazon Redshift @COPY@ operation that reads from the S3 bucket.
+--
+-- * 'sBufferingHints' - The buffering option. If no value is specified, @BufferingHints@ object default values are used.
+--
+-- * 'sBucketARN' - The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+--
+-- * 'sRoleARN' - The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+s3DestinationUpdate
+    :: S3DestinationUpdate
+s3DestinationUpdate =
+  S3DestinationUpdate'
+    { _sPrefix = Nothing
+    , _sCloudWatchLoggingOptions = Nothing
+    , _sEncryptionConfiguration = Nothing
+    , _sCompressionFormat = Nothing
+    , _sBufferingHints = Nothing
+    , _sBucketARN = Nothing
+    , _sRoleARN = Nothing
+    }
+
+
+-- | The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered Amazon S3 files. You can specify an extra prefix to be added in front of the time format prefix. If the prefix ends with a slash, it appears as a folder in the S3 bucket. For more information, see <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name Amazon S3 Object Name Format> in the /Amazon Kinesis Data Firehose Developer Guide/ .
+sPrefix :: Lens' S3DestinationUpdate (Maybe Text)
+sPrefix = lens _sPrefix (\ s a -> s{_sPrefix = a})
+
+-- | The CloudWatch logging options for your delivery stream.
+sCloudWatchLoggingOptions :: Lens' S3DestinationUpdate (Maybe CloudWatchLoggingOptions)
+sCloudWatchLoggingOptions = lens _sCloudWatchLoggingOptions (\ s a -> s{_sCloudWatchLoggingOptions = a})
+
+-- | The encryption configuration. If no value is specified, the default is no encryption.
+sEncryptionConfiguration :: Lens' S3DestinationUpdate (Maybe EncryptionConfiguration)
+sEncryptionConfiguration = lens _sEncryptionConfiguration (\ s a -> s{_sEncryptionConfiguration = a})
+
+-- | The compression format. If no value is specified, the default is @UNCOMPRESSED@ . The compression formats @SNAPPY@ or @ZIP@ cannot be specified for Amazon Redshift destinations because they are not supported by the Amazon Redshift @COPY@ operation that reads from the S3 bucket.
+sCompressionFormat :: Lens' S3DestinationUpdate (Maybe CompressionFormat)
+sCompressionFormat = lens _sCompressionFormat (\ s a -> s{_sCompressionFormat = a})
+
+-- | The buffering option. If no value is specified, @BufferingHints@ object default values are used.
+sBufferingHints :: Lens' S3DestinationUpdate (Maybe BufferingHints)
+sBufferingHints = lens _sBufferingHints (\ s a -> s{_sBufferingHints = a})
+
+-- | The ARN of the S3 bucket. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+sBucketARN :: Lens' S3DestinationUpdate (Maybe Text)
+sBucketARN = lens _sBucketARN (\ s a -> s{_sBucketARN = a})
+
+-- | The Amazon Resource Name (ARN) of the AWS credentials. For more information, see <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
+sRoleARN :: Lens' S3DestinationUpdate (Maybe Text)
+sRoleARN = lens _sRoleARN (\ s a -> s{_sRoleARN = a})
+
+instance Hashable S3DestinationUpdate where
+
+instance NFData S3DestinationUpdate where
+
+instance ToJSON S3DestinationUpdate where
+        toJSON S3DestinationUpdate'{..}
+          = object
+              (catMaybes
+                 [("Prefix" .=) <$> _sPrefix,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _sCloudWatchLoggingOptions,
+                  ("EncryptionConfiguration" .=) <$>
+                    _sEncryptionConfiguration,
+                  ("CompressionFormat" .=) <$> _sCompressionFormat,
+                  ("BufferingHints" .=) <$> _sBufferingHints,
+                  ("BucketARN" .=) <$> _sBucketARN,
+                  ("RoleARN" .=) <$> _sRoleARN])
+
+-- | Specifies the schema to which you want Kinesis Data Firehose to configure your data before it writes it to Amazon S3.
+--
+--
+--
+-- /See:/ 'schemaConfiguration' smart constructor.
+data SchemaConfiguration = SchemaConfiguration'
+  { _scVersionId    :: !(Maybe Text)
+  , _scCatalogId    :: !(Maybe Text)
+  , _scDatabaseName :: !(Maybe Text)
+  , _scRegion       :: !(Maybe Text)
+  , _scTableName    :: !(Maybe Text)
+  , _scRoleARN      :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SchemaConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scVersionId' - Specifies the table version for the output data schema. If you don't specify this version ID, or if you set it to @LATEST@ , Kinesis Data Firehose uses the most recent version. This means that any updates to the table are automatically picked up.
+--
+-- * 'scCatalogId' - The ID of the AWS Glue Data Catalog. If you don't supply this, the AWS account ID is used by default.
+--
+-- * 'scDatabaseName' - Specifies the name of the AWS Glue database that contains the schema for the output data.
+--
+-- * 'scRegion' - If you don't specify an AWS Region, the default is the current Region.
+--
+-- * 'scTableName' - Specifies the AWS Glue table that contains the column information that constitutes your data schema.
+--
+-- * 'scRoleARN' - The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
+schemaConfiguration
+    :: SchemaConfiguration
+schemaConfiguration =
+  SchemaConfiguration'
+    { _scVersionId = Nothing
+    , _scCatalogId = Nothing
+    , _scDatabaseName = Nothing
+    , _scRegion = Nothing
+    , _scTableName = Nothing
+    , _scRoleARN = Nothing
+    }
+
+
+-- | Specifies the table version for the output data schema. If you don't specify this version ID, or if you set it to @LATEST@ , Kinesis Data Firehose uses the most recent version. This means that any updates to the table are automatically picked up.
+scVersionId :: Lens' SchemaConfiguration (Maybe Text)
+scVersionId = lens _scVersionId (\ s a -> s{_scVersionId = a})
+
+-- | The ID of the AWS Glue Data Catalog. If you don't supply this, the AWS account ID is used by default.
+scCatalogId :: Lens' SchemaConfiguration (Maybe Text)
+scCatalogId = lens _scCatalogId (\ s a -> s{_scCatalogId = a})
+
+-- | Specifies the name of the AWS Glue database that contains the schema for the output data.
+scDatabaseName :: Lens' SchemaConfiguration (Maybe Text)
+scDatabaseName = lens _scDatabaseName (\ s a -> s{_scDatabaseName = a})
+
+-- | If you don't specify an AWS Region, the default is the current Region.
+scRegion :: Lens' SchemaConfiguration (Maybe Text)
+scRegion = lens _scRegion (\ s a -> s{_scRegion = a})
+
+-- | Specifies the AWS Glue table that contains the column information that constitutes your data schema.
+scTableName :: Lens' SchemaConfiguration (Maybe Text)
+scTableName = lens _scTableName (\ s a -> s{_scTableName = a})
+
+-- | The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
+scRoleARN :: Lens' SchemaConfiguration (Maybe Text)
+scRoleARN = lens _scRoleARN (\ s a -> s{_scRoleARN = a})
+
+instance FromJSON SchemaConfiguration where
+        parseJSON
+          = withObject "SchemaConfiguration"
+              (\ x ->
+                 SchemaConfiguration' <$>
+                   (x .:? "VersionId") <*> (x .:? "CatalogId") <*>
+                     (x .:? "DatabaseName")
+                     <*> (x .:? "Region")
+                     <*> (x .:? "TableName")
+                     <*> (x .:? "RoleARN"))
+
+instance Hashable SchemaConfiguration where
+
+instance NFData SchemaConfiguration where
+
+instance ToJSON SchemaConfiguration where
+        toJSON SchemaConfiguration'{..}
+          = object
+              (catMaybes
+                 [("VersionId" .=) <$> _scVersionId,
+                  ("CatalogId" .=) <$> _scCatalogId,
+                  ("DatabaseName" .=) <$> _scDatabaseName,
+                  ("Region" .=) <$> _scRegion,
+                  ("TableName" .=) <$> _scTableName,
+                  ("RoleARN" .=) <$> _scRoleARN])
+
+-- | The serializer that you want Kinesis Data Firehose to use to convert data to the target format before writing it to Amazon S3. Kinesis Data Firehose supports two types of serializers: the <https://hive.apache.org/javadocs/r1.2.2/api/org/apache/hadoop/hive/ql/io/orc/OrcSerde.html ORC SerDe> and the <https://hive.apache.org/javadocs/r1.2.2/api/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.html Parquet SerDe> .
+--
+--
+--
+-- /See:/ 'serializer' smart constructor.
+data Serializer = Serializer'
+  { _sOrcSerDe     :: !(Maybe OrcSerDe)
+  , _sParquetSerDe :: !(Maybe ParquetSerDe)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Serializer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sOrcSerDe' - A serializer to use for converting data to the ORC format before storing it in Amazon S3. For more information, see <https://orc.apache.org/docs/ Apache ORC> .
+--
+-- * 'sParquetSerDe' - A serializer to use for converting data to the Parquet format before storing it in Amazon S3. For more information, see <https://parquet.apache.org/documentation/latest/ Apache Parquet> .
+serializer
+    :: Serializer
+serializer = Serializer' {_sOrcSerDe = Nothing, _sParquetSerDe = Nothing}
+
+
+-- | A serializer to use for converting data to the ORC format before storing it in Amazon S3. For more information, see <https://orc.apache.org/docs/ Apache ORC> .
+sOrcSerDe :: Lens' Serializer (Maybe OrcSerDe)
+sOrcSerDe = lens _sOrcSerDe (\ s a -> s{_sOrcSerDe = a})
+
+-- | A serializer to use for converting data to the Parquet format before storing it in Amazon S3. For more information, see <https://parquet.apache.org/documentation/latest/ Apache Parquet> .
+sParquetSerDe :: Lens' Serializer (Maybe ParquetSerDe)
+sParquetSerDe = lens _sParquetSerDe (\ s a -> s{_sParquetSerDe = a})
+
+instance FromJSON Serializer where
+        parseJSON
+          = withObject "Serializer"
+              (\ x ->
+                 Serializer' <$>
+                   (x .:? "OrcSerDe") <*> (x .:? "ParquetSerDe"))
+
+instance Hashable Serializer where
+
+instance NFData Serializer where
+
+instance ToJSON Serializer where
+        toJSON Serializer'{..}
+          = object
+              (catMaybes
+                 [("OrcSerDe" .=) <$> _sOrcSerDe,
+                  ("ParquetSerDe" .=) <$> _sParquetSerDe])
+
+-- | Details about a Kinesis data stream used as the source for a Kinesis Data Firehose delivery stream.
+--
+--
+--
+-- /See:/ 'sourceDescription' smart constructor.
+newtype SourceDescription = SourceDescription'
+  { _sdKinesisStreamSourceDescription :: Maybe KinesisStreamSourceDescription
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SourceDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdKinesisStreamSourceDescription' - The 'KinesisStreamSourceDescription' value for the source Kinesis data stream.
+sourceDescription
+    :: SourceDescription
+sourceDescription =
+  SourceDescription' {_sdKinesisStreamSourceDescription = Nothing}
+
+
+-- | The 'KinesisStreamSourceDescription' value for the source Kinesis data stream.
+sdKinesisStreamSourceDescription :: Lens' SourceDescription (Maybe KinesisStreamSourceDescription)
+sdKinesisStreamSourceDescription = lens _sdKinesisStreamSourceDescription (\ s a -> s{_sdKinesisStreamSourceDescription = a})
+
+instance FromJSON SourceDescription where
+        parseJSON
+          = withObject "SourceDescription"
+              (\ x ->
+                 SourceDescription' <$>
+                   (x .:? "KinesisStreamSourceDescription"))
+
+instance Hashable SourceDescription where
+
+instance NFData SourceDescription where
+
+-- | Describes the configuration of a destination in Splunk.
+--
+--
+--
+-- /See:/ 'splunkDestinationConfiguration' smart constructor.
+data SplunkDestinationConfiguration = SplunkDestinationConfiguration'
+  { _splS3BackupMode                      :: !(Maybe SplunkS3BackupMode)
+  , _splCloudWatchLoggingOptions          :: !(Maybe CloudWatchLoggingOptions)
+  , _splHECAcknowledgmentTimeoutInSeconds :: !(Maybe Nat)
+  , _splRetryOptions                      :: !(Maybe SplunkRetryOptions)
+  , _splProcessingConfiguration           :: !(Maybe ProcessingConfiguration)
+  , _splHECEndpoint                       :: !Text
+  , _splHECEndpointType                   :: !HECEndpointType
+  , _splHECToken                          :: !Text
+  , _splS3Configuration                   :: !S3DestinationConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SplunkDestinationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'splS3BackupMode' - Defines how documents should be delivered to Amazon S3. When set to @FailedDocumentsOnly@ , Kinesis Data Firehose writes any data that could not be indexed to the configured Amazon S3 destination. When set to @AllDocuments@ , Kinesis Data Firehose delivers all incoming records to Amazon S3, and also writes failed documents to Amazon S3. Default value is @FailedDocumentsOnly@ .
+--
+-- * 'splCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'splHECAcknowledgmentTimeoutInSeconds' - The amount of time that Kinesis Data Firehose waits to receive an acknowledgment from Splunk after it sends it data. At the end of the timeout period, Kinesis Data Firehose either tries to send the data again or considers it an error, based on your retry settings.
+--
+-- * 'splRetryOptions' - The retry behavior in case Kinesis Data Firehose is unable to deliver data to Splunk, or if it doesn't receive an acknowledgment of receipt from Splunk.
+--
+-- * 'splProcessingConfiguration' - The data processing configuration.
+--
+-- * 'splHECEndpoint' - The HTTP Event Collector (HEC) endpoint to which Kinesis Data Firehose sends your data.
+--
+-- * 'splHECEndpointType' - This type can be either "Raw" or "Event."
+--
+-- * 'splHECToken' - This is a GUID that you obtain from your Splunk cluster when you create a new HEC endpoint.
+--
+-- * 'splS3Configuration' - The configuration for the backup Amazon S3 location.
+splunkDestinationConfiguration
+    :: Text -- ^ 'splHECEndpoint'
+    -> HECEndpointType -- ^ 'splHECEndpointType'
+    -> Text -- ^ 'splHECToken'
+    -> S3DestinationConfiguration -- ^ 'splS3Configuration'
+    -> SplunkDestinationConfiguration
+splunkDestinationConfiguration pHECEndpoint_ pHECEndpointType_ pHECToken_ pS3Configuration_ =
+  SplunkDestinationConfiguration'
+    { _splS3BackupMode = Nothing
+    , _splCloudWatchLoggingOptions = Nothing
+    , _splHECAcknowledgmentTimeoutInSeconds = Nothing
+    , _splRetryOptions = Nothing
+    , _splProcessingConfiguration = Nothing
+    , _splHECEndpoint = pHECEndpoint_
+    , _splHECEndpointType = pHECEndpointType_
+    , _splHECToken = pHECToken_
+    , _splS3Configuration = pS3Configuration_
+    }
+
+
+-- | Defines how documents should be delivered to Amazon S3. When set to @FailedDocumentsOnly@ , Kinesis Data Firehose writes any data that could not be indexed to the configured Amazon S3 destination. When set to @AllDocuments@ , Kinesis Data Firehose delivers all incoming records to Amazon S3, and also writes failed documents to Amazon S3. Default value is @FailedDocumentsOnly@ .
+splS3BackupMode :: Lens' SplunkDestinationConfiguration (Maybe SplunkS3BackupMode)
+splS3BackupMode = lens _splS3BackupMode (\ s a -> s{_splS3BackupMode = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+splCloudWatchLoggingOptions :: Lens' SplunkDestinationConfiguration (Maybe CloudWatchLoggingOptions)
+splCloudWatchLoggingOptions = lens _splCloudWatchLoggingOptions (\ s a -> s{_splCloudWatchLoggingOptions = a})
+
+-- | The amount of time that Kinesis Data Firehose waits to receive an acknowledgment from Splunk after it sends it data. At the end of the timeout period, Kinesis Data Firehose either tries to send the data again or considers it an error, based on your retry settings.
+splHECAcknowledgmentTimeoutInSeconds :: Lens' SplunkDestinationConfiguration (Maybe Natural)
+splHECAcknowledgmentTimeoutInSeconds = lens _splHECAcknowledgmentTimeoutInSeconds (\ s a -> s{_splHECAcknowledgmentTimeoutInSeconds = a}) . mapping _Nat
+
+-- | The retry behavior in case Kinesis Data Firehose is unable to deliver data to Splunk, or if it doesn't receive an acknowledgment of receipt from Splunk.
+splRetryOptions :: Lens' SplunkDestinationConfiguration (Maybe SplunkRetryOptions)
+splRetryOptions = lens _splRetryOptions (\ s a -> s{_splRetryOptions = a})
+
+-- | The data processing configuration.
+splProcessingConfiguration :: Lens' SplunkDestinationConfiguration (Maybe ProcessingConfiguration)
+splProcessingConfiguration = lens _splProcessingConfiguration (\ s a -> s{_splProcessingConfiguration = a})
+
+-- | The HTTP Event Collector (HEC) endpoint to which Kinesis Data Firehose sends your data.
+splHECEndpoint :: Lens' SplunkDestinationConfiguration Text
+splHECEndpoint = lens _splHECEndpoint (\ s a -> s{_splHECEndpoint = a})
+
+-- | This type can be either "Raw" or "Event."
+splHECEndpointType :: Lens' SplunkDestinationConfiguration HECEndpointType
+splHECEndpointType = lens _splHECEndpointType (\ s a -> s{_splHECEndpointType = a})
+
+-- | This is a GUID that you obtain from your Splunk cluster when you create a new HEC endpoint.
+splHECToken :: Lens' SplunkDestinationConfiguration Text
+splHECToken = lens _splHECToken (\ s a -> s{_splHECToken = a})
+
+-- | The configuration for the backup Amazon S3 location.
+splS3Configuration :: Lens' SplunkDestinationConfiguration S3DestinationConfiguration
+splS3Configuration = lens _splS3Configuration (\ s a -> s{_splS3Configuration = a})
+
+instance Hashable SplunkDestinationConfiguration
+         where
+
+instance NFData SplunkDestinationConfiguration where
+
+instance ToJSON SplunkDestinationConfiguration where
+        toJSON SplunkDestinationConfiguration'{..}
+          = object
+              (catMaybes
+                 [("S3BackupMode" .=) <$> _splS3BackupMode,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _splCloudWatchLoggingOptions,
+                  ("HECAcknowledgmentTimeoutInSeconds" .=) <$>
+                    _splHECAcknowledgmentTimeoutInSeconds,
+                  ("RetryOptions" .=) <$> _splRetryOptions,
+                  ("ProcessingConfiguration" .=) <$>
+                    _splProcessingConfiguration,
+                  Just ("HECEndpoint" .= _splHECEndpoint),
+                  Just ("HECEndpointType" .= _splHECEndpointType),
+                  Just ("HECToken" .= _splHECToken),
+                  Just ("S3Configuration" .= _splS3Configuration)])
+
+-- | Describes a destination in Splunk.
+--
+--
+--
+-- /See:/ 'splunkDestinationDescription' smart constructor.
+data SplunkDestinationDescription = SplunkDestinationDescription'
+  { _sddS3BackupMode                      :: !(Maybe SplunkS3BackupMode)
+  , _sddHECToken                          :: !(Maybe Text)
+  , _sddHECEndpointType                   :: !(Maybe HECEndpointType)
+  , _sddCloudWatchLoggingOptions          :: !(Maybe CloudWatchLoggingOptions)
+  , _sddHECAcknowledgmentTimeoutInSeconds :: !(Maybe Nat)
+  , _sddS3DestinationDescription          :: !(Maybe S3DestinationDescription)
+  , _sddHECEndpoint                       :: !(Maybe Text)
+  , _sddRetryOptions                      :: !(Maybe SplunkRetryOptions)
+  , _sddProcessingConfiguration           :: !(Maybe ProcessingConfiguration)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SplunkDestinationDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sddS3BackupMode' - Defines how documents should be delivered to Amazon S3. When set to @FailedDocumentsOnly@ , Kinesis Data Firehose writes any data that could not be indexed to the configured Amazon S3 destination. When set to @AllDocuments@ , Kinesis Data Firehose delivers all incoming records to Amazon S3, and also writes failed documents to Amazon S3. Default value is @FailedDocumentsOnly@ .
+--
+-- * 'sddHECToken' - A GUID you obtain from your Splunk cluster when you create a new HEC endpoint.
+--
+-- * 'sddHECEndpointType' - This type can be either "Raw" or "Event."
+--
+-- * 'sddCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'sddHECAcknowledgmentTimeoutInSeconds' - The amount of time that Kinesis Data Firehose waits to receive an acknowledgment from Splunk after it sends it data. At the end of the timeout period, Kinesis Data Firehose either tries to send the data again or considers it an error, based on your retry settings.
+--
+-- * 'sddS3DestinationDescription' - The Amazon S3 destination.>
+--
+-- * 'sddHECEndpoint' - The HTTP Event Collector (HEC) endpoint to which Kinesis Data Firehose sends your data.
+--
+-- * 'sddRetryOptions' - The retry behavior in case Kinesis Data Firehose is unable to deliver data to Splunk or if it doesn't receive an acknowledgment of receipt from Splunk.
+--
+-- * 'sddProcessingConfiguration' - The data processing configuration.
+splunkDestinationDescription
+    :: SplunkDestinationDescription
+splunkDestinationDescription =
+  SplunkDestinationDescription'
+    { _sddS3BackupMode = Nothing
+    , _sddHECToken = Nothing
+    , _sddHECEndpointType = Nothing
+    , _sddCloudWatchLoggingOptions = Nothing
+    , _sddHECAcknowledgmentTimeoutInSeconds = Nothing
+    , _sddS3DestinationDescription = Nothing
+    , _sddHECEndpoint = Nothing
+    , _sddRetryOptions = Nothing
+    , _sddProcessingConfiguration = Nothing
+    }
+
+
+-- | Defines how documents should be delivered to Amazon S3. When set to @FailedDocumentsOnly@ , Kinesis Data Firehose writes any data that could not be indexed to the configured Amazon S3 destination. When set to @AllDocuments@ , Kinesis Data Firehose delivers all incoming records to Amazon S3, and also writes failed documents to Amazon S3. Default value is @FailedDocumentsOnly@ .
+sddS3BackupMode :: Lens' SplunkDestinationDescription (Maybe SplunkS3BackupMode)
+sddS3BackupMode = lens _sddS3BackupMode (\ s a -> s{_sddS3BackupMode = a})
+
+-- | A GUID you obtain from your Splunk cluster when you create a new HEC endpoint.
+sddHECToken :: Lens' SplunkDestinationDescription (Maybe Text)
+sddHECToken = lens _sddHECToken (\ s a -> s{_sddHECToken = a})
+
+-- | This type can be either "Raw" or "Event."
+sddHECEndpointType :: Lens' SplunkDestinationDescription (Maybe HECEndpointType)
+sddHECEndpointType = lens _sddHECEndpointType (\ s a -> s{_sddHECEndpointType = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+sddCloudWatchLoggingOptions :: Lens' SplunkDestinationDescription (Maybe CloudWatchLoggingOptions)
+sddCloudWatchLoggingOptions = lens _sddCloudWatchLoggingOptions (\ s a -> s{_sddCloudWatchLoggingOptions = a})
+
+-- | The amount of time that Kinesis Data Firehose waits to receive an acknowledgment from Splunk after it sends it data. At the end of the timeout period, Kinesis Data Firehose either tries to send the data again or considers it an error, based on your retry settings.
+sddHECAcknowledgmentTimeoutInSeconds :: Lens' SplunkDestinationDescription (Maybe Natural)
+sddHECAcknowledgmentTimeoutInSeconds = lens _sddHECAcknowledgmentTimeoutInSeconds (\ s a -> s{_sddHECAcknowledgmentTimeoutInSeconds = a}) . mapping _Nat
+
+-- | The Amazon S3 destination.>
+sddS3DestinationDescription :: Lens' SplunkDestinationDescription (Maybe S3DestinationDescription)
+sddS3DestinationDescription = lens _sddS3DestinationDescription (\ s a -> s{_sddS3DestinationDescription = a})
+
+-- | The HTTP Event Collector (HEC) endpoint to which Kinesis Data Firehose sends your data.
+sddHECEndpoint :: Lens' SplunkDestinationDescription (Maybe Text)
+sddHECEndpoint = lens _sddHECEndpoint (\ s a -> s{_sddHECEndpoint = a})
+
+-- | The retry behavior in case Kinesis Data Firehose is unable to deliver data to Splunk or if it doesn't receive an acknowledgment of receipt from Splunk.
+sddRetryOptions :: Lens' SplunkDestinationDescription (Maybe SplunkRetryOptions)
+sddRetryOptions = lens _sddRetryOptions (\ s a -> s{_sddRetryOptions = a})
+
+-- | The data processing configuration.
+sddProcessingConfiguration :: Lens' SplunkDestinationDescription (Maybe ProcessingConfiguration)
+sddProcessingConfiguration = lens _sddProcessingConfiguration (\ s a -> s{_sddProcessingConfiguration = a})
+
+instance FromJSON SplunkDestinationDescription where
+        parseJSON
+          = withObject "SplunkDestinationDescription"
+              (\ x ->
+                 SplunkDestinationDescription' <$>
+                   (x .:? "S3BackupMode") <*> (x .:? "HECToken") <*>
+                     (x .:? "HECEndpointType")
+                     <*> (x .:? "CloudWatchLoggingOptions")
+                     <*> (x .:? "HECAcknowledgmentTimeoutInSeconds")
+                     <*> (x .:? "S3DestinationDescription")
+                     <*> (x .:? "HECEndpoint")
+                     <*> (x .:? "RetryOptions")
+                     <*> (x .:? "ProcessingConfiguration"))
+
+instance Hashable SplunkDestinationDescription where
+
+instance NFData SplunkDestinationDescription where
+
+-- | Describes an update for a destination in Splunk.
+--
+--
+--
+-- /See:/ 'splunkDestinationUpdate' smart constructor.
+data SplunkDestinationUpdate = SplunkDestinationUpdate'
+  { _sduS3BackupMode                      :: !(Maybe SplunkS3BackupMode)
+  , _sduHECToken                          :: !(Maybe Text)
+  , _sduHECEndpointType                   :: !(Maybe HECEndpointType)
+  , _sduCloudWatchLoggingOptions          :: !(Maybe CloudWatchLoggingOptions)
+  , _sduHECAcknowledgmentTimeoutInSeconds :: !(Maybe Nat)
+  , _sduS3Update                          :: !(Maybe S3DestinationUpdate)
+  , _sduHECEndpoint                       :: !(Maybe Text)
+  , _sduRetryOptions                      :: !(Maybe SplunkRetryOptions)
+  , _sduProcessingConfiguration           :: !(Maybe ProcessingConfiguration)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SplunkDestinationUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sduS3BackupMode' - Defines how documents should be delivered to Amazon S3. When set to @FailedDocumentsOnly@ , Kinesis Data Firehose writes any data that could not be indexed to the configured Amazon S3 destination. When set to @AllDocuments@ , Kinesis Data Firehose delivers all incoming records to Amazon S3, and also writes failed documents to Amazon S3. Default value is @FailedDocumentsOnly@ .
+--
+-- * 'sduHECToken' - A GUID that you obtain from your Splunk cluster when you create a new HEC endpoint.
+--
+-- * 'sduHECEndpointType' - This type can be either "Raw" or "Event."
+--
+-- * 'sduCloudWatchLoggingOptions' - The Amazon CloudWatch logging options for your delivery stream.
+--
+-- * 'sduHECAcknowledgmentTimeoutInSeconds' - The amount of time that Kinesis Data Firehose waits to receive an acknowledgment from Splunk after it sends data. At the end of the timeout period, Kinesis Data Firehose either tries to send the data again or considers it an error, based on your retry settings.
+--
+-- * 'sduS3Update' - Your update to the configuration of the backup Amazon S3 location.
+--
+-- * 'sduHECEndpoint' - The HTTP Event Collector (HEC) endpoint to which Kinesis Data Firehose sends your data.
+--
+-- * 'sduRetryOptions' - The retry behavior in case Kinesis Data Firehose is unable to deliver data to Splunk or if it doesn't receive an acknowledgment of receipt from Splunk.
+--
+-- * 'sduProcessingConfiguration' - The data processing configuration.
+splunkDestinationUpdate
+    :: SplunkDestinationUpdate
+splunkDestinationUpdate =
+  SplunkDestinationUpdate'
+    { _sduS3BackupMode = Nothing
+    , _sduHECToken = Nothing
+    , _sduHECEndpointType = Nothing
+    , _sduCloudWatchLoggingOptions = Nothing
+    , _sduHECAcknowledgmentTimeoutInSeconds = Nothing
+    , _sduS3Update = Nothing
+    , _sduHECEndpoint = Nothing
+    , _sduRetryOptions = Nothing
+    , _sduProcessingConfiguration = Nothing
+    }
+
+
+-- | Defines how documents should be delivered to Amazon S3. When set to @FailedDocumentsOnly@ , Kinesis Data Firehose writes any data that could not be indexed to the configured Amazon S3 destination. When set to @AllDocuments@ , Kinesis Data Firehose delivers all incoming records to Amazon S3, and also writes failed documents to Amazon S3. Default value is @FailedDocumentsOnly@ .
+sduS3BackupMode :: Lens' SplunkDestinationUpdate (Maybe SplunkS3BackupMode)
+sduS3BackupMode = lens _sduS3BackupMode (\ s a -> s{_sduS3BackupMode = a})
+
+-- | A GUID that you obtain from your Splunk cluster when you create a new HEC endpoint.
+sduHECToken :: Lens' SplunkDestinationUpdate (Maybe Text)
+sduHECToken = lens _sduHECToken (\ s a -> s{_sduHECToken = a})
+
+-- | This type can be either "Raw" or "Event."
+sduHECEndpointType :: Lens' SplunkDestinationUpdate (Maybe HECEndpointType)
+sduHECEndpointType = lens _sduHECEndpointType (\ s a -> s{_sduHECEndpointType = a})
+
+-- | The Amazon CloudWatch logging options for your delivery stream.
+sduCloudWatchLoggingOptions :: Lens' SplunkDestinationUpdate (Maybe CloudWatchLoggingOptions)
+sduCloudWatchLoggingOptions = lens _sduCloudWatchLoggingOptions (\ s a -> s{_sduCloudWatchLoggingOptions = a})
+
+-- | The amount of time that Kinesis Data Firehose waits to receive an acknowledgment from Splunk after it sends data. At the end of the timeout period, Kinesis Data Firehose either tries to send the data again or considers it an error, based on your retry settings.
+sduHECAcknowledgmentTimeoutInSeconds :: Lens' SplunkDestinationUpdate (Maybe Natural)
+sduHECAcknowledgmentTimeoutInSeconds = lens _sduHECAcknowledgmentTimeoutInSeconds (\ s a -> s{_sduHECAcknowledgmentTimeoutInSeconds = a}) . mapping _Nat
+
+-- | Your update to the configuration of the backup Amazon S3 location.
+sduS3Update :: Lens' SplunkDestinationUpdate (Maybe S3DestinationUpdate)
+sduS3Update = lens _sduS3Update (\ s a -> s{_sduS3Update = a})
+
+-- | The HTTP Event Collector (HEC) endpoint to which Kinesis Data Firehose sends your data.
+sduHECEndpoint :: Lens' SplunkDestinationUpdate (Maybe Text)
+sduHECEndpoint = lens _sduHECEndpoint (\ s a -> s{_sduHECEndpoint = a})
+
+-- | The retry behavior in case Kinesis Data Firehose is unable to deliver data to Splunk or if it doesn't receive an acknowledgment of receipt from Splunk.
+sduRetryOptions :: Lens' SplunkDestinationUpdate (Maybe SplunkRetryOptions)
+sduRetryOptions = lens _sduRetryOptions (\ s a -> s{_sduRetryOptions = a})
+
+-- | The data processing configuration.
+sduProcessingConfiguration :: Lens' SplunkDestinationUpdate (Maybe ProcessingConfiguration)
+sduProcessingConfiguration = lens _sduProcessingConfiguration (\ s a -> s{_sduProcessingConfiguration = a})
+
+instance Hashable SplunkDestinationUpdate where
+
+instance NFData SplunkDestinationUpdate where
+
+instance ToJSON SplunkDestinationUpdate where
+        toJSON SplunkDestinationUpdate'{..}
+          = object
+              (catMaybes
+                 [("S3BackupMode" .=) <$> _sduS3BackupMode,
+                  ("HECToken" .=) <$> _sduHECToken,
+                  ("HECEndpointType" .=) <$> _sduHECEndpointType,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _sduCloudWatchLoggingOptions,
+                  ("HECAcknowledgmentTimeoutInSeconds" .=) <$>
+                    _sduHECAcknowledgmentTimeoutInSeconds,
+                  ("S3Update" .=) <$> _sduS3Update,
+                  ("HECEndpoint" .=) <$> _sduHECEndpoint,
+                  ("RetryOptions" .=) <$> _sduRetryOptions,
+                  ("ProcessingConfiguration" .=) <$>
+                    _sduProcessingConfiguration])
+
+-- | Configures retry behavior in case Kinesis Data Firehose is unable to deliver documents to Splunk, or if it doesn't receive an acknowledgment from Splunk.
+--
+--
+--
+-- /See:/ 'splunkRetryOptions' smart constructor.
+newtype SplunkRetryOptions = SplunkRetryOptions'
+  { _sroDurationInSeconds :: Maybe Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SplunkRetryOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sroDurationInSeconds' - The total amount of time that Kinesis Data Firehose spends on retries. This duration starts after the initial attempt to send data to Splunk fails. It doesn't include the periods during which Kinesis Data Firehose waits for acknowledgment from Splunk after each attempt.
+splunkRetryOptions
+    :: SplunkRetryOptions
+splunkRetryOptions = SplunkRetryOptions' {_sroDurationInSeconds = Nothing}
+
+
+-- | The total amount of time that Kinesis Data Firehose spends on retries. This duration starts after the initial attempt to send data to Splunk fails. It doesn't include the periods during which Kinesis Data Firehose waits for acknowledgment from Splunk after each attempt.
+sroDurationInSeconds :: Lens' SplunkRetryOptions (Maybe Natural)
+sroDurationInSeconds = lens _sroDurationInSeconds (\ s a -> s{_sroDurationInSeconds = a}) . mapping _Nat
+
+instance FromJSON SplunkRetryOptions where
+        parseJSON
+          = withObject "SplunkRetryOptions"
+              (\ x ->
+                 SplunkRetryOptions' <$> (x .:? "DurationInSeconds"))
+
+instance Hashable SplunkRetryOptions where
+
+instance NFData SplunkRetryOptions where
+
+instance ToJSON SplunkRetryOptions where
+        toJSON SplunkRetryOptions'{..}
+          = object
+              (catMaybes
+                 [("DurationInSeconds" .=) <$> _sroDurationInSeconds])
+
+-- | Metadata that you can assign to a delivery stream, consisting of a key-value pair.
+--
+--
+--
+-- /See:/ 'tag' smart constructor.
+data Tag = Tag'
+  { _tagValue :: !(Maybe Text)
+  , _tagKey   :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagValue' - An optional string, which you can use to describe or define the tag. Maximum length: 256 characters. Valid characters: Unicode letters, digits, white space, _ . / = + - % @
+--
+-- * 'tagKey' - A unique identifier for the tag. Maximum length: 128 characters. Valid characters: Unicode letters, digits, white space, _ . / = + - % @
+tag
+    :: Text -- ^ 'tagKey'
+    -> Tag
+tag pKey_ = Tag' {_tagValue = Nothing, _tagKey = pKey_}
+
+
+-- | An optional string, which you can use to describe or define the tag. Maximum length: 256 characters. Valid characters: Unicode letters, digits, white space, _ . / = + - % @
+tagValue :: Lens' Tag (Maybe Text)
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a})
+
+-- | A unique identifier for the tag. Maximum length: 128 characters. Valid characters: Unicode letters, digits, white space, _ . / = + - % @
+tagKey :: Lens' Tag Text
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a})
+
+instance FromJSON Tag where
+        parseJSON
+          = withObject "Tag"
+              (\ x -> Tag' <$> (x .:? "Value") <*> (x .: "Key"))
+
+instance Hashable Tag where
+
+instance NFData Tag where
+
+instance ToJSON Tag where
+        toJSON Tag'{..}
+          = object
+              (catMaybes
+                 [("Value" .=) <$> _tagValue,
+                  Just ("Key" .= _tagKey)])
diff --git a/gen/Network/AWS/Firehose/Types/Sum.hs b/gen/Network/AWS/Firehose/Types/Sum.hs
--- a/gen/Network/AWS/Firehose/Types/Sum.hs
+++ b/gen/Network/AWS/Firehose/Types/Sum.hs
@@ -9,7 +9,7 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.Types.Sum
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -184,6 +184,36 @@
 instance FromJSON ElasticsearchS3BackupMode where
     parseJSON = parseJSONText "ElasticsearchS3BackupMode"
 
+data HECEndpointType
+  = Event
+  | Raw
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText HECEndpointType where
+    parser = takeLowerText >>= \case
+        "event" -> pure Event
+        "raw" -> pure Raw
+        e -> fromTextError $ "Failure parsing HECEndpointType from value: '" <> e
+           <> "'. Accepted values: event, raw"
+
+instance ToText HECEndpointType where
+    toText = \case
+        Event -> "Event"
+        Raw -> "Raw"
+
+instance Hashable     HECEndpointType
+instance NFData       HECEndpointType
+instance ToByteString HECEndpointType
+instance ToQuery      HECEndpointType
+instance ToHeader     HECEndpointType
+
+instance ToJSON HECEndpointType where
+    toJSON = toJSONText
+
+instance FromJSON HECEndpointType where
+    parseJSON = parseJSONText "HECEndpointType"
+
 data NoEncryptionConfig =
   NoEncryption
   deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
@@ -211,23 +241,158 @@
 instance FromJSON NoEncryptionConfig where
     parseJSON = parseJSONText "NoEncryptionConfig"
 
+data OrcCompression
+  = OCNone
+  | OCSnappy
+  | OCZlib
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText OrcCompression where
+    parser = takeLowerText >>= \case
+        "none" -> pure OCNone
+        "snappy" -> pure OCSnappy
+        "zlib" -> pure OCZlib
+        e -> fromTextError $ "Failure parsing OrcCompression from value: '" <> e
+           <> "'. Accepted values: none, snappy, zlib"
+
+instance ToText OrcCompression where
+    toText = \case
+        OCNone -> "NONE"
+        OCSnappy -> "SNAPPY"
+        OCZlib -> "ZLIB"
+
+instance Hashable     OrcCompression
+instance NFData       OrcCompression
+instance ToByteString OrcCompression
+instance ToQuery      OrcCompression
+instance ToHeader     OrcCompression
+
+instance ToJSON OrcCompression where
+    toJSON = toJSONText
+
+instance FromJSON OrcCompression where
+    parseJSON = parseJSONText "OrcCompression"
+
+data OrcFormatVersion
+  = V011
+  | V012
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText OrcFormatVersion where
+    parser = takeLowerText >>= \case
+        "v0_11" -> pure V011
+        "v0_12" -> pure V012
+        e -> fromTextError $ "Failure parsing OrcFormatVersion from value: '" <> e
+           <> "'. Accepted values: v0_11, v0_12"
+
+instance ToText OrcFormatVersion where
+    toText = \case
+        V011 -> "V0_11"
+        V012 -> "V0_12"
+
+instance Hashable     OrcFormatVersion
+instance NFData       OrcFormatVersion
+instance ToByteString OrcFormatVersion
+instance ToQuery      OrcFormatVersion
+instance ToHeader     OrcFormatVersion
+
+instance ToJSON OrcFormatVersion where
+    toJSON = toJSONText
+
+instance FromJSON OrcFormatVersion where
+    parseJSON = parseJSONText "OrcFormatVersion"
+
+data ParquetCompression
+  = PCGzip
+  | PCSnappy
+  | PCUncompressed
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ParquetCompression where
+    parser = takeLowerText >>= \case
+        "gzip" -> pure PCGzip
+        "snappy" -> pure PCSnappy
+        "uncompressed" -> pure PCUncompressed
+        e -> fromTextError $ "Failure parsing ParquetCompression from value: '" <> e
+           <> "'. Accepted values: gzip, snappy, uncompressed"
+
+instance ToText ParquetCompression where
+    toText = \case
+        PCGzip -> "GZIP"
+        PCSnappy -> "SNAPPY"
+        PCUncompressed -> "UNCOMPRESSED"
+
+instance Hashable     ParquetCompression
+instance NFData       ParquetCompression
+instance ToByteString ParquetCompression
+instance ToQuery      ParquetCompression
+instance ToHeader     ParquetCompression
+
+instance ToJSON ParquetCompression where
+    toJSON = toJSONText
+
+instance FromJSON ParquetCompression where
+    parseJSON = parseJSONText "ParquetCompression"
+
+data ParquetWriterVersion
+  = V1
+  | V2
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ParquetWriterVersion where
+    parser = takeLowerText >>= \case
+        "v1" -> pure V1
+        "v2" -> pure V2
+        e -> fromTextError $ "Failure parsing ParquetWriterVersion from value: '" <> e
+           <> "'. Accepted values: v1, v2"
+
+instance ToText ParquetWriterVersion where
+    toText = \case
+        V1 -> "V1"
+        V2 -> "V2"
+
+instance Hashable     ParquetWriterVersion
+instance NFData       ParquetWriterVersion
+instance ToByteString ParquetWriterVersion
+instance ToQuery      ParquetWriterVersion
+instance ToHeader     ParquetWriterVersion
+
+instance ToJSON ParquetWriterVersion where
+    toJSON = toJSONText
+
+instance FromJSON ParquetWriterVersion where
+    parseJSON = parseJSONText "ParquetWriterVersion"
+
 data ProcessorParameterName
-  = LambdaARN
+  = BufferIntervalInSeconds
+  | BufferSizeInMBs
+  | LambdaARN
   | NumberOfRetries
+  | RoleARN
   deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
 
 instance FromText ProcessorParameterName where
     parser = takeLowerText >>= \case
+        "bufferintervalinseconds" -> pure BufferIntervalInSeconds
+        "buffersizeinmbs" -> pure BufferSizeInMBs
         "lambdaarn" -> pure LambdaARN
         "numberofretries" -> pure NumberOfRetries
+        "rolearn" -> pure RoleARN
         e -> fromTextError $ "Failure parsing ProcessorParameterName from value: '" <> e
-           <> "'. Accepted values: lambdaarn, numberofretries"
+           <> "'. Accepted values: bufferintervalinseconds, buffersizeinmbs, lambdaarn, numberofretries, rolearn"
 
 instance ToText ProcessorParameterName where
     toText = \case
+        BufferIntervalInSeconds -> "BufferIntervalInSeconds"
+        BufferSizeInMBs -> "BufferSizeInMBs"
         LambdaARN -> "LambdaArn"
         NumberOfRetries -> "NumberOfRetries"
+        RoleARN -> "RoleArn"
 
 instance Hashable     ProcessorParameterName
 instance NFData       ProcessorParameterName
@@ -327,3 +492,33 @@
 
 instance FromJSON S3BackupMode where
     parseJSON = parseJSONText "S3BackupMode"
+
+data SplunkS3BackupMode
+  = AllEvents
+  | FailedEventsOnly
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText SplunkS3BackupMode where
+    parser = takeLowerText >>= \case
+        "allevents" -> pure AllEvents
+        "failedeventsonly" -> pure FailedEventsOnly
+        e -> fromTextError $ "Failure parsing SplunkS3BackupMode from value: '" <> e
+           <> "'. Accepted values: allevents, failedeventsonly"
+
+instance ToText SplunkS3BackupMode where
+    toText = \case
+        AllEvents -> "AllEvents"
+        FailedEventsOnly -> "FailedEventsOnly"
+
+instance Hashable     SplunkS3BackupMode
+instance NFData       SplunkS3BackupMode
+instance ToByteString SplunkS3BackupMode
+instance ToQuery      SplunkS3BackupMode
+instance ToHeader     SplunkS3BackupMode
+
+instance ToJSON SplunkS3BackupMode where
+    toJSON = toJSONText
+
+instance FromJSON SplunkS3BackupMode where
+    parseJSON = parseJSONText "SplunkS3BackupMode"
diff --git a/gen/Network/AWS/Firehose/UntagDeliveryStream.hs b/gen/Network/AWS/Firehose/UntagDeliveryStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Firehose/UntagDeliveryStream.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Firehose.UntagDeliveryStream
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes tags from the specified delivery stream. Removed tags are deleted, and you can't recover them after this operation successfully completes.
+--
+--
+-- If you specify a tag that doesn't exist, the operation ignores it.
+--
+-- This operation has a limit of five transactions per second per account.
+--
+module Network.AWS.Firehose.UntagDeliveryStream
+    (
+    -- * Creating a Request
+      untagDeliveryStream
+    , UntagDeliveryStream
+    -- * Request Lenses
+    , udsDeliveryStreamName
+    , udsTagKeys
+
+    -- * Destructuring the Response
+    , untagDeliveryStreamResponse
+    , UntagDeliveryStreamResponse
+    -- * Response Lenses
+    , udsrsResponseStatus
+    ) where
+
+import Network.AWS.Firehose.Types
+import Network.AWS.Firehose.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'untagDeliveryStream' smart constructor.
+data UntagDeliveryStream = UntagDeliveryStream'
+  { _udsDeliveryStreamName :: !Text
+  , _udsTagKeys            :: !(List1 Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UntagDeliveryStream' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udsDeliveryStreamName' - The name of the delivery stream.
+--
+-- * 'udsTagKeys' - A list of tag keys. Each corresponding tag is removed from the delivery stream.
+untagDeliveryStream
+    :: Text -- ^ 'udsDeliveryStreamName'
+    -> NonEmpty Text -- ^ 'udsTagKeys'
+    -> UntagDeliveryStream
+untagDeliveryStream pDeliveryStreamName_ pTagKeys_ =
+  UntagDeliveryStream'
+    { _udsDeliveryStreamName = pDeliveryStreamName_
+    , _udsTagKeys = _List1 # pTagKeys_
+    }
+
+
+-- | The name of the delivery stream.
+udsDeliveryStreamName :: Lens' UntagDeliveryStream Text
+udsDeliveryStreamName = lens _udsDeliveryStreamName (\ s a -> s{_udsDeliveryStreamName = a})
+
+-- | A list of tag keys. Each corresponding tag is removed from the delivery stream.
+udsTagKeys :: Lens' UntagDeliveryStream (NonEmpty Text)
+udsTagKeys = lens _udsTagKeys (\ s a -> s{_udsTagKeys = a}) . _List1
+
+instance AWSRequest UntagDeliveryStream where
+        type Rs UntagDeliveryStream =
+             UntagDeliveryStreamResponse
+        request = postJSON firehose
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UntagDeliveryStreamResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UntagDeliveryStream where
+
+instance NFData UntagDeliveryStream where
+
+instance ToHeaders UntagDeliveryStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Firehose_20150804.UntagDeliveryStream" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UntagDeliveryStream where
+        toJSON UntagDeliveryStream'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("DeliveryStreamName" .= _udsDeliveryStreamName),
+                  Just ("TagKeys" .= _udsTagKeys)])
+
+instance ToPath UntagDeliveryStream where
+        toPath = const "/"
+
+instance ToQuery UntagDeliveryStream where
+        toQuery = const mempty
+
+-- | /See:/ 'untagDeliveryStreamResponse' smart constructor.
+newtype UntagDeliveryStreamResponse = UntagDeliveryStreamResponse'
+  { _udsrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UntagDeliveryStreamResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udsrsResponseStatus' - -- | The response status code.
+untagDeliveryStreamResponse
+    :: Int -- ^ 'udsrsResponseStatus'
+    -> UntagDeliveryStreamResponse
+untagDeliveryStreamResponse pResponseStatus_ =
+  UntagDeliveryStreamResponse' {_udsrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+udsrsResponseStatus :: Lens' UntagDeliveryStreamResponse Int
+udsrsResponseStatus = lens _udsrsResponseStatus (\ s a -> s{_udsrsResponseStatus = a})
+
+instance NFData UntagDeliveryStreamResponse where
diff --git a/gen/Network/AWS/Firehose/UpdateDestination.hs b/gen/Network/AWS/Firehose/UpdateDestination.hs
--- a/gen/Network/AWS/Firehose/UpdateDestination.hs
+++ b/gen/Network/AWS/Firehose/UpdateDestination.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.UpdateDestination
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -21,15 +21,15 @@
 -- Updates the specified destination of the specified delivery stream.
 --
 --
--- You can use this operation to change the destination type (for example, to replace the Amazon S3 destination with Amazon Redshift) or change the parameters associated with a destination (for example, to change the bucket name of the Amazon S3 destination). The update might not occur immediately. The target delivery stream remains active while the configurations are updated, so data writes to the delivery stream can continue during this process. The updated configurations are usually effective within a few minutes.
+-- Use this operation to change the destination type (for example, to replace the Amazon S3 destination with Amazon Redshift) or change the parameters associated with a destination (for example, to change the bucket name of the Amazon S3 destination). The update might not occur immediately. The target delivery stream remains active while the configurations are updated, so data writes to the delivery stream can continue during this process. The updated configurations are usually effective within a few minutes.
 --
--- Note that switching between Amazon ES and other services is not supported. For an Amazon ES destination, you can only update to another Amazon ES destination.
+-- Switching between Amazon ES and other services is not supported. For an Amazon ES destination, you can only update to another Amazon ES destination.
 --
--- If the destination type is the same, Kinesis Firehose merges the configuration parameters specified with the destination configuration that already exists on the delivery stream. If any of the parameters are not specified in the call, the existing values are retained. For example, in the Amazon S3 destination, if 'EncryptionConfiguration' is not specified, then the existing 'EncryptionConfiguration' is maintained on the destination.
+-- If the destination type is the same, Kinesis Data Firehose merges the configuration parameters specified with the destination configuration that already exists on the delivery stream. If any of the parameters are not specified in the call, the existing values are retained. For example, in the Amazon S3 destination, if 'EncryptionConfiguration' is not specified, then the existing @EncryptionConfiguration@ is maintained on the destination.
 --
--- If the destination type is not the same, for example, changing the destination from Amazon S3 to Amazon Redshift, Kinesis Firehose does not merge any parameters. In this case, all parameters must be specified.
+-- If the destination type is not the same, for example, changing the destination from Amazon S3 to Amazon Redshift, Kinesis Data Firehose does not merge any parameters. In this case, all parameters must be specified.
 --
--- Kinesis Firehose uses __CurrentDeliveryStreamVersionId__ to avoid race conditions and conflicting merges. This is a required field, and the service updates the configuration only if the existing configuration has a version ID that matches. After the update is applied successfully, the version ID is updated, and can be retrieved using 'DescribeDeliveryStream' . Use the new version ID to set __CurrentDeliveryStreamVersionId__ in the next call.
+-- Kinesis Data Firehose uses __CurrentDeliveryStreamVersionId__ to avoid race conditions and conflicting merges. This is a required field, and the service updates the configuration only if the existing configuration has a version ID that matches. After the update is applied successfully, the version ID is updated, and can be retrieved using 'DescribeDeliveryStream' . Use the new version ID to set __CurrentDeliveryStreamVersionId__ in the next call.
 --
 module Network.AWS.Firehose.UpdateDestination
     (
@@ -37,6 +37,7 @@
       updateDestination
     , UpdateDestination
     -- * Request Lenses
+    , udSplunkDestinationUpdate
     , udS3DestinationUpdate
     , udRedshiftDestinationUpdate
     , udElasticsearchDestinationUpdate
@@ -61,7 +62,8 @@
 
 -- | /See:/ 'updateDestination' smart constructor.
 data UpdateDestination = UpdateDestination'
-  { _udS3DestinationUpdate            :: !(Maybe S3DestinationUpdate)
+  { _udSplunkDestinationUpdate        :: !(Maybe SplunkDestinationUpdate)
+  , _udS3DestinationUpdate            :: !(Maybe S3DestinationUpdate)
   , _udRedshiftDestinationUpdate      :: !(Maybe RedshiftDestinationUpdate)
   , _udElasticsearchDestinationUpdate :: !(Maybe ElasticsearchDestinationUpdate)
   , _udExtendedS3DestinationUpdate    :: !(Maybe ExtendedS3DestinationUpdate)
@@ -75,6 +77,8 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'udSplunkDestinationUpdate' - Describes an update for a destination in Splunk.
+--
 -- * 'udS3DestinationUpdate' - [Deprecated] Describes an update for a destination in Amazon S3.
 --
 -- * 'udRedshiftDestinationUpdate' - Describes an update for a destination in Amazon Redshift.
@@ -85,7 +89,7 @@
 --
 -- * 'udDeliveryStreamName' - The name of the delivery stream.
 --
--- * 'udCurrentDeliveryStreamVersionId' - Obtain this value from the __VersionId__ result of 'DeliveryStreamDescription' . This value is required, and helps the service to perform conditional operations. For example, if there is an interleaving update and this value is null, then the update destination fails. After the update is successful, the __VersionId__ value is updated. The service then performs a merge of the old configuration with the new configuration.
+-- * 'udCurrentDeliveryStreamVersionId' - Obtain this value from the __VersionId__ result of 'DeliveryStreamDescription' . This value is required, and helps the service perform conditional operations. For example, if there is an interleaving update and this value is null, then the update destination fails. After the update is successful, the @VersionId@ value is updated. The service then performs a merge of the old configuration with the new configuration.
 --
 -- * 'udDestinationId' - The ID of the destination.
 updateDestination
@@ -95,43 +99,48 @@
     -> UpdateDestination
 updateDestination pDeliveryStreamName_ pCurrentDeliveryStreamVersionId_ pDestinationId_ =
   UpdateDestination'
-  { _udS3DestinationUpdate = Nothing
-  , _udRedshiftDestinationUpdate = Nothing
-  , _udElasticsearchDestinationUpdate = Nothing
-  , _udExtendedS3DestinationUpdate = Nothing
-  , _udDeliveryStreamName = pDeliveryStreamName_
-  , _udCurrentDeliveryStreamVersionId = pCurrentDeliveryStreamVersionId_
-  , _udDestinationId = pDestinationId_
-  }
+    { _udSplunkDestinationUpdate = Nothing
+    , _udS3DestinationUpdate = Nothing
+    , _udRedshiftDestinationUpdate = Nothing
+    , _udElasticsearchDestinationUpdate = Nothing
+    , _udExtendedS3DestinationUpdate = Nothing
+    , _udDeliveryStreamName = pDeliveryStreamName_
+    , _udCurrentDeliveryStreamVersionId = pCurrentDeliveryStreamVersionId_
+    , _udDestinationId = pDestinationId_
+    }
 
 
+-- | Describes an update for a destination in Splunk.
+udSplunkDestinationUpdate :: Lens' UpdateDestination (Maybe SplunkDestinationUpdate)
+udSplunkDestinationUpdate = lens _udSplunkDestinationUpdate (\ s a -> s{_udSplunkDestinationUpdate = a})
+
 -- | [Deprecated] Describes an update for a destination in Amazon S3.
 udS3DestinationUpdate :: Lens' UpdateDestination (Maybe S3DestinationUpdate)
-udS3DestinationUpdate = lens _udS3DestinationUpdate (\ s a -> s{_udS3DestinationUpdate = a});
+udS3DestinationUpdate = lens _udS3DestinationUpdate (\ s a -> s{_udS3DestinationUpdate = a})
 
 -- | Describes an update for a destination in Amazon Redshift.
 udRedshiftDestinationUpdate :: Lens' UpdateDestination (Maybe RedshiftDestinationUpdate)
-udRedshiftDestinationUpdate = lens _udRedshiftDestinationUpdate (\ s a -> s{_udRedshiftDestinationUpdate = a});
+udRedshiftDestinationUpdate = lens _udRedshiftDestinationUpdate (\ s a -> s{_udRedshiftDestinationUpdate = a})
 
 -- | Describes an update for a destination in Amazon ES.
 udElasticsearchDestinationUpdate :: Lens' UpdateDestination (Maybe ElasticsearchDestinationUpdate)
-udElasticsearchDestinationUpdate = lens _udElasticsearchDestinationUpdate (\ s a -> s{_udElasticsearchDestinationUpdate = a});
+udElasticsearchDestinationUpdate = lens _udElasticsearchDestinationUpdate (\ s a -> s{_udElasticsearchDestinationUpdate = a})
 
 -- | Describes an update for a destination in Amazon S3.
 udExtendedS3DestinationUpdate :: Lens' UpdateDestination (Maybe ExtendedS3DestinationUpdate)
-udExtendedS3DestinationUpdate = lens _udExtendedS3DestinationUpdate (\ s a -> s{_udExtendedS3DestinationUpdate = a});
+udExtendedS3DestinationUpdate = lens _udExtendedS3DestinationUpdate (\ s a -> s{_udExtendedS3DestinationUpdate = a})
 
 -- | The name of the delivery stream.
 udDeliveryStreamName :: Lens' UpdateDestination Text
-udDeliveryStreamName = lens _udDeliveryStreamName (\ s a -> s{_udDeliveryStreamName = a});
+udDeliveryStreamName = lens _udDeliveryStreamName (\ s a -> s{_udDeliveryStreamName = a})
 
--- | Obtain this value from the __VersionId__ result of 'DeliveryStreamDescription' . This value is required, and helps the service to perform conditional operations. For example, if there is an interleaving update and this value is null, then the update destination fails. After the update is successful, the __VersionId__ value is updated. The service then performs a merge of the old configuration with the new configuration.
+-- | Obtain this value from the __VersionId__ result of 'DeliveryStreamDescription' . This value is required, and helps the service perform conditional operations. For example, if there is an interleaving update and this value is null, then the update destination fails. After the update is successful, the @VersionId@ value is updated. The service then performs a merge of the old configuration with the new configuration.
 udCurrentDeliveryStreamVersionId :: Lens' UpdateDestination Text
-udCurrentDeliveryStreamVersionId = lens _udCurrentDeliveryStreamVersionId (\ s a -> s{_udCurrentDeliveryStreamVersionId = a});
+udCurrentDeliveryStreamVersionId = lens _udCurrentDeliveryStreamVersionId (\ s a -> s{_udCurrentDeliveryStreamVersionId = a})
 
 -- | The ID of the destination.
 udDestinationId :: Lens' UpdateDestination Text
-udDestinationId = lens _udDestinationId (\ s a -> s{_udDestinationId = a});
+udDestinationId = lens _udDestinationId (\ s a -> s{_udDestinationId = a})
 
 instance AWSRequest UpdateDestination where
         type Rs UpdateDestination = UpdateDestinationResponse
@@ -159,7 +168,9 @@
         toJSON UpdateDestination'{..}
           = object
               (catMaybes
-                 [("S3DestinationUpdate" .=) <$>
+                 [("SplunkDestinationUpdate" .=) <$>
+                    _udSplunkDestinationUpdate,
+                  ("S3DestinationUpdate" .=) <$>
                     _udS3DestinationUpdate,
                   ("RedshiftDestinationUpdate" .=) <$>
                     _udRedshiftDestinationUpdate,
@@ -199,6 +210,6 @@
 
 -- | -- | The response status code.
 udrsResponseStatus :: Lens' UpdateDestinationResponse Int
-udrsResponseStatus = lens _udrsResponseStatus (\ s a -> s{_udrsResponseStatus = a});
+udrsResponseStatus = lens _udrsResponseStatus (\ s a -> s{_udrsResponseStatus = a})
 
 instance NFData UpdateDestinationResponse where
diff --git a/gen/Network/AWS/Firehose/Waiters.hs b/gen/Network/AWS/Firehose/Waiters.hs
--- a/gen/Network/AWS/Firehose/Waiters.hs
+++ b/gen/Network/AWS/Firehose/Waiters.hs
@@ -7,7 +7,7 @@
 
 -- |
 -- Module      : Network.AWS.Firehose.Waiters
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
diff --git a/test/Test/AWS/Firehose.hs b/test/Test/AWS/Firehose.hs
--- a/test/Test/AWS/Firehose.hs
+++ b/test/Test/AWS/Firehose.hs
@@ -3,7 +3,7 @@
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 -- Module      : Test.AWS.Firehose
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : This Source Code Form is subject to the terms of
 --               the Mozilla Public License, v. 2.0.
 --               A copy of the MPL can be found in the LICENSE file or
diff --git a/test/Test/AWS/Firehose/Internal.hs b/test/Test/AWS/Firehose/Internal.hs
--- a/test/Test/AWS/Firehose/Internal.hs
+++ b/test/Test/AWS/Firehose/Internal.hs
@@ -3,7 +3,7 @@
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 -- Module      : Test.AWS.Firehose.Internal
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : This Source Code Form is subject to the terms of
 --               the Mozilla Public License, v. 2.0.
 --               A copy of the MPL can be found in the LICENSE file or
diff --git a/test/Test/AWS/Gen/Firehose.hs b/test/Test/AWS/Gen/Firehose.hs
--- a/test/Test/AWS/Gen/Firehose.hs
+++ b/test/Test/AWS/Gen/Firehose.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Test.AWS.Gen.Firehose
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -31,8 +31,8 @@
 --         [ requestPutRecord $
 --             putRecord
 --
---         , requestGetKinesisStream $
---             getKinesisStream
+--         , requestTagDeliveryStream $
+--             tagDeliveryStream
 --
 --         , requestUpdateDestination $
 --             updateDestination
@@ -40,12 +40,18 @@
 --         , requestPutRecordBatch $
 --             putRecordBatch
 --
+--         , requestUntagDeliveryStream $
+--             untagDeliveryStream
+--
 --         , requestCreateDeliveryStream $
 --             createDeliveryStream
 --
 --         , requestDescribeDeliveryStream $
 --             describeDeliveryStream
 --
+--         , requestListTagsForDeliveryStream $
+--             listTagsForDeliveryStream
+--
 --         , requestListDeliveryStreams $
 --             listDeliveryStreams
 --
@@ -58,8 +64,8 @@
 --         [ responsePutRecord $
 --             putRecordResponse
 --
---         , responseGetKinesisStream $
---             getKinesisStreamResponse
+--         , responseTagDeliveryStream $
+--             tagDeliveryStreamResponse
 --
 --         , responseUpdateDestination $
 --             updateDestinationResponse
@@ -67,12 +73,18 @@
 --         , responsePutRecordBatch $
 --             putRecordBatchResponse
 --
+--         , responseUntagDeliveryStream $
+--             untagDeliveryStreamResponse
+--
 --         , responseCreateDeliveryStream $
 --             createDeliveryStreamResponse
 --
 --         , responseDescribeDeliveryStream $
 --             describeDeliveryStreamResponse
 --
+--         , responseListTagsForDeliveryStream $
+--             listTagsForDeliveryStreamResponse
+--
 --         , responseListDeliveryStreams $
 --             listDeliveryStreamsResponse
 --
@@ -89,10 +101,10 @@
     "PutRecord"
     "fixture/PutRecord.yaml"
 
-requestGetKinesisStream :: GetKinesisStream -> TestTree
-requestGetKinesisStream = req
-    "GetKinesisStream"
-    "fixture/GetKinesisStream.yaml"
+requestTagDeliveryStream :: TagDeliveryStream -> TestTree
+requestTagDeliveryStream = req
+    "TagDeliveryStream"
+    "fixture/TagDeliveryStream.yaml"
 
 requestUpdateDestination :: UpdateDestination -> TestTree
 requestUpdateDestination = req
@@ -104,6 +116,11 @@
     "PutRecordBatch"
     "fixture/PutRecordBatch.yaml"
 
+requestUntagDeliveryStream :: UntagDeliveryStream -> TestTree
+requestUntagDeliveryStream = req
+    "UntagDeliveryStream"
+    "fixture/UntagDeliveryStream.yaml"
+
 requestCreateDeliveryStream :: CreateDeliveryStream -> TestTree
 requestCreateDeliveryStream = req
     "CreateDeliveryStream"
@@ -114,6 +131,11 @@
     "DescribeDeliveryStream"
     "fixture/DescribeDeliveryStream.yaml"
 
+requestListTagsForDeliveryStream :: ListTagsForDeliveryStream -> TestTree
+requestListTagsForDeliveryStream = req
+    "ListTagsForDeliveryStream"
+    "fixture/ListTagsForDeliveryStream.yaml"
+
 requestListDeliveryStreams :: ListDeliveryStreams -> TestTree
 requestListDeliveryStreams = req
     "ListDeliveryStreams"
@@ -133,12 +155,12 @@
     firehose
     (Proxy :: Proxy PutRecord)
 
-responseGetKinesisStream :: GetKinesisStreamResponse -> TestTree
-responseGetKinesisStream = res
-    "GetKinesisStreamResponse"
-    "fixture/GetKinesisStreamResponse.proto"
+responseTagDeliveryStream :: TagDeliveryStreamResponse -> TestTree
+responseTagDeliveryStream = res
+    "TagDeliveryStreamResponse"
+    "fixture/TagDeliveryStreamResponse.proto"
     firehose
-    (Proxy :: Proxy GetKinesisStream)
+    (Proxy :: Proxy TagDeliveryStream)
 
 responseUpdateDestination :: UpdateDestinationResponse -> TestTree
 responseUpdateDestination = res
@@ -154,6 +176,13 @@
     firehose
     (Proxy :: Proxy PutRecordBatch)
 
+responseUntagDeliveryStream :: UntagDeliveryStreamResponse -> TestTree
+responseUntagDeliveryStream = res
+    "UntagDeliveryStreamResponse"
+    "fixture/UntagDeliveryStreamResponse.proto"
+    firehose
+    (Proxy :: Proxy UntagDeliveryStream)
+
 responseCreateDeliveryStream :: CreateDeliveryStreamResponse -> TestTree
 responseCreateDeliveryStream = res
     "CreateDeliveryStreamResponse"
@@ -167,6 +196,13 @@
     "fixture/DescribeDeliveryStreamResponse.proto"
     firehose
     (Proxy :: Proxy DescribeDeliveryStream)
+
+responseListTagsForDeliveryStream :: ListTagsForDeliveryStreamResponse -> TestTree
+responseListTagsForDeliveryStream = res
+    "ListTagsForDeliveryStreamResponse"
+    "fixture/ListTagsForDeliveryStreamResponse.proto"
+    firehose
+    (Proxy :: Proxy ListTagsForDeliveryStream)
 
 responseListDeliveryStreams :: ListDeliveryStreamsResponse -> TestTree
 responseListDeliveryStreams = res
