{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SQS.CreateQueue
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a new standard or FIFO queue. You can pass one or more
-- attributes in the request. Keep the following in mind:
--
-- -   If you don\'t specify the @FifoQueue@ attribute, Amazon SQS creates
--     a standard queue.
--
--     You can\'t change the queue type after you create it and you can\'t
--     convert an existing standard queue into a FIFO queue. You must
--     either create a new FIFO queue for your application or delete your
--     existing standard queue and recreate it as a FIFO queue. For more
--     information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html#FIFO-queues-moving Moving From a Standard Queue to a FIFO Queue>
--     in the /Amazon SQS Developer Guide/.
--
-- -   If you don\'t provide a value for an attribute, the queue is created
--     with the default value for the attribute.
--
-- -   If you delete a queue, you must wait at least 60 seconds before
--     creating a queue with the same name.
--
-- To successfully create a new queue, you must provide a queue name that
-- adheres to the
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/limits-queues.html limits related to queues>
-- and is unique within the scope of your queues.
--
-- After you create a queue, you must wait at least one second after the
-- queue is created to be able to use the queue.
--
-- To get the queue URL, use the @ GetQueueUrl @ action. @ GetQueueUrl @
-- requires only the @QueueName@ parameter. be aware of existing queue
-- names:
--
-- -   If you provide the name of an existing queue along with the exact
--     names and values of all the queue\'s attributes, @CreateQueue@
--     returns the queue URL for the existing queue.
--
-- -   If the queue name, attribute names, or attribute values don\'t match
--     an existing queue, @CreateQueue@ returns an error.
--
-- Some actions take lists of parameters. These lists are specified using
-- the @param.n@ notation. Values of @n@ are integers starting from 1. For
-- example, a parameter list with two elements looks like this:
--
-- @&AttributeName.1=first@
--
-- @&AttributeName.2=second@
--
-- Cross-account permissions don\'t apply to this action. For more
-- information, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name Grant cross-account permissions to a role and a user name>
-- in the /Amazon SQS Developer Guide/.
module Amazonka.SQS.CreateQueue
  ( -- * Creating a Request
    CreateQueue (..),
    newCreateQueue,

    -- * Request Lenses
    createQueue_attributes,
    createQueue_tags,
    createQueue_queueName,

    -- * Destructuring the Response
    CreateQueueResponse (..),
    newCreateQueueResponse,

    -- * Response Lenses
    createQueueResponse_queueUrl,
    createQueueResponse_httpStatus,
  )
where

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

-- |
--
-- /See:/ 'newCreateQueue' smart constructor.
data CreateQueue = CreateQueue'
  { -- | A map of attributes with their corresponding values.
    --
    -- The following lists the names, descriptions, and values of the special
    -- request parameters that the @CreateQueue@ action uses:
    --
    -- -   @DelaySeconds@ – The length of time, in seconds, for which the
    --     delivery of all messages in the queue is delayed. Valid values: An
    --     integer from 0 to 900 seconds (15 minutes). Default: 0.
    --
    -- -   @MaximumMessageSize@ – The limit of how many bytes a message can
    --     contain before Amazon SQS rejects it. Valid values: An integer from
    --     1,024 bytes (1 KiB) to 262,144 bytes (256 KiB). Default: 262,144
    --     (256 KiB).
    --
    -- -   @MessageRetentionPeriod@ – The length of time, in seconds, for which
    --     Amazon SQS retains a message. Valid values: An integer from 60
    --     seconds (1 minute) to 1,209,600 seconds (14 days). Default: 345,600
    --     (4 days).
    --
    -- -   @Policy@ – The queue\'s policy. A valid Amazon Web Services policy.
    --     For more information about policy structure, see
    --     <https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html Overview of Amazon Web Services IAM Policies>
    --     in the /Amazon IAM User Guide/.
    --
    -- -   @ReceiveMessageWaitTimeSeconds@ – The length of time, in seconds,
    --     for which a @ ReceiveMessage @ action waits for a message to arrive.
    --     Valid values: An integer from 0 to 20 (seconds). Default: 0.
    --
    -- -   @VisibilityTimeout@ – The visibility timeout for the queue, in
    --     seconds. Valid values: An integer from 0 to 43,200 (12 hours).
    --     Default: 30. For more information about the visibility timeout, see
    --     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html Visibility Timeout>
    --     in the /Amazon SQS Developer Guide/.
    --
    -- The following attributes apply only to
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html dead-letter queues:>
    --
    -- -   @RedrivePolicy@ – The string that includes the parameters for the
    --     dead-letter queue functionality of the source queue as a JSON
    --     object. The parameters are as follows:
    --
    --     -   @deadLetterTargetArn@ – The Amazon Resource Name (ARN) of the
    --         dead-letter queue to which Amazon SQS moves messages after the
    --         value of @maxReceiveCount@ is exceeded.
    --
    --     -   @maxReceiveCount@ – The number of times a message is delivered
    --         to the source queue before being moved to the dead-letter queue.
    --         When the @ReceiveCount@ for a message exceeds the
    --         @maxReceiveCount@ for a queue, Amazon SQS moves the message to
    --         the dead-letter-queue.
    --
    -- -   @RedriveAllowPolicy@ – The string that includes the parameters for
    --     the permissions for the dead-letter queue redrive permission and
    --     which source queues can specify dead-letter queues as a JSON object.
    --     The parameters are as follows:
    --
    --     -   @redrivePermission@ – The permission type that defines which
    --         source queues can specify the current queue as the dead-letter
    --         queue. Valid values are:
    --
    --         -   @allowAll@ – (Default) Any source queues in this Amazon Web
    --             Services account in the same Region can specify this queue
    --             as the dead-letter queue.
    --
    --         -   @denyAll@ – No source queues can specify this queue as the
    --             dead-letter queue.
    --
    --         -   @byQueue@ – Only queues specified by the @sourceQueueArns@
    --             parameter can specify this queue as the dead-letter queue.
    --
    --     -   @sourceQueueArns@ – The Amazon Resource Names (ARN)s of the
    --         source queues that can specify this queue as the dead-letter
    --         queue and redrive messages. You can specify this parameter only
    --         when the @redrivePermission@ parameter is set to @byQueue@. You
    --         can specify up to 10 source queue ARNs. To allow more than 10
    --         source queues to specify dead-letter queues, set the
    --         @redrivePermission@ parameter to @allowAll@.
    --
    -- The dead-letter queue of a FIFO queue must also be a FIFO queue.
    -- Similarly, the dead-letter queue of a standard queue must also be a
    -- standard queue.
    --
    -- The following attributes apply only to
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html server-side-encryption>:
    --
    -- -   @KmsMasterKeyId@ – The ID of an Amazon Web Services managed customer
    --     master key (CMK) for Amazon SQS or a custom CMK. For more
    --     information, see
    --     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-sse-key-terms Key Terms>.
    --     While the alias of the Amazon Web Services managed CMK for Amazon
    --     SQS is always @alias\/aws\/sqs@, the alias of a custom CMK can, for
    --     example, be @alias\/MyAlias @. For more examples, see
    --     <https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters KeyId>
    --     in the /Key Management Service API Reference/.
    --
    -- -   @KmsDataKeyReusePeriodSeconds@ – The length of time, in seconds, for
    --     which Amazon SQS can reuse a
    --     <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys data key>
    --     to encrypt or decrypt messages before calling KMS again. An integer
    --     representing seconds, between 60 seconds (1 minute) and 86,400
    --     seconds (24 hours). Default: 300 (5 minutes). A shorter time period
    --     provides better security but results in more calls to KMS which
    --     might incur charges after Free Tier. For more information, see
    --     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work How Does the Data Key Reuse Period Work?>.
    --
    -- The following attributes apply only to
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html FIFO (first-in-first-out) queues>:
    --
    -- -   @FifoQueue@ – Designates a queue as FIFO. Valid values are @true@
    --     and @false@. If you don\'t specify the @FifoQueue@ attribute, Amazon
    --     SQS creates a standard queue. You can provide this attribute only
    --     during queue creation. You can\'t change it for an existing queue.
    --     When you set this attribute, you must also provide the
    --     @MessageGroupId@ for your messages explicitly.
    --
    --     For more information, see
    --     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html FIFO queue logic>
    --     in the /Amazon SQS Developer Guide/.
    --
    -- -   @ContentBasedDeduplication@ – Enables content-based deduplication.
    --     Valid values are @true@ and @false@. For more information, see
    --     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html Exactly-once processing>
    --     in the /Amazon SQS Developer Guide/. Note the following:
    --
    --     -   Every message must have a unique @MessageDeduplicationId@.
    --
    --         -   You may provide a @MessageDeduplicationId@ explicitly.
    --
    --         -   If you aren\'t able to provide a @MessageDeduplicationId@
    --             and you enable @ContentBasedDeduplication@ for your queue,
    --             Amazon SQS uses a SHA-256 hash to generate the
    --             @MessageDeduplicationId@ using the body of the message (but
    --             not the attributes of the message).
    --
    --         -   If you don\'t provide a @MessageDeduplicationId@ and the
    --             queue doesn\'t have @ContentBasedDeduplication@ set, the
    --             action fails with an error.
    --
    --         -   If the queue has @ContentBasedDeduplication@ set, your
    --             @MessageDeduplicationId@ overrides the generated one.
    --
    --     -   When @ContentBasedDeduplication@ is in effect, messages with
    --         identical content sent within the deduplication interval are
    --         treated as duplicates and only one copy of the message is
    --         delivered.
    --
    --     -   If you send one message with @ContentBasedDeduplication@ enabled
    --         and then another message with a @MessageDeduplicationId@ that is
    --         the same as the one generated for the first
    --         @MessageDeduplicationId@, the two messages are treated as
    --         duplicates and only one copy of the message is delivered.
    --
    -- The following attributes apply only to
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html high throughput for FIFO queues>:
    --
    -- -   @DeduplicationScope@ – Specifies whether message deduplication
    --     occurs at the message group or queue level. Valid values are
    --     @messageGroup@ and @queue@.
    --
    -- -   @FifoThroughputLimit@ – Specifies whether the FIFO queue throughput
    --     quota applies to the entire queue or per message group. Valid values
    --     are @perQueue@ and @perMessageGroupId@. The @perMessageGroupId@
    --     value is allowed only when the value for @DeduplicationScope@ is
    --     @messageGroup@.
    --
    -- To enable high throughput for FIFO queues, do the following:
    --
    -- -   Set @DeduplicationScope@ to @messageGroup@.
    --
    -- -   Set @FifoThroughputLimit@ to @perMessageGroupId@.
    --
    -- If you set these attributes to anything other than the values shown for
    -- enabling high throughput, normal throughput is in effect and
    -- deduplication occurs as specified.
    --
    -- For information on throughput quotas, see
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html Quotas related to messages>
    -- in the /Amazon SQS Developer Guide/.
    CreateQueue -> Maybe (HashMap QueueAttributeName Text)
attributes :: Prelude.Maybe (Prelude.HashMap QueueAttributeName Prelude.Text),
    -- | Add cost allocation tags to the specified Amazon SQS queue. For an
    -- overview, see
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-tags.html Tagging Your Amazon SQS Queues>
    -- in the /Amazon SQS Developer Guide/.
    --
    -- When you use queue tags, keep the following guidelines in mind:
    --
    -- -   Adding more than 50 tags to a queue isn\'t recommended.
    --
    -- -   Tags don\'t have any semantic meaning. Amazon SQS interprets tags as
    --     character strings.
    --
    -- -   Tags are case-sensitive.
    --
    -- -   A new tag with a key identical to that of an existing tag overwrites
    --     the existing tag.
    --
    -- For a full list of tag restrictions, see
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-limits.html#limits-queues Quotas related to queues>
    -- in the /Amazon SQS Developer Guide/.
    --
    -- To be able to tag a queue on creation, you must have the
    -- @sqs:CreateQueue@ and @sqs:TagQueue@ permissions.
    --
    -- Cross-account permissions don\'t apply to this action. For more
    -- information, see
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name Grant cross-account permissions to a role and a user name>
    -- in the /Amazon SQS Developer Guide/.
    CreateQueue -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The name of the new queue. The following limits apply to this name:
    --
    -- -   A queue name can have up to 80 characters.
    --
    -- -   Valid values: alphanumeric characters, hyphens (@-@), and
    --     underscores (@_@).
    --
    -- -   A FIFO queue name must end with the @.fifo@ suffix.
    --
    -- Queue URLs and names are case-sensitive.
    CreateQueue -> Text
queueName :: Prelude.Text
  }
  deriving (CreateQueue -> CreateQueue -> Bool
(CreateQueue -> CreateQueue -> Bool)
-> (CreateQueue -> CreateQueue -> Bool) -> Eq CreateQueue
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateQueue -> CreateQueue -> Bool
$c/= :: CreateQueue -> CreateQueue -> Bool
== :: CreateQueue -> CreateQueue -> Bool
$c== :: CreateQueue -> CreateQueue -> Bool
Prelude.Eq, ReadPrec [CreateQueue]
ReadPrec CreateQueue
Int -> ReadS CreateQueue
ReadS [CreateQueue]
(Int -> ReadS CreateQueue)
-> ReadS [CreateQueue]
-> ReadPrec CreateQueue
-> ReadPrec [CreateQueue]
-> Read CreateQueue
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateQueue]
$creadListPrec :: ReadPrec [CreateQueue]
readPrec :: ReadPrec CreateQueue
$creadPrec :: ReadPrec CreateQueue
readList :: ReadS [CreateQueue]
$creadList :: ReadS [CreateQueue]
readsPrec :: Int -> ReadS CreateQueue
$creadsPrec :: Int -> ReadS CreateQueue
Prelude.Read, Int -> CreateQueue -> ShowS
[CreateQueue] -> ShowS
CreateQueue -> String
(Int -> CreateQueue -> ShowS)
-> (CreateQueue -> String)
-> ([CreateQueue] -> ShowS)
-> Show CreateQueue
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateQueue] -> ShowS
$cshowList :: [CreateQueue] -> ShowS
show :: CreateQueue -> String
$cshow :: CreateQueue -> String
showsPrec :: Int -> CreateQueue -> ShowS
$cshowsPrec :: Int -> CreateQueue -> ShowS
Prelude.Show, (forall x. CreateQueue -> Rep CreateQueue x)
-> (forall x. Rep CreateQueue x -> CreateQueue)
-> Generic CreateQueue
forall x. Rep CreateQueue x -> CreateQueue
forall x. CreateQueue -> Rep CreateQueue x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateQueue x -> CreateQueue
$cfrom :: forall x. CreateQueue -> Rep CreateQueue x
Prelude.Generic)

-- |
-- Create a value of 'CreateQueue' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'attributes', 'createQueue_attributes' - A map of attributes with their corresponding values.
--
-- The following lists the names, descriptions, and values of the special
-- request parameters that the @CreateQueue@ action uses:
--
-- -   @DelaySeconds@ – The length of time, in seconds, for which the
--     delivery of all messages in the queue is delayed. Valid values: An
--     integer from 0 to 900 seconds (15 minutes). Default: 0.
--
-- -   @MaximumMessageSize@ – The limit of how many bytes a message can
--     contain before Amazon SQS rejects it. Valid values: An integer from
--     1,024 bytes (1 KiB) to 262,144 bytes (256 KiB). Default: 262,144
--     (256 KiB).
--
-- -   @MessageRetentionPeriod@ – The length of time, in seconds, for which
--     Amazon SQS retains a message. Valid values: An integer from 60
--     seconds (1 minute) to 1,209,600 seconds (14 days). Default: 345,600
--     (4 days).
--
-- -   @Policy@ – The queue\'s policy. A valid Amazon Web Services policy.
--     For more information about policy structure, see
--     <https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html Overview of Amazon Web Services IAM Policies>
--     in the /Amazon IAM User Guide/.
--
-- -   @ReceiveMessageWaitTimeSeconds@ – The length of time, in seconds,
--     for which a @ ReceiveMessage @ action waits for a message to arrive.
--     Valid values: An integer from 0 to 20 (seconds). Default: 0.
--
-- -   @VisibilityTimeout@ – The visibility timeout for the queue, in
--     seconds. Valid values: An integer from 0 to 43,200 (12 hours).
--     Default: 30. For more information about the visibility timeout, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html Visibility Timeout>
--     in the /Amazon SQS Developer Guide/.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html dead-letter queues:>
--
-- -   @RedrivePolicy@ – The string that includes the parameters for the
--     dead-letter queue functionality of the source queue as a JSON
--     object. The parameters are as follows:
--
--     -   @deadLetterTargetArn@ – The Amazon Resource Name (ARN) of the
--         dead-letter queue to which Amazon SQS moves messages after the
--         value of @maxReceiveCount@ is exceeded.
--
--     -   @maxReceiveCount@ – The number of times a message is delivered
--         to the source queue before being moved to the dead-letter queue.
--         When the @ReceiveCount@ for a message exceeds the
--         @maxReceiveCount@ for a queue, Amazon SQS moves the message to
--         the dead-letter-queue.
--
-- -   @RedriveAllowPolicy@ – The string that includes the parameters for
--     the permissions for the dead-letter queue redrive permission and
--     which source queues can specify dead-letter queues as a JSON object.
--     The parameters are as follows:
--
--     -   @redrivePermission@ – The permission type that defines which
--         source queues can specify the current queue as the dead-letter
--         queue. Valid values are:
--
--         -   @allowAll@ – (Default) Any source queues in this Amazon Web
--             Services account in the same Region can specify this queue
--             as the dead-letter queue.
--
--         -   @denyAll@ – No source queues can specify this queue as the
--             dead-letter queue.
--
--         -   @byQueue@ – Only queues specified by the @sourceQueueArns@
--             parameter can specify this queue as the dead-letter queue.
--
--     -   @sourceQueueArns@ – The Amazon Resource Names (ARN)s of the
--         source queues that can specify this queue as the dead-letter
--         queue and redrive messages. You can specify this parameter only
--         when the @redrivePermission@ parameter is set to @byQueue@. You
--         can specify up to 10 source queue ARNs. To allow more than 10
--         source queues to specify dead-letter queues, set the
--         @redrivePermission@ parameter to @allowAll@.
--
-- The dead-letter queue of a FIFO queue must also be a FIFO queue.
-- Similarly, the dead-letter queue of a standard queue must also be a
-- standard queue.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html server-side-encryption>:
--
-- -   @KmsMasterKeyId@ – The ID of an Amazon Web Services managed customer
--     master key (CMK) for Amazon SQS or a custom CMK. For more
--     information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-sse-key-terms Key Terms>.
--     While the alias of the Amazon Web Services managed CMK for Amazon
--     SQS is always @alias\/aws\/sqs@, the alias of a custom CMK can, for
--     example, be @alias\/MyAlias @. For more examples, see
--     <https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters KeyId>
--     in the /Key Management Service API Reference/.
--
-- -   @KmsDataKeyReusePeriodSeconds@ – The length of time, in seconds, for
--     which Amazon SQS can reuse a
--     <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys data key>
--     to encrypt or decrypt messages before calling KMS again. An integer
--     representing seconds, between 60 seconds (1 minute) and 86,400
--     seconds (24 hours). Default: 300 (5 minutes). A shorter time period
--     provides better security but results in more calls to KMS which
--     might incur charges after Free Tier. For more information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work How Does the Data Key Reuse Period Work?>.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html FIFO (first-in-first-out) queues>:
--
-- -   @FifoQueue@ – Designates a queue as FIFO. Valid values are @true@
--     and @false@. If you don\'t specify the @FifoQueue@ attribute, Amazon
--     SQS creates a standard queue. You can provide this attribute only
--     during queue creation. You can\'t change it for an existing queue.
--     When you set this attribute, you must also provide the
--     @MessageGroupId@ for your messages explicitly.
--
--     For more information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html FIFO queue logic>
--     in the /Amazon SQS Developer Guide/.
--
-- -   @ContentBasedDeduplication@ – Enables content-based deduplication.
--     Valid values are @true@ and @false@. For more information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html Exactly-once processing>
--     in the /Amazon SQS Developer Guide/. Note the following:
--
--     -   Every message must have a unique @MessageDeduplicationId@.
--
--         -   You may provide a @MessageDeduplicationId@ explicitly.
--
--         -   If you aren\'t able to provide a @MessageDeduplicationId@
--             and you enable @ContentBasedDeduplication@ for your queue,
--             Amazon SQS uses a SHA-256 hash to generate the
--             @MessageDeduplicationId@ using the body of the message (but
--             not the attributes of the message).
--
--         -   If you don\'t provide a @MessageDeduplicationId@ and the
--             queue doesn\'t have @ContentBasedDeduplication@ set, the
--             action fails with an error.
--
--         -   If the queue has @ContentBasedDeduplication@ set, your
--             @MessageDeduplicationId@ overrides the generated one.
--
--     -   When @ContentBasedDeduplication@ is in effect, messages with
--         identical content sent within the deduplication interval are
--         treated as duplicates and only one copy of the message is
--         delivered.
--
--     -   If you send one message with @ContentBasedDeduplication@ enabled
--         and then another message with a @MessageDeduplicationId@ that is
--         the same as the one generated for the first
--         @MessageDeduplicationId@, the two messages are treated as
--         duplicates and only one copy of the message is delivered.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html high throughput for FIFO queues>:
--
-- -   @DeduplicationScope@ – Specifies whether message deduplication
--     occurs at the message group or queue level. Valid values are
--     @messageGroup@ and @queue@.
--
-- -   @FifoThroughputLimit@ – Specifies whether the FIFO queue throughput
--     quota applies to the entire queue or per message group. Valid values
--     are @perQueue@ and @perMessageGroupId@. The @perMessageGroupId@
--     value is allowed only when the value for @DeduplicationScope@ is
--     @messageGroup@.
--
-- To enable high throughput for FIFO queues, do the following:
--
-- -   Set @DeduplicationScope@ to @messageGroup@.
--
-- -   Set @FifoThroughputLimit@ to @perMessageGroupId@.
--
-- If you set these attributes to anything other than the values shown for
-- enabling high throughput, normal throughput is in effect and
-- deduplication occurs as specified.
--
-- For information on throughput quotas, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html Quotas related to messages>
-- in the /Amazon SQS Developer Guide/.
--
-- 'tags', 'createQueue_tags' - Add cost allocation tags to the specified Amazon SQS queue. For an
-- overview, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-tags.html Tagging Your Amazon SQS Queues>
-- in the /Amazon SQS Developer Guide/.
--
-- When you use queue tags, keep the following guidelines in mind:
--
-- -   Adding more than 50 tags to a queue isn\'t recommended.
--
-- -   Tags don\'t have any semantic meaning. Amazon SQS interprets tags as
--     character strings.
--
-- -   Tags are case-sensitive.
--
-- -   A new tag with a key identical to that of an existing tag overwrites
--     the existing tag.
--
-- For a full list of tag restrictions, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-limits.html#limits-queues Quotas related to queues>
-- in the /Amazon SQS Developer Guide/.
--
-- To be able to tag a queue on creation, you must have the
-- @sqs:CreateQueue@ and @sqs:TagQueue@ permissions.
--
-- Cross-account permissions don\'t apply to this action. For more
-- information, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name Grant cross-account permissions to a role and a user name>
-- in the /Amazon SQS Developer Guide/.
--
-- 'queueName', 'createQueue_queueName' - The name of the new queue. The following limits apply to this name:
--
-- -   A queue name can have up to 80 characters.
--
-- -   Valid values: alphanumeric characters, hyphens (@-@), and
--     underscores (@_@).
--
-- -   A FIFO queue name must end with the @.fifo@ suffix.
--
-- Queue URLs and names are case-sensitive.
newCreateQueue ::
  -- | 'queueName'
  Prelude.Text ->
  CreateQueue
newCreateQueue :: Text -> CreateQueue
newCreateQueue Text
pQueueName_ =
  CreateQueue' :: Maybe (HashMap QueueAttributeName Text)
-> Maybe (HashMap Text Text) -> Text -> CreateQueue
CreateQueue'
    { $sel:attributes:CreateQueue' :: Maybe (HashMap QueueAttributeName Text)
attributes = Maybe (HashMap QueueAttributeName Text)
forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateQueue' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
forall a. Maybe a
Prelude.Nothing,
      $sel:queueName:CreateQueue' :: Text
queueName = Text
pQueueName_
    }

-- | A map of attributes with their corresponding values.
--
-- The following lists the names, descriptions, and values of the special
-- request parameters that the @CreateQueue@ action uses:
--
-- -   @DelaySeconds@ – The length of time, in seconds, for which the
--     delivery of all messages in the queue is delayed. Valid values: An
--     integer from 0 to 900 seconds (15 minutes). Default: 0.
--
-- -   @MaximumMessageSize@ – The limit of how many bytes a message can
--     contain before Amazon SQS rejects it. Valid values: An integer from
--     1,024 bytes (1 KiB) to 262,144 bytes (256 KiB). Default: 262,144
--     (256 KiB).
--
-- -   @MessageRetentionPeriod@ – The length of time, in seconds, for which
--     Amazon SQS retains a message. Valid values: An integer from 60
--     seconds (1 minute) to 1,209,600 seconds (14 days). Default: 345,600
--     (4 days).
--
-- -   @Policy@ – The queue\'s policy. A valid Amazon Web Services policy.
--     For more information about policy structure, see
--     <https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html Overview of Amazon Web Services IAM Policies>
--     in the /Amazon IAM User Guide/.
--
-- -   @ReceiveMessageWaitTimeSeconds@ – The length of time, in seconds,
--     for which a @ ReceiveMessage @ action waits for a message to arrive.
--     Valid values: An integer from 0 to 20 (seconds). Default: 0.
--
-- -   @VisibilityTimeout@ – The visibility timeout for the queue, in
--     seconds. Valid values: An integer from 0 to 43,200 (12 hours).
--     Default: 30. For more information about the visibility timeout, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html Visibility Timeout>
--     in the /Amazon SQS Developer Guide/.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html dead-letter queues:>
--
-- -   @RedrivePolicy@ – The string that includes the parameters for the
--     dead-letter queue functionality of the source queue as a JSON
--     object. The parameters are as follows:
--
--     -   @deadLetterTargetArn@ – The Amazon Resource Name (ARN) of the
--         dead-letter queue to which Amazon SQS moves messages after the
--         value of @maxReceiveCount@ is exceeded.
--
--     -   @maxReceiveCount@ – The number of times a message is delivered
--         to the source queue before being moved to the dead-letter queue.
--         When the @ReceiveCount@ for a message exceeds the
--         @maxReceiveCount@ for a queue, Amazon SQS moves the message to
--         the dead-letter-queue.
--
-- -   @RedriveAllowPolicy@ – The string that includes the parameters for
--     the permissions for the dead-letter queue redrive permission and
--     which source queues can specify dead-letter queues as a JSON object.
--     The parameters are as follows:
--
--     -   @redrivePermission@ – The permission type that defines which
--         source queues can specify the current queue as the dead-letter
--         queue. Valid values are:
--
--         -   @allowAll@ – (Default) Any source queues in this Amazon Web
--             Services account in the same Region can specify this queue
--             as the dead-letter queue.
--
--         -   @denyAll@ – No source queues can specify this queue as the
--             dead-letter queue.
--
--         -   @byQueue@ – Only queues specified by the @sourceQueueArns@
--             parameter can specify this queue as the dead-letter queue.
--
--     -   @sourceQueueArns@ – The Amazon Resource Names (ARN)s of the
--         source queues that can specify this queue as the dead-letter
--         queue and redrive messages. You can specify this parameter only
--         when the @redrivePermission@ parameter is set to @byQueue@. You
--         can specify up to 10 source queue ARNs. To allow more than 10
--         source queues to specify dead-letter queues, set the
--         @redrivePermission@ parameter to @allowAll@.
--
-- The dead-letter queue of a FIFO queue must also be a FIFO queue.
-- Similarly, the dead-letter queue of a standard queue must also be a
-- standard queue.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html server-side-encryption>:
--
-- -   @KmsMasterKeyId@ – The ID of an Amazon Web Services managed customer
--     master key (CMK) for Amazon SQS or a custom CMK. For more
--     information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-sse-key-terms Key Terms>.
--     While the alias of the Amazon Web Services managed CMK for Amazon
--     SQS is always @alias\/aws\/sqs@, the alias of a custom CMK can, for
--     example, be @alias\/MyAlias @. For more examples, see
--     <https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters KeyId>
--     in the /Key Management Service API Reference/.
--
-- -   @KmsDataKeyReusePeriodSeconds@ – The length of time, in seconds, for
--     which Amazon SQS can reuse a
--     <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys data key>
--     to encrypt or decrypt messages before calling KMS again. An integer
--     representing seconds, between 60 seconds (1 minute) and 86,400
--     seconds (24 hours). Default: 300 (5 minutes). A shorter time period
--     provides better security but results in more calls to KMS which
--     might incur charges after Free Tier. For more information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work How Does the Data Key Reuse Period Work?>.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html FIFO (first-in-first-out) queues>:
--
-- -   @FifoQueue@ – Designates a queue as FIFO. Valid values are @true@
--     and @false@. If you don\'t specify the @FifoQueue@ attribute, Amazon
--     SQS creates a standard queue. You can provide this attribute only
--     during queue creation. You can\'t change it for an existing queue.
--     When you set this attribute, you must also provide the
--     @MessageGroupId@ for your messages explicitly.
--
--     For more information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html FIFO queue logic>
--     in the /Amazon SQS Developer Guide/.
--
-- -   @ContentBasedDeduplication@ – Enables content-based deduplication.
--     Valid values are @true@ and @false@. For more information, see
--     <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html Exactly-once processing>
--     in the /Amazon SQS Developer Guide/. Note the following:
--
--     -   Every message must have a unique @MessageDeduplicationId@.
--
--         -   You may provide a @MessageDeduplicationId@ explicitly.
--
--         -   If you aren\'t able to provide a @MessageDeduplicationId@
--             and you enable @ContentBasedDeduplication@ for your queue,
--             Amazon SQS uses a SHA-256 hash to generate the
--             @MessageDeduplicationId@ using the body of the message (but
--             not the attributes of the message).
--
--         -   If you don\'t provide a @MessageDeduplicationId@ and the
--             queue doesn\'t have @ContentBasedDeduplication@ set, the
--             action fails with an error.
--
--         -   If the queue has @ContentBasedDeduplication@ set, your
--             @MessageDeduplicationId@ overrides the generated one.
--
--     -   When @ContentBasedDeduplication@ is in effect, messages with
--         identical content sent within the deduplication interval are
--         treated as duplicates and only one copy of the message is
--         delivered.
--
--     -   If you send one message with @ContentBasedDeduplication@ enabled
--         and then another message with a @MessageDeduplicationId@ that is
--         the same as the one generated for the first
--         @MessageDeduplicationId@, the two messages are treated as
--         duplicates and only one copy of the message is delivered.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html high throughput for FIFO queues>:
--
-- -   @DeduplicationScope@ – Specifies whether message deduplication
--     occurs at the message group or queue level. Valid values are
--     @messageGroup@ and @queue@.
--
-- -   @FifoThroughputLimit@ – Specifies whether the FIFO queue throughput
--     quota applies to the entire queue or per message group. Valid values
--     are @perQueue@ and @perMessageGroupId@. The @perMessageGroupId@
--     value is allowed only when the value for @DeduplicationScope@ is
--     @messageGroup@.
--
-- To enable high throughput for FIFO queues, do the following:
--
-- -   Set @DeduplicationScope@ to @messageGroup@.
--
-- -   Set @FifoThroughputLimit@ to @perMessageGroupId@.
--
-- If you set these attributes to anything other than the values shown for
-- enabling high throughput, normal throughput is in effect and
-- deduplication occurs as specified.
--
-- For information on throughput quotas, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html Quotas related to messages>
-- in the /Amazon SQS Developer Guide/.
createQueue_attributes :: Lens.Lens' CreateQueue (Prelude.Maybe (Prelude.HashMap QueueAttributeName Prelude.Text))
createQueue_attributes :: (Maybe (HashMap QueueAttributeName Text)
 -> f (Maybe (HashMap QueueAttributeName Text)))
-> CreateQueue -> f CreateQueue
createQueue_attributes = (CreateQueue -> Maybe (HashMap QueueAttributeName Text))
-> (CreateQueue
    -> Maybe (HashMap QueueAttributeName Text) -> CreateQueue)
-> Lens
     CreateQueue
     CreateQueue
     (Maybe (HashMap QueueAttributeName Text))
     (Maybe (HashMap QueueAttributeName Text))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateQueue' {Maybe (HashMap QueueAttributeName Text)
attributes :: Maybe (HashMap QueueAttributeName Text)
$sel:attributes:CreateQueue' :: CreateQueue -> Maybe (HashMap QueueAttributeName Text)
attributes} -> Maybe (HashMap QueueAttributeName Text)
attributes) (\s :: CreateQueue
s@CreateQueue' {} Maybe (HashMap QueueAttributeName Text)
a -> CreateQueue
s {$sel:attributes:CreateQueue' :: Maybe (HashMap QueueAttributeName Text)
attributes = Maybe (HashMap QueueAttributeName Text)
a} :: CreateQueue) ((Maybe (HashMap QueueAttributeName Text)
  -> f (Maybe (HashMap QueueAttributeName Text)))
 -> CreateQueue -> f CreateQueue)
-> ((Maybe (HashMap QueueAttributeName Text)
     -> f (Maybe (HashMap QueueAttributeName Text)))
    -> Maybe (HashMap QueueAttributeName Text)
    -> f (Maybe (HashMap QueueAttributeName Text)))
-> (Maybe (HashMap QueueAttributeName Text)
    -> f (Maybe (HashMap QueueAttributeName Text)))
-> CreateQueue
-> f CreateQueue
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (HashMap QueueAttributeName Text)
  (HashMap QueueAttributeName Text)
  (HashMap QueueAttributeName Text)
  (HashMap QueueAttributeName Text)
-> Iso
     (Maybe (HashMap QueueAttributeName Text))
     (Maybe (HashMap QueueAttributeName Text))
     (Maybe (HashMap QueueAttributeName Text))
     (Maybe (HashMap QueueAttributeName Text))
forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping AnIso
  (HashMap QueueAttributeName Text)
  (HashMap QueueAttributeName Text)
  (HashMap QueueAttributeName Text)
  (HashMap QueueAttributeName Text)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Add cost allocation tags to the specified Amazon SQS queue. For an
-- overview, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-tags.html Tagging Your Amazon SQS Queues>
-- in the /Amazon SQS Developer Guide/.
--
-- When you use queue tags, keep the following guidelines in mind:
--
-- -   Adding more than 50 tags to a queue isn\'t recommended.
--
-- -   Tags don\'t have any semantic meaning. Amazon SQS interprets tags as
--     character strings.
--
-- -   Tags are case-sensitive.
--
-- -   A new tag with a key identical to that of an existing tag overwrites
--     the existing tag.
--
-- For a full list of tag restrictions, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-limits.html#limits-queues Quotas related to queues>
-- in the /Amazon SQS Developer Guide/.
--
-- To be able to tag a queue on creation, you must have the
-- @sqs:CreateQueue@ and @sqs:TagQueue@ permissions.
--
-- Cross-account permissions don\'t apply to this action. For more
-- information, see
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name Grant cross-account permissions to a role and a user name>
-- in the /Amazon SQS Developer Guide/.
createQueue_tags :: Lens.Lens' CreateQueue (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createQueue_tags :: (Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
-> CreateQueue -> f CreateQueue
createQueue_tags = (CreateQueue -> Maybe (HashMap Text Text))
-> (CreateQueue -> Maybe (HashMap Text Text) -> CreateQueue)
-> Lens
     CreateQueue
     CreateQueue
     (Maybe (HashMap Text Text))
     (Maybe (HashMap Text Text))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateQueue' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:CreateQueue' :: CreateQueue -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: CreateQueue
s@CreateQueue' {} Maybe (HashMap Text Text)
a -> CreateQueue
s {$sel:tags:CreateQueue' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: CreateQueue) ((Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
 -> CreateQueue -> f CreateQueue)
-> ((Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
    -> Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
-> (Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
-> CreateQueue
-> f CreateQueue
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (HashMap Text Text)
  (HashMap Text Text)
  (HashMap Text Text)
  (HashMap Text Text)
-> Iso
     (Maybe (HashMap Text Text))
     (Maybe (HashMap Text Text))
     (Maybe (HashMap Text Text))
     (Maybe (HashMap Text Text))
forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping AnIso
  (HashMap Text Text)
  (HashMap Text Text)
  (HashMap Text Text)
  (HashMap Text Text)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The name of the new queue. The following limits apply to this name:
--
-- -   A queue name can have up to 80 characters.
--
-- -   Valid values: alphanumeric characters, hyphens (@-@), and
--     underscores (@_@).
--
-- -   A FIFO queue name must end with the @.fifo@ suffix.
--
-- Queue URLs and names are case-sensitive.
createQueue_queueName :: Lens.Lens' CreateQueue Prelude.Text
createQueue_queueName :: (Text -> f Text) -> CreateQueue -> f CreateQueue
createQueue_queueName = (CreateQueue -> Text)
-> (CreateQueue -> Text -> CreateQueue)
-> Lens CreateQueue CreateQueue Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateQueue' {Text
queueName :: Text
$sel:queueName:CreateQueue' :: CreateQueue -> Text
queueName} -> Text
queueName) (\s :: CreateQueue
s@CreateQueue' {} Text
a -> CreateQueue
s {$sel:queueName:CreateQueue' :: Text
queueName = Text
a} :: CreateQueue)

instance Core.AWSRequest CreateQueue where
  type AWSResponse CreateQueue = CreateQueueResponse
  request :: CreateQueue -> Request CreateQueue
request = Service -> CreateQueue -> Request CreateQueue
forall a. ToRequest a => Service -> a -> Request a
Request.postQuery Service
defaultService
  response :: Logger
-> Service
-> Proxy CreateQueue
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateQueue)))
response =
    Text
-> (Int
    -> ResponseHeaders
    -> [Node]
    -> Either String (AWSResponse CreateQueue))
-> Logger
-> Service
-> Proxy CreateQueue
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateQueue)))
forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> Logger
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"CreateQueueResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Text -> Int -> CreateQueueResponse
CreateQueueResponse'
            (Maybe Text -> Int -> CreateQueueResponse)
-> Either String (Maybe Text)
-> Either String (Int -> CreateQueueResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"QueueUrl")
            Either String (Int -> CreateQueueResponse)
-> Either String Int -> Either String CreateQueueResponse
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Int -> Either String Int
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable CreateQueue

instance Prelude.NFData CreateQueue

instance Core.ToHeaders CreateQueue where
  toHeaders :: CreateQueue -> ResponseHeaders
toHeaders = ResponseHeaders -> CreateQueue -> ResponseHeaders
forall a b. a -> b -> a
Prelude.const ResponseHeaders
forall a. Monoid a => a
Prelude.mempty

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

instance Core.ToQuery CreateQueue where
  toQuery :: CreateQueue -> QueryString
toQuery CreateQueue' {Maybe (HashMap Text Text)
Maybe (HashMap QueueAttributeName Text)
Text
queueName :: Text
tags :: Maybe (HashMap Text Text)
attributes :: Maybe (HashMap QueueAttributeName Text)
$sel:queueName:CreateQueue' :: CreateQueue -> Text
$sel:tags:CreateQueue' :: CreateQueue -> Maybe (HashMap Text Text)
$sel:attributes:CreateQueue' :: CreateQueue -> Maybe (HashMap QueueAttributeName Text)
..} =
    [QueryString] -> QueryString
forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          ByteString -> ByteString -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: (ByteString
"CreateQueue" :: Prelude.ByteString),
        ByteString
"Version"
          ByteString -> ByteString -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: (ByteString
"2012-11-05" :: Prelude.ByteString),
        Maybe QueryString -> QueryString
forall a. ToQuery a => a -> QueryString
Core.toQuery
          ( ByteString
-> ByteString
-> ByteString
-> HashMap QueueAttributeName Text
-> QueryString
forall k v.
(ToQuery k, ToQuery v) =>
ByteString
-> ByteString -> ByteString -> HashMap k v -> QueryString
Core.toQueryMap ByteString
"Attribute" ByteString
"Name" ByteString
"Value"
              (HashMap QueueAttributeName Text -> QueryString)
-> Maybe (HashMap QueueAttributeName Text) -> Maybe QueryString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap QueueAttributeName Text)
attributes
          ),
        Maybe QueryString -> QueryString
forall a. ToQuery a => a -> QueryString
Core.toQuery
          ( ByteString
-> ByteString -> ByteString -> HashMap Text Text -> QueryString
forall k v.
(ToQuery k, ToQuery v) =>
ByteString
-> ByteString -> ByteString -> HashMap k v -> QueryString
Core.toQueryMap ByteString
"Tag" ByteString
"Key" ByteString
"Value"
              (HashMap Text Text -> QueryString)
-> Maybe (HashMap Text Text) -> Maybe QueryString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text Text)
tags
          ),
        ByteString
"QueueName" ByteString -> Text -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: Text
queueName
      ]

-- | Returns the @QueueUrl@ attribute of the created queue.
--
-- /See:/ 'newCreateQueueResponse' smart constructor.
data CreateQueueResponse = CreateQueueResponse'
  { -- | The URL of the created Amazon SQS queue.
    CreateQueueResponse -> Maybe Text
queueUrl :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateQueueResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateQueueResponse -> CreateQueueResponse -> Bool
(CreateQueueResponse -> CreateQueueResponse -> Bool)
-> (CreateQueueResponse -> CreateQueueResponse -> Bool)
-> Eq CreateQueueResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateQueueResponse -> CreateQueueResponse -> Bool
$c/= :: CreateQueueResponse -> CreateQueueResponse -> Bool
== :: CreateQueueResponse -> CreateQueueResponse -> Bool
$c== :: CreateQueueResponse -> CreateQueueResponse -> Bool
Prelude.Eq, ReadPrec [CreateQueueResponse]
ReadPrec CreateQueueResponse
Int -> ReadS CreateQueueResponse
ReadS [CreateQueueResponse]
(Int -> ReadS CreateQueueResponse)
-> ReadS [CreateQueueResponse]
-> ReadPrec CreateQueueResponse
-> ReadPrec [CreateQueueResponse]
-> Read CreateQueueResponse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateQueueResponse]
$creadListPrec :: ReadPrec [CreateQueueResponse]
readPrec :: ReadPrec CreateQueueResponse
$creadPrec :: ReadPrec CreateQueueResponse
readList :: ReadS [CreateQueueResponse]
$creadList :: ReadS [CreateQueueResponse]
readsPrec :: Int -> ReadS CreateQueueResponse
$creadsPrec :: Int -> ReadS CreateQueueResponse
Prelude.Read, Int -> CreateQueueResponse -> ShowS
[CreateQueueResponse] -> ShowS
CreateQueueResponse -> String
(Int -> CreateQueueResponse -> ShowS)
-> (CreateQueueResponse -> String)
-> ([CreateQueueResponse] -> ShowS)
-> Show CreateQueueResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateQueueResponse] -> ShowS
$cshowList :: [CreateQueueResponse] -> ShowS
show :: CreateQueueResponse -> String
$cshow :: CreateQueueResponse -> String
showsPrec :: Int -> CreateQueueResponse -> ShowS
$cshowsPrec :: Int -> CreateQueueResponse -> ShowS
Prelude.Show, (forall x. CreateQueueResponse -> Rep CreateQueueResponse x)
-> (forall x. Rep CreateQueueResponse x -> CreateQueueResponse)
-> Generic CreateQueueResponse
forall x. Rep CreateQueueResponse x -> CreateQueueResponse
forall x. CreateQueueResponse -> Rep CreateQueueResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateQueueResponse x -> CreateQueueResponse
$cfrom :: forall x. CreateQueueResponse -> Rep CreateQueueResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateQueueResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'queueUrl', 'createQueueResponse_queueUrl' - The URL of the created Amazon SQS queue.
--
-- 'httpStatus', 'createQueueResponse_httpStatus' - The response's http status code.
newCreateQueueResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateQueueResponse
newCreateQueueResponse :: Int -> CreateQueueResponse
newCreateQueueResponse Int
pHttpStatus_ =
  CreateQueueResponse' :: Maybe Text -> Int -> CreateQueueResponse
CreateQueueResponse'
    { $sel:queueUrl:CreateQueueResponse' :: Maybe Text
queueUrl = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateQueueResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The URL of the created Amazon SQS queue.
createQueueResponse_queueUrl :: Lens.Lens' CreateQueueResponse (Prelude.Maybe Prelude.Text)
createQueueResponse_queueUrl :: (Maybe Text -> f (Maybe Text))
-> CreateQueueResponse -> f CreateQueueResponse
createQueueResponse_queueUrl = (CreateQueueResponse -> Maybe Text)
-> (CreateQueueResponse -> Maybe Text -> CreateQueueResponse)
-> Lens
     CreateQueueResponse CreateQueueResponse (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateQueueResponse' {Maybe Text
queueUrl :: Maybe Text
$sel:queueUrl:CreateQueueResponse' :: CreateQueueResponse -> Maybe Text
queueUrl} -> Maybe Text
queueUrl) (\s :: CreateQueueResponse
s@CreateQueueResponse' {} Maybe Text
a -> CreateQueueResponse
s {$sel:queueUrl:CreateQueueResponse' :: Maybe Text
queueUrl = Maybe Text
a} :: CreateQueueResponse)

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

instance Prelude.NFData CreateQueueResponse