{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.DBCluster
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.DocumentDB.Types.DBCluster where

import qualified Amazonka.Core as Core
import Amazonka.DocumentDB.Types.DBClusterMember
import Amazonka.DocumentDB.Types.DBClusterRole
import Amazonka.DocumentDB.Types.VpcSecurityGroupMembership
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude

-- | Detailed information about a cluster.
--
-- /See:/ 'newDBCluster' smart constructor.
data DBCluster = DBCluster'
  { -- | Indicates the database engine version.
    DBCluster -> Maybe Text
engineVersion :: Prelude.Maybe Prelude.Text,
    -- | Specifies the current state of this cluster.
    DBCluster -> Maybe Text
status :: 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.
    DBCluster -> Maybe Bool
deletionProtection :: Prelude.Maybe Prelude.Bool,
    -- | Specifies whether the cluster is encrypted.
    DBCluster -> Maybe Bool
storageEncrypted :: Prelude.Maybe Prelude.Bool,
    -- | Contains a user-supplied cluster identifier. This identifier is the
    -- unique key that identifies a cluster.
    DBCluster -> Maybe Text
dbClusterIdentifier :: Prelude.Maybe Prelude.Text,
    -- | Provides the list of instances that make up the cluster.
    DBCluster -> Maybe [DBClusterMember]
dbClusterMembers :: Prelude.Maybe [DBClusterMember],
    -- | Contains one or more identifiers of the secondary clusters that are
    -- associated with this cluster.
    DBCluster -> Maybe [Text]
readReplicaIdentifiers :: Prelude.Maybe [Prelude.Text],
    -- | Contains the identifier of the source cluster if this cluster is a
    -- secondary cluster.
    DBCluster -> Maybe Text
replicationSourceIdentifier :: Prelude.Maybe Prelude.Text,
    -- | Specifies the ID that Amazon Route 53 assigns when you create a hosted
    -- zone.
    DBCluster -> Maybe Text
hostedZoneId :: Prelude.Maybe Prelude.Text,
    -- | Specifies the name of the cluster parameter group for the cluster.
    DBCluster -> Maybe Text
dbClusterParameterGroup :: Prelude.Maybe Prelude.Text,
    -- | Contains the master user name for the cluster.
    DBCluster -> Maybe Text
masterUsername :: Prelude.Maybe Prelude.Text,
    -- | The Region-unique, immutable identifier for the cluster. This identifier
    -- is found in CloudTrail log entries whenever the KMS key for the cluster
    -- is accessed.
    DBCluster -> Maybe Text
dbClusterResourceId :: Prelude.Maybe Prelude.Text,
    -- | The earliest time to which a database can be restored with point-in-time
    -- restore.
    DBCluster -> Maybe ISO8601
earliestRestorableTime :: Prelude.Maybe Core.ISO8601,
    -- | Provides the name of the database engine to be used for this cluster.
    DBCluster -> Maybe Text
engine :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) for the cluster.
    DBCluster -> Maybe Text
dbClusterArn :: Prelude.Maybe Prelude.Text,
    -- | Specifies the latest time to which a database can be restored with
    -- point-in-time restore.
    DBCluster -> Maybe ISO8601
latestRestorableTime :: Prelude.Maybe Core.ISO8601,
    -- | Specifies the weekly time range during which system maintenance can
    -- occur, in Universal Coordinated Time (UTC).
    DBCluster -> Maybe Text
preferredMaintenanceWindow :: Prelude.Maybe Prelude.Text,
    -- | Provides the list of Amazon EC2 Availability Zones that instances in the
    -- cluster can be created in.
    DBCluster -> Maybe [Text]
availabilityZones :: Prelude.Maybe [Prelude.Text],
    -- | If @StorageEncrypted@ is @true@, the KMS key identifier for the
    -- encrypted cluster.
    DBCluster -> Maybe Text
kmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | Specifies the daily time range during which automated backups are
    -- created if automated backups are enabled, as determined by the
    -- @BackupRetentionPeriod@.
    DBCluster -> Maybe Text
preferredBackupWindow :: Prelude.Maybe Prelude.Text,
    -- | Provides a list of the Identity and Access Management (IAM) roles that
    -- are associated with the cluster. (IAM) roles that are associated with a
    -- cluster grant permission for the cluster to access other Amazon Web
    -- Services services on your behalf.
    DBCluster -> Maybe [DBClusterRole]
associatedRoles :: Prelude.Maybe [DBClusterRole],
    -- | Provides a list of virtual private cloud (VPC) security groups that the
    -- cluster belongs to.
    DBCluster -> Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups :: Prelude.Maybe [VpcSecurityGroupMembership],
    -- | Specifies the number of days for which automatic snapshots are retained.
    DBCluster -> Maybe Int
backupRetentionPeriod :: Prelude.Maybe Prelude.Int,
    -- | Specifies information on the subnet group that is associated with the
    -- cluster, including the name, description, and subnets in the subnet
    -- group.
    DBCluster -> Maybe Text
dbSubnetGroup :: Prelude.Maybe Prelude.Text,
    -- | Specifies whether the cluster has instances in multiple Availability
    -- Zones.
    DBCluster -> Maybe Bool
multiAZ :: Prelude.Maybe Prelude.Bool,
    -- | A list of log types that this cluster is configured to export to Amazon
    -- CloudWatch Logs.
    DBCluster -> Maybe [Text]
enabledCloudwatchLogsExports :: Prelude.Maybe [Prelude.Text],
    -- | Specifies the time when the cluster was created, in Universal
    -- Coordinated Time (UTC).
    DBCluster -> Maybe ISO8601
clusterCreateTime :: Prelude.Maybe Core.ISO8601,
    -- | Specifies the connection endpoint for the primary instance of the
    -- cluster.
    DBCluster -> Maybe Text
endpoint :: Prelude.Maybe Prelude.Text,
    -- | Specifies the progress of the operation as a percentage.
    DBCluster -> Maybe Text
percentProgress :: Prelude.Maybe Prelude.Text,
    -- | The reader endpoint for the cluster. The reader endpoint for a cluster
    -- load balances connections across the Amazon DocumentDB replicas that are
    -- available in a cluster. As clients request new connections to the reader
    -- endpoint, Amazon DocumentDB distributes the connection requests among
    -- the Amazon DocumentDB replicas in the cluster. This functionality can
    -- help balance your read workload across multiple Amazon DocumentDB
    -- replicas in your cluster.
    --
    -- If a failover occurs, and the Amazon DocumentDB replica that you are
    -- connected to is promoted to be the primary instance, your connection is
    -- dropped. To continue sending your read workload to other Amazon
    -- DocumentDB replicas in the cluster, you can then reconnect to the reader
    -- endpoint.
    DBCluster -> Maybe Text
readerEndpoint :: Prelude.Maybe Prelude.Text,
    -- | Specifies the port that the database engine is listening on.
    DBCluster -> Maybe Int
port :: Prelude.Maybe Prelude.Int
  }
  deriving (DBCluster -> DBCluster -> Bool
(DBCluster -> DBCluster -> Bool)
-> (DBCluster -> DBCluster -> Bool) -> Eq DBCluster
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DBCluster -> DBCluster -> Bool
$c/= :: DBCluster -> DBCluster -> Bool
== :: DBCluster -> DBCluster -> Bool
$c== :: DBCluster -> DBCluster -> Bool
Prelude.Eq, ReadPrec [DBCluster]
ReadPrec DBCluster
Int -> ReadS DBCluster
ReadS [DBCluster]
(Int -> ReadS DBCluster)
-> ReadS [DBCluster]
-> ReadPrec DBCluster
-> ReadPrec [DBCluster]
-> Read DBCluster
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DBCluster]
$creadListPrec :: ReadPrec [DBCluster]
readPrec :: ReadPrec DBCluster
$creadPrec :: ReadPrec DBCluster
readList :: ReadS [DBCluster]
$creadList :: ReadS [DBCluster]
readsPrec :: Int -> ReadS DBCluster
$creadsPrec :: Int -> ReadS DBCluster
Prelude.Read, Int -> DBCluster -> ShowS
[DBCluster] -> ShowS
DBCluster -> String
(Int -> DBCluster -> ShowS)
-> (DBCluster -> String)
-> ([DBCluster] -> ShowS)
-> Show DBCluster
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DBCluster] -> ShowS
$cshowList :: [DBCluster] -> ShowS
show :: DBCluster -> String
$cshow :: DBCluster -> String
showsPrec :: Int -> DBCluster -> ShowS
$cshowsPrec :: Int -> DBCluster -> ShowS
Prelude.Show, (forall x. DBCluster -> Rep DBCluster x)
-> (forall x. Rep DBCluster x -> DBCluster) -> Generic DBCluster
forall x. Rep DBCluster x -> DBCluster
forall x. DBCluster -> Rep DBCluster x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DBCluster x -> DBCluster
$cfrom :: forall x. DBCluster -> Rep DBCluster x
Prelude.Generic)

-- |
-- Create a value of 'DBCluster' 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:
--
-- 'engineVersion', 'dbCluster_engineVersion' - Indicates the database engine version.
--
-- 'status', 'dbCluster_status' - Specifies the current state of this cluster.
--
-- 'deletionProtection', 'dbCluster_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.
--
-- 'storageEncrypted', 'dbCluster_storageEncrypted' - Specifies whether the cluster is encrypted.
--
-- 'dbClusterIdentifier', 'dbCluster_dbClusterIdentifier' - Contains a user-supplied cluster identifier. This identifier is the
-- unique key that identifies a cluster.
--
-- 'dbClusterMembers', 'dbCluster_dbClusterMembers' - Provides the list of instances that make up the cluster.
--
-- 'readReplicaIdentifiers', 'dbCluster_readReplicaIdentifiers' - Contains one or more identifiers of the secondary clusters that are
-- associated with this cluster.
--
-- 'replicationSourceIdentifier', 'dbCluster_replicationSourceIdentifier' - Contains the identifier of the source cluster if this cluster is a
-- secondary cluster.
--
-- 'hostedZoneId', 'dbCluster_hostedZoneId' - Specifies the ID that Amazon Route 53 assigns when you create a hosted
-- zone.
--
-- 'dbClusterParameterGroup', 'dbCluster_dbClusterParameterGroup' - Specifies the name of the cluster parameter group for the cluster.
--
-- 'masterUsername', 'dbCluster_masterUsername' - Contains the master user name for the cluster.
--
-- 'dbClusterResourceId', 'dbCluster_dbClusterResourceId' - The Region-unique, immutable identifier for the cluster. This identifier
-- is found in CloudTrail log entries whenever the KMS key for the cluster
-- is accessed.
--
-- 'earliestRestorableTime', 'dbCluster_earliestRestorableTime' - The earliest time to which a database can be restored with point-in-time
-- restore.
--
-- 'engine', 'dbCluster_engine' - Provides the name of the database engine to be used for this cluster.
--
-- 'dbClusterArn', 'dbCluster_dbClusterArn' - The Amazon Resource Name (ARN) for the cluster.
--
-- 'latestRestorableTime', 'dbCluster_latestRestorableTime' - Specifies the latest time to which a database can be restored with
-- point-in-time restore.
--
-- 'preferredMaintenanceWindow', 'dbCluster_preferredMaintenanceWindow' - Specifies the weekly time range during which system maintenance can
-- occur, in Universal Coordinated Time (UTC).
--
-- 'availabilityZones', 'dbCluster_availabilityZones' - Provides the list of Amazon EC2 Availability Zones that instances in the
-- cluster can be created in.
--
-- 'kmsKeyId', 'dbCluster_kmsKeyId' - If @StorageEncrypted@ is @true@, the KMS key identifier for the
-- encrypted cluster.
--
-- 'preferredBackupWindow', 'dbCluster_preferredBackupWindow' - Specifies the daily time range during which automated backups are
-- created if automated backups are enabled, as determined by the
-- @BackupRetentionPeriod@.
--
-- 'associatedRoles', 'dbCluster_associatedRoles' - Provides a list of the Identity and Access Management (IAM) roles that
-- are associated with the cluster. (IAM) roles that are associated with a
-- cluster grant permission for the cluster to access other Amazon Web
-- Services services on your behalf.
--
-- 'vpcSecurityGroups', 'dbCluster_vpcSecurityGroups' - Provides a list of virtual private cloud (VPC) security groups that the
-- cluster belongs to.
--
-- 'backupRetentionPeriod', 'dbCluster_backupRetentionPeriod' - Specifies the number of days for which automatic snapshots are retained.
--
-- 'dbSubnetGroup', 'dbCluster_dbSubnetGroup' - Specifies information on the subnet group that is associated with the
-- cluster, including the name, description, and subnets in the subnet
-- group.
--
-- 'multiAZ', 'dbCluster_multiAZ' - Specifies whether the cluster has instances in multiple Availability
-- Zones.
--
-- 'enabledCloudwatchLogsExports', 'dbCluster_enabledCloudwatchLogsExports' - A list of log types that this cluster is configured to export to Amazon
-- CloudWatch Logs.
--
-- 'clusterCreateTime', 'dbCluster_clusterCreateTime' - Specifies the time when the cluster was created, in Universal
-- Coordinated Time (UTC).
--
-- 'endpoint', 'dbCluster_endpoint' - Specifies the connection endpoint for the primary instance of the
-- cluster.
--
-- 'percentProgress', 'dbCluster_percentProgress' - Specifies the progress of the operation as a percentage.
--
-- 'readerEndpoint', 'dbCluster_readerEndpoint' - The reader endpoint for the cluster. The reader endpoint for a cluster
-- load balances connections across the Amazon DocumentDB replicas that are
-- available in a cluster. As clients request new connections to the reader
-- endpoint, Amazon DocumentDB distributes the connection requests among
-- the Amazon DocumentDB replicas in the cluster. This functionality can
-- help balance your read workload across multiple Amazon DocumentDB
-- replicas in your cluster.
--
-- If a failover occurs, and the Amazon DocumentDB replica that you are
-- connected to is promoted to be the primary instance, your connection is
-- dropped. To continue sending your read workload to other Amazon
-- DocumentDB replicas in the cluster, you can then reconnect to the reader
-- endpoint.
--
-- 'port', 'dbCluster_port' - Specifies the port that the database engine is listening on.
newDBCluster ::
  DBCluster
newDBCluster :: DBCluster
newDBCluster =
  DBCluster' :: Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe [DBClusterMember]
-> Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe Text
-> Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe [DBClusterRole]
-> Maybe [VpcSecurityGroupMembership]
-> Maybe Int
-> Maybe Text
-> Maybe Bool
-> Maybe [Text]
-> Maybe ISO8601
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Int
-> DBCluster
DBCluster'
    { $sel:engineVersion:DBCluster' :: Maybe Text
engineVersion = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:status:DBCluster' :: Maybe Text
status = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:deletionProtection:DBCluster' :: Maybe Bool
deletionProtection = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:storageEncrypted:DBCluster' :: Maybe Bool
storageEncrypted = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:dbClusterIdentifier:DBCluster' :: Maybe Text
dbClusterIdentifier = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:dbClusterMembers:DBCluster' :: Maybe [DBClusterMember]
dbClusterMembers = Maybe [DBClusterMember]
forall a. Maybe a
Prelude.Nothing,
      $sel:readReplicaIdentifiers:DBCluster' :: Maybe [Text]
readReplicaIdentifiers = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:replicationSourceIdentifier:DBCluster' :: Maybe Text
replicationSourceIdentifier = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:hostedZoneId:DBCluster' :: Maybe Text
hostedZoneId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:dbClusterParameterGroup:DBCluster' :: Maybe Text
dbClusterParameterGroup = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:masterUsername:DBCluster' :: Maybe Text
masterUsername = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:dbClusterResourceId:DBCluster' :: Maybe Text
dbClusterResourceId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:earliestRestorableTime:DBCluster' :: Maybe ISO8601
earliestRestorableTime = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:engine:DBCluster' :: Maybe Text
engine = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:dbClusterArn:DBCluster' :: Maybe Text
dbClusterArn = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:latestRestorableTime:DBCluster' :: Maybe ISO8601
latestRestorableTime = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:preferredMaintenanceWindow:DBCluster' :: Maybe Text
preferredMaintenanceWindow = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:availabilityZones:DBCluster' :: Maybe [Text]
availabilityZones = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:kmsKeyId:DBCluster' :: Maybe Text
kmsKeyId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:preferredBackupWindow:DBCluster' :: Maybe Text
preferredBackupWindow = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:associatedRoles:DBCluster' :: Maybe [DBClusterRole]
associatedRoles = Maybe [DBClusterRole]
forall a. Maybe a
Prelude.Nothing,
      $sel:vpcSecurityGroups:DBCluster' :: Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups = Maybe [VpcSecurityGroupMembership]
forall a. Maybe a
Prelude.Nothing,
      $sel:backupRetentionPeriod:DBCluster' :: Maybe Int
backupRetentionPeriod = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:dbSubnetGroup:DBCluster' :: Maybe Text
dbSubnetGroup = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:multiAZ:DBCluster' :: Maybe Bool
multiAZ = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:enabledCloudwatchLogsExports:DBCluster' :: Maybe [Text]
enabledCloudwatchLogsExports = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterCreateTime:DBCluster' :: Maybe ISO8601
clusterCreateTime = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:endpoint:DBCluster' :: Maybe Text
endpoint = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:percentProgress:DBCluster' :: Maybe Text
percentProgress = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:readerEndpoint:DBCluster' :: Maybe Text
readerEndpoint = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:port:DBCluster' :: Maybe Int
port = Maybe Int
forall a. Maybe a
Prelude.Nothing
    }

-- | Indicates the database engine version.
dbCluster_engineVersion :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_engineVersion :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_engineVersion = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
engineVersion :: Maybe Text
$sel:engineVersion:DBCluster' :: DBCluster -> Maybe Text
engineVersion} -> Maybe Text
engineVersion) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:engineVersion:DBCluster' :: Maybe Text
engineVersion = Maybe Text
a} :: DBCluster)

-- | Specifies the current state of this cluster.
dbCluster_status :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_status :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_status = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
status :: Maybe Text
$sel:status:DBCluster' :: DBCluster -> Maybe Text
status} -> Maybe Text
status) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:status:DBCluster' :: Maybe Text
status = Maybe Text
a} :: DBCluster)

-- | 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.
dbCluster_deletionProtection :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Bool)
dbCluster_deletionProtection :: (Maybe Bool -> f (Maybe Bool)) -> DBCluster -> f DBCluster
dbCluster_deletionProtection = (DBCluster -> Maybe Bool)
-> (DBCluster -> Maybe Bool -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Bool) (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Bool
deletionProtection :: Maybe Bool
$sel:deletionProtection:DBCluster' :: DBCluster -> Maybe Bool
deletionProtection} -> Maybe Bool
deletionProtection) (\s :: DBCluster
s@DBCluster' {} Maybe Bool
a -> DBCluster
s {$sel:deletionProtection:DBCluster' :: Maybe Bool
deletionProtection = Maybe Bool
a} :: DBCluster)

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

-- | Contains a user-supplied cluster identifier. This identifier is the
-- unique key that identifies a cluster.
dbCluster_dbClusterIdentifier :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_dbClusterIdentifier :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_dbClusterIdentifier = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
dbClusterIdentifier :: Maybe Text
$sel:dbClusterIdentifier:DBCluster' :: DBCluster -> Maybe Text
dbClusterIdentifier} -> Maybe Text
dbClusterIdentifier) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:dbClusterIdentifier:DBCluster' :: Maybe Text
dbClusterIdentifier = Maybe Text
a} :: DBCluster)

-- | Provides the list of instances that make up the cluster.
dbCluster_dbClusterMembers :: Lens.Lens' DBCluster (Prelude.Maybe [DBClusterMember])
dbCluster_dbClusterMembers :: (Maybe [DBClusterMember] -> f (Maybe [DBClusterMember]))
-> DBCluster -> f DBCluster
dbCluster_dbClusterMembers = (DBCluster -> Maybe [DBClusterMember])
-> (DBCluster -> Maybe [DBClusterMember] -> DBCluster)
-> Lens
     DBCluster
     DBCluster
     (Maybe [DBClusterMember])
     (Maybe [DBClusterMember])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe [DBClusterMember]
dbClusterMembers :: Maybe [DBClusterMember]
$sel:dbClusterMembers:DBCluster' :: DBCluster -> Maybe [DBClusterMember]
dbClusterMembers} -> Maybe [DBClusterMember]
dbClusterMembers) (\s :: DBCluster
s@DBCluster' {} Maybe [DBClusterMember]
a -> DBCluster
s {$sel:dbClusterMembers:DBCluster' :: Maybe [DBClusterMember]
dbClusterMembers = Maybe [DBClusterMember]
a} :: DBCluster) ((Maybe [DBClusterMember] -> f (Maybe [DBClusterMember]))
 -> DBCluster -> f DBCluster)
-> ((Maybe [DBClusterMember] -> f (Maybe [DBClusterMember]))
    -> Maybe [DBClusterMember] -> f (Maybe [DBClusterMember]))
-> (Maybe [DBClusterMember] -> f (Maybe [DBClusterMember]))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [DBClusterMember]
  [DBClusterMember]
  [DBClusterMember]
  [DBClusterMember]
-> Iso
     (Maybe [DBClusterMember])
     (Maybe [DBClusterMember])
     (Maybe [DBClusterMember])
     (Maybe [DBClusterMember])
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 AnIso
  [DBClusterMember]
  [DBClusterMember]
  [DBClusterMember]
  [DBClusterMember]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Contains one or more identifiers of the secondary clusters that are
-- associated with this cluster.
dbCluster_readReplicaIdentifiers :: Lens.Lens' DBCluster (Prelude.Maybe [Prelude.Text])
dbCluster_readReplicaIdentifiers :: (Maybe [Text] -> f (Maybe [Text])) -> DBCluster -> f DBCluster
dbCluster_readReplicaIdentifiers = (DBCluster -> Maybe [Text])
-> (DBCluster -> Maybe [Text] -> DBCluster)
-> Lens DBCluster DBCluster (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe [Text]
readReplicaIdentifiers :: Maybe [Text]
$sel:readReplicaIdentifiers:DBCluster' :: DBCluster -> Maybe [Text]
readReplicaIdentifiers} -> Maybe [Text]
readReplicaIdentifiers) (\s :: DBCluster
s@DBCluster' {} Maybe [Text]
a -> DBCluster
s {$sel:readReplicaIdentifiers:DBCluster' :: Maybe [Text]
readReplicaIdentifiers = Maybe [Text]
a} :: DBCluster) ((Maybe [Text] -> f (Maybe [Text])) -> DBCluster -> f DBCluster)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Contains the identifier of the source cluster if this cluster is a
-- secondary cluster.
dbCluster_replicationSourceIdentifier :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_replicationSourceIdentifier :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_replicationSourceIdentifier = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
replicationSourceIdentifier :: Maybe Text
$sel:replicationSourceIdentifier:DBCluster' :: DBCluster -> Maybe Text
replicationSourceIdentifier} -> Maybe Text
replicationSourceIdentifier) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:replicationSourceIdentifier:DBCluster' :: Maybe Text
replicationSourceIdentifier = Maybe Text
a} :: DBCluster)

-- | Specifies the ID that Amazon Route 53 assigns when you create a hosted
-- zone.
dbCluster_hostedZoneId :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_hostedZoneId :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_hostedZoneId = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
hostedZoneId :: Maybe Text
$sel:hostedZoneId:DBCluster' :: DBCluster -> Maybe Text
hostedZoneId} -> Maybe Text
hostedZoneId) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:hostedZoneId:DBCluster' :: Maybe Text
hostedZoneId = Maybe Text
a} :: DBCluster)

-- | Specifies the name of the cluster parameter group for the cluster.
dbCluster_dbClusterParameterGroup :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_dbClusterParameterGroup :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_dbClusterParameterGroup = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
dbClusterParameterGroup :: Maybe Text
$sel:dbClusterParameterGroup:DBCluster' :: DBCluster -> Maybe Text
dbClusterParameterGroup} -> Maybe Text
dbClusterParameterGroup) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:dbClusterParameterGroup:DBCluster' :: Maybe Text
dbClusterParameterGroup = Maybe Text
a} :: DBCluster)

-- | Contains the master user name for the cluster.
dbCluster_masterUsername :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_masterUsername :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_masterUsername = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
masterUsername :: Maybe Text
$sel:masterUsername:DBCluster' :: DBCluster -> Maybe Text
masterUsername} -> Maybe Text
masterUsername) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:masterUsername:DBCluster' :: Maybe Text
masterUsername = Maybe Text
a} :: DBCluster)

-- | The Region-unique, immutable identifier for the cluster. This identifier
-- is found in CloudTrail log entries whenever the KMS key for the cluster
-- is accessed.
dbCluster_dbClusterResourceId :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_dbClusterResourceId :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_dbClusterResourceId = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
dbClusterResourceId :: Maybe Text
$sel:dbClusterResourceId:DBCluster' :: DBCluster -> Maybe Text
dbClusterResourceId} -> Maybe Text
dbClusterResourceId) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:dbClusterResourceId:DBCluster' :: Maybe Text
dbClusterResourceId = Maybe Text
a} :: DBCluster)

-- | The earliest time to which a database can be restored with point-in-time
-- restore.
dbCluster_earliestRestorableTime :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.UTCTime)
dbCluster_earliestRestorableTime :: (Maybe UTCTime -> f (Maybe UTCTime)) -> DBCluster -> f DBCluster
dbCluster_earliestRestorableTime = (DBCluster -> Maybe ISO8601)
-> (DBCluster -> Maybe ISO8601 -> DBCluster)
-> Lens DBCluster DBCluster (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe ISO8601
earliestRestorableTime :: Maybe ISO8601
$sel:earliestRestorableTime:DBCluster' :: DBCluster -> Maybe ISO8601
earliestRestorableTime} -> Maybe ISO8601
earliestRestorableTime) (\s :: DBCluster
s@DBCluster' {} Maybe ISO8601
a -> DBCluster
s {$sel:earliestRestorableTime:DBCluster' :: Maybe ISO8601
earliestRestorableTime = Maybe ISO8601
a} :: DBCluster) ((Maybe ISO8601 -> f (Maybe ISO8601)) -> DBCluster -> f DBCluster)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso ISO8601 ISO8601 UTCTime UTCTime
-> Iso
     (Maybe ISO8601) (Maybe ISO8601) (Maybe UTCTime) (Maybe UTCTime)
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 AnIso ISO8601 ISO8601 UTCTime UTCTime
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | Provides the name of the database engine to be used for this cluster.
dbCluster_engine :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_engine :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_engine = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
engine :: Maybe Text
$sel:engine:DBCluster' :: DBCluster -> Maybe Text
engine} -> Maybe Text
engine) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:engine:DBCluster' :: Maybe Text
engine = Maybe Text
a} :: DBCluster)

-- | The Amazon Resource Name (ARN) for the cluster.
dbCluster_dbClusterArn :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_dbClusterArn :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_dbClusterArn = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
dbClusterArn :: Maybe Text
$sel:dbClusterArn:DBCluster' :: DBCluster -> Maybe Text
dbClusterArn} -> Maybe Text
dbClusterArn) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:dbClusterArn:DBCluster' :: Maybe Text
dbClusterArn = Maybe Text
a} :: DBCluster)

-- | Specifies the latest time to which a database can be restored with
-- point-in-time restore.
dbCluster_latestRestorableTime :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.UTCTime)
dbCluster_latestRestorableTime :: (Maybe UTCTime -> f (Maybe UTCTime)) -> DBCluster -> f DBCluster
dbCluster_latestRestorableTime = (DBCluster -> Maybe ISO8601)
-> (DBCluster -> Maybe ISO8601 -> DBCluster)
-> Lens DBCluster DBCluster (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe ISO8601
latestRestorableTime :: Maybe ISO8601
$sel:latestRestorableTime:DBCluster' :: DBCluster -> Maybe ISO8601
latestRestorableTime} -> Maybe ISO8601
latestRestorableTime) (\s :: DBCluster
s@DBCluster' {} Maybe ISO8601
a -> DBCluster
s {$sel:latestRestorableTime:DBCluster' :: Maybe ISO8601
latestRestorableTime = Maybe ISO8601
a} :: DBCluster) ((Maybe ISO8601 -> f (Maybe ISO8601)) -> DBCluster -> f DBCluster)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso ISO8601 ISO8601 UTCTime UTCTime
-> Iso
     (Maybe ISO8601) (Maybe ISO8601) (Maybe UTCTime) (Maybe UTCTime)
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 AnIso ISO8601 ISO8601 UTCTime UTCTime
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | Specifies the weekly time range during which system maintenance can
-- occur, in Universal Coordinated Time (UTC).
dbCluster_preferredMaintenanceWindow :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_preferredMaintenanceWindow :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_preferredMaintenanceWindow = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
preferredMaintenanceWindow :: Maybe Text
$sel:preferredMaintenanceWindow:DBCluster' :: DBCluster -> Maybe Text
preferredMaintenanceWindow} -> Maybe Text
preferredMaintenanceWindow) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:preferredMaintenanceWindow:DBCluster' :: Maybe Text
preferredMaintenanceWindow = Maybe Text
a} :: DBCluster)

-- | Provides the list of Amazon EC2 Availability Zones that instances in the
-- cluster can be created in.
dbCluster_availabilityZones :: Lens.Lens' DBCluster (Prelude.Maybe [Prelude.Text])
dbCluster_availabilityZones :: (Maybe [Text] -> f (Maybe [Text])) -> DBCluster -> f DBCluster
dbCluster_availabilityZones = (DBCluster -> Maybe [Text])
-> (DBCluster -> Maybe [Text] -> DBCluster)
-> Lens DBCluster DBCluster (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe [Text]
availabilityZones :: Maybe [Text]
$sel:availabilityZones:DBCluster' :: DBCluster -> Maybe [Text]
availabilityZones} -> Maybe [Text]
availabilityZones) (\s :: DBCluster
s@DBCluster' {} Maybe [Text]
a -> DBCluster
s {$sel:availabilityZones:DBCluster' :: Maybe [Text]
availabilityZones = Maybe [Text]
a} :: DBCluster) ((Maybe [Text] -> f (Maybe [Text])) -> DBCluster -> f DBCluster)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | If @StorageEncrypted@ is @true@, the KMS key identifier for the
-- encrypted cluster.
dbCluster_kmsKeyId :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_kmsKeyId :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_kmsKeyId = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
kmsKeyId :: Maybe Text
$sel:kmsKeyId:DBCluster' :: DBCluster -> Maybe Text
kmsKeyId} -> Maybe Text
kmsKeyId) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:kmsKeyId:DBCluster' :: Maybe Text
kmsKeyId = Maybe Text
a} :: DBCluster)

-- | Specifies the daily time range during which automated backups are
-- created if automated backups are enabled, as determined by the
-- @BackupRetentionPeriod@.
dbCluster_preferredBackupWindow :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_preferredBackupWindow :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_preferredBackupWindow = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
preferredBackupWindow :: Maybe Text
$sel:preferredBackupWindow:DBCluster' :: DBCluster -> Maybe Text
preferredBackupWindow} -> Maybe Text
preferredBackupWindow) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:preferredBackupWindow:DBCluster' :: Maybe Text
preferredBackupWindow = Maybe Text
a} :: DBCluster)

-- | Provides a list of the Identity and Access Management (IAM) roles that
-- are associated with the cluster. (IAM) roles that are associated with a
-- cluster grant permission for the cluster to access other Amazon Web
-- Services services on your behalf.
dbCluster_associatedRoles :: Lens.Lens' DBCluster (Prelude.Maybe [DBClusterRole])
dbCluster_associatedRoles :: (Maybe [DBClusterRole] -> f (Maybe [DBClusterRole]))
-> DBCluster -> f DBCluster
dbCluster_associatedRoles = (DBCluster -> Maybe [DBClusterRole])
-> (DBCluster -> Maybe [DBClusterRole] -> DBCluster)
-> Lens
     DBCluster DBCluster (Maybe [DBClusterRole]) (Maybe [DBClusterRole])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe [DBClusterRole]
associatedRoles :: Maybe [DBClusterRole]
$sel:associatedRoles:DBCluster' :: DBCluster -> Maybe [DBClusterRole]
associatedRoles} -> Maybe [DBClusterRole]
associatedRoles) (\s :: DBCluster
s@DBCluster' {} Maybe [DBClusterRole]
a -> DBCluster
s {$sel:associatedRoles:DBCluster' :: Maybe [DBClusterRole]
associatedRoles = Maybe [DBClusterRole]
a} :: DBCluster) ((Maybe [DBClusterRole] -> f (Maybe [DBClusterRole]))
 -> DBCluster -> f DBCluster)
-> ((Maybe [DBClusterRole] -> f (Maybe [DBClusterRole]))
    -> Maybe [DBClusterRole] -> f (Maybe [DBClusterRole]))
-> (Maybe [DBClusterRole] -> f (Maybe [DBClusterRole]))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [DBClusterRole] [DBClusterRole] [DBClusterRole] [DBClusterRole]
-> Iso
     (Maybe [DBClusterRole])
     (Maybe [DBClusterRole])
     (Maybe [DBClusterRole])
     (Maybe [DBClusterRole])
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 AnIso
  [DBClusterRole] [DBClusterRole] [DBClusterRole] [DBClusterRole]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Provides a list of virtual private cloud (VPC) security groups that the
-- cluster belongs to.
dbCluster_vpcSecurityGroups :: Lens.Lens' DBCluster (Prelude.Maybe [VpcSecurityGroupMembership])
dbCluster_vpcSecurityGroups :: (Maybe [VpcSecurityGroupMembership]
 -> f (Maybe [VpcSecurityGroupMembership]))
-> DBCluster -> f DBCluster
dbCluster_vpcSecurityGroups = (DBCluster -> Maybe [VpcSecurityGroupMembership])
-> (DBCluster -> Maybe [VpcSecurityGroupMembership] -> DBCluster)
-> Lens
     DBCluster
     DBCluster
     (Maybe [VpcSecurityGroupMembership])
     (Maybe [VpcSecurityGroupMembership])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups :: Maybe [VpcSecurityGroupMembership]
$sel:vpcSecurityGroups:DBCluster' :: DBCluster -> Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups} -> Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups) (\s :: DBCluster
s@DBCluster' {} Maybe [VpcSecurityGroupMembership]
a -> DBCluster
s {$sel:vpcSecurityGroups:DBCluster' :: Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups = Maybe [VpcSecurityGroupMembership]
a} :: DBCluster) ((Maybe [VpcSecurityGroupMembership]
  -> f (Maybe [VpcSecurityGroupMembership]))
 -> DBCluster -> f DBCluster)
-> ((Maybe [VpcSecurityGroupMembership]
     -> f (Maybe [VpcSecurityGroupMembership]))
    -> Maybe [VpcSecurityGroupMembership]
    -> f (Maybe [VpcSecurityGroupMembership]))
-> (Maybe [VpcSecurityGroupMembership]
    -> f (Maybe [VpcSecurityGroupMembership]))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
-> Iso
     (Maybe [VpcSecurityGroupMembership])
     (Maybe [VpcSecurityGroupMembership])
     (Maybe [VpcSecurityGroupMembership])
     (Maybe [VpcSecurityGroupMembership])
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 AnIso
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Specifies the number of days for which automatic snapshots are retained.
dbCluster_backupRetentionPeriod :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Int)
dbCluster_backupRetentionPeriod :: (Maybe Int -> f (Maybe Int)) -> DBCluster -> f DBCluster
dbCluster_backupRetentionPeriod = (DBCluster -> Maybe Int)
-> (DBCluster -> Maybe Int -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Int
backupRetentionPeriod :: Maybe Int
$sel:backupRetentionPeriod:DBCluster' :: DBCluster -> Maybe Int
backupRetentionPeriod} -> Maybe Int
backupRetentionPeriod) (\s :: DBCluster
s@DBCluster' {} Maybe Int
a -> DBCluster
s {$sel:backupRetentionPeriod:DBCluster' :: Maybe Int
backupRetentionPeriod = Maybe Int
a} :: DBCluster)

-- | Specifies information on the subnet group that is associated with the
-- cluster, including the name, description, and subnets in the subnet
-- group.
dbCluster_dbSubnetGroup :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_dbSubnetGroup :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_dbSubnetGroup = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
dbSubnetGroup :: Maybe Text
$sel:dbSubnetGroup:DBCluster' :: DBCluster -> Maybe Text
dbSubnetGroup} -> Maybe Text
dbSubnetGroup) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:dbSubnetGroup:DBCluster' :: Maybe Text
dbSubnetGroup = Maybe Text
a} :: DBCluster)

-- | Specifies whether the cluster has instances in multiple Availability
-- Zones.
dbCluster_multiAZ :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Bool)
dbCluster_multiAZ :: (Maybe Bool -> f (Maybe Bool)) -> DBCluster -> f DBCluster
dbCluster_multiAZ = (DBCluster -> Maybe Bool)
-> (DBCluster -> Maybe Bool -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Bool) (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Bool
multiAZ :: Maybe Bool
$sel:multiAZ:DBCluster' :: DBCluster -> Maybe Bool
multiAZ} -> Maybe Bool
multiAZ) (\s :: DBCluster
s@DBCluster' {} Maybe Bool
a -> DBCluster
s {$sel:multiAZ:DBCluster' :: Maybe Bool
multiAZ = Maybe Bool
a} :: DBCluster)

-- | A list of log types that this cluster is configured to export to Amazon
-- CloudWatch Logs.
dbCluster_enabledCloudwatchLogsExports :: Lens.Lens' DBCluster (Prelude.Maybe [Prelude.Text])
dbCluster_enabledCloudwatchLogsExports :: (Maybe [Text] -> f (Maybe [Text])) -> DBCluster -> f DBCluster
dbCluster_enabledCloudwatchLogsExports = (DBCluster -> Maybe [Text])
-> (DBCluster -> Maybe [Text] -> DBCluster)
-> Lens DBCluster DBCluster (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe [Text]
enabledCloudwatchLogsExports :: Maybe [Text]
$sel:enabledCloudwatchLogsExports:DBCluster' :: DBCluster -> Maybe [Text]
enabledCloudwatchLogsExports} -> Maybe [Text]
enabledCloudwatchLogsExports) (\s :: DBCluster
s@DBCluster' {} Maybe [Text]
a -> DBCluster
s {$sel:enabledCloudwatchLogsExports:DBCluster' :: Maybe [Text]
enabledCloudwatchLogsExports = Maybe [Text]
a} :: DBCluster) ((Maybe [Text] -> f (Maybe [Text])) -> DBCluster -> f DBCluster)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Specifies the time when the cluster was created, in Universal
-- Coordinated Time (UTC).
dbCluster_clusterCreateTime :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.UTCTime)
dbCluster_clusterCreateTime :: (Maybe UTCTime -> f (Maybe UTCTime)) -> DBCluster -> f DBCluster
dbCluster_clusterCreateTime = (DBCluster -> Maybe ISO8601)
-> (DBCluster -> Maybe ISO8601 -> DBCluster)
-> Lens DBCluster DBCluster (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe ISO8601
clusterCreateTime :: Maybe ISO8601
$sel:clusterCreateTime:DBCluster' :: DBCluster -> Maybe ISO8601
clusterCreateTime} -> Maybe ISO8601
clusterCreateTime) (\s :: DBCluster
s@DBCluster' {} Maybe ISO8601
a -> DBCluster
s {$sel:clusterCreateTime:DBCluster' :: Maybe ISO8601
clusterCreateTime = Maybe ISO8601
a} :: DBCluster) ((Maybe ISO8601 -> f (Maybe ISO8601)) -> DBCluster -> f DBCluster)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> DBCluster
-> f DBCluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso ISO8601 ISO8601 UTCTime UTCTime
-> Iso
     (Maybe ISO8601) (Maybe ISO8601) (Maybe UTCTime) (Maybe UTCTime)
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 AnIso ISO8601 ISO8601 UTCTime UTCTime
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | Specifies the connection endpoint for the primary instance of the
-- cluster.
dbCluster_endpoint :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_endpoint :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_endpoint = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
endpoint :: Maybe Text
$sel:endpoint:DBCluster' :: DBCluster -> Maybe Text
endpoint} -> Maybe Text
endpoint) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:endpoint:DBCluster' :: Maybe Text
endpoint = Maybe Text
a} :: DBCluster)

-- | Specifies the progress of the operation as a percentage.
dbCluster_percentProgress :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_percentProgress :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_percentProgress = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
percentProgress :: Maybe Text
$sel:percentProgress:DBCluster' :: DBCluster -> Maybe Text
percentProgress} -> Maybe Text
percentProgress) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:percentProgress:DBCluster' :: Maybe Text
percentProgress = Maybe Text
a} :: DBCluster)

-- | The reader endpoint for the cluster. The reader endpoint for a cluster
-- load balances connections across the Amazon DocumentDB replicas that are
-- available in a cluster. As clients request new connections to the reader
-- endpoint, Amazon DocumentDB distributes the connection requests among
-- the Amazon DocumentDB replicas in the cluster. This functionality can
-- help balance your read workload across multiple Amazon DocumentDB
-- replicas in your cluster.
--
-- If a failover occurs, and the Amazon DocumentDB replica that you are
-- connected to is promoted to be the primary instance, your connection is
-- dropped. To continue sending your read workload to other Amazon
-- DocumentDB replicas in the cluster, you can then reconnect to the reader
-- endpoint.
dbCluster_readerEndpoint :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Text)
dbCluster_readerEndpoint :: (Maybe Text -> f (Maybe Text)) -> DBCluster -> f DBCluster
dbCluster_readerEndpoint = (DBCluster -> Maybe Text)
-> (DBCluster -> Maybe Text -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Text
readerEndpoint :: Maybe Text
$sel:readerEndpoint:DBCluster' :: DBCluster -> Maybe Text
readerEndpoint} -> Maybe Text
readerEndpoint) (\s :: DBCluster
s@DBCluster' {} Maybe Text
a -> DBCluster
s {$sel:readerEndpoint:DBCluster' :: Maybe Text
readerEndpoint = Maybe Text
a} :: DBCluster)

-- | Specifies the port that the database engine is listening on.
dbCluster_port :: Lens.Lens' DBCluster (Prelude.Maybe Prelude.Int)
dbCluster_port :: (Maybe Int -> f (Maybe Int)) -> DBCluster -> f DBCluster
dbCluster_port = (DBCluster -> Maybe Int)
-> (DBCluster -> Maybe Int -> DBCluster)
-> Lens DBCluster DBCluster (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBCluster' {Maybe Int
port :: Maybe Int
$sel:port:DBCluster' :: DBCluster -> Maybe Int
port} -> Maybe Int
port) (\s :: DBCluster
s@DBCluster' {} Maybe Int
a -> DBCluster
s {$sel:port:DBCluster' :: Maybe Int
port = Maybe Int
a} :: DBCluster)

instance Core.FromXML DBCluster where
  parseXML :: [Node] -> Either String DBCluster
parseXML [Node]
x =
    Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Maybe Text
-> Maybe [DBClusterMember]
-> Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe Text
-> Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe [DBClusterRole]
-> Maybe [VpcSecurityGroupMembership]
-> Maybe Int
-> Maybe Text
-> Maybe Bool
-> Maybe [Text]
-> Maybe ISO8601
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Int
-> DBCluster
DBCluster'
      (Maybe Text
 -> Maybe Text
 -> Maybe Bool
 -> Maybe Bool
 -> Maybe Text
 -> Maybe [DBClusterMember]
 -> Maybe [Text]
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe ISO8601
 -> Maybe Text
 -> Maybe Text
 -> Maybe ISO8601
 -> Maybe Text
 -> Maybe [Text]
 -> Maybe Text
 -> Maybe Text
 -> Maybe [DBClusterRole]
 -> Maybe [VpcSecurityGroupMembership]
 -> Maybe Int
 -> Maybe Text
 -> Maybe Bool
 -> Maybe [Text]
 -> Maybe ISO8601
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Int
 -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe Text
      -> Maybe [DBClusterMember]
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"EngineVersion")
      Either
  String
  (Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe Text
   -> Maybe [DBClusterMember]
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Bool
      -> Maybe Bool
      -> Maybe Text
      -> Maybe [DBClusterMember]
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Status")
      Either
  String
  (Maybe Bool
   -> Maybe Bool
   -> Maybe Text
   -> Maybe [DBClusterMember]
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Bool)
-> Either
     String
     (Maybe Bool
      -> Maybe Text
      -> Maybe [DBClusterMember]
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Bool)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DeletionProtection")
      Either
  String
  (Maybe Bool
   -> Maybe Text
   -> Maybe [DBClusterMember]
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Bool)
-> Either
     String
     (Maybe Text
      -> Maybe [DBClusterMember]
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Bool)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"StorageEncrypted")
      Either
  String
  (Maybe Text
   -> Maybe [DBClusterMember]
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [DBClusterMember]
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DBClusterIdentifier")
      Either
  String
  (Maybe [DBClusterMember]
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe [DBClusterMember])
-> Either
     String
     (Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DBClusterMembers"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [DBClusterMember]))
-> Either String (Maybe [DBClusterMember])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [DBClusterMember])
-> [Node] -> Either String (Maybe [DBClusterMember])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [DBClusterMember]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"DBClusterMember")
                  )
      Either
  String
  (Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe [Text])
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ReadReplicaIdentifiers"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Text]))
-> Either String (Maybe [Text])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Text])
-> [Node] -> Either String (Maybe [Text])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Text]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"ReadReplicaIdentifier")
                  )
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ReplicationSourceIdentifier")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"HostedZoneId")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DBClusterParameterGroup")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"MasterUsername")
      Either
  String
  (Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DbClusterResourceId")
      Either
  String
  (Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ISO8601)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"EarliestRestorableTime")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Engine")
      Either
  String
  (Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DBClusterArn")
      Either
  String
  (Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe Text
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ISO8601)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"LatestRestorableTime")
      Either
  String
  (Maybe Text
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [Text]
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"PreferredMaintenanceWindow")
      Either
  String
  (Maybe [Text]
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe [Text])
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"AvailabilityZones"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Text]))
-> Either String (Maybe [Text])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Text])
-> [Node] -> Either String (Maybe [Text])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Text]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"AvailabilityZone")
                  )
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"KmsKeyId")
      Either
  String
  (Maybe Text
   -> Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [DBClusterRole]
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"PreferredBackupWindow")
      Either
  String
  (Maybe [DBClusterRole]
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe [DBClusterRole])
-> Either
     String
     (Maybe [VpcSecurityGroupMembership]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"AssociatedRoles" Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [DBClusterRole]))
-> Either String (Maybe [DBClusterRole])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [DBClusterRole])
-> [Node] -> Either String (Maybe [DBClusterRole])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [DBClusterRole]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"DBClusterRole")
                  )
      Either
  String
  (Maybe [VpcSecurityGroupMembership]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe [VpcSecurityGroupMembership])
-> Either
     String
     (Maybe Int
      -> Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"VpcSecurityGroups"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [VpcSecurityGroupMembership]))
-> Either String (Maybe [VpcSecurityGroupMembership])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [VpcSecurityGroupMembership])
-> [Node] -> Either String (Maybe [VpcSecurityGroupMembership])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may
                        (Text -> [Node] -> Either String [VpcSecurityGroupMembership]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"VpcSecurityGroupMembership")
                  )
      Either
  String
  (Maybe Int
   -> Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Int)
-> Either
     String
     (Maybe Text
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Int)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"BackupRetentionPeriod")
      Either
  String
  (Maybe Text
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Bool
      -> Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DBSubnetGroup")
      Either
  String
  (Maybe Bool
   -> Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe Bool)
-> Either
     String
     (Maybe [Text]
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Bool)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"MultiAZ")
      Either
  String
  (Maybe [Text]
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe [Text])
-> Either
     String
     (Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"EnabledCloudwatchLogsExports"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Text]))
-> Either String (Maybe [Text])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Text])
-> [Node] -> Either String (Maybe [Text])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Text]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either
  String
  (Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> DBCluster)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe Text -> Maybe Text -> Maybe Text -> Maybe Int -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ISO8601)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterCreateTime")
      Either
  String
  (Maybe Text -> Maybe Text -> Maybe Text -> Maybe Int -> DBCluster)
-> Either String (Maybe Text)
-> Either
     String (Maybe Text -> Maybe Text -> Maybe Int -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Endpoint")
      Either String (Maybe Text -> Maybe Text -> Maybe Int -> DBCluster)
-> Either String (Maybe Text)
-> Either String (Maybe Text -> Maybe Int -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"PercentProgress")
      Either String (Maybe Text -> Maybe Int -> DBCluster)
-> Either String (Maybe Text)
-> Either String (Maybe Int -> DBCluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ReaderEndpoint")
      Either String (Maybe Int -> DBCluster)
-> Either String (Maybe Int) -> Either String DBCluster
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Int)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Port")

instance Prelude.Hashable DBCluster

instance Prelude.NFData DBCluster