{-# 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.CloudHSMV2.Types.Cluster
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.CloudHSMV2.Types.Cluster where

import Amazonka.CloudHSMV2.Types.BackupPolicy
import Amazonka.CloudHSMV2.Types.BackupRetentionPolicy
import Amazonka.CloudHSMV2.Types.Certificates
import Amazonka.CloudHSMV2.Types.ClusterState
import Amazonka.CloudHSMV2.Types.Hsm
import Amazonka.CloudHSMV2.Types.Tag
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | Contains information about an AWS CloudHSM cluster.
--
-- /See:/ 'newCluster' smart constructor.
data Cluster = Cluster'
  { -- | The cluster\'s backup policy.
    Cluster -> Maybe BackupPolicy
backupPolicy :: Prelude.Maybe BackupPolicy,
    -- | A policy that defines how the service retains backups.
    Cluster -> Maybe BackupRetentionPolicy
backupRetentionPolicy :: Prelude.Maybe BackupRetentionPolicy,
    -- | Contains one or more certificates or a certificate signing request
    -- (CSR).
    Cluster -> Maybe Certificates
certificates :: Prelude.Maybe Certificates,
    -- | The cluster\'s identifier (ID).
    Cluster -> Maybe Text
clusterId :: Prelude.Maybe Prelude.Text,
    -- | The date and time when the cluster was created.
    Cluster -> Maybe POSIX
createTimestamp :: Prelude.Maybe Data.POSIX,
    -- | The type of HSM that the cluster contains.
    Cluster -> Maybe Text
hsmType :: Prelude.Maybe Prelude.Text,
    -- | Contains information about the HSMs in the cluster.
    Cluster -> Maybe [Hsm]
hsms :: Prelude.Maybe [Hsm],
    -- | The default password for the cluster\'s Pre-Crypto Officer (PRECO) user.
    Cluster -> Maybe Text
preCoPassword :: Prelude.Maybe Prelude.Text,
    -- | The identifier (ID) of the cluster\'s security group.
    Cluster -> Maybe Text
securityGroup :: Prelude.Maybe Prelude.Text,
    -- | The identifier (ID) of the backup used to create the cluster. This value
    -- exists only when the cluster was created from a backup.
    Cluster -> Maybe Text
sourceBackupId :: Prelude.Maybe Prelude.Text,
    -- | The cluster\'s state.
    Cluster -> Maybe ClusterState
state :: Prelude.Maybe ClusterState,
    -- | A description of the cluster\'s state.
    Cluster -> Maybe Text
stateMessage :: Prelude.Maybe Prelude.Text,
    -- | A map from availability zone to the cluster’s subnet in that
    -- availability zone.
    Cluster -> Maybe (HashMap Text Text)
subnetMapping :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The list of tags for the cluster.
    Cluster -> Maybe [Tag]
tagList :: Prelude.Maybe [Tag],
    -- | The identifier (ID) of the virtual private cloud (VPC) that contains the
    -- cluster.
    Cluster -> Maybe Text
vpcId :: Prelude.Maybe Prelude.Text
  }
  deriving (Cluster -> Cluster -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Cluster -> Cluster -> Bool
$c/= :: Cluster -> Cluster -> Bool
== :: Cluster -> Cluster -> Bool
$c== :: Cluster -> Cluster -> Bool
Prelude.Eq, ReadPrec [Cluster]
ReadPrec Cluster
Int -> ReadS Cluster
ReadS [Cluster]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Cluster]
$creadListPrec :: ReadPrec [Cluster]
readPrec :: ReadPrec Cluster
$creadPrec :: ReadPrec Cluster
readList :: ReadS [Cluster]
$creadList :: ReadS [Cluster]
readsPrec :: Int -> ReadS Cluster
$creadsPrec :: Int -> ReadS Cluster
Prelude.Read, Int -> Cluster -> ShowS
[Cluster] -> ShowS
Cluster -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Cluster] -> ShowS
$cshowList :: [Cluster] -> ShowS
show :: Cluster -> String
$cshow :: Cluster -> String
showsPrec :: Int -> Cluster -> ShowS
$cshowsPrec :: Int -> Cluster -> ShowS
Prelude.Show, forall x. Rep Cluster x -> Cluster
forall x. Cluster -> Rep Cluster x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Cluster x -> Cluster
$cfrom :: forall x. Cluster -> Rep Cluster x
Prelude.Generic)

-- |
-- Create a value of 'Cluster' 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:
--
-- 'backupPolicy', 'cluster_backupPolicy' - The cluster\'s backup policy.
--
-- 'backupRetentionPolicy', 'cluster_backupRetentionPolicy' - A policy that defines how the service retains backups.
--
-- 'certificates', 'cluster_certificates' - Contains one or more certificates or a certificate signing request
-- (CSR).
--
-- 'clusterId', 'cluster_clusterId' - The cluster\'s identifier (ID).
--
-- 'createTimestamp', 'cluster_createTimestamp' - The date and time when the cluster was created.
--
-- 'hsmType', 'cluster_hsmType' - The type of HSM that the cluster contains.
--
-- 'hsms', 'cluster_hsms' - Contains information about the HSMs in the cluster.
--
-- 'preCoPassword', 'cluster_preCoPassword' - The default password for the cluster\'s Pre-Crypto Officer (PRECO) user.
--
-- 'securityGroup', 'cluster_securityGroup' - The identifier (ID) of the cluster\'s security group.
--
-- 'sourceBackupId', 'cluster_sourceBackupId' - The identifier (ID) of the backup used to create the cluster. This value
-- exists only when the cluster was created from a backup.
--
-- 'state', 'cluster_state' - The cluster\'s state.
--
-- 'stateMessage', 'cluster_stateMessage' - A description of the cluster\'s state.
--
-- 'subnetMapping', 'cluster_subnetMapping' - A map from availability zone to the cluster’s subnet in that
-- availability zone.
--
-- 'tagList', 'cluster_tagList' - The list of tags for the cluster.
--
-- 'vpcId', 'cluster_vpcId' - The identifier (ID) of the virtual private cloud (VPC) that contains the
-- cluster.
newCluster ::
  Cluster
newCluster :: Cluster
newCluster =
  Cluster'
    { $sel:backupPolicy:Cluster' :: Maybe BackupPolicy
backupPolicy = forall a. Maybe a
Prelude.Nothing,
      $sel:backupRetentionPolicy:Cluster' :: Maybe BackupRetentionPolicy
backupRetentionPolicy = forall a. Maybe a
Prelude.Nothing,
      $sel:certificates:Cluster' :: Maybe Certificates
certificates = forall a. Maybe a
Prelude.Nothing,
      $sel:clusterId:Cluster' :: Maybe Text
clusterId = forall a. Maybe a
Prelude.Nothing,
      $sel:createTimestamp:Cluster' :: Maybe POSIX
createTimestamp = forall a. Maybe a
Prelude.Nothing,
      $sel:hsmType:Cluster' :: Maybe Text
hsmType = forall a. Maybe a
Prelude.Nothing,
      $sel:hsms:Cluster' :: Maybe [Hsm]
hsms = forall a. Maybe a
Prelude.Nothing,
      $sel:preCoPassword:Cluster' :: Maybe Text
preCoPassword = forall a. Maybe a
Prelude.Nothing,
      $sel:securityGroup:Cluster' :: Maybe Text
securityGroup = forall a. Maybe a
Prelude.Nothing,
      $sel:sourceBackupId:Cluster' :: Maybe Text
sourceBackupId = forall a. Maybe a
Prelude.Nothing,
      $sel:state:Cluster' :: Maybe ClusterState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:stateMessage:Cluster' :: Maybe Text
stateMessage = forall a. Maybe a
Prelude.Nothing,
      $sel:subnetMapping:Cluster' :: Maybe (HashMap Text Text)
subnetMapping = forall a. Maybe a
Prelude.Nothing,
      $sel:tagList:Cluster' :: Maybe [Tag]
tagList = forall a. Maybe a
Prelude.Nothing,
      $sel:vpcId:Cluster' :: Maybe Text
vpcId = forall a. Maybe a
Prelude.Nothing
    }

-- | The cluster\'s backup policy.
cluster_backupPolicy :: Lens.Lens' Cluster (Prelude.Maybe BackupPolicy)
cluster_backupPolicy :: Lens' Cluster (Maybe BackupPolicy)
cluster_backupPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe BackupPolicy
backupPolicy :: Maybe BackupPolicy
$sel:backupPolicy:Cluster' :: Cluster -> Maybe BackupPolicy
backupPolicy} -> Maybe BackupPolicy
backupPolicy) (\s :: Cluster
s@Cluster' {} Maybe BackupPolicy
a -> Cluster
s {$sel:backupPolicy:Cluster' :: Maybe BackupPolicy
backupPolicy = Maybe BackupPolicy
a} :: Cluster)

-- | A policy that defines how the service retains backups.
cluster_backupRetentionPolicy :: Lens.Lens' Cluster (Prelude.Maybe BackupRetentionPolicy)
cluster_backupRetentionPolicy :: Lens' Cluster (Maybe BackupRetentionPolicy)
cluster_backupRetentionPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe BackupRetentionPolicy
backupRetentionPolicy :: Maybe BackupRetentionPolicy
$sel:backupRetentionPolicy:Cluster' :: Cluster -> Maybe BackupRetentionPolicy
backupRetentionPolicy} -> Maybe BackupRetentionPolicy
backupRetentionPolicy) (\s :: Cluster
s@Cluster' {} Maybe BackupRetentionPolicy
a -> Cluster
s {$sel:backupRetentionPolicy:Cluster' :: Maybe BackupRetentionPolicy
backupRetentionPolicy = Maybe BackupRetentionPolicy
a} :: Cluster)

-- | Contains one or more certificates or a certificate signing request
-- (CSR).
cluster_certificates :: Lens.Lens' Cluster (Prelude.Maybe Certificates)
cluster_certificates :: Lens' Cluster (Maybe Certificates)
cluster_certificates = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Certificates
certificates :: Maybe Certificates
$sel:certificates:Cluster' :: Cluster -> Maybe Certificates
certificates} -> Maybe Certificates
certificates) (\s :: Cluster
s@Cluster' {} Maybe Certificates
a -> Cluster
s {$sel:certificates:Cluster' :: Maybe Certificates
certificates = Maybe Certificates
a} :: Cluster)

-- | The cluster\'s identifier (ID).
cluster_clusterId :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_clusterId :: Lens' Cluster (Maybe Text)
cluster_clusterId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
clusterId :: Maybe Text
$sel:clusterId:Cluster' :: Cluster -> Maybe Text
clusterId} -> Maybe Text
clusterId) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:clusterId:Cluster' :: Maybe Text
clusterId = Maybe Text
a} :: Cluster)

-- | The date and time when the cluster was created.
cluster_createTimestamp :: Lens.Lens' Cluster (Prelude.Maybe Prelude.UTCTime)
cluster_createTimestamp :: Lens' Cluster (Maybe UTCTime)
cluster_createTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe POSIX
createTimestamp :: Maybe POSIX
$sel:createTimestamp:Cluster' :: Cluster -> Maybe POSIX
createTimestamp} -> Maybe POSIX
createTimestamp) (\s :: Cluster
s@Cluster' {} Maybe POSIX
a -> Cluster
s {$sel:createTimestamp:Cluster' :: Maybe POSIX
createTimestamp = Maybe POSIX
a} :: Cluster) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The type of HSM that the cluster contains.
cluster_hsmType :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_hsmType :: Lens' Cluster (Maybe Text)
cluster_hsmType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
hsmType :: Maybe Text
$sel:hsmType:Cluster' :: Cluster -> Maybe Text
hsmType} -> Maybe Text
hsmType) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:hsmType:Cluster' :: Maybe Text
hsmType = Maybe Text
a} :: Cluster)

-- | Contains information about the HSMs in the cluster.
cluster_hsms :: Lens.Lens' Cluster (Prelude.Maybe [Hsm])
cluster_hsms :: Lens' Cluster (Maybe [Hsm])
cluster_hsms = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [Hsm]
hsms :: Maybe [Hsm]
$sel:hsms:Cluster' :: Cluster -> Maybe [Hsm]
hsms} -> Maybe [Hsm]
hsms) (\s :: Cluster
s@Cluster' {} Maybe [Hsm]
a -> Cluster
s {$sel:hsms:Cluster' :: Maybe [Hsm]
hsms = Maybe [Hsm]
a} :: Cluster) 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 default password for the cluster\'s Pre-Crypto Officer (PRECO) user.
cluster_preCoPassword :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_preCoPassword :: Lens' Cluster (Maybe Text)
cluster_preCoPassword = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
preCoPassword :: Maybe Text
$sel:preCoPassword:Cluster' :: Cluster -> Maybe Text
preCoPassword} -> Maybe Text
preCoPassword) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:preCoPassword:Cluster' :: Maybe Text
preCoPassword = Maybe Text
a} :: Cluster)

-- | The identifier (ID) of the cluster\'s security group.
cluster_securityGroup :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_securityGroup :: Lens' Cluster (Maybe Text)
cluster_securityGroup = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
securityGroup :: Maybe Text
$sel:securityGroup:Cluster' :: Cluster -> Maybe Text
securityGroup} -> Maybe Text
securityGroup) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:securityGroup:Cluster' :: Maybe Text
securityGroup = Maybe Text
a} :: Cluster)

-- | The identifier (ID) of the backup used to create the cluster. This value
-- exists only when the cluster was created from a backup.
cluster_sourceBackupId :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_sourceBackupId :: Lens' Cluster (Maybe Text)
cluster_sourceBackupId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
sourceBackupId :: Maybe Text
$sel:sourceBackupId:Cluster' :: Cluster -> Maybe Text
sourceBackupId} -> Maybe Text
sourceBackupId) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:sourceBackupId:Cluster' :: Maybe Text
sourceBackupId = Maybe Text
a} :: Cluster)

-- | The cluster\'s state.
cluster_state :: Lens.Lens' Cluster (Prelude.Maybe ClusterState)
cluster_state :: Lens' Cluster (Maybe ClusterState)
cluster_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ClusterState
state :: Maybe ClusterState
$sel:state:Cluster' :: Cluster -> Maybe ClusterState
state} -> Maybe ClusterState
state) (\s :: Cluster
s@Cluster' {} Maybe ClusterState
a -> Cluster
s {$sel:state:Cluster' :: Maybe ClusterState
state = Maybe ClusterState
a} :: Cluster)

-- | A description of the cluster\'s state.
cluster_stateMessage :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_stateMessage :: Lens' Cluster (Maybe Text)
cluster_stateMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
stateMessage :: Maybe Text
$sel:stateMessage:Cluster' :: Cluster -> Maybe Text
stateMessage} -> Maybe Text
stateMessage) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:stateMessage:Cluster' :: Maybe Text
stateMessage = Maybe Text
a} :: Cluster)

-- | A map from availability zone to the cluster’s subnet in that
-- availability zone.
cluster_subnetMapping :: Lens.Lens' Cluster (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
cluster_subnetMapping :: Lens' Cluster (Maybe (HashMap Text Text))
cluster_subnetMapping = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe (HashMap Text Text)
subnetMapping :: Maybe (HashMap Text Text)
$sel:subnetMapping:Cluster' :: Cluster -> Maybe (HashMap Text Text)
subnetMapping} -> Maybe (HashMap Text Text)
subnetMapping) (\s :: Cluster
s@Cluster' {} Maybe (HashMap Text Text)
a -> Cluster
s {$sel:subnetMapping:Cluster' :: Maybe (HashMap Text Text)
subnetMapping = Maybe (HashMap Text Text)
a} :: Cluster) 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 list of tags for the cluster.
cluster_tagList :: Lens.Lens' Cluster (Prelude.Maybe [Tag])
cluster_tagList :: Lens' Cluster (Maybe [Tag])
cluster_tagList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [Tag]
tagList :: Maybe [Tag]
$sel:tagList:Cluster' :: Cluster -> Maybe [Tag]
tagList} -> Maybe [Tag]
tagList) (\s :: Cluster
s@Cluster' {} Maybe [Tag]
a -> Cluster
s {$sel:tagList:Cluster' :: Maybe [Tag]
tagList = Maybe [Tag]
a} :: Cluster) 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 identifier (ID) of the virtual private cloud (VPC) that contains the
-- cluster.
cluster_vpcId :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_vpcId :: Lens' Cluster (Maybe Text)
cluster_vpcId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
vpcId :: Maybe Text
$sel:vpcId:Cluster' :: Cluster -> Maybe Text
vpcId} -> Maybe Text
vpcId) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:vpcId:Cluster' :: Maybe Text
vpcId = Maybe Text
a} :: Cluster)

instance Data.FromJSON Cluster where
  parseJSON :: Value -> Parser Cluster
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Cluster"
      ( \Object
x ->
          Maybe BackupPolicy
-> Maybe BackupRetentionPolicy
-> Maybe Certificates
-> Maybe Text
-> Maybe POSIX
-> Maybe Text
-> Maybe [Hsm]
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe ClusterState
-> Maybe Text
-> Maybe (HashMap Text Text)
-> Maybe [Tag]
-> Maybe Text
-> Cluster
Cluster'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"BackupPolicy")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"BackupRetentionPolicy")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Certificates")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ClusterId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CreateTimestamp")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"HsmType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Hsms" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"PreCoPassword")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"SecurityGroup")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"SourceBackupId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"State")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"StateMessage")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"SubnetMapping" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"TagList" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"VpcId")
      )

instance Prelude.Hashable Cluster where
  hashWithSalt :: Int -> Cluster -> Int
hashWithSalt Int
_salt Cluster' {Maybe [Hsm]
Maybe [Tag]
Maybe Text
Maybe (HashMap Text Text)
Maybe POSIX
Maybe BackupPolicy
Maybe BackupRetentionPolicy
Maybe Certificates
Maybe ClusterState
vpcId :: Maybe Text
tagList :: Maybe [Tag]
subnetMapping :: Maybe (HashMap Text Text)
stateMessage :: Maybe Text
state :: Maybe ClusterState
sourceBackupId :: Maybe Text
securityGroup :: Maybe Text
preCoPassword :: Maybe Text
hsms :: Maybe [Hsm]
hsmType :: Maybe Text
createTimestamp :: Maybe POSIX
clusterId :: Maybe Text
certificates :: Maybe Certificates
backupRetentionPolicy :: Maybe BackupRetentionPolicy
backupPolicy :: Maybe BackupPolicy
$sel:vpcId:Cluster' :: Cluster -> Maybe Text
$sel:tagList:Cluster' :: Cluster -> Maybe [Tag]
$sel:subnetMapping:Cluster' :: Cluster -> Maybe (HashMap Text Text)
$sel:stateMessage:Cluster' :: Cluster -> Maybe Text
$sel:state:Cluster' :: Cluster -> Maybe ClusterState
$sel:sourceBackupId:Cluster' :: Cluster -> Maybe Text
$sel:securityGroup:Cluster' :: Cluster -> Maybe Text
$sel:preCoPassword:Cluster' :: Cluster -> Maybe Text
$sel:hsms:Cluster' :: Cluster -> Maybe [Hsm]
$sel:hsmType:Cluster' :: Cluster -> Maybe Text
$sel:createTimestamp:Cluster' :: Cluster -> Maybe POSIX
$sel:clusterId:Cluster' :: Cluster -> Maybe Text
$sel:certificates:Cluster' :: Cluster -> Maybe Certificates
$sel:backupRetentionPolicy:Cluster' :: Cluster -> Maybe BackupRetentionPolicy
$sel:backupPolicy:Cluster' :: Cluster -> Maybe BackupPolicy
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BackupPolicy
backupPolicy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BackupRetentionPolicy
backupRetentionPolicy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Certificates
certificates
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clusterId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
createTimestamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
hsmType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Hsm]
hsms
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
preCoPassword
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
securityGroup
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
sourceBackupId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ClusterState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
stateMessage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
subnetMapping
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tagList
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
vpcId

instance Prelude.NFData Cluster where
  rnf :: Cluster -> ()
rnf Cluster' {Maybe [Hsm]
Maybe [Tag]
Maybe Text
Maybe (HashMap Text Text)
Maybe POSIX
Maybe BackupPolicy
Maybe BackupRetentionPolicy
Maybe Certificates
Maybe ClusterState
vpcId :: Maybe Text
tagList :: Maybe [Tag]
subnetMapping :: Maybe (HashMap Text Text)
stateMessage :: Maybe Text
state :: Maybe ClusterState
sourceBackupId :: Maybe Text
securityGroup :: Maybe Text
preCoPassword :: Maybe Text
hsms :: Maybe [Hsm]
hsmType :: Maybe Text
createTimestamp :: Maybe POSIX
clusterId :: Maybe Text
certificates :: Maybe Certificates
backupRetentionPolicy :: Maybe BackupRetentionPolicy
backupPolicy :: Maybe BackupPolicy
$sel:vpcId:Cluster' :: Cluster -> Maybe Text
$sel:tagList:Cluster' :: Cluster -> Maybe [Tag]
$sel:subnetMapping:Cluster' :: Cluster -> Maybe (HashMap Text Text)
$sel:stateMessage:Cluster' :: Cluster -> Maybe Text
$sel:state:Cluster' :: Cluster -> Maybe ClusterState
$sel:sourceBackupId:Cluster' :: Cluster -> Maybe Text
$sel:securityGroup:Cluster' :: Cluster -> Maybe Text
$sel:preCoPassword:Cluster' :: Cluster -> Maybe Text
$sel:hsms:Cluster' :: Cluster -> Maybe [Hsm]
$sel:hsmType:Cluster' :: Cluster -> Maybe Text
$sel:createTimestamp:Cluster' :: Cluster -> Maybe POSIX
$sel:clusterId:Cluster' :: Cluster -> Maybe Text
$sel:certificates:Cluster' :: Cluster -> Maybe Certificates
$sel:backupRetentionPolicy:Cluster' :: Cluster -> Maybe BackupRetentionPolicy
$sel:backupPolicy:Cluster' :: Cluster -> Maybe BackupPolicy
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe BackupPolicy
backupPolicy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe BackupRetentionPolicy
backupRetentionPolicy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Certificates
certificates
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clusterId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
createTimestamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
hsmType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Hsm]
hsms
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
preCoPassword
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
securityGroup
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
sourceBackupId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ClusterState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
stateMessage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
subnetMapping
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tagList
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
vpcId