{-# 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.LifeCycle
-- 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.LifeCycle 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.LifeCycleLastCutover
import Amazonka.MGN.Types.LifeCycleLastTest
import Amazonka.MGN.Types.LifeCycleState
import qualified Amazonka.Prelude as Prelude

-- | Lifecycle.
--
-- /See:/ 'newLifeCycle' smart constructor.
data LifeCycle = LifeCycle'
  { -- | Lifecycle added to service data and time.
    LifeCycle -> Maybe Text
addedToServiceDateTime :: Prelude.Maybe Prelude.Text,
    -- | Lifecycle elapsed time and duration.
    LifeCycle -> Maybe Text
elapsedReplicationDuration :: Prelude.Maybe Prelude.Text,
    -- | Lifecycle replication initiation date and time.
    LifeCycle -> Maybe Text
firstByteDateTime :: Prelude.Maybe Prelude.Text,
    -- | Lifecycle last Cutover.
    LifeCycle -> Maybe LifeCycleLastCutover
lastCutover :: Prelude.Maybe LifeCycleLastCutover,
    -- | Lifecycle last seen date and time.
    LifeCycle -> Maybe Text
lastSeenByServiceDateTime :: Prelude.Maybe Prelude.Text,
    -- | Lifecycle last Test.
    LifeCycle -> Maybe LifeCycleLastTest
lastTest :: Prelude.Maybe LifeCycleLastTest,
    -- | Lifecycle state.
    LifeCycle -> Maybe LifeCycleState
state :: Prelude.Maybe LifeCycleState
  }
  deriving (LifeCycle -> LifeCycle -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LifeCycle -> LifeCycle -> Bool
$c/= :: LifeCycle -> LifeCycle -> Bool
== :: LifeCycle -> LifeCycle -> Bool
$c== :: LifeCycle -> LifeCycle -> Bool
Prelude.Eq, ReadPrec [LifeCycle]
ReadPrec LifeCycle
Int -> ReadS LifeCycle
ReadS [LifeCycle]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [LifeCycle]
$creadListPrec :: ReadPrec [LifeCycle]
readPrec :: ReadPrec LifeCycle
$creadPrec :: ReadPrec LifeCycle
readList :: ReadS [LifeCycle]
$creadList :: ReadS [LifeCycle]
readsPrec :: Int -> ReadS LifeCycle
$creadsPrec :: Int -> ReadS LifeCycle
Prelude.Read, Int -> LifeCycle -> ShowS
[LifeCycle] -> ShowS
LifeCycle -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LifeCycle] -> ShowS
$cshowList :: [LifeCycle] -> ShowS
show :: LifeCycle -> String
$cshow :: LifeCycle -> String
showsPrec :: Int -> LifeCycle -> ShowS
$cshowsPrec :: Int -> LifeCycle -> ShowS
Prelude.Show, forall x. Rep LifeCycle x -> LifeCycle
forall x. LifeCycle -> Rep LifeCycle x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep LifeCycle x -> LifeCycle
$cfrom :: forall x. LifeCycle -> Rep LifeCycle x
Prelude.Generic)

-- |
-- Create a value of 'LifeCycle' 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:
--
-- 'addedToServiceDateTime', 'lifeCycle_addedToServiceDateTime' - Lifecycle added to service data and time.
--
-- 'elapsedReplicationDuration', 'lifeCycle_elapsedReplicationDuration' - Lifecycle elapsed time and duration.
--
-- 'firstByteDateTime', 'lifeCycle_firstByteDateTime' - Lifecycle replication initiation date and time.
--
-- 'lastCutover', 'lifeCycle_lastCutover' - Lifecycle last Cutover.
--
-- 'lastSeenByServiceDateTime', 'lifeCycle_lastSeenByServiceDateTime' - Lifecycle last seen date and time.
--
-- 'lastTest', 'lifeCycle_lastTest' - Lifecycle last Test.
--
-- 'state', 'lifeCycle_state' - Lifecycle state.
newLifeCycle ::
  LifeCycle
newLifeCycle :: LifeCycle
newLifeCycle =
  LifeCycle'
    { $sel:addedToServiceDateTime:LifeCycle' :: Maybe Text
addedToServiceDateTime =
        forall a. Maybe a
Prelude.Nothing,
      $sel:elapsedReplicationDuration:LifeCycle' :: Maybe Text
elapsedReplicationDuration = forall a. Maybe a
Prelude.Nothing,
      $sel:firstByteDateTime:LifeCycle' :: Maybe Text
firstByteDateTime = forall a. Maybe a
Prelude.Nothing,
      $sel:lastCutover:LifeCycle' :: Maybe LifeCycleLastCutover
lastCutover = forall a. Maybe a
Prelude.Nothing,
      $sel:lastSeenByServiceDateTime:LifeCycle' :: Maybe Text
lastSeenByServiceDateTime = forall a. Maybe a
Prelude.Nothing,
      $sel:lastTest:LifeCycle' :: Maybe LifeCycleLastTest
lastTest = forall a. Maybe a
Prelude.Nothing,
      $sel:state:LifeCycle' :: Maybe LifeCycleState
state = forall a. Maybe a
Prelude.Nothing
    }

-- | Lifecycle added to service data and time.
lifeCycle_addedToServiceDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
lifeCycle_addedToServiceDateTime :: Lens' LifeCycle (Maybe Text)
lifeCycle_addedToServiceDateTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycle' {Maybe Text
addedToServiceDateTime :: Maybe Text
$sel:addedToServiceDateTime:LifeCycle' :: LifeCycle -> Maybe Text
addedToServiceDateTime} -> Maybe Text
addedToServiceDateTime) (\s :: LifeCycle
s@LifeCycle' {} Maybe Text
a -> LifeCycle
s {$sel:addedToServiceDateTime:LifeCycle' :: Maybe Text
addedToServiceDateTime = Maybe Text
a} :: LifeCycle)

-- | Lifecycle elapsed time and duration.
lifeCycle_elapsedReplicationDuration :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
lifeCycle_elapsedReplicationDuration :: Lens' LifeCycle (Maybe Text)
lifeCycle_elapsedReplicationDuration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycle' {Maybe Text
elapsedReplicationDuration :: Maybe Text
$sel:elapsedReplicationDuration:LifeCycle' :: LifeCycle -> Maybe Text
elapsedReplicationDuration} -> Maybe Text
elapsedReplicationDuration) (\s :: LifeCycle
s@LifeCycle' {} Maybe Text
a -> LifeCycle
s {$sel:elapsedReplicationDuration:LifeCycle' :: Maybe Text
elapsedReplicationDuration = Maybe Text
a} :: LifeCycle)

-- | Lifecycle replication initiation date and time.
lifeCycle_firstByteDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
lifeCycle_firstByteDateTime :: Lens' LifeCycle (Maybe Text)
lifeCycle_firstByteDateTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycle' {Maybe Text
firstByteDateTime :: Maybe Text
$sel:firstByteDateTime:LifeCycle' :: LifeCycle -> Maybe Text
firstByteDateTime} -> Maybe Text
firstByteDateTime) (\s :: LifeCycle
s@LifeCycle' {} Maybe Text
a -> LifeCycle
s {$sel:firstByteDateTime:LifeCycle' :: Maybe Text
firstByteDateTime = Maybe Text
a} :: LifeCycle)

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

-- | Lifecycle last seen date and time.
lifeCycle_lastSeenByServiceDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
lifeCycle_lastSeenByServiceDateTime :: Lens' LifeCycle (Maybe Text)
lifeCycle_lastSeenByServiceDateTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycle' {Maybe Text
lastSeenByServiceDateTime :: Maybe Text
$sel:lastSeenByServiceDateTime:LifeCycle' :: LifeCycle -> Maybe Text
lastSeenByServiceDateTime} -> Maybe Text
lastSeenByServiceDateTime) (\s :: LifeCycle
s@LifeCycle' {} Maybe Text
a -> LifeCycle
s {$sel:lastSeenByServiceDateTime:LifeCycle' :: Maybe Text
lastSeenByServiceDateTime = Maybe Text
a} :: LifeCycle)

-- | Lifecycle last Test.
lifeCycle_lastTest :: Lens.Lens' LifeCycle (Prelude.Maybe LifeCycleLastTest)
lifeCycle_lastTest :: Lens' LifeCycle (Maybe LifeCycleLastTest)
lifeCycle_lastTest = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycle' {Maybe LifeCycleLastTest
lastTest :: Maybe LifeCycleLastTest
$sel:lastTest:LifeCycle' :: LifeCycle -> Maybe LifeCycleLastTest
lastTest} -> Maybe LifeCycleLastTest
lastTest) (\s :: LifeCycle
s@LifeCycle' {} Maybe LifeCycleLastTest
a -> LifeCycle
s {$sel:lastTest:LifeCycle' :: Maybe LifeCycleLastTest
lastTest = Maybe LifeCycleLastTest
a} :: LifeCycle)

-- | Lifecycle state.
lifeCycle_state :: Lens.Lens' LifeCycle (Prelude.Maybe LifeCycleState)
lifeCycle_state :: Lens' LifeCycle (Maybe LifeCycleState)
lifeCycle_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LifeCycle' {Maybe LifeCycleState
state :: Maybe LifeCycleState
$sel:state:LifeCycle' :: LifeCycle -> Maybe LifeCycleState
state} -> Maybe LifeCycleState
state) (\s :: LifeCycle
s@LifeCycle' {} Maybe LifeCycleState
a -> LifeCycle
s {$sel:state:LifeCycle' :: Maybe LifeCycleState
state = Maybe LifeCycleState
a} :: LifeCycle)

instance Data.FromJSON LifeCycle where
  parseJSON :: Value -> Parser LifeCycle
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"LifeCycle"
      ( \Object
x ->
          Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe LifeCycleLastCutover
-> Maybe Text
-> Maybe LifeCycleLastTest
-> Maybe LifeCycleState
-> LifeCycle
LifeCycle'
            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
"addedToServiceDateTime")
            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
"elapsedReplicationDuration")
            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
"firstByteDateTime")
            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
"lastCutover")
            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
"lastSeenByServiceDateTime")
            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
"lastTest")
            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")
      )

instance Prelude.Hashable LifeCycle where
  hashWithSalt :: Int -> LifeCycle -> Int
hashWithSalt Int
_salt LifeCycle' {Maybe Text
Maybe LifeCycleLastCutover
Maybe LifeCycleLastTest
Maybe LifeCycleState
state :: Maybe LifeCycleState
lastTest :: Maybe LifeCycleLastTest
lastSeenByServiceDateTime :: Maybe Text
lastCutover :: Maybe LifeCycleLastCutover
firstByteDateTime :: Maybe Text
elapsedReplicationDuration :: Maybe Text
addedToServiceDateTime :: Maybe Text
$sel:state:LifeCycle' :: LifeCycle -> Maybe LifeCycleState
$sel:lastTest:LifeCycle' :: LifeCycle -> Maybe LifeCycleLastTest
$sel:lastSeenByServiceDateTime:LifeCycle' :: LifeCycle -> Maybe Text
$sel:lastCutover:LifeCycle' :: LifeCycle -> Maybe LifeCycleLastCutover
$sel:firstByteDateTime:LifeCycle' :: LifeCycle -> Maybe Text
$sel:elapsedReplicationDuration:LifeCycle' :: LifeCycle -> Maybe Text
$sel:addedToServiceDateTime:LifeCycle' :: LifeCycle -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
addedToServiceDateTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
elapsedReplicationDuration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
firstByteDateTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LifeCycleLastCutover
lastCutover
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
lastSeenByServiceDateTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LifeCycleLastTest
lastTest
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LifeCycleState
state

instance Prelude.NFData LifeCycle where
  rnf :: LifeCycle -> ()
rnf LifeCycle' {Maybe Text
Maybe LifeCycleLastCutover
Maybe LifeCycleLastTest
Maybe LifeCycleState
state :: Maybe LifeCycleState
lastTest :: Maybe LifeCycleLastTest
lastSeenByServiceDateTime :: Maybe Text
lastCutover :: Maybe LifeCycleLastCutover
firstByteDateTime :: Maybe Text
elapsedReplicationDuration :: Maybe Text
addedToServiceDateTime :: Maybe Text
$sel:state:LifeCycle' :: LifeCycle -> Maybe LifeCycleState
$sel:lastTest:LifeCycle' :: LifeCycle -> Maybe LifeCycleLastTest
$sel:lastSeenByServiceDateTime:LifeCycle' :: LifeCycle -> Maybe Text
$sel:lastCutover:LifeCycle' :: LifeCycle -> Maybe LifeCycleLastCutover
$sel:firstByteDateTime:LifeCycle' :: LifeCycle -> Maybe Text
$sel:elapsedReplicationDuration:LifeCycle' :: LifeCycle -> Maybe Text
$sel:addedToServiceDateTime:LifeCycle' :: LifeCycle -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
addedToServiceDateTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
elapsedReplicationDuration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
firstByteDateTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LifeCycleLastCutover
lastCutover
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
lastSeenByServiceDateTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LifeCycleLastTest
lastTest
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LifeCycleState
state