{-# 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.SetQueueAttributes
-- 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)
--
-- Sets the value of one or more queue attributes. When you change a
-- queue\'s attributes, the change can take up to 60 seconds for most of
-- the attributes to propagate throughout the Amazon SQS system. Changes
-- made to the @MessageRetentionPeriod@ attribute can take up to 15
-- minutes.
--
-- -   In the future, new attributes might be added. If you write code that
--     calls this action, we recommend that you structure your code so that
--     it can handle new attributes gracefully.
--
-- -   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/.
--
-- -   To remove the ability to change queue permissions, you must deny
--     permission to the @AddPermission@, @RemovePermission@, and
--     @SetQueueAttributes@ actions in your IAM policy.
module Amazonka.SQS.SetQueueAttributes
  ( -- * Creating a Request
    SetQueueAttributes (..),
    newSetQueueAttributes,

    -- * Request Lenses
    setQueueAttributes_queueUrl,
    setQueueAttributes_attributes,

    -- * Destructuring the Response
    SetQueueAttributesResponse (..),
    newSetQueueAttributesResponse,
  )
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:/ 'newSetQueueAttributes' smart constructor.
data SetQueueAttributes = SetQueueAttributes'
  { -- | The URL of the Amazon SQS queue whose attributes are set.
    --
    -- Queue URLs and names are case-sensitive.
    SetQueueAttributes -> Text
queueUrl :: Prelude.Text,
    -- | A map of attributes to set.
    --
    -- The following lists the names, descriptions, and values of the special
    -- request parameters that the @SetQueueAttributes@ 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 (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) up 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 representing
    --     seconds, from 60 (1 minute) to 1,209,600 (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 /Identity and Access Management 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 AWS-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 attribute applies only to
    -- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html FIFO (first-in-first-out) queues>:
    --
    -- -   @ContentBasedDeduplication@ – Enables content-based deduplication.
    --     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/.
    SetQueueAttributes -> HashMap QueueAttributeName Text
attributes :: Prelude.HashMap QueueAttributeName Prelude.Text
  }
  deriving (SetQueueAttributes -> SetQueueAttributes -> Bool
(SetQueueAttributes -> SetQueueAttributes -> Bool)
-> (SetQueueAttributes -> SetQueueAttributes -> Bool)
-> Eq SetQueueAttributes
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SetQueueAttributes -> SetQueueAttributes -> Bool
$c/= :: SetQueueAttributes -> SetQueueAttributes -> Bool
== :: SetQueueAttributes -> SetQueueAttributes -> Bool
$c== :: SetQueueAttributes -> SetQueueAttributes -> Bool
Prelude.Eq, ReadPrec [SetQueueAttributes]
ReadPrec SetQueueAttributes
Int -> ReadS SetQueueAttributes
ReadS [SetQueueAttributes]
(Int -> ReadS SetQueueAttributes)
-> ReadS [SetQueueAttributes]
-> ReadPrec SetQueueAttributes
-> ReadPrec [SetQueueAttributes]
-> Read SetQueueAttributes
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SetQueueAttributes]
$creadListPrec :: ReadPrec [SetQueueAttributes]
readPrec :: ReadPrec SetQueueAttributes
$creadPrec :: ReadPrec SetQueueAttributes
readList :: ReadS [SetQueueAttributes]
$creadList :: ReadS [SetQueueAttributes]
readsPrec :: Int -> ReadS SetQueueAttributes
$creadsPrec :: Int -> ReadS SetQueueAttributes
Prelude.Read, Int -> SetQueueAttributes -> ShowS
[SetQueueAttributes] -> ShowS
SetQueueAttributes -> String
(Int -> SetQueueAttributes -> ShowS)
-> (SetQueueAttributes -> String)
-> ([SetQueueAttributes] -> ShowS)
-> Show SetQueueAttributes
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SetQueueAttributes] -> ShowS
$cshowList :: [SetQueueAttributes] -> ShowS
show :: SetQueueAttributes -> String
$cshow :: SetQueueAttributes -> String
showsPrec :: Int -> SetQueueAttributes -> ShowS
$cshowsPrec :: Int -> SetQueueAttributes -> ShowS
Prelude.Show, (forall x. SetQueueAttributes -> Rep SetQueueAttributes x)
-> (forall x. Rep SetQueueAttributes x -> SetQueueAttributes)
-> Generic SetQueueAttributes
forall x. Rep SetQueueAttributes x -> SetQueueAttributes
forall x. SetQueueAttributes -> Rep SetQueueAttributes x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SetQueueAttributes x -> SetQueueAttributes
$cfrom :: forall x. SetQueueAttributes -> Rep SetQueueAttributes x
Prelude.Generic)

-- |
-- Create a value of 'SetQueueAttributes' 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', 'setQueueAttributes_queueUrl' - The URL of the Amazon SQS queue whose attributes are set.
--
-- Queue URLs and names are case-sensitive.
--
-- 'attributes', 'setQueueAttributes_attributes' - A map of attributes to set.
--
-- The following lists the names, descriptions, and values of the special
-- request parameters that the @SetQueueAttributes@ 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 (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) up 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 representing
--     seconds, from 60 (1 minute) to 1,209,600 (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 /Identity and Access Management 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 AWS-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 attribute applies only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html FIFO (first-in-first-out) queues>:
--
-- -   @ContentBasedDeduplication@ – Enables content-based deduplication.
--     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/.
newSetQueueAttributes ::
  -- | 'queueUrl'
  Prelude.Text ->
  SetQueueAttributes
newSetQueueAttributes :: Text -> SetQueueAttributes
newSetQueueAttributes Text
pQueueUrl_ =
  SetQueueAttributes' :: Text -> HashMap QueueAttributeName Text -> SetQueueAttributes
SetQueueAttributes'
    { $sel:queueUrl:SetQueueAttributes' :: Text
queueUrl = Text
pQueueUrl_,
      $sel:attributes:SetQueueAttributes' :: HashMap QueueAttributeName Text
attributes = HashMap QueueAttributeName Text
forall a. Monoid a => a
Prelude.mempty
    }

-- | The URL of the Amazon SQS queue whose attributes are set.
--
-- Queue URLs and names are case-sensitive.
setQueueAttributes_queueUrl :: Lens.Lens' SetQueueAttributes Prelude.Text
setQueueAttributes_queueUrl :: (Text -> f Text) -> SetQueueAttributes -> f SetQueueAttributes
setQueueAttributes_queueUrl = (SetQueueAttributes -> Text)
-> (SetQueueAttributes -> Text -> SetQueueAttributes)
-> Lens SetQueueAttributes SetQueueAttributes Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SetQueueAttributes' {Text
queueUrl :: Text
$sel:queueUrl:SetQueueAttributes' :: SetQueueAttributes -> Text
queueUrl} -> Text
queueUrl) (\s :: SetQueueAttributes
s@SetQueueAttributes' {} Text
a -> SetQueueAttributes
s {$sel:queueUrl:SetQueueAttributes' :: Text
queueUrl = Text
a} :: SetQueueAttributes)

-- | A map of attributes to set.
--
-- The following lists the names, descriptions, and values of the special
-- request parameters that the @SetQueueAttributes@ 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 (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) up 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 representing
--     seconds, from 60 (1 minute) to 1,209,600 (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 /Identity and Access Management 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 AWS-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 attribute applies only to
-- <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html FIFO (first-in-first-out) queues>:
--
-- -   @ContentBasedDeduplication@ – Enables content-based deduplication.
--     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/.
setQueueAttributes_attributes :: Lens.Lens' SetQueueAttributes (Prelude.HashMap QueueAttributeName Prelude.Text)
setQueueAttributes_attributes :: (HashMap QueueAttributeName Text
 -> f (HashMap QueueAttributeName Text))
-> SetQueueAttributes -> f SetQueueAttributes
setQueueAttributes_attributes = (SetQueueAttributes -> HashMap QueueAttributeName Text)
-> (SetQueueAttributes
    -> HashMap QueueAttributeName Text -> SetQueueAttributes)
-> Lens
     SetQueueAttributes
     SetQueueAttributes
     (HashMap QueueAttributeName Text)
     (HashMap QueueAttributeName Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SetQueueAttributes' {HashMap QueueAttributeName Text
attributes :: HashMap QueueAttributeName Text
$sel:attributes:SetQueueAttributes' :: SetQueueAttributes -> HashMap QueueAttributeName Text
attributes} -> HashMap QueueAttributeName Text
attributes) (\s :: SetQueueAttributes
s@SetQueueAttributes' {} HashMap QueueAttributeName Text
a -> SetQueueAttributes
s {$sel:attributes:SetQueueAttributes' :: HashMap QueueAttributeName Text
attributes = HashMap QueueAttributeName Text
a} :: SetQueueAttributes) ((HashMap QueueAttributeName Text
  -> f (HashMap QueueAttributeName Text))
 -> SetQueueAttributes -> f SetQueueAttributes)
-> ((HashMap QueueAttributeName Text
     -> f (HashMap QueueAttributeName Text))
    -> HashMap QueueAttributeName Text
    -> f (HashMap QueueAttributeName Text))
-> (HashMap QueueAttributeName Text
    -> f (HashMap QueueAttributeName Text))
-> SetQueueAttributes
-> f SetQueueAttributes
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. (HashMap QueueAttributeName Text
 -> f (HashMap QueueAttributeName Text))
-> HashMap QueueAttributeName Text
-> f (HashMap QueueAttributeName Text)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest SetQueueAttributes where
  type
    AWSResponse SetQueueAttributes =
      SetQueueAttributesResponse
  request :: SetQueueAttributes -> Request SetQueueAttributes
request = Service -> SetQueueAttributes -> Request SetQueueAttributes
forall a. ToRequest a => Service -> a -> Request a
Request.postQuery Service
defaultService
  response :: Logger
-> Service
-> Proxy SetQueueAttributes
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse SetQueueAttributes)))
response =
    AWSResponse SetQueueAttributes
-> Logger
-> Service
-> Proxy SetQueueAttributes
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse SetQueueAttributes)))
forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> Logger
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull AWSResponse SetQueueAttributes
SetQueueAttributesResponse
SetQueueAttributesResponse'

instance Prelude.Hashable SetQueueAttributes

instance Prelude.NFData SetQueueAttributes

instance Core.ToHeaders SetQueueAttributes where
  toHeaders :: SetQueueAttributes -> [Header]
toHeaders = [Header] -> SetQueueAttributes -> [Header]
forall a b. a -> b -> a
Prelude.const [Header]
forall a. Monoid a => a
Prelude.mempty

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

instance Core.ToQuery SetQueueAttributes where
  toQuery :: SetQueueAttributes -> QueryString
toQuery SetQueueAttributes' {Text
HashMap QueueAttributeName Text
attributes :: HashMap QueueAttributeName Text
queueUrl :: Text
$sel:attributes:SetQueueAttributes' :: SetQueueAttributes -> HashMap QueueAttributeName Text
$sel:queueUrl:SetQueueAttributes' :: SetQueueAttributes -> 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
"SetQueueAttributes" :: Prelude.ByteString),
        ByteString
"Version"
          ByteString -> ByteString -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: (ByteString
"2012-11-05" :: Prelude.ByteString),
        ByteString
"QueueUrl" ByteString -> Text -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: Text
queueUrl,
        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
attributes
      ]

-- | /See:/ 'newSetQueueAttributesResponse' smart constructor.
data SetQueueAttributesResponse = SetQueueAttributesResponse'
  {
  }
  deriving (SetQueueAttributesResponse -> SetQueueAttributesResponse -> Bool
(SetQueueAttributesResponse -> SetQueueAttributesResponse -> Bool)
-> (SetQueueAttributesResponse
    -> SetQueueAttributesResponse -> Bool)
-> Eq SetQueueAttributesResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SetQueueAttributesResponse -> SetQueueAttributesResponse -> Bool
$c/= :: SetQueueAttributesResponse -> SetQueueAttributesResponse -> Bool
== :: SetQueueAttributesResponse -> SetQueueAttributesResponse -> Bool
$c== :: SetQueueAttributesResponse -> SetQueueAttributesResponse -> Bool
Prelude.Eq, ReadPrec [SetQueueAttributesResponse]
ReadPrec SetQueueAttributesResponse
Int -> ReadS SetQueueAttributesResponse
ReadS [SetQueueAttributesResponse]
(Int -> ReadS SetQueueAttributesResponse)
-> ReadS [SetQueueAttributesResponse]
-> ReadPrec SetQueueAttributesResponse
-> ReadPrec [SetQueueAttributesResponse]
-> Read SetQueueAttributesResponse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SetQueueAttributesResponse]
$creadListPrec :: ReadPrec [SetQueueAttributesResponse]
readPrec :: ReadPrec SetQueueAttributesResponse
$creadPrec :: ReadPrec SetQueueAttributesResponse
readList :: ReadS [SetQueueAttributesResponse]
$creadList :: ReadS [SetQueueAttributesResponse]
readsPrec :: Int -> ReadS SetQueueAttributesResponse
$creadsPrec :: Int -> ReadS SetQueueAttributesResponse
Prelude.Read, Int -> SetQueueAttributesResponse -> ShowS
[SetQueueAttributesResponse] -> ShowS
SetQueueAttributesResponse -> String
(Int -> SetQueueAttributesResponse -> ShowS)
-> (SetQueueAttributesResponse -> String)
-> ([SetQueueAttributesResponse] -> ShowS)
-> Show SetQueueAttributesResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SetQueueAttributesResponse] -> ShowS
$cshowList :: [SetQueueAttributesResponse] -> ShowS
show :: SetQueueAttributesResponse -> String
$cshow :: SetQueueAttributesResponse -> String
showsPrec :: Int -> SetQueueAttributesResponse -> ShowS
$cshowsPrec :: Int -> SetQueueAttributesResponse -> ShowS
Prelude.Show, (forall x.
 SetQueueAttributesResponse -> Rep SetQueueAttributesResponse x)
-> (forall x.
    Rep SetQueueAttributesResponse x -> SetQueueAttributesResponse)
-> Generic SetQueueAttributesResponse
forall x.
Rep SetQueueAttributesResponse x -> SetQueueAttributesResponse
forall x.
SetQueueAttributesResponse -> Rep SetQueueAttributesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep SetQueueAttributesResponse x -> SetQueueAttributesResponse
$cfrom :: forall x.
SetQueueAttributesResponse -> Rep SetQueueAttributesResponse x
Prelude.Generic)

-- |
-- Create a value of 'SetQueueAttributesResponse' 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.
newSetQueueAttributesResponse ::
  SetQueueAttributesResponse
newSetQueueAttributesResponse :: SetQueueAttributesResponse
newSetQueueAttributesResponse =
  SetQueueAttributesResponse
SetQueueAttributesResponse'

instance Prelude.NFData SetQueueAttributesResponse