{-# 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.DrS.CreateReplicationConfigurationTemplate
-- 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 ReplicationConfigurationTemplate.
module Amazonka.DrS.CreateReplicationConfigurationTemplate
  ( -- * Creating a Request
    CreateReplicationConfigurationTemplate (..),
    newCreateReplicationConfigurationTemplate,

    -- * Request Lenses
    createReplicationConfigurationTemplate_ebsEncryptionKeyArn,
    createReplicationConfigurationTemplate_tags,
    createReplicationConfigurationTemplate_associateDefaultSecurityGroup,
    createReplicationConfigurationTemplate_bandwidthThrottling,
    createReplicationConfigurationTemplate_createPublicIP,
    createReplicationConfigurationTemplate_dataPlaneRouting,
    createReplicationConfigurationTemplate_defaultLargeStagingDiskType,
    createReplicationConfigurationTemplate_ebsEncryption,
    createReplicationConfigurationTemplate_pitPolicy,
    createReplicationConfigurationTemplate_replicationServerInstanceType,
    createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
    createReplicationConfigurationTemplate_stagingAreaSubnetId,
    createReplicationConfigurationTemplate_stagingAreaTags,
    createReplicationConfigurationTemplate_useDedicatedReplicationServer,

    -- * Destructuring the Response
    ReplicationConfigurationTemplate (..),
    newReplicationConfigurationTemplate,

    -- * Response Lenses
    replicationConfigurationTemplate_arn,
    replicationConfigurationTemplate_associateDefaultSecurityGroup,
    replicationConfigurationTemplate_bandwidthThrottling,
    replicationConfigurationTemplate_createPublicIP,
    replicationConfigurationTemplate_dataPlaneRouting,
    replicationConfigurationTemplate_defaultLargeStagingDiskType,
    replicationConfigurationTemplate_ebsEncryption,
    replicationConfigurationTemplate_ebsEncryptionKeyArn,
    replicationConfigurationTemplate_pitPolicy,
    replicationConfigurationTemplate_replicationServerInstanceType,
    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
    replicationConfigurationTemplate_stagingAreaSubnetId,
    replicationConfigurationTemplate_stagingAreaTags,
    replicationConfigurationTemplate_tags,
    replicationConfigurationTemplate_useDedicatedReplicationServer,
    replicationConfigurationTemplate_replicationConfigurationTemplateID,
  )
where

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

-- | /See:/ 'newCreateReplicationConfigurationTemplate' smart constructor.
data CreateReplicationConfigurationTemplate = CreateReplicationConfigurationTemplate'
  { -- | The ARN of the EBS encryption key to be used during replication.
    CreateReplicationConfigurationTemplate -> Maybe Text
ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
    -- | A set of tags to be associated with the Replication Configuration
    -- Template resource.
    CreateReplicationConfigurationTemplate
-> Maybe (Sensitive (HashMap Text Text))
tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
    -- | Whether to associate the default Elastic Disaster Recovery Security
    -- group with the Replication Configuration Template.
    CreateReplicationConfigurationTemplate -> Bool
associateDefaultSecurityGroup :: Prelude.Bool,
    -- | Configure bandwidth throttling for the outbound data transfer rate of
    -- the Source Server in Mbps.
    CreateReplicationConfigurationTemplate -> Natural
bandwidthThrottling :: Prelude.Natural,
    -- | Whether to create a Public IP for the Recovery Instance by default.
    CreateReplicationConfigurationTemplate -> Bool
createPublicIP :: Prelude.Bool,
    -- | The data plane routing mechanism that will be used for replication.
    CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDataPlaneRouting
dataPlaneRouting :: ReplicationConfigurationDataPlaneRouting,
    -- | The Staging Disk EBS volume type to be used during replication.
    CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType :: ReplicationConfigurationDefaultLargeStagingDiskType,
    -- | The type of EBS encryption to be used during replication.
    CreateReplicationConfigurationTemplate
-> ReplicationConfigurationEbsEncryption
ebsEncryption :: ReplicationConfigurationEbsEncryption,
    -- | The Point in time (PIT) policy to manage snapshots taken during
    -- replication.
    CreateReplicationConfigurationTemplate -> NonEmpty PITPolicyRule
pitPolicy :: Prelude.NonEmpty PITPolicyRule,
    -- | The instance type to be used for the replication server.
    CreateReplicationConfigurationTemplate -> Text
replicationServerInstanceType :: Prelude.Text,
    -- | The security group IDs that will be used by the replication server.
    CreateReplicationConfigurationTemplate -> [Text]
replicationServersSecurityGroupsIDs :: [Prelude.Text],
    -- | The subnet to be used by the replication staging area.
    CreateReplicationConfigurationTemplate -> Text
stagingAreaSubnetId :: Prelude.Text,
    -- | A set of tags to be associated with all resources created in the
    -- replication staging area: EC2 replication server, EBS volumes, EBS
    -- snapshots, etc.
    CreateReplicationConfigurationTemplate
-> Sensitive (HashMap Text Text)
stagingAreaTags :: Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | Whether to use a dedicated Replication Server in the replication staging
    -- area.
    CreateReplicationConfigurationTemplate -> Bool
useDedicatedReplicationServer :: Prelude.Bool
  }
  deriving (CreateReplicationConfigurationTemplate
-> CreateReplicationConfigurationTemplate -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateReplicationConfigurationTemplate
-> CreateReplicationConfigurationTemplate -> Bool
$c/= :: CreateReplicationConfigurationTemplate
-> CreateReplicationConfigurationTemplate -> Bool
== :: CreateReplicationConfigurationTemplate
-> CreateReplicationConfigurationTemplate -> Bool
$c== :: CreateReplicationConfigurationTemplate
-> CreateReplicationConfigurationTemplate -> Bool
Prelude.Eq, Int -> CreateReplicationConfigurationTemplate -> ShowS
[CreateReplicationConfigurationTemplate] -> ShowS
CreateReplicationConfigurationTemplate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateReplicationConfigurationTemplate] -> ShowS
$cshowList :: [CreateReplicationConfigurationTemplate] -> ShowS
show :: CreateReplicationConfigurationTemplate -> String
$cshow :: CreateReplicationConfigurationTemplate -> String
showsPrec :: Int -> CreateReplicationConfigurationTemplate -> ShowS
$cshowsPrec :: Int -> CreateReplicationConfigurationTemplate -> ShowS
Prelude.Show, forall x.
Rep CreateReplicationConfigurationTemplate x
-> CreateReplicationConfigurationTemplate
forall x.
CreateReplicationConfigurationTemplate
-> Rep CreateReplicationConfigurationTemplate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateReplicationConfigurationTemplate x
-> CreateReplicationConfigurationTemplate
$cfrom :: forall x.
CreateReplicationConfigurationTemplate
-> Rep CreateReplicationConfigurationTemplate x
Prelude.Generic)

-- |
-- Create a value of 'CreateReplicationConfigurationTemplate' 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:
--
-- 'ebsEncryptionKeyArn', 'createReplicationConfigurationTemplate_ebsEncryptionKeyArn' - The ARN of the EBS encryption key to be used during replication.
--
-- 'tags', 'createReplicationConfigurationTemplate_tags' - A set of tags to be associated with the Replication Configuration
-- Template resource.
--
-- 'associateDefaultSecurityGroup', 'createReplicationConfigurationTemplate_associateDefaultSecurityGroup' - Whether to associate the default Elastic Disaster Recovery Security
-- group with the Replication Configuration Template.
--
-- 'bandwidthThrottling', 'createReplicationConfigurationTemplate_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
-- the Source Server in Mbps.
--
-- 'createPublicIP', 'createReplicationConfigurationTemplate_createPublicIP' - Whether to create a Public IP for the Recovery Instance by default.
--
-- 'dataPlaneRouting', 'createReplicationConfigurationTemplate_dataPlaneRouting' - The data plane routing mechanism that will be used for replication.
--
-- 'defaultLargeStagingDiskType', 'createReplicationConfigurationTemplate_defaultLargeStagingDiskType' - The Staging Disk EBS volume type to be used during replication.
--
-- 'ebsEncryption', 'createReplicationConfigurationTemplate_ebsEncryption' - The type of EBS encryption to be used during replication.
--
-- 'pitPolicy', 'createReplicationConfigurationTemplate_pitPolicy' - The Point in time (PIT) policy to manage snapshots taken during
-- replication.
--
-- 'replicationServerInstanceType', 'createReplicationConfigurationTemplate_replicationServerInstanceType' - The instance type to be used for the replication server.
--
-- 'replicationServersSecurityGroupsIDs', 'createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs' - The security group IDs that will be used by the replication server.
--
-- 'stagingAreaSubnetId', 'createReplicationConfigurationTemplate_stagingAreaSubnetId' - The subnet to be used by the replication staging area.
--
-- 'stagingAreaTags', 'createReplicationConfigurationTemplate_stagingAreaTags' - A set of tags to be associated with all resources created in the
-- replication staging area: EC2 replication server, EBS volumes, EBS
-- snapshots, etc.
--
-- 'useDedicatedReplicationServer', 'createReplicationConfigurationTemplate_useDedicatedReplicationServer' - Whether to use a dedicated Replication Server in the replication staging
-- area.
newCreateReplicationConfigurationTemplate ::
  -- | 'associateDefaultSecurityGroup'
  Prelude.Bool ->
  -- | 'bandwidthThrottling'
  Prelude.Natural ->
  -- | 'createPublicIP'
  Prelude.Bool ->
  -- | 'dataPlaneRouting'
  ReplicationConfigurationDataPlaneRouting ->
  -- | 'defaultLargeStagingDiskType'
  ReplicationConfigurationDefaultLargeStagingDiskType ->
  -- | 'ebsEncryption'
  ReplicationConfigurationEbsEncryption ->
  -- | 'pitPolicy'
  Prelude.NonEmpty PITPolicyRule ->
  -- | 'replicationServerInstanceType'
  Prelude.Text ->
  -- | 'stagingAreaSubnetId'
  Prelude.Text ->
  -- | 'useDedicatedReplicationServer'
  Prelude.Bool ->
  CreateReplicationConfigurationTemplate
newCreateReplicationConfigurationTemplate :: Bool
-> Natural
-> Bool
-> ReplicationConfigurationDataPlaneRouting
-> ReplicationConfigurationDefaultLargeStagingDiskType
-> ReplicationConfigurationEbsEncryption
-> NonEmpty PITPolicyRule
-> Text
-> Text
-> Bool
-> CreateReplicationConfigurationTemplate
newCreateReplicationConfigurationTemplate
  Bool
pAssociateDefaultSecurityGroup_
  Natural
pBandwidthThrottling_
  Bool
pCreatePublicIP_
  ReplicationConfigurationDataPlaneRouting
pDataPlaneRouting_
  ReplicationConfigurationDefaultLargeStagingDiskType
pDefaultLargeStagingDiskType_
  ReplicationConfigurationEbsEncryption
pEbsEncryption_
  NonEmpty PITPolicyRule
pPitPolicy_
  Text
pReplicationServerInstanceType_
  Text
pStagingAreaSubnetId_
  Bool
pUseDedicatedReplicationServer_ =
    CreateReplicationConfigurationTemplate'
      { $sel:ebsEncryptionKeyArn:CreateReplicationConfigurationTemplate' :: Maybe Text
ebsEncryptionKeyArn =
          forall a. Maybe a
Prelude.Nothing,
        $sel:tags:CreateReplicationConfigurationTemplate' :: Maybe (Sensitive (HashMap Text Text))
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:associateDefaultSecurityGroup:CreateReplicationConfigurationTemplate' :: Bool
associateDefaultSecurityGroup =
          Bool
pAssociateDefaultSecurityGroup_,
        $sel:bandwidthThrottling:CreateReplicationConfigurationTemplate' :: Natural
bandwidthThrottling =
          Natural
pBandwidthThrottling_,
        $sel:createPublicIP:CreateReplicationConfigurationTemplate' :: Bool
createPublicIP = Bool
pCreatePublicIP_,
        $sel:dataPlaneRouting:CreateReplicationConfigurationTemplate' :: ReplicationConfigurationDataPlaneRouting
dataPlaneRouting =
          ReplicationConfigurationDataPlaneRouting
pDataPlaneRouting_,
        $sel:defaultLargeStagingDiskType:CreateReplicationConfigurationTemplate' :: ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType =
          ReplicationConfigurationDefaultLargeStagingDiskType
pDefaultLargeStagingDiskType_,
        $sel:ebsEncryption:CreateReplicationConfigurationTemplate' :: ReplicationConfigurationEbsEncryption
ebsEncryption = ReplicationConfigurationEbsEncryption
pEbsEncryption_,
        $sel:pitPolicy:CreateReplicationConfigurationTemplate' :: NonEmpty PITPolicyRule
pitPolicy =
          forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty PITPolicyRule
pPitPolicy_,
        $sel:replicationServerInstanceType:CreateReplicationConfigurationTemplate' :: Text
replicationServerInstanceType =
          Text
pReplicationServerInstanceType_,
        $sel:replicationServersSecurityGroupsIDs:CreateReplicationConfigurationTemplate' :: [Text]
replicationServersSecurityGroupsIDs =
          forall a. Monoid a => a
Prelude.mempty,
        $sel:stagingAreaSubnetId:CreateReplicationConfigurationTemplate' :: Text
stagingAreaSubnetId =
          Text
pStagingAreaSubnetId_,
        $sel:stagingAreaTags:CreateReplicationConfigurationTemplate' :: Sensitive (HashMap Text Text)
stagingAreaTags = forall a. Monoid a => a
Prelude.mempty,
        $sel:useDedicatedReplicationServer:CreateReplicationConfigurationTemplate' :: Bool
useDedicatedReplicationServer =
          Bool
pUseDedicatedReplicationServer_
      }

-- | The ARN of the EBS encryption key to be used during replication.
createReplicationConfigurationTemplate_ebsEncryptionKeyArn :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
createReplicationConfigurationTemplate_ebsEncryptionKeyArn :: Lens' CreateReplicationConfigurationTemplate (Maybe Text)
createReplicationConfigurationTemplate_ebsEncryptionKeyArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Maybe Text
ebsEncryptionKeyArn :: Maybe Text
$sel:ebsEncryptionKeyArn:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Maybe Text
ebsEncryptionKeyArn} -> Maybe Text
ebsEncryptionKeyArn) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Maybe Text
a -> CreateReplicationConfigurationTemplate
s {$sel:ebsEncryptionKeyArn:CreateReplicationConfigurationTemplate' :: Maybe Text
ebsEncryptionKeyArn = Maybe Text
a} :: CreateReplicationConfigurationTemplate)

-- | A set of tags to be associated with the Replication Configuration
-- Template resource.
createReplicationConfigurationTemplate_tags :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createReplicationConfigurationTemplate_tags :: Lens'
  CreateReplicationConfigurationTemplate (Maybe (HashMap Text Text))
createReplicationConfigurationTemplate_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Maybe (Sensitive (HashMap Text Text))
tags :: Maybe (Sensitive (HashMap Text Text))
$sel:tags:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> Maybe (Sensitive (HashMap Text Text))
tags} -> Maybe (Sensitive (HashMap Text Text))
tags) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Maybe (Sensitive (HashMap Text Text))
a -> CreateReplicationConfigurationTemplate
s {$sel:tags:CreateReplicationConfigurationTemplate' :: Maybe (Sensitive (HashMap Text Text))
tags = Maybe (Sensitive (HashMap Text Text))
a} :: CreateReplicationConfigurationTemplate) 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 a. Iso' (Sensitive a) a
Data._Sensitive forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced)

-- | Whether to associate the default Elastic Disaster Recovery Security
-- group with the Replication Configuration Template.
createReplicationConfigurationTemplate_associateDefaultSecurityGroup :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Bool
createReplicationConfigurationTemplate_associateDefaultSecurityGroup :: Lens' CreateReplicationConfigurationTemplate Bool
createReplicationConfigurationTemplate_associateDefaultSecurityGroup = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Bool
associateDefaultSecurityGroup :: Bool
$sel:associateDefaultSecurityGroup:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
associateDefaultSecurityGroup} -> Bool
associateDefaultSecurityGroup) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Bool
a -> CreateReplicationConfigurationTemplate
s {$sel:associateDefaultSecurityGroup:CreateReplicationConfigurationTemplate' :: Bool
associateDefaultSecurityGroup = Bool
a} :: CreateReplicationConfigurationTemplate)

-- | Configure bandwidth throttling for the outbound data transfer rate of
-- the Source Server in Mbps.
createReplicationConfigurationTemplate_bandwidthThrottling :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Natural
createReplicationConfigurationTemplate_bandwidthThrottling :: Lens' CreateReplicationConfigurationTemplate Natural
createReplicationConfigurationTemplate_bandwidthThrottling = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Natural
bandwidthThrottling :: Natural
$sel:bandwidthThrottling:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Natural
bandwidthThrottling} -> Natural
bandwidthThrottling) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Natural
a -> CreateReplicationConfigurationTemplate
s {$sel:bandwidthThrottling:CreateReplicationConfigurationTemplate' :: Natural
bandwidthThrottling = Natural
a} :: CreateReplicationConfigurationTemplate)

-- | Whether to create a Public IP for the Recovery Instance by default.
createReplicationConfigurationTemplate_createPublicIP :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Bool
createReplicationConfigurationTemplate_createPublicIP :: Lens' CreateReplicationConfigurationTemplate Bool
createReplicationConfigurationTemplate_createPublicIP = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Bool
createPublicIP :: Bool
$sel:createPublicIP:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
createPublicIP} -> Bool
createPublicIP) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Bool
a -> CreateReplicationConfigurationTemplate
s {$sel:createPublicIP:CreateReplicationConfigurationTemplate' :: Bool
createPublicIP = Bool
a} :: CreateReplicationConfigurationTemplate)

-- | The data plane routing mechanism that will be used for replication.
createReplicationConfigurationTemplate_dataPlaneRouting :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationDataPlaneRouting
createReplicationConfigurationTemplate_dataPlaneRouting :: Lens'
  CreateReplicationConfigurationTemplate
  ReplicationConfigurationDataPlaneRouting
createReplicationConfigurationTemplate_dataPlaneRouting = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {ReplicationConfigurationDataPlaneRouting
dataPlaneRouting :: ReplicationConfigurationDataPlaneRouting
$sel:dataPlaneRouting:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDataPlaneRouting
dataPlaneRouting} -> ReplicationConfigurationDataPlaneRouting
dataPlaneRouting) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} ReplicationConfigurationDataPlaneRouting
a -> CreateReplicationConfigurationTemplate
s {$sel:dataPlaneRouting:CreateReplicationConfigurationTemplate' :: ReplicationConfigurationDataPlaneRouting
dataPlaneRouting = ReplicationConfigurationDataPlaneRouting
a} :: CreateReplicationConfigurationTemplate)

-- | The Staging Disk EBS volume type to be used during replication.
createReplicationConfigurationTemplate_defaultLargeStagingDiskType :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationDefaultLargeStagingDiskType
createReplicationConfigurationTemplate_defaultLargeStagingDiskType :: Lens'
  CreateReplicationConfigurationTemplate
  ReplicationConfigurationDefaultLargeStagingDiskType
createReplicationConfigurationTemplate_defaultLargeStagingDiskType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType :: ReplicationConfigurationDefaultLargeStagingDiskType
$sel:defaultLargeStagingDiskType:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType} -> ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} ReplicationConfigurationDefaultLargeStagingDiskType
a -> CreateReplicationConfigurationTemplate
s {$sel:defaultLargeStagingDiskType:CreateReplicationConfigurationTemplate' :: ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType = ReplicationConfigurationDefaultLargeStagingDiskType
a} :: CreateReplicationConfigurationTemplate)

-- | The type of EBS encryption to be used during replication.
createReplicationConfigurationTemplate_ebsEncryption :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationEbsEncryption
createReplicationConfigurationTemplate_ebsEncryption :: Lens'
  CreateReplicationConfigurationTemplate
  ReplicationConfigurationEbsEncryption
createReplicationConfigurationTemplate_ebsEncryption = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {ReplicationConfigurationEbsEncryption
ebsEncryption :: ReplicationConfigurationEbsEncryption
$sel:ebsEncryption:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationEbsEncryption
ebsEncryption} -> ReplicationConfigurationEbsEncryption
ebsEncryption) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} ReplicationConfigurationEbsEncryption
a -> CreateReplicationConfigurationTemplate
s {$sel:ebsEncryption:CreateReplicationConfigurationTemplate' :: ReplicationConfigurationEbsEncryption
ebsEncryption = ReplicationConfigurationEbsEncryption
a} :: CreateReplicationConfigurationTemplate)

-- | The Point in time (PIT) policy to manage snapshots taken during
-- replication.
createReplicationConfigurationTemplate_pitPolicy :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.NonEmpty PITPolicyRule)
createReplicationConfigurationTemplate_pitPolicy :: Lens'
  CreateReplicationConfigurationTemplate (NonEmpty PITPolicyRule)
createReplicationConfigurationTemplate_pitPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {NonEmpty PITPolicyRule
pitPolicy :: NonEmpty PITPolicyRule
$sel:pitPolicy:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> NonEmpty PITPolicyRule
pitPolicy} -> NonEmpty PITPolicyRule
pitPolicy) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} NonEmpty PITPolicyRule
a -> CreateReplicationConfigurationTemplate
s {$sel:pitPolicy:CreateReplicationConfigurationTemplate' :: NonEmpty PITPolicyRule
pitPolicy = NonEmpty PITPolicyRule
a} :: CreateReplicationConfigurationTemplate) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The instance type to be used for the replication server.
createReplicationConfigurationTemplate_replicationServerInstanceType :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Text
createReplicationConfigurationTemplate_replicationServerInstanceType :: Lens' CreateReplicationConfigurationTemplate Text
createReplicationConfigurationTemplate_replicationServerInstanceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Text
replicationServerInstanceType :: Text
$sel:replicationServerInstanceType:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Text
replicationServerInstanceType} -> Text
replicationServerInstanceType) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Text
a -> CreateReplicationConfigurationTemplate
s {$sel:replicationServerInstanceType:CreateReplicationConfigurationTemplate' :: Text
replicationServerInstanceType = Text
a} :: CreateReplicationConfigurationTemplate)

-- | The security group IDs that will be used by the replication server.
createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs :: Lens.Lens' CreateReplicationConfigurationTemplate [Prelude.Text]
createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs :: Lens' CreateReplicationConfigurationTemplate [Text]
createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {[Text]
replicationServersSecurityGroupsIDs :: [Text]
$sel:replicationServersSecurityGroupsIDs:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> [Text]
replicationServersSecurityGroupsIDs} -> [Text]
replicationServersSecurityGroupsIDs) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} [Text]
a -> CreateReplicationConfigurationTemplate
s {$sel:replicationServersSecurityGroupsIDs:CreateReplicationConfigurationTemplate' :: [Text]
replicationServersSecurityGroupsIDs = [Text]
a} :: CreateReplicationConfigurationTemplate) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The subnet to be used by the replication staging area.
createReplicationConfigurationTemplate_stagingAreaSubnetId :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Text
createReplicationConfigurationTemplate_stagingAreaSubnetId :: Lens' CreateReplicationConfigurationTemplate Text
createReplicationConfigurationTemplate_stagingAreaSubnetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Text
stagingAreaSubnetId :: Text
$sel:stagingAreaSubnetId:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Text
stagingAreaSubnetId} -> Text
stagingAreaSubnetId) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Text
a -> CreateReplicationConfigurationTemplate
s {$sel:stagingAreaSubnetId:CreateReplicationConfigurationTemplate' :: Text
stagingAreaSubnetId = Text
a} :: CreateReplicationConfigurationTemplate)

-- | A set of tags to be associated with all resources created in the
-- replication staging area: EC2 replication server, EBS volumes, EBS
-- snapshots, etc.
createReplicationConfigurationTemplate_stagingAreaTags :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.HashMap Prelude.Text Prelude.Text)
createReplicationConfigurationTemplate_stagingAreaTags :: Lens' CreateReplicationConfigurationTemplate (HashMap Text Text)
createReplicationConfigurationTemplate_stagingAreaTags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Sensitive (HashMap Text Text)
stagingAreaTags :: Sensitive (HashMap Text Text)
$sel:stagingAreaTags:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> Sensitive (HashMap Text Text)
stagingAreaTags} -> Sensitive (HashMap Text Text)
stagingAreaTags) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Sensitive (HashMap Text Text)
a -> CreateReplicationConfigurationTemplate
s {$sel:stagingAreaTags:CreateReplicationConfigurationTemplate' :: Sensitive (HashMap Text Text)
stagingAreaTags = Sensitive (HashMap Text Text)
a} :: CreateReplicationConfigurationTemplate) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a. Iso' (Sensitive a) a
Data._Sensitive forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Whether to use a dedicated Replication Server in the replication staging
-- area.
createReplicationConfigurationTemplate_useDedicatedReplicationServer :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Bool
createReplicationConfigurationTemplate_useDedicatedReplicationServer :: Lens' CreateReplicationConfigurationTemplate Bool
createReplicationConfigurationTemplate_useDedicatedReplicationServer = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateReplicationConfigurationTemplate' {Bool
useDedicatedReplicationServer :: Bool
$sel:useDedicatedReplicationServer:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
useDedicatedReplicationServer} -> Bool
useDedicatedReplicationServer) (\s :: CreateReplicationConfigurationTemplate
s@CreateReplicationConfigurationTemplate' {} Bool
a -> CreateReplicationConfigurationTemplate
s {$sel:useDedicatedReplicationServer:CreateReplicationConfigurationTemplate' :: Bool
useDedicatedReplicationServer = Bool
a} :: CreateReplicationConfigurationTemplate)

instance
  Core.AWSRequest
    CreateReplicationConfigurationTemplate
  where
  type
    AWSResponse
      CreateReplicationConfigurationTemplate =
      ReplicationConfigurationTemplate
  request :: (Service -> Service)
-> CreateReplicationConfigurationTemplate
-> Request CreateReplicationConfigurationTemplate
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 CreateReplicationConfigurationTemplate
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse CreateReplicationConfigurationTemplate)))
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
    CreateReplicationConfigurationTemplate
  where
  hashWithSalt :: Int -> CreateReplicationConfigurationTemplate -> Int
hashWithSalt
    Int
_salt
    CreateReplicationConfigurationTemplate' {Bool
Natural
[Text]
Maybe Text
Maybe (Sensitive (HashMap Text Text))
NonEmpty PITPolicyRule
Text
Sensitive (HashMap Text Text)
ReplicationConfigurationDataPlaneRouting
ReplicationConfigurationDefaultLargeStagingDiskType
ReplicationConfigurationEbsEncryption
useDedicatedReplicationServer :: Bool
stagingAreaTags :: Sensitive (HashMap Text Text)
stagingAreaSubnetId :: Text
replicationServersSecurityGroupsIDs :: [Text]
replicationServerInstanceType :: Text
pitPolicy :: NonEmpty PITPolicyRule
ebsEncryption :: ReplicationConfigurationEbsEncryption
defaultLargeStagingDiskType :: ReplicationConfigurationDefaultLargeStagingDiskType
dataPlaneRouting :: ReplicationConfigurationDataPlaneRouting
createPublicIP :: Bool
bandwidthThrottling :: Natural
associateDefaultSecurityGroup :: Bool
tags :: Maybe (Sensitive (HashMap Text Text))
ebsEncryptionKeyArn :: Maybe Text
$sel:useDedicatedReplicationServer:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:stagingAreaTags:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> Sensitive (HashMap Text Text)
$sel:stagingAreaSubnetId:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Text
$sel:replicationServersSecurityGroupsIDs:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> [Text]
$sel:replicationServerInstanceType:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Text
$sel:pitPolicy:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> NonEmpty PITPolicyRule
$sel:ebsEncryption:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationEbsEncryption
$sel:defaultLargeStagingDiskType:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDefaultLargeStagingDiskType
$sel:dataPlaneRouting:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDataPlaneRouting
$sel:createPublicIP:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:bandwidthThrottling:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Natural
$sel:associateDefaultSecurityGroup:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:tags:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> Maybe (Sensitive (HashMap Text Text))
$sel:ebsEncryptionKeyArn:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ebsEncryptionKeyArn
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive (HashMap Text Text))
tags
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Bool
associateDefaultSecurityGroup
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Natural
bandwidthThrottling
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Bool
createPublicIP
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ReplicationConfigurationDataPlaneRouting
dataPlaneRouting
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ReplicationConfigurationEbsEncryption
ebsEncryption
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty PITPolicyRule
pitPolicy
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
replicationServerInstanceType
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [Text]
replicationServersSecurityGroupsIDs
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
stagingAreaSubnetId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Sensitive (HashMap Text Text)
stagingAreaTags
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Bool
useDedicatedReplicationServer

instance
  Prelude.NFData
    CreateReplicationConfigurationTemplate
  where
  rnf :: CreateReplicationConfigurationTemplate -> ()
rnf CreateReplicationConfigurationTemplate' {Bool
Natural
[Text]
Maybe Text
Maybe (Sensitive (HashMap Text Text))
NonEmpty PITPolicyRule
Text
Sensitive (HashMap Text Text)
ReplicationConfigurationDataPlaneRouting
ReplicationConfigurationDefaultLargeStagingDiskType
ReplicationConfigurationEbsEncryption
useDedicatedReplicationServer :: Bool
stagingAreaTags :: Sensitive (HashMap Text Text)
stagingAreaSubnetId :: Text
replicationServersSecurityGroupsIDs :: [Text]
replicationServerInstanceType :: Text
pitPolicy :: NonEmpty PITPolicyRule
ebsEncryption :: ReplicationConfigurationEbsEncryption
defaultLargeStagingDiskType :: ReplicationConfigurationDefaultLargeStagingDiskType
dataPlaneRouting :: ReplicationConfigurationDataPlaneRouting
createPublicIP :: Bool
bandwidthThrottling :: Natural
associateDefaultSecurityGroup :: Bool
tags :: Maybe (Sensitive (HashMap Text Text))
ebsEncryptionKeyArn :: Maybe Text
$sel:useDedicatedReplicationServer:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:stagingAreaTags:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> Sensitive (HashMap Text Text)
$sel:stagingAreaSubnetId:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Text
$sel:replicationServersSecurityGroupsIDs:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> [Text]
$sel:replicationServerInstanceType:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Text
$sel:pitPolicy:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> NonEmpty PITPolicyRule
$sel:ebsEncryption:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationEbsEncryption
$sel:defaultLargeStagingDiskType:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDefaultLargeStagingDiskType
$sel:dataPlaneRouting:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDataPlaneRouting
$sel:createPublicIP:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:bandwidthThrottling:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Natural
$sel:associateDefaultSecurityGroup:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:tags:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> Maybe (Sensitive (HashMap Text Text))
$sel:ebsEncryptionKeyArn:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ebsEncryptionKeyArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive (HashMap Text Text))
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Bool
associateDefaultSecurityGroup
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Natural
bandwidthThrottling
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Bool
createPublicIP
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ReplicationConfigurationDataPlaneRouting
dataPlaneRouting
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ReplicationConfigurationEbsEncryption
ebsEncryption
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty PITPolicyRule
pitPolicy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
replicationServerInstanceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [Text]
replicationServersSecurityGroupsIDs
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
stagingAreaSubnetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Sensitive (HashMap Text Text)
stagingAreaTags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Bool
useDedicatedReplicationServer

instance
  Data.ToHeaders
    CreateReplicationConfigurationTemplate
  where
  toHeaders :: CreateReplicationConfigurationTemplate -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance
  Data.ToJSON
    CreateReplicationConfigurationTemplate
  where
  toJSON :: CreateReplicationConfigurationTemplate -> Value
toJSON CreateReplicationConfigurationTemplate' {Bool
Natural
[Text]
Maybe Text
Maybe (Sensitive (HashMap Text Text))
NonEmpty PITPolicyRule
Text
Sensitive (HashMap Text Text)
ReplicationConfigurationDataPlaneRouting
ReplicationConfigurationDefaultLargeStagingDiskType
ReplicationConfigurationEbsEncryption
useDedicatedReplicationServer :: Bool
stagingAreaTags :: Sensitive (HashMap Text Text)
stagingAreaSubnetId :: Text
replicationServersSecurityGroupsIDs :: [Text]
replicationServerInstanceType :: Text
pitPolicy :: NonEmpty PITPolicyRule
ebsEncryption :: ReplicationConfigurationEbsEncryption
defaultLargeStagingDiskType :: ReplicationConfigurationDefaultLargeStagingDiskType
dataPlaneRouting :: ReplicationConfigurationDataPlaneRouting
createPublicIP :: Bool
bandwidthThrottling :: Natural
associateDefaultSecurityGroup :: Bool
tags :: Maybe (Sensitive (HashMap Text Text))
ebsEncryptionKeyArn :: Maybe Text
$sel:useDedicatedReplicationServer:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:stagingAreaTags:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> Sensitive (HashMap Text Text)
$sel:stagingAreaSubnetId:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Text
$sel:replicationServersSecurityGroupsIDs:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> [Text]
$sel:replicationServerInstanceType:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Text
$sel:pitPolicy:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> NonEmpty PITPolicyRule
$sel:ebsEncryption:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationEbsEncryption
$sel:defaultLargeStagingDiskType:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDefaultLargeStagingDiskType
$sel:dataPlaneRouting:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> ReplicationConfigurationDataPlaneRouting
$sel:createPublicIP:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:bandwidthThrottling:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Natural
$sel:associateDefaultSecurityGroup:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Bool
$sel:tags:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate
-> Maybe (Sensitive (HashMap Text Text))
$sel:ebsEncryptionKeyArn:CreateReplicationConfigurationTemplate' :: CreateReplicationConfigurationTemplate -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ebsEncryptionKeyArn" 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
ebsEncryptionKeyArn,
            (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 (Sensitive (HashMap Text Text))
tags,
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"associateDefaultSecurityGroup"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Bool
associateDefaultSecurityGroup
              ),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"bandwidthThrottling" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Natural
bandwidthThrottling),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"createPublicIP" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Bool
createPublicIP),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"dataPlaneRouting" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ReplicationConfigurationDataPlaneRouting
dataPlaneRouting),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"defaultLargeStagingDiskType"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ReplicationConfigurationDefaultLargeStagingDiskType
defaultLargeStagingDiskType
              ),
            forall a. a -> Maybe a
Prelude.Just (Key
"ebsEncryption" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ReplicationConfigurationEbsEncryption
ebsEncryption),
            forall a. a -> Maybe a
Prelude.Just (Key
"pitPolicy" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty PITPolicyRule
pitPolicy),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"replicationServerInstanceType"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
replicationServerInstanceType
              ),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"replicationServersSecurityGroupsIDs"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [Text]
replicationServersSecurityGroupsIDs
              ),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"stagingAreaSubnetId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
stagingAreaSubnetId),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"stagingAreaTags" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Sensitive (HashMap Text Text)
stagingAreaTags),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"useDedicatedReplicationServer"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Bool
useDedicatedReplicationServer
              )
          ]
      )

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

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