{-# 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.APIGateway.CreateDomainName
-- 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 new domain name.
module Amazonka.APIGateway.CreateDomainName
  ( -- * Creating a Request
    CreateDomainName (..),
    newCreateDomainName,

    -- * Request Lenses
    createDomainName_certificateArn,
    createDomainName_certificateBody,
    createDomainName_certificateChain,
    createDomainName_certificateName,
    createDomainName_certificatePrivateKey,
    createDomainName_endpointConfiguration,
    createDomainName_mutualTlsAuthentication,
    createDomainName_ownershipVerificationCertificateArn,
    createDomainName_regionalCertificateArn,
    createDomainName_regionalCertificateName,
    createDomainName_securityPolicy,
    createDomainName_tags,
    createDomainName_domainName,

    -- * Destructuring the Response
    DomainName (..),
    newDomainName,

    -- * Response Lenses
    domainName_certificateArn,
    domainName_certificateName,
    domainName_certificateUploadDate,
    domainName_distributionDomainName,
    domainName_distributionHostedZoneId,
    domainName_domainName,
    domainName_domainNameStatus,
    domainName_domainNameStatusMessage,
    domainName_endpointConfiguration,
    domainName_mutualTlsAuthentication,
    domainName_ownershipVerificationCertificateArn,
    domainName_regionalCertificateArn,
    domainName_regionalCertificateName,
    domainName_regionalDomainName,
    domainName_regionalHostedZoneId,
    domainName_securityPolicy,
    domainName_tags,
  )
where

import Amazonka.APIGateway.Types
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

-- | A request to create a new domain name.
--
-- /See:/ 'newCreateDomainName' smart constructor.
data CreateDomainName = CreateDomainName'
  { -- | The reference to an AWS-managed certificate that will be used by
    -- edge-optimized endpoint for this domain name. AWS Certificate Manager is
    -- the only supported source.
    CreateDomainName -> Maybe Text
certificateArn :: Prelude.Maybe Prelude.Text,
    -- | [Deprecated] The body of the server certificate that will be used by
    -- edge-optimized endpoint for this domain name provided by your
    -- certificate authority.
    CreateDomainName -> Maybe Text
certificateBody :: Prelude.Maybe Prelude.Text,
    -- | [Deprecated] The intermediate certificates and optionally the root
    -- certificate, one after the other without any blank lines, used by an
    -- edge-optimized endpoint for this domain name. If you include the root
    -- certificate, your certificate chain must start with intermediate
    -- certificates and end with the root certificate. Use the intermediate
    -- certificates that were provided by your certificate authority. Do not
    -- include any intermediaries that are not in the chain of trust path.
    CreateDomainName -> Maybe Text
certificateChain :: Prelude.Maybe Prelude.Text,
    -- | The user-friendly name of the certificate that will be used by
    -- edge-optimized endpoint for this domain name.
    CreateDomainName -> Maybe Text
certificateName :: Prelude.Maybe Prelude.Text,
    -- | [Deprecated] Your edge-optimized endpoint\'s domain name certificate\'s
    -- private key.
    CreateDomainName -> Maybe Text
certificatePrivateKey :: Prelude.Maybe Prelude.Text,
    -- | The endpoint configuration of this DomainName showing the endpoint types
    -- of the domain name.
    CreateDomainName -> Maybe EndpointConfiguration
endpointConfiguration :: Prelude.Maybe EndpointConfiguration,
    CreateDomainName -> Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication :: Prelude.Maybe MutualTlsAuthenticationInput,
    -- | The ARN of the public certificate issued by ACM to validate ownership of
    -- your custom domain. Only required when configuring mutual TLS and using
    -- an ACM imported or private CA certificate ARN as the
    -- regionalCertificateArn.
    CreateDomainName -> Maybe Text
ownershipVerificationCertificateArn :: Prelude.Maybe Prelude.Text,
    -- | The reference to an AWS-managed certificate that will be used by
    -- regional endpoint for this domain name. AWS Certificate Manager is the
    -- only supported source.
    CreateDomainName -> Maybe Text
regionalCertificateArn :: Prelude.Maybe Prelude.Text,
    -- | The user-friendly name of the certificate that will be used by regional
    -- endpoint for this domain name.
    CreateDomainName -> Maybe Text
regionalCertificateName :: Prelude.Maybe Prelude.Text,
    -- | The Transport Layer Security (TLS) version + cipher suite for this
    -- DomainName. The valid values are @TLS_1_0@ and @TLS_1_2@.
    CreateDomainName -> Maybe SecurityPolicy
securityPolicy :: Prelude.Maybe SecurityPolicy,
    -- | The key-value map of strings. The valid character set is
    -- [a-zA-Z+-=._:\/]. The tag key can be up to 128 characters and must not
    -- start with @aws:@. The tag value can be up to 256 characters.
    CreateDomainName -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The name of the DomainName resource.
    CreateDomainName -> Text
domainName :: Prelude.Text
  }
  deriving (CreateDomainName -> CreateDomainName -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDomainName -> CreateDomainName -> Bool
$c/= :: CreateDomainName -> CreateDomainName -> Bool
== :: CreateDomainName -> CreateDomainName -> Bool
$c== :: CreateDomainName -> CreateDomainName -> Bool
Prelude.Eq, ReadPrec [CreateDomainName]
ReadPrec CreateDomainName
Int -> ReadS CreateDomainName
ReadS [CreateDomainName]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDomainName]
$creadListPrec :: ReadPrec [CreateDomainName]
readPrec :: ReadPrec CreateDomainName
$creadPrec :: ReadPrec CreateDomainName
readList :: ReadS [CreateDomainName]
$creadList :: ReadS [CreateDomainName]
readsPrec :: Int -> ReadS CreateDomainName
$creadsPrec :: Int -> ReadS CreateDomainName
Prelude.Read, Int -> CreateDomainName -> ShowS
[CreateDomainName] -> ShowS
CreateDomainName -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDomainName] -> ShowS
$cshowList :: [CreateDomainName] -> ShowS
show :: CreateDomainName -> String
$cshow :: CreateDomainName -> String
showsPrec :: Int -> CreateDomainName -> ShowS
$cshowsPrec :: Int -> CreateDomainName -> ShowS
Prelude.Show, forall x. Rep CreateDomainName x -> CreateDomainName
forall x. CreateDomainName -> Rep CreateDomainName x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDomainName x -> CreateDomainName
$cfrom :: forall x. CreateDomainName -> Rep CreateDomainName x
Prelude.Generic)

-- |
-- Create a value of 'CreateDomainName' 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:
--
-- 'certificateArn', 'createDomainName_certificateArn' - The reference to an AWS-managed certificate that will be used by
-- edge-optimized endpoint for this domain name. AWS Certificate Manager is
-- the only supported source.
--
-- 'certificateBody', 'createDomainName_certificateBody' - [Deprecated] The body of the server certificate that will be used by
-- edge-optimized endpoint for this domain name provided by your
-- certificate authority.
--
-- 'certificateChain', 'createDomainName_certificateChain' - [Deprecated] The intermediate certificates and optionally the root
-- certificate, one after the other without any blank lines, used by an
-- edge-optimized endpoint for this domain name. If you include the root
-- certificate, your certificate chain must start with intermediate
-- certificates and end with the root certificate. Use the intermediate
-- certificates that were provided by your certificate authority. Do not
-- include any intermediaries that are not in the chain of trust path.
--
-- 'certificateName', 'createDomainName_certificateName' - The user-friendly name of the certificate that will be used by
-- edge-optimized endpoint for this domain name.
--
-- 'certificatePrivateKey', 'createDomainName_certificatePrivateKey' - [Deprecated] Your edge-optimized endpoint\'s domain name certificate\'s
-- private key.
--
-- 'endpointConfiguration', 'createDomainName_endpointConfiguration' - The endpoint configuration of this DomainName showing the endpoint types
-- of the domain name.
--
-- 'mutualTlsAuthentication', 'createDomainName_mutualTlsAuthentication' - Undocumented member.
--
-- 'ownershipVerificationCertificateArn', 'createDomainName_ownershipVerificationCertificateArn' - The ARN of the public certificate issued by ACM to validate ownership of
-- your custom domain. Only required when configuring mutual TLS and using
-- an ACM imported or private CA certificate ARN as the
-- regionalCertificateArn.
--
-- 'regionalCertificateArn', 'createDomainName_regionalCertificateArn' - The reference to an AWS-managed certificate that will be used by
-- regional endpoint for this domain name. AWS Certificate Manager is the
-- only supported source.
--
-- 'regionalCertificateName', 'createDomainName_regionalCertificateName' - The user-friendly name of the certificate that will be used by regional
-- endpoint for this domain name.
--
-- 'securityPolicy', 'createDomainName_securityPolicy' - The Transport Layer Security (TLS) version + cipher suite for this
-- DomainName. The valid values are @TLS_1_0@ and @TLS_1_2@.
--
-- 'tags', 'createDomainName_tags' - The key-value map of strings. The valid character set is
-- [a-zA-Z+-=._:\/]. The tag key can be up to 128 characters and must not
-- start with @aws:@. The tag value can be up to 256 characters.
--
-- 'domainName', 'createDomainName_domainName' - The name of the DomainName resource.
newCreateDomainName ::
  -- | 'domainName'
  Prelude.Text ->
  CreateDomainName
newCreateDomainName :: Text -> CreateDomainName
newCreateDomainName Text
pDomainName_ =
  CreateDomainName'
    { $sel:certificateArn:CreateDomainName' :: Maybe Text
certificateArn = forall a. Maybe a
Prelude.Nothing,
      $sel:certificateBody:CreateDomainName' :: Maybe Text
certificateBody = forall a. Maybe a
Prelude.Nothing,
      $sel:certificateChain:CreateDomainName' :: Maybe Text
certificateChain = forall a. Maybe a
Prelude.Nothing,
      $sel:certificateName:CreateDomainName' :: Maybe Text
certificateName = forall a. Maybe a
Prelude.Nothing,
      $sel:certificatePrivateKey:CreateDomainName' :: Maybe Text
certificatePrivateKey = forall a. Maybe a
Prelude.Nothing,
      $sel:endpointConfiguration:CreateDomainName' :: Maybe EndpointConfiguration
endpointConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:mutualTlsAuthentication:CreateDomainName' :: Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication = forall a. Maybe a
Prelude.Nothing,
      $sel:ownershipVerificationCertificateArn:CreateDomainName' :: Maybe Text
ownershipVerificationCertificateArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:regionalCertificateArn:CreateDomainName' :: Maybe Text
regionalCertificateArn = forall a. Maybe a
Prelude.Nothing,
      $sel:regionalCertificateName:CreateDomainName' :: Maybe Text
regionalCertificateName = forall a. Maybe a
Prelude.Nothing,
      $sel:securityPolicy:CreateDomainName' :: Maybe SecurityPolicy
securityPolicy = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateDomainName' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:domainName:CreateDomainName' :: Text
domainName = Text
pDomainName_
    }

-- | The reference to an AWS-managed certificate that will be used by
-- edge-optimized endpoint for this domain name. AWS Certificate Manager is
-- the only supported source.
createDomainName_certificateArn :: Lens.Lens' CreateDomainName (Prelude.Maybe Prelude.Text)
createDomainName_certificateArn :: Lens' CreateDomainName (Maybe Text)
createDomainName_certificateArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe Text
certificateArn :: Maybe Text
$sel:certificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
certificateArn} -> Maybe Text
certificateArn) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe Text
a -> CreateDomainName
s {$sel:certificateArn:CreateDomainName' :: Maybe Text
certificateArn = Maybe Text
a} :: CreateDomainName)

-- | [Deprecated] The body of the server certificate that will be used by
-- edge-optimized endpoint for this domain name provided by your
-- certificate authority.
createDomainName_certificateBody :: Lens.Lens' CreateDomainName (Prelude.Maybe Prelude.Text)
createDomainName_certificateBody :: Lens' CreateDomainName (Maybe Text)
createDomainName_certificateBody = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe Text
certificateBody :: Maybe Text
$sel:certificateBody:CreateDomainName' :: CreateDomainName -> Maybe Text
certificateBody} -> Maybe Text
certificateBody) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe Text
a -> CreateDomainName
s {$sel:certificateBody:CreateDomainName' :: Maybe Text
certificateBody = Maybe Text
a} :: CreateDomainName)

-- | [Deprecated] The intermediate certificates and optionally the root
-- certificate, one after the other without any blank lines, used by an
-- edge-optimized endpoint for this domain name. If you include the root
-- certificate, your certificate chain must start with intermediate
-- certificates and end with the root certificate. Use the intermediate
-- certificates that were provided by your certificate authority. Do not
-- include any intermediaries that are not in the chain of trust path.
createDomainName_certificateChain :: Lens.Lens' CreateDomainName (Prelude.Maybe Prelude.Text)
createDomainName_certificateChain :: Lens' CreateDomainName (Maybe Text)
createDomainName_certificateChain = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe Text
certificateChain :: Maybe Text
$sel:certificateChain:CreateDomainName' :: CreateDomainName -> Maybe Text
certificateChain} -> Maybe Text
certificateChain) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe Text
a -> CreateDomainName
s {$sel:certificateChain:CreateDomainName' :: Maybe Text
certificateChain = Maybe Text
a} :: CreateDomainName)

-- | The user-friendly name of the certificate that will be used by
-- edge-optimized endpoint for this domain name.
createDomainName_certificateName :: Lens.Lens' CreateDomainName (Prelude.Maybe Prelude.Text)
createDomainName_certificateName :: Lens' CreateDomainName (Maybe Text)
createDomainName_certificateName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe Text
certificateName :: Maybe Text
$sel:certificateName:CreateDomainName' :: CreateDomainName -> Maybe Text
certificateName} -> Maybe Text
certificateName) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe Text
a -> CreateDomainName
s {$sel:certificateName:CreateDomainName' :: Maybe Text
certificateName = Maybe Text
a} :: CreateDomainName)

-- | [Deprecated] Your edge-optimized endpoint\'s domain name certificate\'s
-- private key.
createDomainName_certificatePrivateKey :: Lens.Lens' CreateDomainName (Prelude.Maybe Prelude.Text)
createDomainName_certificatePrivateKey :: Lens' CreateDomainName (Maybe Text)
createDomainName_certificatePrivateKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe Text
certificatePrivateKey :: Maybe Text
$sel:certificatePrivateKey:CreateDomainName' :: CreateDomainName -> Maybe Text
certificatePrivateKey} -> Maybe Text
certificatePrivateKey) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe Text
a -> CreateDomainName
s {$sel:certificatePrivateKey:CreateDomainName' :: Maybe Text
certificatePrivateKey = Maybe Text
a} :: CreateDomainName)

-- | The endpoint configuration of this DomainName showing the endpoint types
-- of the domain name.
createDomainName_endpointConfiguration :: Lens.Lens' CreateDomainName (Prelude.Maybe EndpointConfiguration)
createDomainName_endpointConfiguration :: Lens' CreateDomainName (Maybe EndpointConfiguration)
createDomainName_endpointConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe EndpointConfiguration
endpointConfiguration :: Maybe EndpointConfiguration
$sel:endpointConfiguration:CreateDomainName' :: CreateDomainName -> Maybe EndpointConfiguration
endpointConfiguration} -> Maybe EndpointConfiguration
endpointConfiguration) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe EndpointConfiguration
a -> CreateDomainName
s {$sel:endpointConfiguration:CreateDomainName' :: Maybe EndpointConfiguration
endpointConfiguration = Maybe EndpointConfiguration
a} :: CreateDomainName)

-- | Undocumented member.
createDomainName_mutualTlsAuthentication :: Lens.Lens' CreateDomainName (Prelude.Maybe MutualTlsAuthenticationInput)
createDomainName_mutualTlsAuthentication :: Lens' CreateDomainName (Maybe MutualTlsAuthenticationInput)
createDomainName_mutualTlsAuthentication = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication :: Maybe MutualTlsAuthenticationInput
$sel:mutualTlsAuthentication:CreateDomainName' :: CreateDomainName -> Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication} -> Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe MutualTlsAuthenticationInput
a -> CreateDomainName
s {$sel:mutualTlsAuthentication:CreateDomainName' :: Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication = Maybe MutualTlsAuthenticationInput
a} :: CreateDomainName)

-- | The ARN of the public certificate issued by ACM to validate ownership of
-- your custom domain. Only required when configuring mutual TLS and using
-- an ACM imported or private CA certificate ARN as the
-- regionalCertificateArn.
createDomainName_ownershipVerificationCertificateArn :: Lens.Lens' CreateDomainName (Prelude.Maybe Prelude.Text)
createDomainName_ownershipVerificationCertificateArn :: Lens' CreateDomainName (Maybe Text)
createDomainName_ownershipVerificationCertificateArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe Text
ownershipVerificationCertificateArn :: Maybe Text
$sel:ownershipVerificationCertificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
ownershipVerificationCertificateArn} -> Maybe Text
ownershipVerificationCertificateArn) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe Text
a -> CreateDomainName
s {$sel:ownershipVerificationCertificateArn:CreateDomainName' :: Maybe Text
ownershipVerificationCertificateArn = Maybe Text
a} :: CreateDomainName)

-- | The reference to an AWS-managed certificate that will be used by
-- regional endpoint for this domain name. AWS Certificate Manager is the
-- only supported source.
createDomainName_regionalCertificateArn :: Lens.Lens' CreateDomainName (Prelude.Maybe Prelude.Text)
createDomainName_regionalCertificateArn :: Lens' CreateDomainName (Maybe Text)
createDomainName_regionalCertificateArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe Text
regionalCertificateArn :: Maybe Text
$sel:regionalCertificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
regionalCertificateArn} -> Maybe Text
regionalCertificateArn) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe Text
a -> CreateDomainName
s {$sel:regionalCertificateArn:CreateDomainName' :: Maybe Text
regionalCertificateArn = Maybe Text
a} :: CreateDomainName)

-- | The user-friendly name of the certificate that will be used by regional
-- endpoint for this domain name.
createDomainName_regionalCertificateName :: Lens.Lens' CreateDomainName (Prelude.Maybe Prelude.Text)
createDomainName_regionalCertificateName :: Lens' CreateDomainName (Maybe Text)
createDomainName_regionalCertificateName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe Text
regionalCertificateName :: Maybe Text
$sel:regionalCertificateName:CreateDomainName' :: CreateDomainName -> Maybe Text
regionalCertificateName} -> Maybe Text
regionalCertificateName) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe Text
a -> CreateDomainName
s {$sel:regionalCertificateName:CreateDomainName' :: Maybe Text
regionalCertificateName = Maybe Text
a} :: CreateDomainName)

-- | The Transport Layer Security (TLS) version + cipher suite for this
-- DomainName. The valid values are @TLS_1_0@ and @TLS_1_2@.
createDomainName_securityPolicy :: Lens.Lens' CreateDomainName (Prelude.Maybe SecurityPolicy)
createDomainName_securityPolicy :: Lens' CreateDomainName (Maybe SecurityPolicy)
createDomainName_securityPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe SecurityPolicy
securityPolicy :: Maybe SecurityPolicy
$sel:securityPolicy:CreateDomainName' :: CreateDomainName -> Maybe SecurityPolicy
securityPolicy} -> Maybe SecurityPolicy
securityPolicy) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe SecurityPolicy
a -> CreateDomainName
s {$sel:securityPolicy:CreateDomainName' :: Maybe SecurityPolicy
securityPolicy = Maybe SecurityPolicy
a} :: CreateDomainName)

-- | The key-value map of strings. The valid character set is
-- [a-zA-Z+-=._:\/]. The tag key can be up to 128 characters and must not
-- start with @aws:@. The tag value can be up to 256 characters.
createDomainName_tags :: Lens.Lens' CreateDomainName (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createDomainName_tags :: Lens' CreateDomainName (Maybe (HashMap Text Text))
createDomainName_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:CreateDomainName' :: CreateDomainName -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: CreateDomainName
s@CreateDomainName' {} Maybe (HashMap Text Text)
a -> CreateDomainName
s {$sel:tags:CreateDomainName' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: CreateDomainName) 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 DomainName resource.
createDomainName_domainName :: Lens.Lens' CreateDomainName Prelude.Text
createDomainName_domainName :: Lens' CreateDomainName Text
createDomainName_domainName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDomainName' {Text
domainName :: Text
$sel:domainName:CreateDomainName' :: CreateDomainName -> Text
domainName} -> Text
domainName) (\s :: CreateDomainName
s@CreateDomainName' {} Text
a -> CreateDomainName
s {$sel:domainName:CreateDomainName' :: Text
domainName = Text
a} :: CreateDomainName)

instance Core.AWSRequest CreateDomainName where
  type AWSResponse CreateDomainName = DomainName
  request :: (Service -> Service)
-> CreateDomainName -> Request CreateDomainName
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateDomainName
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateDomainName)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      (\Int
s ResponseHeaders
h Object
x -> forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)

instance Prelude.Hashable CreateDomainName where
  hashWithSalt :: Int -> CreateDomainName -> Int
hashWithSalt Int
_salt CreateDomainName' {Maybe Text
Maybe (HashMap Text Text)
Maybe EndpointConfiguration
Maybe MutualTlsAuthenticationInput
Maybe SecurityPolicy
Text
domainName :: Text
tags :: Maybe (HashMap Text Text)
securityPolicy :: Maybe SecurityPolicy
regionalCertificateName :: Maybe Text
regionalCertificateArn :: Maybe Text
ownershipVerificationCertificateArn :: Maybe Text
mutualTlsAuthentication :: Maybe MutualTlsAuthenticationInput
endpointConfiguration :: Maybe EndpointConfiguration
certificatePrivateKey :: Maybe Text
certificateName :: Maybe Text
certificateChain :: Maybe Text
certificateBody :: Maybe Text
certificateArn :: Maybe Text
$sel:domainName:CreateDomainName' :: CreateDomainName -> Text
$sel:tags:CreateDomainName' :: CreateDomainName -> Maybe (HashMap Text Text)
$sel:securityPolicy:CreateDomainName' :: CreateDomainName -> Maybe SecurityPolicy
$sel:regionalCertificateName:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:regionalCertificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:ownershipVerificationCertificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:mutualTlsAuthentication:CreateDomainName' :: CreateDomainName -> Maybe MutualTlsAuthenticationInput
$sel:endpointConfiguration:CreateDomainName' :: CreateDomainName -> Maybe EndpointConfiguration
$sel:certificatePrivateKey:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateName:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateChain:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateBody:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
certificateArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
certificateBody
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
certificateChain
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
certificateName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
certificatePrivateKey
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EndpointConfiguration
endpointConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ownershipVerificationCertificateArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
regionalCertificateArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
regionalCertificateName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SecurityPolicy
securityPolicy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
domainName

instance Prelude.NFData CreateDomainName where
  rnf :: CreateDomainName -> ()
rnf CreateDomainName' {Maybe Text
Maybe (HashMap Text Text)
Maybe EndpointConfiguration
Maybe MutualTlsAuthenticationInput
Maybe SecurityPolicy
Text
domainName :: Text
tags :: Maybe (HashMap Text Text)
securityPolicy :: Maybe SecurityPolicy
regionalCertificateName :: Maybe Text
regionalCertificateArn :: Maybe Text
ownershipVerificationCertificateArn :: Maybe Text
mutualTlsAuthentication :: Maybe MutualTlsAuthenticationInput
endpointConfiguration :: Maybe EndpointConfiguration
certificatePrivateKey :: Maybe Text
certificateName :: Maybe Text
certificateChain :: Maybe Text
certificateBody :: Maybe Text
certificateArn :: Maybe Text
$sel:domainName:CreateDomainName' :: CreateDomainName -> Text
$sel:tags:CreateDomainName' :: CreateDomainName -> Maybe (HashMap Text Text)
$sel:securityPolicy:CreateDomainName' :: CreateDomainName -> Maybe SecurityPolicy
$sel:regionalCertificateName:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:regionalCertificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:ownershipVerificationCertificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:mutualTlsAuthentication:CreateDomainName' :: CreateDomainName -> Maybe MutualTlsAuthenticationInput
$sel:endpointConfiguration:CreateDomainName' :: CreateDomainName -> Maybe EndpointConfiguration
$sel:certificatePrivateKey:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateName:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateChain:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateBody:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
certificateArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
certificateBody
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
certificateChain
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
certificateName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
certificatePrivateKey
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EndpointConfiguration
endpointConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ownershipVerificationCertificateArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
regionalCertificateArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
regionalCertificateName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SecurityPolicy
securityPolicy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
domainName

instance Data.ToHeaders CreateDomainName where
  toHeaders :: CreateDomainName -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Accept"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# (ByteString
"application/json" :: Prelude.ByteString)
          ]
      )

instance Data.ToJSON CreateDomainName where
  toJSON :: CreateDomainName -> Value
toJSON CreateDomainName' {Maybe Text
Maybe (HashMap Text Text)
Maybe EndpointConfiguration
Maybe MutualTlsAuthenticationInput
Maybe SecurityPolicy
Text
domainName :: Text
tags :: Maybe (HashMap Text Text)
securityPolicy :: Maybe SecurityPolicy
regionalCertificateName :: Maybe Text
regionalCertificateArn :: Maybe Text
ownershipVerificationCertificateArn :: Maybe Text
mutualTlsAuthentication :: Maybe MutualTlsAuthenticationInput
endpointConfiguration :: Maybe EndpointConfiguration
certificatePrivateKey :: Maybe Text
certificateName :: Maybe Text
certificateChain :: Maybe Text
certificateBody :: Maybe Text
certificateArn :: Maybe Text
$sel:domainName:CreateDomainName' :: CreateDomainName -> Text
$sel:tags:CreateDomainName' :: CreateDomainName -> Maybe (HashMap Text Text)
$sel:securityPolicy:CreateDomainName' :: CreateDomainName -> Maybe SecurityPolicy
$sel:regionalCertificateName:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:regionalCertificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:ownershipVerificationCertificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:mutualTlsAuthentication:CreateDomainName' :: CreateDomainName -> Maybe MutualTlsAuthenticationInput
$sel:endpointConfiguration:CreateDomainName' :: CreateDomainName -> Maybe EndpointConfiguration
$sel:certificatePrivateKey:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateName:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateChain:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateBody:CreateDomainName' :: CreateDomainName -> Maybe Text
$sel:certificateArn:CreateDomainName' :: CreateDomainName -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"certificateArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
certificateArn,
            (Key
"certificateBody" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
certificateBody,
            (Key
"certificateChain" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
certificateChain,
            (Key
"certificateName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
certificateName,
            (Key
"certificatePrivateKey" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
certificatePrivateKey,
            (Key
"endpointConfiguration" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe EndpointConfiguration
endpointConfiguration,
            (Key
"mutualTlsAuthentication" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe MutualTlsAuthenticationInput
mutualTlsAuthentication,
            (Key
"ownershipVerificationCertificateArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
ownershipVerificationCertificateArn,
            (Key
"regionalCertificateArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
regionalCertificateArn,
            (Key
"regionalCertificateName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
regionalCertificateName,
            (Key
"securityPolicy" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe SecurityPolicy
securityPolicy,
            (Key
"tags" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text Text)
tags,
            forall a. a -> Maybe a
Prelude.Just (Key
"domainName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
domainName)
          ]
      )

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

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