{-# 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.MGN.Types.LifeCycleLastCutover
-- 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.MGN.Types.LifeCycleLastCutover where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.MGN.Types.LifeCycleLastCutoverFinalized
import Amazonka.MGN.Types.LifeCycleLastCutoverInitiated
import Amazonka.MGN.Types.LifeCycleLastCutoverReverted
import qualified Amazonka.Prelude as Prelude

-- | Lifecycle last Cutover .
--
-- /See:/ 'newLifeCycleLastCutover' smart constructor.
data LifeCycleLastCutover = LifeCycleLastCutover'
  { -- | Lifecycle Cutover finalized date and time.
    LifeCycleLastCutover -> Maybe LifeCycleLastCutoverFinalized
finalized :: Prelude.Maybe LifeCycleLastCutoverFinalized,
    -- | Lifecycle last Cutover initiated.
    LifeCycleLastCutover -> Maybe LifeCycleLastCutoverInitiated
initiated :: Prelude.Maybe LifeCycleLastCutoverInitiated,
    -- | Lifecycle last Cutover reverted.
    LifeCycleLastCutover -> Maybe LifeCycleLastCutoverReverted
reverted :: Prelude.Maybe LifeCycleLastCutoverReverted
  }
  deriving (LifeCycleLastCutover -> LifeCycleLastCutover -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LifeCycleLastCutover -> LifeCycleLastCutover -> Bool
$c/= :: LifeCycleLastCutover -> LifeCycleLastCutover -> Bool
== :: LifeCycleLastCutover -> LifeCycleLastCutover -> Bool
$c== :: LifeCycleLastCutover -> LifeCycleLastCutover -> Bool
Prelude.Eq, ReadPrec [LifeCycleLastCutover]
ReadPrec LifeCycleLastCutover
Int -> ReadS LifeCycleLastCutover
ReadS [LifeCycleLastCutover]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [LifeCycleLastCutover]
$creadListPrec :: ReadPrec [LifeCycleLastCutover]
readPrec :: ReadPrec LifeCycleLastCutover
$creadPrec :: ReadPrec LifeCycleLastCutover
readList :: ReadS [LifeCycleLastCutover]
$creadList :: ReadS [LifeCycleLastCutover]
readsPrec :: Int -> ReadS LifeCycleLastCutover
$creadsPrec :: Int -> ReadS LifeCycleLastCutover
Prelude.Read, Int -> LifeCycleLastCutover -> ShowS
[LifeCycleLastCutover] -> ShowS
LifeCycleLastCutover -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LifeCycleLastCutover] -> ShowS
$cshowList :: [LifeCycleLastCutover] -> ShowS
show :: LifeCycleLastCutover -> String
$cshow :: LifeCycleLastCutover -> String
showsPrec :: Int -> LifeCycleLastCutover -> ShowS
$cshowsPrec :: Int -> LifeCycleLastCutover -> ShowS
Prelude.Show, forall x. Rep LifeCycleLastCutover x -> LifeCycleLastCutover
forall x. LifeCycleLastCutover -> Rep LifeCycleLastCutover x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep LifeCycleLastCutover x -> LifeCycleLastCutover
$cfrom :: forall x. LifeCycleLastCutover -> Rep LifeCycleLastCutover x
Prelude.Generic)

-- |
-- Create a value of 'LifeCycleLastCutover' 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:
--
-- 'finalized', 'lifeCycleLastCutover_finalized' - Lifecycle Cutover finalized date and time.
--
-- 'initiated', 'lifeCycleLastCutover_initiated' - Lifecycle last Cutover initiated.
--
-- 'reverted', 'lifeCycleLastCutover_reverted' - Lifecycle last Cutover reverted.
newLifeCycleLastCutover ::
  LifeCycleLastCutover
newLifeCycleLastCutover :: LifeCycleLastCutover
newLifeCycleLastCutover =
  LifeCycleLastCutover'
    { $sel:finalized:LifeCycleLastCutover' :: Maybe LifeCycleLastCutoverFinalized
finalized = forall a. Maybe a
Prelude.Nothing,
      $sel:initiated:LifeCycleLastCutover' :: Maybe LifeCycleLastCutoverInitiated
initiated = forall a. Maybe a
Prelude.Nothing,
      $sel:reverted:LifeCycleLastCutover' :: Maybe LifeCycleLastCutoverReverted
reverted = forall a. Maybe a
Prelude.Nothing
    }

-- | Lifecycle Cutover finalized date and time.
lifeCycleLastCutover_finalized :: Lens.Lens' LifeCycleLastCutover (Prelude.Maybe LifeCycleLastCutoverFinalized)
lifeCycleLastCutover_finalized :: Lens' LifeCycleLastCutover (Maybe LifeCycleLastCutoverFinalized)
lifeCycleLastCutover_finalized = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycleLastCutover' {Maybe LifeCycleLastCutoverFinalized
finalized :: Maybe LifeCycleLastCutoverFinalized
$sel:finalized:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverFinalized
finalized} -> Maybe LifeCycleLastCutoverFinalized
finalized) (\s :: LifeCycleLastCutover
s@LifeCycleLastCutover' {} Maybe LifeCycleLastCutoverFinalized
a -> LifeCycleLastCutover
s {$sel:finalized:LifeCycleLastCutover' :: Maybe LifeCycleLastCutoverFinalized
finalized = Maybe LifeCycleLastCutoverFinalized
a} :: LifeCycleLastCutover)

-- | Lifecycle last Cutover initiated.
lifeCycleLastCutover_initiated :: Lens.Lens' LifeCycleLastCutover (Prelude.Maybe LifeCycleLastCutoverInitiated)
lifeCycleLastCutover_initiated :: Lens' LifeCycleLastCutover (Maybe LifeCycleLastCutoverInitiated)
lifeCycleLastCutover_initiated = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycleLastCutover' {Maybe LifeCycleLastCutoverInitiated
initiated :: Maybe LifeCycleLastCutoverInitiated
$sel:initiated:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverInitiated
initiated} -> Maybe LifeCycleLastCutoverInitiated
initiated) (\s :: LifeCycleLastCutover
s@LifeCycleLastCutover' {} Maybe LifeCycleLastCutoverInitiated
a -> LifeCycleLastCutover
s {$sel:initiated:LifeCycleLastCutover' :: Maybe LifeCycleLastCutoverInitiated
initiated = Maybe LifeCycleLastCutoverInitiated
a} :: LifeCycleLastCutover)

-- | Lifecycle last Cutover reverted.
lifeCycleLastCutover_reverted :: Lens.Lens' LifeCycleLastCutover (Prelude.Maybe LifeCycleLastCutoverReverted)
lifeCycleLastCutover_reverted :: Lens' LifeCycleLastCutover (Maybe LifeCycleLastCutoverReverted)
lifeCycleLastCutover_reverted = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycleLastCutover' {Maybe LifeCycleLastCutoverReverted
reverted :: Maybe LifeCycleLastCutoverReverted
$sel:reverted:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverReverted
reverted} -> Maybe LifeCycleLastCutoverReverted
reverted) (\s :: LifeCycleLastCutover
s@LifeCycleLastCutover' {} Maybe LifeCycleLastCutoverReverted
a -> LifeCycleLastCutover
s {$sel:reverted:LifeCycleLastCutover' :: Maybe LifeCycleLastCutoverReverted
reverted = Maybe LifeCycleLastCutoverReverted
a} :: LifeCycleLastCutover)

instance Data.FromJSON LifeCycleLastCutover where
  parseJSON :: Value -> Parser LifeCycleLastCutover
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"LifeCycleLastCutover"
      ( \Object
x ->
          Maybe LifeCycleLastCutoverFinalized
-> Maybe LifeCycleLastCutoverInitiated
-> Maybe LifeCycleLastCutoverReverted
-> LifeCycleLastCutover
LifeCycleLastCutover'
            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
"finalized")
            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
"initiated")
            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
"reverted")
      )

instance Prelude.Hashable LifeCycleLastCutover where
  hashWithSalt :: Int -> LifeCycleLastCutover -> Int
hashWithSalt Int
_salt LifeCycleLastCutover' {Maybe LifeCycleLastCutoverFinalized
Maybe LifeCycleLastCutoverInitiated
Maybe LifeCycleLastCutoverReverted
reverted :: Maybe LifeCycleLastCutoverReverted
initiated :: Maybe LifeCycleLastCutoverInitiated
finalized :: Maybe LifeCycleLastCutoverFinalized
$sel:reverted:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverReverted
$sel:initiated:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverInitiated
$sel:finalized:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverFinalized
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LifeCycleLastCutoverFinalized
finalized
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LifeCycleLastCutoverInitiated
initiated
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LifeCycleLastCutoverReverted
reverted

instance Prelude.NFData LifeCycleLastCutover where
  rnf :: LifeCycleLastCutover -> ()
rnf LifeCycleLastCutover' {Maybe LifeCycleLastCutoverFinalized
Maybe LifeCycleLastCutoverInitiated
Maybe LifeCycleLastCutoverReverted
reverted :: Maybe LifeCycleLastCutoverReverted
initiated :: Maybe LifeCycleLastCutoverInitiated
finalized :: Maybe LifeCycleLastCutoverFinalized
$sel:reverted:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverReverted
$sel:initiated:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverInitiated
$sel:finalized:LifeCycleLastCutover' :: LifeCycleLastCutover -> Maybe LifeCycleLastCutoverFinalized
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe LifeCycleLastCutoverFinalized
finalized
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LifeCycleLastCutoverInitiated
initiated
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LifeCycleLastCutoverReverted
reverted