{-# 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.ElastiCache.Types.UpdateAction
-- 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.ElastiCache.Types.UpdateAction where

import qualified Amazonka.Core as Core
import Amazonka.ElastiCache.Types.CacheNodeUpdateStatus
import Amazonka.ElastiCache.Types.NodeGroupUpdateStatus
import Amazonka.ElastiCache.Types.ServiceUpdateSeverity
import Amazonka.ElastiCache.Types.ServiceUpdateStatus
import Amazonka.ElastiCache.Types.ServiceUpdateType
import Amazonka.ElastiCache.Types.SlaMet
import Amazonka.ElastiCache.Types.UpdateActionStatus
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude

-- | The status of the service update for a specific replication group
--
-- /See:/ 'newUpdateAction' smart constructor.
data UpdateAction = UpdateAction'
  { -- | Reflects the nature of the service update
    UpdateAction -> Maybe ServiceUpdateType
serviceUpdateType :: Prelude.Maybe ServiceUpdateType,
    -- | If yes, all nodes in the replication group have been updated by the
    -- recommended apply-by date. If no, at least one node in the replication
    -- group have not been updated by the recommended apply-by date. If N\/A,
    -- the replication group was created after the recommended apply-by date.
    UpdateAction -> Maybe SlaMet
slaMet :: Prelude.Maybe SlaMet,
    -- | The ID of the cache cluster
    UpdateAction -> Maybe Text
cacheClusterId :: Prelude.Maybe Prelude.Text,
    -- | The unique ID of the service update
    UpdateAction -> Maybe Text
serviceUpdateName :: Prelude.Maybe Prelude.Text,
    -- | The status of the update action
    UpdateAction -> Maybe UpdateActionStatus
updateActionStatus :: Prelude.Maybe UpdateActionStatus,
    -- | The Elasticache engine to which the update applies. Either Redis or
    -- Memcached
    UpdateAction -> Maybe Text
engine :: Prelude.Maybe Prelude.Text,
    -- | The progress of the service update on the replication group
    UpdateAction -> Maybe Text
nodesUpdated :: Prelude.Maybe Prelude.Text,
    -- | The date when the UpdateActionStatus was last modified
    UpdateAction -> Maybe ISO8601
updateActionStatusModifiedDate :: Prelude.Maybe Core.ISO8601,
    -- | The date the update is first available
    UpdateAction -> Maybe ISO8601
serviceUpdateReleaseDate :: Prelude.Maybe Core.ISO8601,
    -- | The status of the service update on the cache node
    UpdateAction -> Maybe [CacheNodeUpdateStatus]
cacheNodeUpdateStatus :: Prelude.Maybe [CacheNodeUpdateStatus],
    -- | The severity of the service update
    UpdateAction -> Maybe ServiceUpdateSeverity
serviceUpdateSeverity :: Prelude.Maybe ServiceUpdateSeverity,
    -- | The status of the service update on the node group
    UpdateAction -> Maybe [NodeGroupUpdateStatus]
nodeGroupUpdateStatus :: Prelude.Maybe [NodeGroupUpdateStatus],
    -- | The recommended date to apply the service update to ensure compliance.
    -- For information on compliance, see
    -- <https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/elasticache-compliance.html#elasticache-compliance-self-service Self-Service Security Updates for Compliance>.
    UpdateAction -> Maybe ISO8601
serviceUpdateRecommendedApplyByDate :: Prelude.Maybe Core.ISO8601,
    -- | The date that the service update is available to a replication group
    UpdateAction -> Maybe ISO8601
updateActionAvailableDate :: Prelude.Maybe Core.ISO8601,
    -- | The status of the service update
    UpdateAction -> Maybe ServiceUpdateStatus
serviceUpdateStatus :: Prelude.Maybe ServiceUpdateStatus,
    -- | The estimated length of time for the update to complete
    UpdateAction -> Maybe Text
estimatedUpdateTime :: Prelude.Maybe Prelude.Text,
    -- | The ID of the replication group
    UpdateAction -> Maybe Text
replicationGroupId :: Prelude.Maybe Prelude.Text
  }
  deriving (UpdateAction -> UpdateAction -> Bool
(UpdateAction -> UpdateAction -> Bool)
-> (UpdateAction -> UpdateAction -> Bool) -> Eq UpdateAction
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateAction -> UpdateAction -> Bool
$c/= :: UpdateAction -> UpdateAction -> Bool
== :: UpdateAction -> UpdateAction -> Bool
$c== :: UpdateAction -> UpdateAction -> Bool
Prelude.Eq, ReadPrec [UpdateAction]
ReadPrec UpdateAction
Int -> ReadS UpdateAction
ReadS [UpdateAction]
(Int -> ReadS UpdateAction)
-> ReadS [UpdateAction]
-> ReadPrec UpdateAction
-> ReadPrec [UpdateAction]
-> Read UpdateAction
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateAction]
$creadListPrec :: ReadPrec [UpdateAction]
readPrec :: ReadPrec UpdateAction
$creadPrec :: ReadPrec UpdateAction
readList :: ReadS [UpdateAction]
$creadList :: ReadS [UpdateAction]
readsPrec :: Int -> ReadS UpdateAction
$creadsPrec :: Int -> ReadS UpdateAction
Prelude.Read, Int -> UpdateAction -> ShowS
[UpdateAction] -> ShowS
UpdateAction -> String
(Int -> UpdateAction -> ShowS)
-> (UpdateAction -> String)
-> ([UpdateAction] -> ShowS)
-> Show UpdateAction
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateAction] -> ShowS
$cshowList :: [UpdateAction] -> ShowS
show :: UpdateAction -> String
$cshow :: UpdateAction -> String
showsPrec :: Int -> UpdateAction -> ShowS
$cshowsPrec :: Int -> UpdateAction -> ShowS
Prelude.Show, (forall x. UpdateAction -> Rep UpdateAction x)
-> (forall x. Rep UpdateAction x -> UpdateAction)
-> Generic UpdateAction
forall x. Rep UpdateAction x -> UpdateAction
forall x. UpdateAction -> Rep UpdateAction x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateAction x -> UpdateAction
$cfrom :: forall x. UpdateAction -> Rep UpdateAction x
Prelude.Generic)

-- |
-- Create a value of 'UpdateAction' 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:
--
-- 'serviceUpdateType', 'updateAction_serviceUpdateType' - Reflects the nature of the service update
--
-- 'slaMet', 'updateAction_slaMet' - If yes, all nodes in the replication group have been updated by the
-- recommended apply-by date. If no, at least one node in the replication
-- group have not been updated by the recommended apply-by date. If N\/A,
-- the replication group was created after the recommended apply-by date.
--
-- 'cacheClusterId', 'updateAction_cacheClusterId' - The ID of the cache cluster
--
-- 'serviceUpdateName', 'updateAction_serviceUpdateName' - The unique ID of the service update
--
-- 'updateActionStatus', 'updateAction_updateActionStatus' - The status of the update action
--
-- 'engine', 'updateAction_engine' - The Elasticache engine to which the update applies. Either Redis or
-- Memcached
--
-- 'nodesUpdated', 'updateAction_nodesUpdated' - The progress of the service update on the replication group
--
-- 'updateActionStatusModifiedDate', 'updateAction_updateActionStatusModifiedDate' - The date when the UpdateActionStatus was last modified
--
-- 'serviceUpdateReleaseDate', 'updateAction_serviceUpdateReleaseDate' - The date the update is first available
--
-- 'cacheNodeUpdateStatus', 'updateAction_cacheNodeUpdateStatus' - The status of the service update on the cache node
--
-- 'serviceUpdateSeverity', 'updateAction_serviceUpdateSeverity' - The severity of the service update
--
-- 'nodeGroupUpdateStatus', 'updateAction_nodeGroupUpdateStatus' - The status of the service update on the node group
--
-- 'serviceUpdateRecommendedApplyByDate', 'updateAction_serviceUpdateRecommendedApplyByDate' - The recommended date to apply the service update to ensure compliance.
-- For information on compliance, see
-- <https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/elasticache-compliance.html#elasticache-compliance-self-service Self-Service Security Updates for Compliance>.
--
-- 'updateActionAvailableDate', 'updateAction_updateActionAvailableDate' - The date that the service update is available to a replication group
--
-- 'serviceUpdateStatus', 'updateAction_serviceUpdateStatus' - The status of the service update
--
-- 'estimatedUpdateTime', 'updateAction_estimatedUpdateTime' - The estimated length of time for the update to complete
--
-- 'replicationGroupId', 'updateAction_replicationGroupId' - The ID of the replication group
newUpdateAction ::
  UpdateAction
newUpdateAction :: UpdateAction
newUpdateAction =
  UpdateAction' :: Maybe ServiceUpdateType
-> Maybe SlaMet
-> Maybe Text
-> Maybe Text
-> Maybe UpdateActionStatus
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe ISO8601
-> Maybe [CacheNodeUpdateStatus]
-> Maybe ServiceUpdateSeverity
-> Maybe [NodeGroupUpdateStatus]
-> Maybe ISO8601
-> Maybe ISO8601
-> Maybe ServiceUpdateStatus
-> Maybe Text
-> Maybe Text
-> UpdateAction
UpdateAction'
    { $sel:serviceUpdateType:UpdateAction' :: Maybe ServiceUpdateType
serviceUpdateType = Maybe ServiceUpdateType
forall a. Maybe a
Prelude.Nothing,
      $sel:slaMet:UpdateAction' :: Maybe SlaMet
slaMet = Maybe SlaMet
forall a. Maybe a
Prelude.Nothing,
      $sel:cacheClusterId:UpdateAction' :: Maybe Text
cacheClusterId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:serviceUpdateName:UpdateAction' :: Maybe Text
serviceUpdateName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:updateActionStatus:UpdateAction' :: Maybe UpdateActionStatus
updateActionStatus = Maybe UpdateActionStatus
forall a. Maybe a
Prelude.Nothing,
      $sel:engine:UpdateAction' :: Maybe Text
engine = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:nodesUpdated:UpdateAction' :: Maybe Text
nodesUpdated = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:updateActionStatusModifiedDate:UpdateAction' :: Maybe ISO8601
updateActionStatusModifiedDate = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:serviceUpdateReleaseDate:UpdateAction' :: Maybe ISO8601
serviceUpdateReleaseDate = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:cacheNodeUpdateStatus:UpdateAction' :: Maybe [CacheNodeUpdateStatus]
cacheNodeUpdateStatus = Maybe [CacheNodeUpdateStatus]
forall a. Maybe a
Prelude.Nothing,
      $sel:serviceUpdateSeverity:UpdateAction' :: Maybe ServiceUpdateSeverity
serviceUpdateSeverity = Maybe ServiceUpdateSeverity
forall a. Maybe a
Prelude.Nothing,
      $sel:nodeGroupUpdateStatus:UpdateAction' :: Maybe [NodeGroupUpdateStatus]
nodeGroupUpdateStatus = Maybe [NodeGroupUpdateStatus]
forall a. Maybe a
Prelude.Nothing,
      $sel:serviceUpdateRecommendedApplyByDate:UpdateAction' :: Maybe ISO8601
serviceUpdateRecommendedApplyByDate =
        Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:updateActionAvailableDate:UpdateAction' :: Maybe ISO8601
updateActionAvailableDate = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:serviceUpdateStatus:UpdateAction' :: Maybe ServiceUpdateStatus
serviceUpdateStatus = Maybe ServiceUpdateStatus
forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedUpdateTime:UpdateAction' :: Maybe Text
estimatedUpdateTime = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:replicationGroupId:UpdateAction' :: Maybe Text
replicationGroupId = Maybe Text
forall a. Maybe a
Prelude.Nothing
    }

-- | Reflects the nature of the service update
updateAction_serviceUpdateType :: Lens.Lens' UpdateAction (Prelude.Maybe ServiceUpdateType)
updateAction_serviceUpdateType :: (Maybe ServiceUpdateType -> f (Maybe ServiceUpdateType))
-> UpdateAction -> f UpdateAction
updateAction_serviceUpdateType = (UpdateAction -> Maybe ServiceUpdateType)
-> (UpdateAction -> Maybe ServiceUpdateType -> UpdateAction)
-> Lens
     UpdateAction
     UpdateAction
     (Maybe ServiceUpdateType)
     (Maybe ServiceUpdateType)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe ServiceUpdateType
serviceUpdateType :: Maybe ServiceUpdateType
$sel:serviceUpdateType:UpdateAction' :: UpdateAction -> Maybe ServiceUpdateType
serviceUpdateType} -> Maybe ServiceUpdateType
serviceUpdateType) (\s :: UpdateAction
s@UpdateAction' {} Maybe ServiceUpdateType
a -> UpdateAction
s {$sel:serviceUpdateType:UpdateAction' :: Maybe ServiceUpdateType
serviceUpdateType = Maybe ServiceUpdateType
a} :: UpdateAction)

-- | If yes, all nodes in the replication group have been updated by the
-- recommended apply-by date. If no, at least one node in the replication
-- group have not been updated by the recommended apply-by date. If N\/A,
-- the replication group was created after the recommended apply-by date.
updateAction_slaMet :: Lens.Lens' UpdateAction (Prelude.Maybe SlaMet)
updateAction_slaMet :: (Maybe SlaMet -> f (Maybe SlaMet))
-> UpdateAction -> f UpdateAction
updateAction_slaMet = (UpdateAction -> Maybe SlaMet)
-> (UpdateAction -> Maybe SlaMet -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe SlaMet) (Maybe SlaMet)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe SlaMet
slaMet :: Maybe SlaMet
$sel:slaMet:UpdateAction' :: UpdateAction -> Maybe SlaMet
slaMet} -> Maybe SlaMet
slaMet) (\s :: UpdateAction
s@UpdateAction' {} Maybe SlaMet
a -> UpdateAction
s {$sel:slaMet:UpdateAction' :: Maybe SlaMet
slaMet = Maybe SlaMet
a} :: UpdateAction)

-- | The ID of the cache cluster
updateAction_cacheClusterId :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.Text)
updateAction_cacheClusterId :: (Maybe Text -> f (Maybe Text)) -> UpdateAction -> f UpdateAction
updateAction_cacheClusterId = (UpdateAction -> Maybe Text)
-> (UpdateAction -> Maybe Text -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe Text
cacheClusterId :: Maybe Text
$sel:cacheClusterId:UpdateAction' :: UpdateAction -> Maybe Text
cacheClusterId} -> Maybe Text
cacheClusterId) (\s :: UpdateAction
s@UpdateAction' {} Maybe Text
a -> UpdateAction
s {$sel:cacheClusterId:UpdateAction' :: Maybe Text
cacheClusterId = Maybe Text
a} :: UpdateAction)

-- | The unique ID of the service update
updateAction_serviceUpdateName :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.Text)
updateAction_serviceUpdateName :: (Maybe Text -> f (Maybe Text)) -> UpdateAction -> f UpdateAction
updateAction_serviceUpdateName = (UpdateAction -> Maybe Text)
-> (UpdateAction -> Maybe Text -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe Text
serviceUpdateName :: Maybe Text
$sel:serviceUpdateName:UpdateAction' :: UpdateAction -> Maybe Text
serviceUpdateName} -> Maybe Text
serviceUpdateName) (\s :: UpdateAction
s@UpdateAction' {} Maybe Text
a -> UpdateAction
s {$sel:serviceUpdateName:UpdateAction' :: Maybe Text
serviceUpdateName = Maybe Text
a} :: UpdateAction)

-- | The status of the update action
updateAction_updateActionStatus :: Lens.Lens' UpdateAction (Prelude.Maybe UpdateActionStatus)
updateAction_updateActionStatus :: (Maybe UpdateActionStatus -> f (Maybe UpdateActionStatus))
-> UpdateAction -> f UpdateAction
updateAction_updateActionStatus = (UpdateAction -> Maybe UpdateActionStatus)
-> (UpdateAction -> Maybe UpdateActionStatus -> UpdateAction)
-> Lens
     UpdateAction
     UpdateAction
     (Maybe UpdateActionStatus)
     (Maybe UpdateActionStatus)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe UpdateActionStatus
updateActionStatus :: Maybe UpdateActionStatus
$sel:updateActionStatus:UpdateAction' :: UpdateAction -> Maybe UpdateActionStatus
updateActionStatus} -> Maybe UpdateActionStatus
updateActionStatus) (\s :: UpdateAction
s@UpdateAction' {} Maybe UpdateActionStatus
a -> UpdateAction
s {$sel:updateActionStatus:UpdateAction' :: Maybe UpdateActionStatus
updateActionStatus = Maybe UpdateActionStatus
a} :: UpdateAction)

-- | The Elasticache engine to which the update applies. Either Redis or
-- Memcached
updateAction_engine :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.Text)
updateAction_engine :: (Maybe Text -> f (Maybe Text)) -> UpdateAction -> f UpdateAction
updateAction_engine = (UpdateAction -> Maybe Text)
-> (UpdateAction -> Maybe Text -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe Text
engine :: Maybe Text
$sel:engine:UpdateAction' :: UpdateAction -> Maybe Text
engine} -> Maybe Text
engine) (\s :: UpdateAction
s@UpdateAction' {} Maybe Text
a -> UpdateAction
s {$sel:engine:UpdateAction' :: Maybe Text
engine = Maybe Text
a} :: UpdateAction)

-- | The progress of the service update on the replication group
updateAction_nodesUpdated :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.Text)
updateAction_nodesUpdated :: (Maybe Text -> f (Maybe Text)) -> UpdateAction -> f UpdateAction
updateAction_nodesUpdated = (UpdateAction -> Maybe Text)
-> (UpdateAction -> Maybe Text -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe Text
nodesUpdated :: Maybe Text
$sel:nodesUpdated:UpdateAction' :: UpdateAction -> Maybe Text
nodesUpdated} -> Maybe Text
nodesUpdated) (\s :: UpdateAction
s@UpdateAction' {} Maybe Text
a -> UpdateAction
s {$sel:nodesUpdated:UpdateAction' :: Maybe Text
nodesUpdated = Maybe Text
a} :: UpdateAction)

-- | The date when the UpdateActionStatus was last modified
updateAction_updateActionStatusModifiedDate :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.UTCTime)
updateAction_updateActionStatusModifiedDate :: (Maybe UTCTime -> f (Maybe UTCTime))
-> UpdateAction -> f UpdateAction
updateAction_updateActionStatusModifiedDate = (UpdateAction -> Maybe ISO8601)
-> (UpdateAction -> Maybe ISO8601 -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe ISO8601
updateActionStatusModifiedDate :: Maybe ISO8601
$sel:updateActionStatusModifiedDate:UpdateAction' :: UpdateAction -> Maybe ISO8601
updateActionStatusModifiedDate} -> Maybe ISO8601
updateActionStatusModifiedDate) (\s :: UpdateAction
s@UpdateAction' {} Maybe ISO8601
a -> UpdateAction
s {$sel:updateActionStatusModifiedDate:UpdateAction' :: Maybe ISO8601
updateActionStatusModifiedDate = Maybe ISO8601
a} :: UpdateAction) ((Maybe ISO8601 -> f (Maybe ISO8601))
 -> UpdateAction -> f UpdateAction)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> UpdateAction
-> f UpdateAction
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

-- | The date the update is first available
updateAction_serviceUpdateReleaseDate :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.UTCTime)
updateAction_serviceUpdateReleaseDate :: (Maybe UTCTime -> f (Maybe UTCTime))
-> UpdateAction -> f UpdateAction
updateAction_serviceUpdateReleaseDate = (UpdateAction -> Maybe ISO8601)
-> (UpdateAction -> Maybe ISO8601 -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe ISO8601
serviceUpdateReleaseDate :: Maybe ISO8601
$sel:serviceUpdateReleaseDate:UpdateAction' :: UpdateAction -> Maybe ISO8601
serviceUpdateReleaseDate} -> Maybe ISO8601
serviceUpdateReleaseDate) (\s :: UpdateAction
s@UpdateAction' {} Maybe ISO8601
a -> UpdateAction
s {$sel:serviceUpdateReleaseDate:UpdateAction' :: Maybe ISO8601
serviceUpdateReleaseDate = Maybe ISO8601
a} :: UpdateAction) ((Maybe ISO8601 -> f (Maybe ISO8601))
 -> UpdateAction -> f UpdateAction)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> UpdateAction
-> f UpdateAction
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

-- | The status of the service update on the cache node
updateAction_cacheNodeUpdateStatus :: Lens.Lens' UpdateAction (Prelude.Maybe [CacheNodeUpdateStatus])
updateAction_cacheNodeUpdateStatus :: (Maybe [CacheNodeUpdateStatus]
 -> f (Maybe [CacheNodeUpdateStatus]))
-> UpdateAction -> f UpdateAction
updateAction_cacheNodeUpdateStatus = (UpdateAction -> Maybe [CacheNodeUpdateStatus])
-> (UpdateAction -> Maybe [CacheNodeUpdateStatus] -> UpdateAction)
-> Lens
     UpdateAction
     UpdateAction
     (Maybe [CacheNodeUpdateStatus])
     (Maybe [CacheNodeUpdateStatus])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe [CacheNodeUpdateStatus]
cacheNodeUpdateStatus :: Maybe [CacheNodeUpdateStatus]
$sel:cacheNodeUpdateStatus:UpdateAction' :: UpdateAction -> Maybe [CacheNodeUpdateStatus]
cacheNodeUpdateStatus} -> Maybe [CacheNodeUpdateStatus]
cacheNodeUpdateStatus) (\s :: UpdateAction
s@UpdateAction' {} Maybe [CacheNodeUpdateStatus]
a -> UpdateAction
s {$sel:cacheNodeUpdateStatus:UpdateAction' :: Maybe [CacheNodeUpdateStatus]
cacheNodeUpdateStatus = Maybe [CacheNodeUpdateStatus]
a} :: UpdateAction) ((Maybe [CacheNodeUpdateStatus]
  -> f (Maybe [CacheNodeUpdateStatus]))
 -> UpdateAction -> f UpdateAction)
-> ((Maybe [CacheNodeUpdateStatus]
     -> f (Maybe [CacheNodeUpdateStatus]))
    -> Maybe [CacheNodeUpdateStatus]
    -> f (Maybe [CacheNodeUpdateStatus]))
-> (Maybe [CacheNodeUpdateStatus]
    -> f (Maybe [CacheNodeUpdateStatus]))
-> UpdateAction
-> f UpdateAction
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [CacheNodeUpdateStatus]
  [CacheNodeUpdateStatus]
  [CacheNodeUpdateStatus]
  [CacheNodeUpdateStatus]
-> Iso
     (Maybe [CacheNodeUpdateStatus])
     (Maybe [CacheNodeUpdateStatus])
     (Maybe [CacheNodeUpdateStatus])
     (Maybe [CacheNodeUpdateStatus])
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
  [CacheNodeUpdateStatus]
  [CacheNodeUpdateStatus]
  [CacheNodeUpdateStatus]
  [CacheNodeUpdateStatus]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The severity of the service update
updateAction_serviceUpdateSeverity :: Lens.Lens' UpdateAction (Prelude.Maybe ServiceUpdateSeverity)
updateAction_serviceUpdateSeverity :: (Maybe ServiceUpdateSeverity -> f (Maybe ServiceUpdateSeverity))
-> UpdateAction -> f UpdateAction
updateAction_serviceUpdateSeverity = (UpdateAction -> Maybe ServiceUpdateSeverity)
-> (UpdateAction -> Maybe ServiceUpdateSeverity -> UpdateAction)
-> Lens
     UpdateAction
     UpdateAction
     (Maybe ServiceUpdateSeverity)
     (Maybe ServiceUpdateSeverity)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe ServiceUpdateSeverity
serviceUpdateSeverity :: Maybe ServiceUpdateSeverity
$sel:serviceUpdateSeverity:UpdateAction' :: UpdateAction -> Maybe ServiceUpdateSeverity
serviceUpdateSeverity} -> Maybe ServiceUpdateSeverity
serviceUpdateSeverity) (\s :: UpdateAction
s@UpdateAction' {} Maybe ServiceUpdateSeverity
a -> UpdateAction
s {$sel:serviceUpdateSeverity:UpdateAction' :: Maybe ServiceUpdateSeverity
serviceUpdateSeverity = Maybe ServiceUpdateSeverity
a} :: UpdateAction)

-- | The status of the service update on the node group
updateAction_nodeGroupUpdateStatus :: Lens.Lens' UpdateAction (Prelude.Maybe [NodeGroupUpdateStatus])
updateAction_nodeGroupUpdateStatus :: (Maybe [NodeGroupUpdateStatus]
 -> f (Maybe [NodeGroupUpdateStatus]))
-> UpdateAction -> f UpdateAction
updateAction_nodeGroupUpdateStatus = (UpdateAction -> Maybe [NodeGroupUpdateStatus])
-> (UpdateAction -> Maybe [NodeGroupUpdateStatus] -> UpdateAction)
-> Lens
     UpdateAction
     UpdateAction
     (Maybe [NodeGroupUpdateStatus])
     (Maybe [NodeGroupUpdateStatus])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe [NodeGroupUpdateStatus]
nodeGroupUpdateStatus :: Maybe [NodeGroupUpdateStatus]
$sel:nodeGroupUpdateStatus:UpdateAction' :: UpdateAction -> Maybe [NodeGroupUpdateStatus]
nodeGroupUpdateStatus} -> Maybe [NodeGroupUpdateStatus]
nodeGroupUpdateStatus) (\s :: UpdateAction
s@UpdateAction' {} Maybe [NodeGroupUpdateStatus]
a -> UpdateAction
s {$sel:nodeGroupUpdateStatus:UpdateAction' :: Maybe [NodeGroupUpdateStatus]
nodeGroupUpdateStatus = Maybe [NodeGroupUpdateStatus]
a} :: UpdateAction) ((Maybe [NodeGroupUpdateStatus]
  -> f (Maybe [NodeGroupUpdateStatus]))
 -> UpdateAction -> f UpdateAction)
-> ((Maybe [NodeGroupUpdateStatus]
     -> f (Maybe [NodeGroupUpdateStatus]))
    -> Maybe [NodeGroupUpdateStatus]
    -> f (Maybe [NodeGroupUpdateStatus]))
-> (Maybe [NodeGroupUpdateStatus]
    -> f (Maybe [NodeGroupUpdateStatus]))
-> UpdateAction
-> f UpdateAction
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [NodeGroupUpdateStatus]
  [NodeGroupUpdateStatus]
  [NodeGroupUpdateStatus]
  [NodeGroupUpdateStatus]
-> Iso
     (Maybe [NodeGroupUpdateStatus])
     (Maybe [NodeGroupUpdateStatus])
     (Maybe [NodeGroupUpdateStatus])
     (Maybe [NodeGroupUpdateStatus])
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
  [NodeGroupUpdateStatus]
  [NodeGroupUpdateStatus]
  [NodeGroupUpdateStatus]
  [NodeGroupUpdateStatus]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The recommended date to apply the service update to ensure compliance.
-- For information on compliance, see
-- <https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/elasticache-compliance.html#elasticache-compliance-self-service Self-Service Security Updates for Compliance>.
updateAction_serviceUpdateRecommendedApplyByDate :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.UTCTime)
updateAction_serviceUpdateRecommendedApplyByDate :: (Maybe UTCTime -> f (Maybe UTCTime))
-> UpdateAction -> f UpdateAction
updateAction_serviceUpdateRecommendedApplyByDate = (UpdateAction -> Maybe ISO8601)
-> (UpdateAction -> Maybe ISO8601 -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe ISO8601
serviceUpdateRecommendedApplyByDate :: Maybe ISO8601
$sel:serviceUpdateRecommendedApplyByDate:UpdateAction' :: UpdateAction -> Maybe ISO8601
serviceUpdateRecommendedApplyByDate} -> Maybe ISO8601
serviceUpdateRecommendedApplyByDate) (\s :: UpdateAction
s@UpdateAction' {} Maybe ISO8601
a -> UpdateAction
s {$sel:serviceUpdateRecommendedApplyByDate:UpdateAction' :: Maybe ISO8601
serviceUpdateRecommendedApplyByDate = Maybe ISO8601
a} :: UpdateAction) ((Maybe ISO8601 -> f (Maybe ISO8601))
 -> UpdateAction -> f UpdateAction)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> UpdateAction
-> f UpdateAction
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

-- | The date that the service update is available to a replication group
updateAction_updateActionAvailableDate :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.UTCTime)
updateAction_updateActionAvailableDate :: (Maybe UTCTime -> f (Maybe UTCTime))
-> UpdateAction -> f UpdateAction
updateAction_updateActionAvailableDate = (UpdateAction -> Maybe ISO8601)
-> (UpdateAction -> Maybe ISO8601 -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe ISO8601
updateActionAvailableDate :: Maybe ISO8601
$sel:updateActionAvailableDate:UpdateAction' :: UpdateAction -> Maybe ISO8601
updateActionAvailableDate} -> Maybe ISO8601
updateActionAvailableDate) (\s :: UpdateAction
s@UpdateAction' {} Maybe ISO8601
a -> UpdateAction
s {$sel:updateActionAvailableDate:UpdateAction' :: Maybe ISO8601
updateActionAvailableDate = Maybe ISO8601
a} :: UpdateAction) ((Maybe ISO8601 -> f (Maybe ISO8601))
 -> UpdateAction -> f UpdateAction)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> UpdateAction
-> f UpdateAction
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

-- | The status of the service update
updateAction_serviceUpdateStatus :: Lens.Lens' UpdateAction (Prelude.Maybe ServiceUpdateStatus)
updateAction_serviceUpdateStatus :: (Maybe ServiceUpdateStatus -> f (Maybe ServiceUpdateStatus))
-> UpdateAction -> f UpdateAction
updateAction_serviceUpdateStatus = (UpdateAction -> Maybe ServiceUpdateStatus)
-> (UpdateAction -> Maybe ServiceUpdateStatus -> UpdateAction)
-> Lens
     UpdateAction
     UpdateAction
     (Maybe ServiceUpdateStatus)
     (Maybe ServiceUpdateStatus)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe ServiceUpdateStatus
serviceUpdateStatus :: Maybe ServiceUpdateStatus
$sel:serviceUpdateStatus:UpdateAction' :: UpdateAction -> Maybe ServiceUpdateStatus
serviceUpdateStatus} -> Maybe ServiceUpdateStatus
serviceUpdateStatus) (\s :: UpdateAction
s@UpdateAction' {} Maybe ServiceUpdateStatus
a -> UpdateAction
s {$sel:serviceUpdateStatus:UpdateAction' :: Maybe ServiceUpdateStatus
serviceUpdateStatus = Maybe ServiceUpdateStatus
a} :: UpdateAction)

-- | The estimated length of time for the update to complete
updateAction_estimatedUpdateTime :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.Text)
updateAction_estimatedUpdateTime :: (Maybe Text -> f (Maybe Text)) -> UpdateAction -> f UpdateAction
updateAction_estimatedUpdateTime = (UpdateAction -> Maybe Text)
-> (UpdateAction -> Maybe Text -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe Text
estimatedUpdateTime :: Maybe Text
$sel:estimatedUpdateTime:UpdateAction' :: UpdateAction -> Maybe Text
estimatedUpdateTime} -> Maybe Text
estimatedUpdateTime) (\s :: UpdateAction
s@UpdateAction' {} Maybe Text
a -> UpdateAction
s {$sel:estimatedUpdateTime:UpdateAction' :: Maybe Text
estimatedUpdateTime = Maybe Text
a} :: UpdateAction)

-- | The ID of the replication group
updateAction_replicationGroupId :: Lens.Lens' UpdateAction (Prelude.Maybe Prelude.Text)
updateAction_replicationGroupId :: (Maybe Text -> f (Maybe Text)) -> UpdateAction -> f UpdateAction
updateAction_replicationGroupId = (UpdateAction -> Maybe Text)
-> (UpdateAction -> Maybe Text -> UpdateAction)
-> Lens UpdateAction UpdateAction (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAction' {Maybe Text
replicationGroupId :: Maybe Text
$sel:replicationGroupId:UpdateAction' :: UpdateAction -> Maybe Text
replicationGroupId} -> Maybe Text
replicationGroupId) (\s :: UpdateAction
s@UpdateAction' {} Maybe Text
a -> UpdateAction
s {$sel:replicationGroupId:UpdateAction' :: Maybe Text
replicationGroupId = Maybe Text
a} :: UpdateAction)

instance Core.FromXML UpdateAction where
  parseXML :: [Node] -> Either String UpdateAction
parseXML [Node]
x =
    Maybe ServiceUpdateType
-> Maybe SlaMet
-> Maybe Text
-> Maybe Text
-> Maybe UpdateActionStatus
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe ISO8601
-> Maybe [CacheNodeUpdateStatus]
-> Maybe ServiceUpdateSeverity
-> Maybe [NodeGroupUpdateStatus]
-> Maybe ISO8601
-> Maybe ISO8601
-> Maybe ServiceUpdateStatus
-> Maybe Text
-> Maybe Text
-> UpdateAction
UpdateAction'
      (Maybe ServiceUpdateType
 -> Maybe SlaMet
 -> Maybe Text
 -> Maybe Text
 -> Maybe UpdateActionStatus
 -> Maybe Text
 -> Maybe Text
 -> Maybe ISO8601
 -> Maybe ISO8601
 -> Maybe [CacheNodeUpdateStatus]
 -> Maybe ServiceUpdateSeverity
 -> Maybe [NodeGroupUpdateStatus]
 -> Maybe ISO8601
 -> Maybe ISO8601
 -> Maybe ServiceUpdateStatus
 -> Maybe Text
 -> Maybe Text
 -> UpdateAction)
-> Either String (Maybe ServiceUpdateType)
-> Either
     String
     (Maybe SlaMet
      -> Maybe Text
      -> Maybe Text
      -> Maybe UpdateActionStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x [Node] -> Text -> Either String (Maybe ServiceUpdateType)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ServiceUpdateType")
      Either
  String
  (Maybe SlaMet
   -> Maybe Text
   -> Maybe Text
   -> Maybe UpdateActionStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe SlaMet)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe UpdateActionStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe SlaMet)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"SlaMet")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe UpdateActionStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe UpdateActionStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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
"CacheClusterId")
      Either
  String
  (Maybe Text
   -> Maybe UpdateActionStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe UpdateActionStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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
"ServiceUpdateName")
      Either
  String
  (Maybe UpdateActionStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe UpdateActionStatus)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe UpdateActionStatus)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"UpdateActionStatus")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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 ISO8601
   -> Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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
"NodesUpdated")
      Either
  String
  (Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe ISO8601
      -> Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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
"UpdateActionStatusModifiedDate")
      Either
  String
  (Maybe ISO8601
   -> Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe [CacheNodeUpdateStatus]
      -> Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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
"ServiceUpdateReleaseDate")
      Either
  String
  (Maybe [CacheNodeUpdateStatus]
   -> Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe [CacheNodeUpdateStatus])
-> Either
     String
     (Maybe ServiceUpdateSeverity
      -> Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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
"CacheNodeUpdateStatus"
                      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 [CacheNodeUpdateStatus]))
-> Either String (Maybe [CacheNodeUpdateStatus])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [CacheNodeUpdateStatus])
-> [Node] -> Either String (Maybe [CacheNodeUpdateStatus])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [CacheNodeUpdateStatus]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"CacheNodeUpdateStatus")
                  )
      Either
  String
  (Maybe ServiceUpdateSeverity
   -> Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe ServiceUpdateSeverity)
-> Either
     String
     (Maybe [NodeGroupUpdateStatus]
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ServiceUpdateSeverity)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ServiceUpdateSeverity")
      Either
  String
  (Maybe [NodeGroupUpdateStatus]
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe [NodeGroupUpdateStatus])
-> Either
     String
     (Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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
"NodeGroupUpdateStatus"
                      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 [NodeGroupUpdateStatus]))
-> Either String (Maybe [NodeGroupUpdateStatus])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [NodeGroupUpdateStatus])
-> [Node] -> Either String (Maybe [NodeGroupUpdateStatus])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [NodeGroupUpdateStatus]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"NodeGroupUpdateStatus")
                  )
      Either
  String
  (Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe ISO8601
      -> Maybe ServiceUpdateStatus
      -> Maybe Text
      -> Maybe Text
      -> UpdateAction)
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
"ServiceUpdateRecommendedApplyByDate")
      Either
  String
  (Maybe ISO8601
   -> Maybe ServiceUpdateStatus
   -> Maybe Text
   -> Maybe Text
   -> UpdateAction)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe ServiceUpdateStatus
      -> Maybe Text -> Maybe Text -> UpdateAction)
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
"UpdateActionAvailableDate")
      Either
  String
  (Maybe ServiceUpdateStatus
   -> Maybe Text -> Maybe Text -> UpdateAction)
-> Either String (Maybe ServiceUpdateStatus)
-> Either String (Maybe Text -> Maybe Text -> UpdateAction)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ServiceUpdateStatus)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ServiceUpdateStatus")
      Either String (Maybe Text -> Maybe Text -> UpdateAction)
-> Either String (Maybe Text)
-> Either String (Maybe Text -> UpdateAction)
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
"EstimatedUpdateTime")
      Either String (Maybe Text -> UpdateAction)
-> Either String (Maybe Text) -> Either String UpdateAction
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
"ReplicationGroupId")

instance Prelude.Hashable UpdateAction

instance Prelude.NFData UpdateAction