{-# 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.SNS.CreateTopic
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a topic to which notifications can be published. Users can
-- create at most 100,000 standard topics (at most 1,000 FIFO topics). For
-- more information, see
-- <https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html Creating an Amazon SNS topic>
-- in the /Amazon SNS Developer Guide/. This action is idempotent, so if
-- the requester already owns a topic with the specified name, that
-- topic\'s ARN is returned without creating a new topic.
module Amazonka.SNS.CreateTopic
  ( -- * Creating a Request
    CreateTopic (..),
    newCreateTopic,

    -- * Request Lenses
    createTopic_attributes,
    createTopic_dataProtectionPolicy,
    createTopic_tags,
    createTopic_name,

    -- * Destructuring the Response
    CreateTopicResponse (..),
    newCreateTopicResponse,

    -- * Response Lenses
    createTopicResponse_topicArn,
    createTopicResponse_httpStatus,
  )
where

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

-- | Input for CreateTopic action.
--
-- /See:/ 'newCreateTopic' smart constructor.
data CreateTopic = CreateTopic'
  { -- | A map of attributes with their corresponding values.
    --
    -- The following lists the names, descriptions, and values of the special
    -- request parameters that the @CreateTopic@ action uses:
    --
    -- -   @DeliveryPolicy@ – The policy that defines how Amazon SNS retries
    --     failed deliveries to HTTP\/S endpoints.
    --
    -- -   @DisplayName@ – The display name to use for a topic with SMS
    --     subscriptions.
    --
    -- -   @FifoTopic@ – Set to true to create a FIFO topic.
    --
    -- -   @Policy@ – The policy that defines who can access your topic. By
    --     default, only the topic owner can publish or subscribe to the topic.
    --
    -- -   @SignatureVersion@ – The signature version corresponds to the
    --     hashing algorithm used while creating the signature of the
    --     notifications, subscription confirmations, or unsubscribe
    --     confirmation messages sent by Amazon SNS. By default,
    --     @SignatureVersion@ is set to 1.
    --
    -- -   @TracingConfig@ – Tracing mode of an Amazon SNS topic. By default
    --     @TracingConfig@ is set to @PassThrough@, and the topic passes
    --     through the tracing header it receives from an Amazon SNS publisher
    --     to its subscriptions. If set to Active, Amazon SNS will vend X-Ray
    --     segment data to topic owner account if the sampled flag in the
    --     tracing header is true. This is only supported on standard topics.
    --
    -- The following attribute applies only to
    -- <https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html server-side encryption>:
    --
    -- -   @KmsMasterKeyId@ – The ID of an Amazon Web Services managed customer
    --     master key (CMK) for Amazon SNS or a custom CMK. For more
    --     information, see
    --     <https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms Key Terms>.
    --     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/.
    --
    -- The following attributes apply only to
    -- <https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html FIFO topics>:
    --
    -- -   @FifoTopic@ – When this is set to @true@, a FIFO topic is created.
    --
    -- -   @ContentBasedDeduplication@ – Enables content-based deduplication
    --     for FIFO topics.
    --
    --     -   By default, @ContentBasedDeduplication@ is set to @false@. If
    --         you create a FIFO topic and this attribute is @false@, you must
    --         specify a value for the @MessageDeduplicationId@ parameter for
    --         the
    --         <https://docs.aws.amazon.com/sns/latest/api/API_Publish.html Publish>
    --         action.
    --
    --     -   When you set @ContentBasedDeduplication@ to @true@, Amazon SNS
    --         uses a SHA-256 hash to generate the @MessageDeduplicationId@
    --         using the body of the message (but not the attributes of the
    --         message).
    --
    --         (Optional) To override the generated value, you can specify a
    --         value for the @MessageDeduplicationId@ parameter for the
    --         @Publish@ action.
    CreateTopic -> Maybe (HashMap Text Text)
attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The body of the policy document you want to use for this topic.
    --
    -- You can only add one policy per topic.
    --
    -- The policy must be in JSON string format.
    --
    -- Length Constraints: Maximum length of 30,720.
    CreateTopic -> Maybe Text
dataProtectionPolicy :: Prelude.Maybe Prelude.Text,
    -- | The list of tags to add to a new topic.
    --
    -- To be able to tag a topic on creation, you must have the
    -- @sns:CreateTopic@ and @sns:TagResource@ permissions.
    CreateTopic -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The name of the topic you want to create.
    --
    -- Constraints: Topic names must be made up of only uppercase and lowercase
    -- ASCII letters, numbers, underscores, and hyphens, and must be between 1
    -- and 256 characters long.
    --
    -- For a FIFO (first-in-first-out) topic, the name must end with the
    -- @.fifo@ suffix.
    CreateTopic -> Text
name :: Prelude.Text
  }
  deriving (CreateTopic -> CreateTopic -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateTopic -> CreateTopic -> Bool
$c/= :: CreateTopic -> CreateTopic -> Bool
== :: CreateTopic -> CreateTopic -> Bool
$c== :: CreateTopic -> CreateTopic -> Bool
Prelude.Eq, ReadPrec [CreateTopic]
ReadPrec CreateTopic
Int -> ReadS CreateTopic
ReadS [CreateTopic]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateTopic]
$creadListPrec :: ReadPrec [CreateTopic]
readPrec :: ReadPrec CreateTopic
$creadPrec :: ReadPrec CreateTopic
readList :: ReadS [CreateTopic]
$creadList :: ReadS [CreateTopic]
readsPrec :: Int -> ReadS CreateTopic
$creadsPrec :: Int -> ReadS CreateTopic
Prelude.Read, Int -> CreateTopic -> ShowS
[CreateTopic] -> ShowS
CreateTopic -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateTopic] -> ShowS
$cshowList :: [CreateTopic] -> ShowS
show :: CreateTopic -> String
$cshow :: CreateTopic -> String
showsPrec :: Int -> CreateTopic -> ShowS
$cshowsPrec :: Int -> CreateTopic -> ShowS
Prelude.Show, forall x. Rep CreateTopic x -> CreateTopic
forall x. CreateTopic -> Rep CreateTopic x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateTopic x -> CreateTopic
$cfrom :: forall x. CreateTopic -> Rep CreateTopic x
Prelude.Generic)

-- |
-- Create a value of 'CreateTopic' 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', 'createTopic_attributes' - A map of attributes with their corresponding values.
--
-- The following lists the names, descriptions, and values of the special
-- request parameters that the @CreateTopic@ action uses:
--
-- -   @DeliveryPolicy@ – The policy that defines how Amazon SNS retries
--     failed deliveries to HTTP\/S endpoints.
--
-- -   @DisplayName@ – The display name to use for a topic with SMS
--     subscriptions.
--
-- -   @FifoTopic@ – Set to true to create a FIFO topic.
--
-- -   @Policy@ – The policy that defines who can access your topic. By
--     default, only the topic owner can publish or subscribe to the topic.
--
-- -   @SignatureVersion@ – The signature version corresponds to the
--     hashing algorithm used while creating the signature of the
--     notifications, subscription confirmations, or unsubscribe
--     confirmation messages sent by Amazon SNS. By default,
--     @SignatureVersion@ is set to 1.
--
-- -   @TracingConfig@ – Tracing mode of an Amazon SNS topic. By default
--     @TracingConfig@ is set to @PassThrough@, and the topic passes
--     through the tracing header it receives from an Amazon SNS publisher
--     to its subscriptions. If set to Active, Amazon SNS will vend X-Ray
--     segment data to topic owner account if the sampled flag in the
--     tracing header is true. This is only supported on standard topics.
--
-- The following attribute applies only to
-- <https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html server-side encryption>:
--
-- -   @KmsMasterKeyId@ – The ID of an Amazon Web Services managed customer
--     master key (CMK) for Amazon SNS or a custom CMK. For more
--     information, see
--     <https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms Key Terms>.
--     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/.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html FIFO topics>:
--
-- -   @FifoTopic@ – When this is set to @true@, a FIFO topic is created.
--
-- -   @ContentBasedDeduplication@ – Enables content-based deduplication
--     for FIFO topics.
--
--     -   By default, @ContentBasedDeduplication@ is set to @false@. If
--         you create a FIFO topic and this attribute is @false@, you must
--         specify a value for the @MessageDeduplicationId@ parameter for
--         the
--         <https://docs.aws.amazon.com/sns/latest/api/API_Publish.html Publish>
--         action.
--
--     -   When you set @ContentBasedDeduplication@ to @true@, Amazon SNS
--         uses a SHA-256 hash to generate the @MessageDeduplicationId@
--         using the body of the message (but not the attributes of the
--         message).
--
--         (Optional) To override the generated value, you can specify a
--         value for the @MessageDeduplicationId@ parameter for the
--         @Publish@ action.
--
-- 'dataProtectionPolicy', 'createTopic_dataProtectionPolicy' - The body of the policy document you want to use for this topic.
--
-- You can only add one policy per topic.
--
-- The policy must be in JSON string format.
--
-- Length Constraints: Maximum length of 30,720.
--
-- 'tags', 'createTopic_tags' - The list of tags to add to a new topic.
--
-- To be able to tag a topic on creation, you must have the
-- @sns:CreateTopic@ and @sns:TagResource@ permissions.
--
-- 'name', 'createTopic_name' - The name of the topic you want to create.
--
-- Constraints: Topic names must be made up of only uppercase and lowercase
-- ASCII letters, numbers, underscores, and hyphens, and must be between 1
-- and 256 characters long.
--
-- For a FIFO (first-in-first-out) topic, the name must end with the
-- @.fifo@ suffix.
newCreateTopic ::
  -- | 'name'
  Prelude.Text ->
  CreateTopic
newCreateTopic :: Text -> CreateTopic
newCreateTopic Text
pName_ =
  CreateTopic'
    { $sel:attributes:CreateTopic' :: Maybe (HashMap Text Text)
attributes = forall a. Maybe a
Prelude.Nothing,
      $sel:dataProtectionPolicy:CreateTopic' :: Maybe Text
dataProtectionPolicy = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateTopic' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:name:CreateTopic' :: Text
name = Text
pName_
    }

-- | A map of attributes with their corresponding values.
--
-- The following lists the names, descriptions, and values of the special
-- request parameters that the @CreateTopic@ action uses:
--
-- -   @DeliveryPolicy@ – The policy that defines how Amazon SNS retries
--     failed deliveries to HTTP\/S endpoints.
--
-- -   @DisplayName@ – The display name to use for a topic with SMS
--     subscriptions.
--
-- -   @FifoTopic@ – Set to true to create a FIFO topic.
--
-- -   @Policy@ – The policy that defines who can access your topic. By
--     default, only the topic owner can publish or subscribe to the topic.
--
-- -   @SignatureVersion@ – The signature version corresponds to the
--     hashing algorithm used while creating the signature of the
--     notifications, subscription confirmations, or unsubscribe
--     confirmation messages sent by Amazon SNS. By default,
--     @SignatureVersion@ is set to 1.
--
-- -   @TracingConfig@ – Tracing mode of an Amazon SNS topic. By default
--     @TracingConfig@ is set to @PassThrough@, and the topic passes
--     through the tracing header it receives from an Amazon SNS publisher
--     to its subscriptions. If set to Active, Amazon SNS will vend X-Ray
--     segment data to topic owner account if the sampled flag in the
--     tracing header is true. This is only supported on standard topics.
--
-- The following attribute applies only to
-- <https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html server-side encryption>:
--
-- -   @KmsMasterKeyId@ – The ID of an Amazon Web Services managed customer
--     master key (CMK) for Amazon SNS or a custom CMK. For more
--     information, see
--     <https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms Key Terms>.
--     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/.
--
-- The following attributes apply only to
-- <https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html FIFO topics>:
--
-- -   @FifoTopic@ – When this is set to @true@, a FIFO topic is created.
--
-- -   @ContentBasedDeduplication@ – Enables content-based deduplication
--     for FIFO topics.
--
--     -   By default, @ContentBasedDeduplication@ is set to @false@. If
--         you create a FIFO topic and this attribute is @false@, you must
--         specify a value for the @MessageDeduplicationId@ parameter for
--         the
--         <https://docs.aws.amazon.com/sns/latest/api/API_Publish.html Publish>
--         action.
--
--     -   When you set @ContentBasedDeduplication@ to @true@, Amazon SNS
--         uses a SHA-256 hash to generate the @MessageDeduplicationId@
--         using the body of the message (but not the attributes of the
--         message).
--
--         (Optional) To override the generated value, you can specify a
--         value for the @MessageDeduplicationId@ parameter for the
--         @Publish@ action.
createTopic_attributes :: Lens.Lens' CreateTopic (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createTopic_attributes :: Lens' CreateTopic (Maybe (HashMap Text Text))
createTopic_attributes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTopic' {Maybe (HashMap Text Text)
attributes :: Maybe (HashMap Text Text)
$sel:attributes:CreateTopic' :: CreateTopic -> Maybe (HashMap Text Text)
attributes} -> Maybe (HashMap Text Text)
attributes) (\s :: CreateTopic
s@CreateTopic' {} Maybe (HashMap Text Text)
a -> CreateTopic
s {$sel:attributes:CreateTopic' :: Maybe (HashMap Text Text)
attributes = Maybe (HashMap Text Text)
a} :: CreateTopic) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The body of the policy document you want to use for this topic.
--
-- You can only add one policy per topic.
--
-- The policy must be in JSON string format.
--
-- Length Constraints: Maximum length of 30,720.
createTopic_dataProtectionPolicy :: Lens.Lens' CreateTopic (Prelude.Maybe Prelude.Text)
createTopic_dataProtectionPolicy :: Lens' CreateTopic (Maybe Text)
createTopic_dataProtectionPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTopic' {Maybe Text
dataProtectionPolicy :: Maybe Text
$sel:dataProtectionPolicy:CreateTopic' :: CreateTopic -> Maybe Text
dataProtectionPolicy} -> Maybe Text
dataProtectionPolicy) (\s :: CreateTopic
s@CreateTopic' {} Maybe Text
a -> CreateTopic
s {$sel:dataProtectionPolicy:CreateTopic' :: Maybe Text
dataProtectionPolicy = Maybe Text
a} :: CreateTopic)

-- | The list of tags to add to a new topic.
--
-- To be able to tag a topic on creation, you must have the
-- @sns:CreateTopic@ and @sns:TagResource@ permissions.
createTopic_tags :: Lens.Lens' CreateTopic (Prelude.Maybe [Tag])
createTopic_tags :: Lens' CreateTopic (Maybe [Tag])
createTopic_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTopic' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateTopic' :: CreateTopic -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateTopic
s@CreateTopic' {} Maybe [Tag]
a -> CreateTopic
s {$sel:tags:CreateTopic' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateTopic) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The name of the topic you want to create.
--
-- Constraints: Topic names must be made up of only uppercase and lowercase
-- ASCII letters, numbers, underscores, and hyphens, and must be between 1
-- and 256 characters long.
--
-- For a FIFO (first-in-first-out) topic, the name must end with the
-- @.fifo@ suffix.
createTopic_name :: Lens.Lens' CreateTopic Prelude.Text
createTopic_name :: Lens' CreateTopic Text
createTopic_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTopic' {Text
name :: Text
$sel:name:CreateTopic' :: CreateTopic -> Text
name} -> Text
name) (\s :: CreateTopic
s@CreateTopic' {} Text
a -> CreateTopic
s {$sel:name:CreateTopic' :: Text
name = Text
a} :: CreateTopic)

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

instance Prelude.Hashable CreateTopic where
  hashWithSalt :: Int -> CreateTopic -> Int
hashWithSalt Int
_salt CreateTopic' {Maybe [Tag]
Maybe Text
Maybe (HashMap Text Text)
Text
name :: Text
tags :: Maybe [Tag]
dataProtectionPolicy :: Maybe Text
attributes :: Maybe (HashMap Text Text)
$sel:name:CreateTopic' :: CreateTopic -> Text
$sel:tags:CreateTopic' :: CreateTopic -> Maybe [Tag]
$sel:dataProtectionPolicy:CreateTopic' :: CreateTopic -> Maybe Text
$sel:attributes:CreateTopic' :: CreateTopic -> Maybe (HashMap Text Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
attributes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
dataProtectionPolicy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name

instance Prelude.NFData CreateTopic where
  rnf :: CreateTopic -> ()
rnf CreateTopic' {Maybe [Tag]
Maybe Text
Maybe (HashMap Text Text)
Text
name :: Text
tags :: Maybe [Tag]
dataProtectionPolicy :: Maybe Text
attributes :: Maybe (HashMap Text Text)
$sel:name:CreateTopic' :: CreateTopic -> Text
$sel:tags:CreateTopic' :: CreateTopic -> Maybe [Tag]
$sel:dataProtectionPolicy:CreateTopic' :: CreateTopic -> Maybe Text
$sel:attributes:CreateTopic' :: CreateTopic -> Maybe (HashMap Text Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
attributes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
dataProtectionPolicy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name

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

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

instance Data.ToQuery CreateTopic where
  toQuery :: CreateTopic -> QueryString
toQuery CreateTopic' {Maybe [Tag]
Maybe Text
Maybe (HashMap Text Text)
Text
name :: Text
tags :: Maybe [Tag]
dataProtectionPolicy :: Maybe Text
attributes :: Maybe (HashMap Text Text)
$sel:name:CreateTopic' :: CreateTopic -> Text
$sel:tags:CreateTopic' :: CreateTopic -> Maybe [Tag]
$sel:dataProtectionPolicy:CreateTopic' :: CreateTopic -> Maybe Text
$sel:attributes:CreateTopic' :: CreateTopic -> Maybe (HashMap Text Text)
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"CreateTopic" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2010-03-31" :: Prelude.ByteString),
        ByteString
"Attributes"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall k v.
(ToQuery k, ToQuery v) =>
ByteString
-> ByteString -> ByteString -> HashMap k v -> QueryString
Data.toQueryMap ByteString
"entry" ByteString
"key" ByteString
"value"
                forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text Text)
attributes
            ),
        ByteString
"DataProtectionPolicy" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
dataProtectionPolicy,
        ByteString
"Tags"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            (forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Tag]
tags),
        ByteString
"Name" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
name
      ]

-- | Response from CreateTopic action.
--
-- /See:/ 'newCreateTopicResponse' smart constructor.
data CreateTopicResponse = CreateTopicResponse'
  { -- | The Amazon Resource Name (ARN) assigned to the created topic.
    CreateTopicResponse -> Maybe Text
topicArn :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateTopicResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateTopicResponse -> CreateTopicResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateTopicResponse -> CreateTopicResponse -> Bool
$c/= :: CreateTopicResponse -> CreateTopicResponse -> Bool
== :: CreateTopicResponse -> CreateTopicResponse -> Bool
$c== :: CreateTopicResponse -> CreateTopicResponse -> Bool
Prelude.Eq, ReadPrec [CreateTopicResponse]
ReadPrec CreateTopicResponse
Int -> ReadS CreateTopicResponse
ReadS [CreateTopicResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateTopicResponse]
$creadListPrec :: ReadPrec [CreateTopicResponse]
readPrec :: ReadPrec CreateTopicResponse
$creadPrec :: ReadPrec CreateTopicResponse
readList :: ReadS [CreateTopicResponse]
$creadList :: ReadS [CreateTopicResponse]
readsPrec :: Int -> ReadS CreateTopicResponse
$creadsPrec :: Int -> ReadS CreateTopicResponse
Prelude.Read, Int -> CreateTopicResponse -> ShowS
[CreateTopicResponse] -> ShowS
CreateTopicResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateTopicResponse] -> ShowS
$cshowList :: [CreateTopicResponse] -> ShowS
show :: CreateTopicResponse -> String
$cshow :: CreateTopicResponse -> String
showsPrec :: Int -> CreateTopicResponse -> ShowS
$cshowsPrec :: Int -> CreateTopicResponse -> ShowS
Prelude.Show, forall x. Rep CreateTopicResponse x -> CreateTopicResponse
forall x. CreateTopicResponse -> Rep CreateTopicResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateTopicResponse x -> CreateTopicResponse
$cfrom :: forall x. CreateTopicResponse -> Rep CreateTopicResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateTopicResponse' 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:
--
-- 'topicArn', 'createTopicResponse_topicArn' - The Amazon Resource Name (ARN) assigned to the created topic.
--
-- 'httpStatus', 'createTopicResponse_httpStatus' - The response's http status code.
newCreateTopicResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateTopicResponse
newCreateTopicResponse :: Int -> CreateTopicResponse
newCreateTopicResponse Int
pHttpStatus_ =
  CreateTopicResponse'
    { $sel:topicArn:CreateTopicResponse' :: Maybe Text
topicArn = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateTopicResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) assigned to the created topic.
createTopicResponse_topicArn :: Lens.Lens' CreateTopicResponse (Prelude.Maybe Prelude.Text)
createTopicResponse_topicArn :: Lens' CreateTopicResponse (Maybe Text)
createTopicResponse_topicArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTopicResponse' {Maybe Text
topicArn :: Maybe Text
$sel:topicArn:CreateTopicResponse' :: CreateTopicResponse -> Maybe Text
topicArn} -> Maybe Text
topicArn) (\s :: CreateTopicResponse
s@CreateTopicResponse' {} Maybe Text
a -> CreateTopicResponse
s {$sel:topicArn:CreateTopicResponse' :: Maybe Text
topicArn = Maybe Text
a} :: CreateTopicResponse)

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

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