{-# 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.DocumentDB.CreateDBCluster
-- 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 Amazon DocumentDB cluster.
module Amazonka.DocumentDB.CreateDBCluster
  ( -- * Creating a Request
    CreateDBCluster (..),
    newCreateDBCluster,

    -- * Request Lenses
    createDBCluster_availabilityZones,
    createDBCluster_backupRetentionPeriod,
    createDBCluster_dbClusterParameterGroupName,
    createDBCluster_dbSubnetGroupName,
    createDBCluster_deletionProtection,
    createDBCluster_enableCloudwatchLogsExports,
    createDBCluster_engineVersion,
    createDBCluster_globalClusterIdentifier,
    createDBCluster_kmsKeyId,
    createDBCluster_masterUserPassword,
    createDBCluster_masterUsername,
    createDBCluster_port,
    createDBCluster_preSignedUrl,
    createDBCluster_preferredBackupWindow,
    createDBCluster_preferredMaintenanceWindow,
    createDBCluster_storageEncrypted,
    createDBCluster_tags,
    createDBCluster_vpcSecurityGroupIds,
    createDBCluster_dbClusterIdentifier,
    createDBCluster_engine,

    -- * Destructuring the Response
    CreateDBClusterResponse (..),
    newCreateDBClusterResponse,

    -- * Response Lenses
    createDBClusterResponse_dbCluster,
    createDBClusterResponse_httpStatus,
  )
where

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

-- | Represents the input to CreateDBCluster.
--
-- /See:/ 'newCreateDBCluster' smart constructor.
data CreateDBCluster = CreateDBCluster'
  { -- | A list of Amazon EC2 Availability Zones that instances in the cluster
    -- can be created in.
    CreateDBCluster -> Maybe [Text]
availabilityZones :: Prelude.Maybe [Prelude.Text],
    -- | The number of days for which automated backups are retained. You must
    -- specify a minimum value of 1.
    --
    -- Default: 1
    --
    -- Constraints:
    --
    -- -   Must be a value from 1 to 35.
    CreateDBCluster -> Maybe Int
backupRetentionPeriod :: Prelude.Maybe Prelude.Int,
    -- | The name of the cluster parameter group to associate with this cluster.
    CreateDBCluster -> Maybe Text
dbClusterParameterGroupName :: Prelude.Maybe Prelude.Text,
    -- | A subnet group to associate with this cluster.
    --
    -- Constraints: Must match the name of an existing @DBSubnetGroup@. Must
    -- not be default.
    --
    -- Example: @mySubnetgroup@
    CreateDBCluster -> Maybe Text
dbSubnetGroupName :: Prelude.Maybe Prelude.Text,
    -- | Specifies whether this cluster can be deleted. If @DeletionProtection@
    -- is enabled, the cluster cannot be deleted unless it is modified and
    -- @DeletionProtection@ is disabled. @DeletionProtection@ protects clusters
    -- from being accidentally deleted.
    CreateDBCluster -> Maybe Bool
deletionProtection :: Prelude.Maybe Prelude.Bool,
    -- | A list of log types that need to be enabled for exporting to Amazon
    -- CloudWatch Logs. You can enable audit logs or profiler logs. For more
    -- information, see
    -- <https://docs.aws.amazon.com/documentdb/latest/developerguide/event-auditing.html Auditing Amazon DocumentDB Events>
    -- and
    -- <https://docs.aws.amazon.com/documentdb/latest/developerguide/profiling.html Profiling Amazon DocumentDB Operations>.
    CreateDBCluster -> Maybe [Text]
enableCloudwatchLogsExports :: Prelude.Maybe [Prelude.Text],
    -- | The version number of the database engine to use. The @--engine-version@
    -- will default to the latest major engine version. For production
    -- workloads, we recommend explicitly declaring this parameter with the
    -- intended major engine version.
    CreateDBCluster -> Maybe Text
engineVersion :: Prelude.Maybe Prelude.Text,
    -- | The cluster identifier of the new global cluster.
    CreateDBCluster -> Maybe Text
globalClusterIdentifier :: Prelude.Maybe Prelude.Text,
    -- | The KMS key identifier for an encrypted cluster.
    --
    -- The KMS key identifier is the Amazon Resource Name (ARN) for the KMS
    -- encryption key. If you are creating a cluster using the same Amazon Web
    -- Services account that owns the KMS encryption key that is used to
    -- encrypt the new cluster, you can use the KMS key alias instead of the
    -- ARN for the KMS encryption key.
    --
    -- If an encryption key is not specified in @KmsKeyId@:
    --
    -- -   If the @StorageEncrypted@ parameter is @true@, Amazon DocumentDB
    --     uses your default encryption key.
    --
    -- KMS creates the default encryption key for your Amazon Web Services
    -- account. Your Amazon Web Services account has a different default
    -- encryption key for each Amazon Web Services Regions.
    CreateDBCluster -> Maybe Text
kmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | The password for the master database user. This password can contain any
    -- printable ASCII character except forward slash (\/), double quote (\"),
    -- or the \"at\" symbol (\@).
    --
    -- Constraints: Must contain from 8 to 100 characters.
    CreateDBCluster -> Maybe Text
masterUserPassword :: Prelude.Maybe Prelude.Text,
    -- | The name of the master user for the cluster.
    --
    -- Constraints:
    --
    -- -   Must be from 1 to 63 letters or numbers.
    --
    -- -   The first character must be a letter.
    --
    -- -   Cannot be a reserved word for the chosen database engine.
    CreateDBCluster -> Maybe Text
masterUsername :: Prelude.Maybe Prelude.Text,
    -- | The port number on which the instances in the cluster accept
    -- connections.
    CreateDBCluster -> Maybe Int
port :: Prelude.Maybe Prelude.Int,
    -- | Not currently supported.
    CreateDBCluster -> Maybe Text
preSignedUrl :: Prelude.Maybe Prelude.Text,
    -- | The daily time range during which automated backups are created if
    -- automated backups are enabled using the @BackupRetentionPeriod@
    -- parameter.
    --
    -- The default is a 30-minute window selected at random from an 8-hour
    -- block of time for each Amazon Web Services Region.
    --
    -- Constraints:
    --
    -- -   Must be in the format @hh24:mi-hh24:mi@.
    --
    -- -   Must be in Universal Coordinated Time (UTC).
    --
    -- -   Must not conflict with the preferred maintenance window.
    --
    -- -   Must be at least 30 minutes.
    CreateDBCluster -> Maybe Text
preferredBackupWindow :: Prelude.Maybe Prelude.Text,
    -- | The weekly time range during which system maintenance can occur, in
    -- Universal Coordinated Time (UTC).
    --
    -- Format: @ddd:hh24:mi-ddd:hh24:mi@
    --
    -- The default is a 30-minute window selected at random from an 8-hour
    -- block of time for each Amazon Web Services Region, occurring on a random
    -- day of the week.
    --
    -- Valid days: Mon, Tue, Wed, Thu, Fri, Sat, Sun
    --
    -- Constraints: Minimum 30-minute window.
    CreateDBCluster -> Maybe Text
preferredMaintenanceWindow :: Prelude.Maybe Prelude.Text,
    -- | Specifies whether the cluster is encrypted.
    CreateDBCluster -> Maybe Bool
storageEncrypted :: Prelude.Maybe Prelude.Bool,
    -- | The tags to be assigned to the cluster.
    CreateDBCluster -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | A list of EC2 VPC security groups to associate with this cluster.
    CreateDBCluster -> Maybe [Text]
vpcSecurityGroupIds :: Prelude.Maybe [Prelude.Text],
    -- | The cluster identifier. This parameter is stored as a lowercase string.
    --
    -- Constraints:
    --
    -- -   Must contain from 1 to 63 letters, numbers, or hyphens.
    --
    -- -   The first character must be a letter.
    --
    -- -   Cannot end with a hyphen or contain two consecutive hyphens.
    --
    -- Example: @my-cluster@
    CreateDBCluster -> Text
dbClusterIdentifier :: Prelude.Text,
    -- | The name of the database engine to be used for this cluster.
    --
    -- Valid values: @docdb@
    CreateDBCluster -> Text
engine :: Prelude.Text
  }
  deriving (CreateDBCluster -> CreateDBCluster -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDBCluster -> CreateDBCluster -> Bool
$c/= :: CreateDBCluster -> CreateDBCluster -> Bool
== :: CreateDBCluster -> CreateDBCluster -> Bool
$c== :: CreateDBCluster -> CreateDBCluster -> Bool
Prelude.Eq, ReadPrec [CreateDBCluster]
ReadPrec CreateDBCluster
Int -> ReadS CreateDBCluster
ReadS [CreateDBCluster]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDBCluster]
$creadListPrec :: ReadPrec [CreateDBCluster]
readPrec :: ReadPrec CreateDBCluster
$creadPrec :: ReadPrec CreateDBCluster
readList :: ReadS [CreateDBCluster]
$creadList :: ReadS [CreateDBCluster]
readsPrec :: Int -> ReadS CreateDBCluster
$creadsPrec :: Int -> ReadS CreateDBCluster
Prelude.Read, Int -> CreateDBCluster -> ShowS
[CreateDBCluster] -> ShowS
CreateDBCluster -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDBCluster] -> ShowS
$cshowList :: [CreateDBCluster] -> ShowS
show :: CreateDBCluster -> String
$cshow :: CreateDBCluster -> String
showsPrec :: Int -> CreateDBCluster -> ShowS
$cshowsPrec :: Int -> CreateDBCluster -> ShowS
Prelude.Show, forall x. Rep CreateDBCluster x -> CreateDBCluster
forall x. CreateDBCluster -> Rep CreateDBCluster x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDBCluster x -> CreateDBCluster
$cfrom :: forall x. CreateDBCluster -> Rep CreateDBCluster x
Prelude.Generic)

-- |
-- Create a value of 'CreateDBCluster' 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:
--
-- 'availabilityZones', 'createDBCluster_availabilityZones' - A list of Amazon EC2 Availability Zones that instances in the cluster
-- can be created in.
--
-- 'backupRetentionPeriod', 'createDBCluster_backupRetentionPeriod' - The number of days for which automated backups are retained. You must
-- specify a minimum value of 1.
--
-- Default: 1
--
-- Constraints:
--
-- -   Must be a value from 1 to 35.
--
-- 'dbClusterParameterGroupName', 'createDBCluster_dbClusterParameterGroupName' - The name of the cluster parameter group to associate with this cluster.
--
-- 'dbSubnetGroupName', 'createDBCluster_dbSubnetGroupName' - A subnet group to associate with this cluster.
--
-- Constraints: Must match the name of an existing @DBSubnetGroup@. Must
-- not be default.
--
-- Example: @mySubnetgroup@
--
-- 'deletionProtection', 'createDBCluster_deletionProtection' - Specifies whether this cluster can be deleted. If @DeletionProtection@
-- is enabled, the cluster cannot be deleted unless it is modified and
-- @DeletionProtection@ is disabled. @DeletionProtection@ protects clusters
-- from being accidentally deleted.
--
-- 'enableCloudwatchLogsExports', 'createDBCluster_enableCloudwatchLogsExports' - A list of log types that need to be enabled for exporting to Amazon
-- CloudWatch Logs. You can enable audit logs or profiler logs. For more
-- information, see
-- <https://docs.aws.amazon.com/documentdb/latest/developerguide/event-auditing.html Auditing Amazon DocumentDB Events>
-- and
-- <https://docs.aws.amazon.com/documentdb/latest/developerguide/profiling.html Profiling Amazon DocumentDB Operations>.
--
-- 'engineVersion', 'createDBCluster_engineVersion' - The version number of the database engine to use. The @--engine-version@
-- will default to the latest major engine version. For production
-- workloads, we recommend explicitly declaring this parameter with the
-- intended major engine version.
--
-- 'globalClusterIdentifier', 'createDBCluster_globalClusterIdentifier' - The cluster identifier of the new global cluster.
--
-- 'kmsKeyId', 'createDBCluster_kmsKeyId' - The KMS key identifier for an encrypted cluster.
--
-- The KMS key identifier is the Amazon Resource Name (ARN) for the KMS
-- encryption key. If you are creating a cluster using the same Amazon Web
-- Services account that owns the KMS encryption key that is used to
-- encrypt the new cluster, you can use the KMS key alias instead of the
-- ARN for the KMS encryption key.
--
-- If an encryption key is not specified in @KmsKeyId@:
--
-- -   If the @StorageEncrypted@ parameter is @true@, Amazon DocumentDB
--     uses your default encryption key.
--
-- KMS creates the default encryption key for your Amazon Web Services
-- account. Your Amazon Web Services account has a different default
-- encryption key for each Amazon Web Services Regions.
--
-- 'masterUserPassword', 'createDBCluster_masterUserPassword' - The password for the master database user. This password can contain any
-- printable ASCII character except forward slash (\/), double quote (\"),
-- or the \"at\" symbol (\@).
--
-- Constraints: Must contain from 8 to 100 characters.
--
-- 'masterUsername', 'createDBCluster_masterUsername' - The name of the master user for the cluster.
--
-- Constraints:
--
-- -   Must be from 1 to 63 letters or numbers.
--
-- -   The first character must be a letter.
--
-- -   Cannot be a reserved word for the chosen database engine.
--
-- 'port', 'createDBCluster_port' - The port number on which the instances in the cluster accept
-- connections.
--
-- 'preSignedUrl', 'createDBCluster_preSignedUrl' - Not currently supported.
--
-- 'preferredBackupWindow', 'createDBCluster_preferredBackupWindow' - The daily time range during which automated backups are created if
-- automated backups are enabled using the @BackupRetentionPeriod@
-- parameter.
--
-- The default is a 30-minute window selected at random from an 8-hour
-- block of time for each Amazon Web Services Region.
--
-- Constraints:
--
-- -   Must be in the format @hh24:mi-hh24:mi@.
--
-- -   Must be in Universal Coordinated Time (UTC).
--
-- -   Must not conflict with the preferred maintenance window.
--
-- -   Must be at least 30 minutes.
--
-- 'preferredMaintenanceWindow', 'createDBCluster_preferredMaintenanceWindow' - The weekly time range during which system maintenance can occur, in
-- Universal Coordinated Time (UTC).
--
-- Format: @ddd:hh24:mi-ddd:hh24:mi@
--
-- The default is a 30-minute window selected at random from an 8-hour
-- block of time for each Amazon Web Services Region, occurring on a random
-- day of the week.
--
-- Valid days: Mon, Tue, Wed, Thu, Fri, Sat, Sun
--
-- Constraints: Minimum 30-minute window.
--
-- 'storageEncrypted', 'createDBCluster_storageEncrypted' - Specifies whether the cluster is encrypted.
--
-- 'tags', 'createDBCluster_tags' - The tags to be assigned to the cluster.
--
-- 'vpcSecurityGroupIds', 'createDBCluster_vpcSecurityGroupIds' - A list of EC2 VPC security groups to associate with this cluster.
--
-- 'dbClusterIdentifier', 'createDBCluster_dbClusterIdentifier' - The cluster identifier. This parameter is stored as a lowercase string.
--
-- Constraints:
--
-- -   Must contain from 1 to 63 letters, numbers, or hyphens.
--
-- -   The first character must be a letter.
--
-- -   Cannot end with a hyphen or contain two consecutive hyphens.
--
-- Example: @my-cluster@
--
-- 'engine', 'createDBCluster_engine' - The name of the database engine to be used for this cluster.
--
-- Valid values: @docdb@
newCreateDBCluster ::
  -- | 'dbClusterIdentifier'
  Prelude.Text ->
  -- | 'engine'
  Prelude.Text ->
  CreateDBCluster
newCreateDBCluster :: Text -> Text -> CreateDBCluster
newCreateDBCluster Text
pDBClusterIdentifier_ Text
pEngine_ =
  CreateDBCluster'
    { $sel:availabilityZones:CreateDBCluster' :: Maybe [Text]
availabilityZones =
        forall a. Maybe a
Prelude.Nothing,
      $sel:backupRetentionPeriod:CreateDBCluster' :: Maybe Int
backupRetentionPeriod = forall a. Maybe a
Prelude.Nothing,
      $sel:dbClusterParameterGroupName:CreateDBCluster' :: Maybe Text
dbClusterParameterGroupName = forall a. Maybe a
Prelude.Nothing,
      $sel:dbSubnetGroupName:CreateDBCluster' :: Maybe Text
dbSubnetGroupName = forall a. Maybe a
Prelude.Nothing,
      $sel:deletionProtection:CreateDBCluster' :: Maybe Bool
deletionProtection = forall a. Maybe a
Prelude.Nothing,
      $sel:enableCloudwatchLogsExports:CreateDBCluster' :: Maybe [Text]
enableCloudwatchLogsExports = forall a. Maybe a
Prelude.Nothing,
      $sel:engineVersion:CreateDBCluster' :: Maybe Text
engineVersion = forall a. Maybe a
Prelude.Nothing,
      $sel:globalClusterIdentifier:CreateDBCluster' :: Maybe Text
globalClusterIdentifier = forall a. Maybe a
Prelude.Nothing,
      $sel:kmsKeyId:CreateDBCluster' :: Maybe Text
kmsKeyId = forall a. Maybe a
Prelude.Nothing,
      $sel:masterUserPassword:CreateDBCluster' :: Maybe Text
masterUserPassword = forall a. Maybe a
Prelude.Nothing,
      $sel:masterUsername:CreateDBCluster' :: Maybe Text
masterUsername = forall a. Maybe a
Prelude.Nothing,
      $sel:port:CreateDBCluster' :: Maybe Int
port = forall a. Maybe a
Prelude.Nothing,
      $sel:preSignedUrl:CreateDBCluster' :: Maybe Text
preSignedUrl = forall a. Maybe a
Prelude.Nothing,
      $sel:preferredBackupWindow:CreateDBCluster' :: Maybe Text
preferredBackupWindow = forall a. Maybe a
Prelude.Nothing,
      $sel:preferredMaintenanceWindow:CreateDBCluster' :: Maybe Text
preferredMaintenanceWindow = forall a. Maybe a
Prelude.Nothing,
      $sel:storageEncrypted:CreateDBCluster' :: Maybe Bool
storageEncrypted = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateDBCluster' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:vpcSecurityGroupIds:CreateDBCluster' :: Maybe [Text]
vpcSecurityGroupIds = forall a. Maybe a
Prelude.Nothing,
      $sel:dbClusterIdentifier:CreateDBCluster' :: Text
dbClusterIdentifier = Text
pDBClusterIdentifier_,
      $sel:engine:CreateDBCluster' :: Text
engine = Text
pEngine_
    }

-- | A list of Amazon EC2 Availability Zones that instances in the cluster
-- can be created in.
createDBCluster_availabilityZones :: Lens.Lens' CreateDBCluster (Prelude.Maybe [Prelude.Text])
createDBCluster_availabilityZones :: Lens' CreateDBCluster (Maybe [Text])
createDBCluster_availabilityZones = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe [Text]
availabilityZones :: Maybe [Text]
$sel:availabilityZones:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
availabilityZones} -> Maybe [Text]
availabilityZones) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe [Text]
a -> CreateDBCluster
s {$sel:availabilityZones:CreateDBCluster' :: Maybe [Text]
availabilityZones = Maybe [Text]
a} :: CreateDBCluster) 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 number of days for which automated backups are retained. You must
-- specify a minimum value of 1.
--
-- Default: 1
--
-- Constraints:
--
-- -   Must be a value from 1 to 35.
createDBCluster_backupRetentionPeriod :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Int)
createDBCluster_backupRetentionPeriod :: Lens' CreateDBCluster (Maybe Int)
createDBCluster_backupRetentionPeriod = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Int
backupRetentionPeriod :: Maybe Int
$sel:backupRetentionPeriod:CreateDBCluster' :: CreateDBCluster -> Maybe Int
backupRetentionPeriod} -> Maybe Int
backupRetentionPeriod) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Int
a -> CreateDBCluster
s {$sel:backupRetentionPeriod:CreateDBCluster' :: Maybe Int
backupRetentionPeriod = Maybe Int
a} :: CreateDBCluster)

-- | The name of the cluster parameter group to associate with this cluster.
createDBCluster_dbClusterParameterGroupName :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_dbClusterParameterGroupName :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_dbClusterParameterGroupName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
dbClusterParameterGroupName :: Maybe Text
$sel:dbClusterParameterGroupName:CreateDBCluster' :: CreateDBCluster -> Maybe Text
dbClusterParameterGroupName} -> Maybe Text
dbClusterParameterGroupName) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:dbClusterParameterGroupName:CreateDBCluster' :: Maybe Text
dbClusterParameterGroupName = Maybe Text
a} :: CreateDBCluster)

-- | A subnet group to associate with this cluster.
--
-- Constraints: Must match the name of an existing @DBSubnetGroup@. Must
-- not be default.
--
-- Example: @mySubnetgroup@
createDBCluster_dbSubnetGroupName :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_dbSubnetGroupName :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_dbSubnetGroupName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
dbSubnetGroupName :: Maybe Text
$sel:dbSubnetGroupName:CreateDBCluster' :: CreateDBCluster -> Maybe Text
dbSubnetGroupName} -> Maybe Text
dbSubnetGroupName) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:dbSubnetGroupName:CreateDBCluster' :: Maybe Text
dbSubnetGroupName = Maybe Text
a} :: CreateDBCluster)

-- | Specifies whether this cluster can be deleted. If @DeletionProtection@
-- is enabled, the cluster cannot be deleted unless it is modified and
-- @DeletionProtection@ is disabled. @DeletionProtection@ protects clusters
-- from being accidentally deleted.
createDBCluster_deletionProtection :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Bool)
createDBCluster_deletionProtection :: Lens' CreateDBCluster (Maybe Bool)
createDBCluster_deletionProtection = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Bool
deletionProtection :: Maybe Bool
$sel:deletionProtection:CreateDBCluster' :: CreateDBCluster -> Maybe Bool
deletionProtection} -> Maybe Bool
deletionProtection) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Bool
a -> CreateDBCluster
s {$sel:deletionProtection:CreateDBCluster' :: Maybe Bool
deletionProtection = Maybe Bool
a} :: CreateDBCluster)

-- | A list of log types that need to be enabled for exporting to Amazon
-- CloudWatch Logs. You can enable audit logs or profiler logs. For more
-- information, see
-- <https://docs.aws.amazon.com/documentdb/latest/developerguide/event-auditing.html Auditing Amazon DocumentDB Events>
-- and
-- <https://docs.aws.amazon.com/documentdb/latest/developerguide/profiling.html Profiling Amazon DocumentDB Operations>.
createDBCluster_enableCloudwatchLogsExports :: Lens.Lens' CreateDBCluster (Prelude.Maybe [Prelude.Text])
createDBCluster_enableCloudwatchLogsExports :: Lens' CreateDBCluster (Maybe [Text])
createDBCluster_enableCloudwatchLogsExports = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe [Text]
enableCloudwatchLogsExports :: Maybe [Text]
$sel:enableCloudwatchLogsExports:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
enableCloudwatchLogsExports} -> Maybe [Text]
enableCloudwatchLogsExports) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe [Text]
a -> CreateDBCluster
s {$sel:enableCloudwatchLogsExports:CreateDBCluster' :: Maybe [Text]
enableCloudwatchLogsExports = Maybe [Text]
a} :: CreateDBCluster) 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 version number of the database engine to use. The @--engine-version@
-- will default to the latest major engine version. For production
-- workloads, we recommend explicitly declaring this parameter with the
-- intended major engine version.
createDBCluster_engineVersion :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_engineVersion :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_engineVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
engineVersion :: Maybe Text
$sel:engineVersion:CreateDBCluster' :: CreateDBCluster -> Maybe Text
engineVersion} -> Maybe Text
engineVersion) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:engineVersion:CreateDBCluster' :: Maybe Text
engineVersion = Maybe Text
a} :: CreateDBCluster)

-- | The cluster identifier of the new global cluster.
createDBCluster_globalClusterIdentifier :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_globalClusterIdentifier :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_globalClusterIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
globalClusterIdentifier :: Maybe Text
$sel:globalClusterIdentifier:CreateDBCluster' :: CreateDBCluster -> Maybe Text
globalClusterIdentifier} -> Maybe Text
globalClusterIdentifier) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:globalClusterIdentifier:CreateDBCluster' :: Maybe Text
globalClusterIdentifier = Maybe Text
a} :: CreateDBCluster)

-- | The KMS key identifier for an encrypted cluster.
--
-- The KMS key identifier is the Amazon Resource Name (ARN) for the KMS
-- encryption key. If you are creating a cluster using the same Amazon Web
-- Services account that owns the KMS encryption key that is used to
-- encrypt the new cluster, you can use the KMS key alias instead of the
-- ARN for the KMS encryption key.
--
-- If an encryption key is not specified in @KmsKeyId@:
--
-- -   If the @StorageEncrypted@ parameter is @true@, Amazon DocumentDB
--     uses your default encryption key.
--
-- KMS creates the default encryption key for your Amazon Web Services
-- account. Your Amazon Web Services account has a different default
-- encryption key for each Amazon Web Services Regions.
createDBCluster_kmsKeyId :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_kmsKeyId :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_kmsKeyId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
kmsKeyId :: Maybe Text
$sel:kmsKeyId:CreateDBCluster' :: CreateDBCluster -> Maybe Text
kmsKeyId} -> Maybe Text
kmsKeyId) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:kmsKeyId:CreateDBCluster' :: Maybe Text
kmsKeyId = Maybe Text
a} :: CreateDBCluster)

-- | The password for the master database user. This password can contain any
-- printable ASCII character except forward slash (\/), double quote (\"),
-- or the \"at\" symbol (\@).
--
-- Constraints: Must contain from 8 to 100 characters.
createDBCluster_masterUserPassword :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_masterUserPassword :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_masterUserPassword = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
masterUserPassword :: Maybe Text
$sel:masterUserPassword:CreateDBCluster' :: CreateDBCluster -> Maybe Text
masterUserPassword} -> Maybe Text
masterUserPassword) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:masterUserPassword:CreateDBCluster' :: Maybe Text
masterUserPassword = Maybe Text
a} :: CreateDBCluster)

-- | The name of the master user for the cluster.
--
-- Constraints:
--
-- -   Must be from 1 to 63 letters or numbers.
--
-- -   The first character must be a letter.
--
-- -   Cannot be a reserved word for the chosen database engine.
createDBCluster_masterUsername :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_masterUsername :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_masterUsername = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
masterUsername :: Maybe Text
$sel:masterUsername:CreateDBCluster' :: CreateDBCluster -> Maybe Text
masterUsername} -> Maybe Text
masterUsername) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:masterUsername:CreateDBCluster' :: Maybe Text
masterUsername = Maybe Text
a} :: CreateDBCluster)

-- | The port number on which the instances in the cluster accept
-- connections.
createDBCluster_port :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Int)
createDBCluster_port :: Lens' CreateDBCluster (Maybe Int)
createDBCluster_port = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Int
port :: Maybe Int
$sel:port:CreateDBCluster' :: CreateDBCluster -> Maybe Int
port} -> Maybe Int
port) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Int
a -> CreateDBCluster
s {$sel:port:CreateDBCluster' :: Maybe Int
port = Maybe Int
a} :: CreateDBCluster)

-- | Not currently supported.
createDBCluster_preSignedUrl :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_preSignedUrl :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_preSignedUrl = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
preSignedUrl :: Maybe Text
$sel:preSignedUrl:CreateDBCluster' :: CreateDBCluster -> Maybe Text
preSignedUrl} -> Maybe Text
preSignedUrl) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:preSignedUrl:CreateDBCluster' :: Maybe Text
preSignedUrl = Maybe Text
a} :: CreateDBCluster)

-- | The daily time range during which automated backups are created if
-- automated backups are enabled using the @BackupRetentionPeriod@
-- parameter.
--
-- The default is a 30-minute window selected at random from an 8-hour
-- block of time for each Amazon Web Services Region.
--
-- Constraints:
--
-- -   Must be in the format @hh24:mi-hh24:mi@.
--
-- -   Must be in Universal Coordinated Time (UTC).
--
-- -   Must not conflict with the preferred maintenance window.
--
-- -   Must be at least 30 minutes.
createDBCluster_preferredBackupWindow :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_preferredBackupWindow :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_preferredBackupWindow = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
preferredBackupWindow :: Maybe Text
$sel:preferredBackupWindow:CreateDBCluster' :: CreateDBCluster -> Maybe Text
preferredBackupWindow} -> Maybe Text
preferredBackupWindow) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:preferredBackupWindow:CreateDBCluster' :: Maybe Text
preferredBackupWindow = Maybe Text
a} :: CreateDBCluster)

-- | The weekly time range during which system maintenance can occur, in
-- Universal Coordinated Time (UTC).
--
-- Format: @ddd:hh24:mi-ddd:hh24:mi@
--
-- The default is a 30-minute window selected at random from an 8-hour
-- block of time for each Amazon Web Services Region, occurring on a random
-- day of the week.
--
-- Valid days: Mon, Tue, Wed, Thu, Fri, Sat, Sun
--
-- Constraints: Minimum 30-minute window.
createDBCluster_preferredMaintenanceWindow :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Text)
createDBCluster_preferredMaintenanceWindow :: Lens' CreateDBCluster (Maybe Text)
createDBCluster_preferredMaintenanceWindow = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Text
preferredMaintenanceWindow :: Maybe Text
$sel:preferredMaintenanceWindow:CreateDBCluster' :: CreateDBCluster -> Maybe Text
preferredMaintenanceWindow} -> Maybe Text
preferredMaintenanceWindow) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Text
a -> CreateDBCluster
s {$sel:preferredMaintenanceWindow:CreateDBCluster' :: Maybe Text
preferredMaintenanceWindow = Maybe Text
a} :: CreateDBCluster)

-- | Specifies whether the cluster is encrypted.
createDBCluster_storageEncrypted :: Lens.Lens' CreateDBCluster (Prelude.Maybe Prelude.Bool)
createDBCluster_storageEncrypted :: Lens' CreateDBCluster (Maybe Bool)
createDBCluster_storageEncrypted = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe Bool
storageEncrypted :: Maybe Bool
$sel:storageEncrypted:CreateDBCluster' :: CreateDBCluster -> Maybe Bool
storageEncrypted} -> Maybe Bool
storageEncrypted) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe Bool
a -> CreateDBCluster
s {$sel:storageEncrypted:CreateDBCluster' :: Maybe Bool
storageEncrypted = Maybe Bool
a} :: CreateDBCluster)

-- | The tags to be assigned to the cluster.
createDBCluster_tags :: Lens.Lens' CreateDBCluster (Prelude.Maybe [Tag])
createDBCluster_tags :: Lens' CreateDBCluster (Maybe [Tag])
createDBCluster_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateDBCluster' :: CreateDBCluster -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe [Tag]
a -> CreateDBCluster
s {$sel:tags:CreateDBCluster' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateDBCluster) 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

-- | A list of EC2 VPC security groups to associate with this cluster.
createDBCluster_vpcSecurityGroupIds :: Lens.Lens' CreateDBCluster (Prelude.Maybe [Prelude.Text])
createDBCluster_vpcSecurityGroupIds :: Lens' CreateDBCluster (Maybe [Text])
createDBCluster_vpcSecurityGroupIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Maybe [Text]
vpcSecurityGroupIds :: Maybe [Text]
$sel:vpcSecurityGroupIds:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
vpcSecurityGroupIds} -> Maybe [Text]
vpcSecurityGroupIds) (\s :: CreateDBCluster
s@CreateDBCluster' {} Maybe [Text]
a -> CreateDBCluster
s {$sel:vpcSecurityGroupIds:CreateDBCluster' :: Maybe [Text]
vpcSecurityGroupIds = Maybe [Text]
a} :: CreateDBCluster) 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 cluster identifier. This parameter is stored as a lowercase string.
--
-- Constraints:
--
-- -   Must contain from 1 to 63 letters, numbers, or hyphens.
--
-- -   The first character must be a letter.
--
-- -   Cannot end with a hyphen or contain two consecutive hyphens.
--
-- Example: @my-cluster@
createDBCluster_dbClusterIdentifier :: Lens.Lens' CreateDBCluster Prelude.Text
createDBCluster_dbClusterIdentifier :: Lens' CreateDBCluster Text
createDBCluster_dbClusterIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Text
dbClusterIdentifier :: Text
$sel:dbClusterIdentifier:CreateDBCluster' :: CreateDBCluster -> Text
dbClusterIdentifier} -> Text
dbClusterIdentifier) (\s :: CreateDBCluster
s@CreateDBCluster' {} Text
a -> CreateDBCluster
s {$sel:dbClusterIdentifier:CreateDBCluster' :: Text
dbClusterIdentifier = Text
a} :: CreateDBCluster)

-- | The name of the database engine to be used for this cluster.
--
-- Valid values: @docdb@
createDBCluster_engine :: Lens.Lens' CreateDBCluster Prelude.Text
createDBCluster_engine :: Lens' CreateDBCluster Text
createDBCluster_engine = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBCluster' {Text
engine :: Text
$sel:engine:CreateDBCluster' :: CreateDBCluster -> Text
engine} -> Text
engine) (\s :: CreateDBCluster
s@CreateDBCluster' {} Text
a -> CreateDBCluster
s {$sel:engine:CreateDBCluster' :: Text
engine = Text
a} :: CreateDBCluster)

instance Core.AWSRequest CreateDBCluster where
  type
    AWSResponse CreateDBCluster =
      CreateDBClusterResponse
  request :: (Service -> Service) -> CreateDBCluster -> Request CreateDBCluster
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 CreateDBCluster
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateDBCluster)))
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
"CreateDBClusterResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe DBCluster -> Int -> CreateDBClusterResponse
CreateDBClusterResponse'
            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
"DBCluster")
            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 CreateDBCluster where
  hashWithSalt :: Int -> CreateDBCluster -> Int
hashWithSalt Int
_salt CreateDBCluster' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [Tag]
Maybe Text
Text
engine :: Text
dbClusterIdentifier :: Text
vpcSecurityGroupIds :: Maybe [Text]
tags :: Maybe [Tag]
storageEncrypted :: Maybe Bool
preferredMaintenanceWindow :: Maybe Text
preferredBackupWindow :: Maybe Text
preSignedUrl :: Maybe Text
port :: Maybe Int
masterUsername :: Maybe Text
masterUserPassword :: Maybe Text
kmsKeyId :: Maybe Text
globalClusterIdentifier :: Maybe Text
engineVersion :: Maybe Text
enableCloudwatchLogsExports :: Maybe [Text]
deletionProtection :: Maybe Bool
dbSubnetGroupName :: Maybe Text
dbClusterParameterGroupName :: Maybe Text
backupRetentionPeriod :: Maybe Int
availabilityZones :: Maybe [Text]
$sel:engine:CreateDBCluster' :: CreateDBCluster -> Text
$sel:dbClusterIdentifier:CreateDBCluster' :: CreateDBCluster -> Text
$sel:vpcSecurityGroupIds:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
$sel:tags:CreateDBCluster' :: CreateDBCluster -> Maybe [Tag]
$sel:storageEncrypted:CreateDBCluster' :: CreateDBCluster -> Maybe Bool
$sel:preferredMaintenanceWindow:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:preferredBackupWindow:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:preSignedUrl:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:port:CreateDBCluster' :: CreateDBCluster -> Maybe Int
$sel:masterUsername:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:masterUserPassword:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:kmsKeyId:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:globalClusterIdentifier:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:engineVersion:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:enableCloudwatchLogsExports:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
$sel:deletionProtection:CreateDBCluster' :: CreateDBCluster -> Maybe Bool
$sel:dbSubnetGroupName:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:dbClusterParameterGroupName:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:backupRetentionPeriod:CreateDBCluster' :: CreateDBCluster -> Maybe Int
$sel:availabilityZones:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
availabilityZones
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
backupRetentionPeriod
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
dbClusterParameterGroupName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
dbSubnetGroupName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
deletionProtection
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
enableCloudwatchLogsExports
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
engineVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
globalClusterIdentifier
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
kmsKeyId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
masterUserPassword
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
masterUsername
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
port
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
preSignedUrl
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
preferredBackupWindow
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
preferredMaintenanceWindow
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
storageEncrypted
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
vpcSecurityGroupIds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dbClusterIdentifier
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
engine

instance Prelude.NFData CreateDBCluster where
  rnf :: CreateDBCluster -> ()
rnf CreateDBCluster' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [Tag]
Maybe Text
Text
engine :: Text
dbClusterIdentifier :: Text
vpcSecurityGroupIds :: Maybe [Text]
tags :: Maybe [Tag]
storageEncrypted :: Maybe Bool
preferredMaintenanceWindow :: Maybe Text
preferredBackupWindow :: Maybe Text
preSignedUrl :: Maybe Text
port :: Maybe Int
masterUsername :: Maybe Text
masterUserPassword :: Maybe Text
kmsKeyId :: Maybe Text
globalClusterIdentifier :: Maybe Text
engineVersion :: Maybe Text
enableCloudwatchLogsExports :: Maybe [Text]
deletionProtection :: Maybe Bool
dbSubnetGroupName :: Maybe Text
dbClusterParameterGroupName :: Maybe Text
backupRetentionPeriod :: Maybe Int
availabilityZones :: Maybe [Text]
$sel:engine:CreateDBCluster' :: CreateDBCluster -> Text
$sel:dbClusterIdentifier:CreateDBCluster' :: CreateDBCluster -> Text
$sel:vpcSecurityGroupIds:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
$sel:tags:CreateDBCluster' :: CreateDBCluster -> Maybe [Tag]
$sel:storageEncrypted:CreateDBCluster' :: CreateDBCluster -> Maybe Bool
$sel:preferredMaintenanceWindow:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:preferredBackupWindow:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:preSignedUrl:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:port:CreateDBCluster' :: CreateDBCluster -> Maybe Int
$sel:masterUsername:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:masterUserPassword:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:kmsKeyId:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:globalClusterIdentifier:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:engineVersion:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:enableCloudwatchLogsExports:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
$sel:deletionProtection:CreateDBCluster' :: CreateDBCluster -> Maybe Bool
$sel:dbSubnetGroupName:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:dbClusterParameterGroupName:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:backupRetentionPeriod:CreateDBCluster' :: CreateDBCluster -> Maybe Int
$sel:availabilityZones:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
availabilityZones
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
backupRetentionPeriod
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
dbClusterParameterGroupName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
dbSubnetGroupName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
deletionProtection
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
enableCloudwatchLogsExports
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
engineVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
globalClusterIdentifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
kmsKeyId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
masterUserPassword
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
masterUsername
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
port
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
preSignedUrl
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
preferredBackupWindow
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
preferredMaintenanceWindow
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
storageEncrypted
      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 Maybe [Text]
vpcSecurityGroupIds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dbClusterIdentifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
engine

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

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

instance Data.ToQuery CreateDBCluster where
  toQuery :: CreateDBCluster -> QueryString
toQuery CreateDBCluster' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [Tag]
Maybe Text
Text
engine :: Text
dbClusterIdentifier :: Text
vpcSecurityGroupIds :: Maybe [Text]
tags :: Maybe [Tag]
storageEncrypted :: Maybe Bool
preferredMaintenanceWindow :: Maybe Text
preferredBackupWindow :: Maybe Text
preSignedUrl :: Maybe Text
port :: Maybe Int
masterUsername :: Maybe Text
masterUserPassword :: Maybe Text
kmsKeyId :: Maybe Text
globalClusterIdentifier :: Maybe Text
engineVersion :: Maybe Text
enableCloudwatchLogsExports :: Maybe [Text]
deletionProtection :: Maybe Bool
dbSubnetGroupName :: Maybe Text
dbClusterParameterGroupName :: Maybe Text
backupRetentionPeriod :: Maybe Int
availabilityZones :: Maybe [Text]
$sel:engine:CreateDBCluster' :: CreateDBCluster -> Text
$sel:dbClusterIdentifier:CreateDBCluster' :: CreateDBCluster -> Text
$sel:vpcSecurityGroupIds:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
$sel:tags:CreateDBCluster' :: CreateDBCluster -> Maybe [Tag]
$sel:storageEncrypted:CreateDBCluster' :: CreateDBCluster -> Maybe Bool
$sel:preferredMaintenanceWindow:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:preferredBackupWindow:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:preSignedUrl:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:port:CreateDBCluster' :: CreateDBCluster -> Maybe Int
$sel:masterUsername:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:masterUserPassword:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:kmsKeyId:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:globalClusterIdentifier:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:engineVersion:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:enableCloudwatchLogsExports:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
$sel:deletionProtection:CreateDBCluster' :: CreateDBCluster -> Maybe Bool
$sel:dbSubnetGroupName:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:dbClusterParameterGroupName:CreateDBCluster' :: CreateDBCluster -> Maybe Text
$sel:backupRetentionPeriod:CreateDBCluster' :: CreateDBCluster -> Maybe Int
$sel:availabilityZones:CreateDBCluster' :: CreateDBCluster -> Maybe [Text]
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"CreateDBCluster" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2014-10-31" :: Prelude.ByteString),
        ByteString
"AvailabilityZones"
          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
"AvailabilityZone"
                forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
availabilityZones
            ),
        ByteString
"BackupRetentionPeriod"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Int
backupRetentionPeriod,
        ByteString
"DBClusterParameterGroupName"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
dbClusterParameterGroupName,
        ByteString
"DBSubnetGroupName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
dbSubnetGroupName,
        ByteString
"DeletionProtection" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
deletionProtection,
        ByteString
"EnableCloudwatchLogsExports"
          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 [Text]
enableCloudwatchLogsExports
            ),
        ByteString
"EngineVersion" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
engineVersion,
        ByteString
"GlobalClusterIdentifier"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
globalClusterIdentifier,
        ByteString
"KmsKeyId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
kmsKeyId,
        ByteString
"MasterUserPassword" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
masterUserPassword,
        ByteString
"MasterUsername" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
masterUsername,
        ByteString
"Port" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Int
port,
        ByteString
"PreSignedUrl" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
preSignedUrl,
        ByteString
"PreferredBackupWindow"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
preferredBackupWindow,
        ByteString
"PreferredMaintenanceWindow"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
preferredMaintenanceWindow,
        ByteString
"StorageEncrypted" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
storageEncrypted,
        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
"Tag" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Tag]
tags),
        ByteString
"VpcSecurityGroupIds"
          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
"VpcSecurityGroupId"
                forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
vpcSecurityGroupIds
            ),
        ByteString
"DBClusterIdentifier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
dbClusterIdentifier,
        ByteString
"Engine" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
engine
      ]

-- | /See:/ 'newCreateDBClusterResponse' smart constructor.
data CreateDBClusterResponse = CreateDBClusterResponse'
  { CreateDBClusterResponse -> Maybe DBCluster
dbCluster :: Prelude.Maybe DBCluster,
    -- | The response's http status code.
    CreateDBClusterResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateDBClusterResponse -> CreateDBClusterResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDBClusterResponse -> CreateDBClusterResponse -> Bool
$c/= :: CreateDBClusterResponse -> CreateDBClusterResponse -> Bool
== :: CreateDBClusterResponse -> CreateDBClusterResponse -> Bool
$c== :: CreateDBClusterResponse -> CreateDBClusterResponse -> Bool
Prelude.Eq, ReadPrec [CreateDBClusterResponse]
ReadPrec CreateDBClusterResponse
Int -> ReadS CreateDBClusterResponse
ReadS [CreateDBClusterResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDBClusterResponse]
$creadListPrec :: ReadPrec [CreateDBClusterResponse]
readPrec :: ReadPrec CreateDBClusterResponse
$creadPrec :: ReadPrec CreateDBClusterResponse
readList :: ReadS [CreateDBClusterResponse]
$creadList :: ReadS [CreateDBClusterResponse]
readsPrec :: Int -> ReadS CreateDBClusterResponse
$creadsPrec :: Int -> ReadS CreateDBClusterResponse
Prelude.Read, Int -> CreateDBClusterResponse -> ShowS
[CreateDBClusterResponse] -> ShowS
CreateDBClusterResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDBClusterResponse] -> ShowS
$cshowList :: [CreateDBClusterResponse] -> ShowS
show :: CreateDBClusterResponse -> String
$cshow :: CreateDBClusterResponse -> String
showsPrec :: Int -> CreateDBClusterResponse -> ShowS
$cshowsPrec :: Int -> CreateDBClusterResponse -> ShowS
Prelude.Show, forall x. Rep CreateDBClusterResponse x -> CreateDBClusterResponse
forall x. CreateDBClusterResponse -> Rep CreateDBClusterResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDBClusterResponse x -> CreateDBClusterResponse
$cfrom :: forall x. CreateDBClusterResponse -> Rep CreateDBClusterResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateDBClusterResponse' 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:
--
-- 'dbCluster', 'createDBClusterResponse_dbCluster' - Undocumented member.
--
-- 'httpStatus', 'createDBClusterResponse_httpStatus' - The response's http status code.
newCreateDBClusterResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateDBClusterResponse
newCreateDBClusterResponse :: Int -> CreateDBClusterResponse
newCreateDBClusterResponse Int
pHttpStatus_ =
  CreateDBClusterResponse'
    { $sel:dbCluster:CreateDBClusterResponse' :: Maybe DBCluster
dbCluster =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateDBClusterResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
createDBClusterResponse_dbCluster :: Lens.Lens' CreateDBClusterResponse (Prelude.Maybe DBCluster)
createDBClusterResponse_dbCluster :: Lens' CreateDBClusterResponse (Maybe DBCluster)
createDBClusterResponse_dbCluster = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBClusterResponse' {Maybe DBCluster
dbCluster :: Maybe DBCluster
$sel:dbCluster:CreateDBClusterResponse' :: CreateDBClusterResponse -> Maybe DBCluster
dbCluster} -> Maybe DBCluster
dbCluster) (\s :: CreateDBClusterResponse
s@CreateDBClusterResponse' {} Maybe DBCluster
a -> CreateDBClusterResponse
s {$sel:dbCluster:CreateDBClusterResponse' :: Maybe DBCluster
dbCluster = Maybe DBCluster
a} :: CreateDBClusterResponse)

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

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