{-# 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.Proton.Types.ResourceSyncAttempt
-- 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.Proton.Types.ResourceSyncAttempt where

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
import Amazonka.Proton.Types.ResourceSyncEvent
import Amazonka.Proton.Types.ResourceSyncStatus
import Amazonka.Proton.Types.Revision

-- | Detail data for a resource sync attempt activated by a push to a
-- repository.
--
-- /See:/ 'newResourceSyncAttempt' smart constructor.
data ResourceSyncAttempt = ResourceSyncAttempt'
  { -- | An array of events with detail data.
    ResourceSyncAttempt -> [ResourceSyncEvent]
events :: [ResourceSyncEvent],
    -- | Detail data for the initial repository commit, path and push.
    ResourceSyncAttempt -> Revision
initialRevision :: Revision,
    -- | The time when the sync attempt started.
    ResourceSyncAttempt -> POSIX
startedAt :: Data.POSIX,
    -- | The status of the sync attempt.
    ResourceSyncAttempt -> ResourceSyncStatus
status :: ResourceSyncStatus,
    -- | The resource that is synced to.
    ResourceSyncAttempt -> Text
target :: Prelude.Text,
    -- | Detail data for the target revision.
    ResourceSyncAttempt -> Revision
targetRevision :: Revision
  }
  deriving (ResourceSyncAttempt -> ResourceSyncAttempt -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ResourceSyncAttempt -> ResourceSyncAttempt -> Bool
$c/= :: ResourceSyncAttempt -> ResourceSyncAttempt -> Bool
== :: ResourceSyncAttempt -> ResourceSyncAttempt -> Bool
$c== :: ResourceSyncAttempt -> ResourceSyncAttempt -> Bool
Prelude.Eq, ReadPrec [ResourceSyncAttempt]
ReadPrec ResourceSyncAttempt
Int -> ReadS ResourceSyncAttempt
ReadS [ResourceSyncAttempt]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ResourceSyncAttempt]
$creadListPrec :: ReadPrec [ResourceSyncAttempt]
readPrec :: ReadPrec ResourceSyncAttempt
$creadPrec :: ReadPrec ResourceSyncAttempt
readList :: ReadS [ResourceSyncAttempt]
$creadList :: ReadS [ResourceSyncAttempt]
readsPrec :: Int -> ReadS ResourceSyncAttempt
$creadsPrec :: Int -> ReadS ResourceSyncAttempt
Prelude.Read, Int -> ResourceSyncAttempt -> ShowS
[ResourceSyncAttempt] -> ShowS
ResourceSyncAttempt -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ResourceSyncAttempt] -> ShowS
$cshowList :: [ResourceSyncAttempt] -> ShowS
show :: ResourceSyncAttempt -> String
$cshow :: ResourceSyncAttempt -> String
showsPrec :: Int -> ResourceSyncAttempt -> ShowS
$cshowsPrec :: Int -> ResourceSyncAttempt -> ShowS
Prelude.Show, forall x. Rep ResourceSyncAttempt x -> ResourceSyncAttempt
forall x. ResourceSyncAttempt -> Rep ResourceSyncAttempt x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ResourceSyncAttempt x -> ResourceSyncAttempt
$cfrom :: forall x. ResourceSyncAttempt -> Rep ResourceSyncAttempt x
Prelude.Generic)

-- |
-- Create a value of 'ResourceSyncAttempt' 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:
--
-- 'events', 'resourceSyncAttempt_events' - An array of events with detail data.
--
-- 'initialRevision', 'resourceSyncAttempt_initialRevision' - Detail data for the initial repository commit, path and push.
--
-- 'startedAt', 'resourceSyncAttempt_startedAt' - The time when the sync attempt started.
--
-- 'status', 'resourceSyncAttempt_status' - The status of the sync attempt.
--
-- 'target', 'resourceSyncAttempt_target' - The resource that is synced to.
--
-- 'targetRevision', 'resourceSyncAttempt_targetRevision' - Detail data for the target revision.
newResourceSyncAttempt ::
  -- | 'initialRevision'
  Revision ->
  -- | 'startedAt'
  Prelude.UTCTime ->
  -- | 'status'
  ResourceSyncStatus ->
  -- | 'target'
  Prelude.Text ->
  -- | 'targetRevision'
  Revision ->
  ResourceSyncAttempt
newResourceSyncAttempt :: Revision
-> UTCTime
-> ResourceSyncStatus
-> Text
-> Revision
-> ResourceSyncAttempt
newResourceSyncAttempt
  Revision
pInitialRevision_
  UTCTime
pStartedAt_
  ResourceSyncStatus
pStatus_
  Text
pTarget_
  Revision
pTargetRevision_ =
    ResourceSyncAttempt'
      { $sel:events:ResourceSyncAttempt' :: [ResourceSyncEvent]
events = forall a. Monoid a => a
Prelude.mempty,
        $sel:initialRevision:ResourceSyncAttempt' :: Revision
initialRevision = Revision
pInitialRevision_,
        $sel:startedAt:ResourceSyncAttempt' :: POSIX
startedAt = forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pStartedAt_,
        $sel:status:ResourceSyncAttempt' :: ResourceSyncStatus
status = ResourceSyncStatus
pStatus_,
        $sel:target:ResourceSyncAttempt' :: Text
target = Text
pTarget_,
        $sel:targetRevision:ResourceSyncAttempt' :: Revision
targetRevision = Revision
pTargetRevision_
      }

-- | An array of events with detail data.
resourceSyncAttempt_events :: Lens.Lens' ResourceSyncAttempt [ResourceSyncEvent]
resourceSyncAttempt_events :: Lens' ResourceSyncAttempt [ResourceSyncEvent]
resourceSyncAttempt_events = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceSyncAttempt' {[ResourceSyncEvent]
events :: [ResourceSyncEvent]
$sel:events:ResourceSyncAttempt' :: ResourceSyncAttempt -> [ResourceSyncEvent]
events} -> [ResourceSyncEvent]
events) (\s :: ResourceSyncAttempt
s@ResourceSyncAttempt' {} [ResourceSyncEvent]
a -> ResourceSyncAttempt
s {$sel:events:ResourceSyncAttempt' :: [ResourceSyncEvent]
events = [ResourceSyncEvent]
a} :: ResourceSyncAttempt) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Detail data for the initial repository commit, path and push.
resourceSyncAttempt_initialRevision :: Lens.Lens' ResourceSyncAttempt Revision
resourceSyncAttempt_initialRevision :: Lens' ResourceSyncAttempt Revision
resourceSyncAttempt_initialRevision = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceSyncAttempt' {Revision
initialRevision :: Revision
$sel:initialRevision:ResourceSyncAttempt' :: ResourceSyncAttempt -> Revision
initialRevision} -> Revision
initialRevision) (\s :: ResourceSyncAttempt
s@ResourceSyncAttempt' {} Revision
a -> ResourceSyncAttempt
s {$sel:initialRevision:ResourceSyncAttempt' :: Revision
initialRevision = Revision
a} :: ResourceSyncAttempt)

-- | The time when the sync attempt started.
resourceSyncAttempt_startedAt :: Lens.Lens' ResourceSyncAttempt Prelude.UTCTime
resourceSyncAttempt_startedAt :: Lens' ResourceSyncAttempt UTCTime
resourceSyncAttempt_startedAt = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceSyncAttempt' {POSIX
startedAt :: POSIX
$sel:startedAt:ResourceSyncAttempt' :: ResourceSyncAttempt -> POSIX
startedAt} -> POSIX
startedAt) (\s :: ResourceSyncAttempt
s@ResourceSyncAttempt' {} POSIX
a -> ResourceSyncAttempt
s {$sel:startedAt:ResourceSyncAttempt' :: POSIX
startedAt = POSIX
a} :: ResourceSyncAttempt) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The status of the sync attempt.
resourceSyncAttempt_status :: Lens.Lens' ResourceSyncAttempt ResourceSyncStatus
resourceSyncAttempt_status :: Lens' ResourceSyncAttempt ResourceSyncStatus
resourceSyncAttempt_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceSyncAttempt' {ResourceSyncStatus
status :: ResourceSyncStatus
$sel:status:ResourceSyncAttempt' :: ResourceSyncAttempt -> ResourceSyncStatus
status} -> ResourceSyncStatus
status) (\s :: ResourceSyncAttempt
s@ResourceSyncAttempt' {} ResourceSyncStatus
a -> ResourceSyncAttempt
s {$sel:status:ResourceSyncAttempt' :: ResourceSyncStatus
status = ResourceSyncStatus
a} :: ResourceSyncAttempt)

-- | The resource that is synced to.
resourceSyncAttempt_target :: Lens.Lens' ResourceSyncAttempt Prelude.Text
resourceSyncAttempt_target :: Lens' ResourceSyncAttempt Text
resourceSyncAttempt_target = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceSyncAttempt' {Text
target :: Text
$sel:target:ResourceSyncAttempt' :: ResourceSyncAttempt -> Text
target} -> Text
target) (\s :: ResourceSyncAttempt
s@ResourceSyncAttempt' {} Text
a -> ResourceSyncAttempt
s {$sel:target:ResourceSyncAttempt' :: Text
target = Text
a} :: ResourceSyncAttempt)

-- | Detail data for the target revision.
resourceSyncAttempt_targetRevision :: Lens.Lens' ResourceSyncAttempt Revision
resourceSyncAttempt_targetRevision :: Lens' ResourceSyncAttempt Revision
resourceSyncAttempt_targetRevision = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceSyncAttempt' {Revision
targetRevision :: Revision
$sel:targetRevision:ResourceSyncAttempt' :: ResourceSyncAttempt -> Revision
targetRevision} -> Revision
targetRevision) (\s :: ResourceSyncAttempt
s@ResourceSyncAttempt' {} Revision
a -> ResourceSyncAttempt
s {$sel:targetRevision:ResourceSyncAttempt' :: Revision
targetRevision = Revision
a} :: ResourceSyncAttempt)

instance Data.FromJSON ResourceSyncAttempt where
  parseJSON :: Value -> Parser ResourceSyncAttempt
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ResourceSyncAttempt"
      ( \Object
x ->
          [ResourceSyncEvent]
-> Revision
-> POSIX
-> ResourceSyncStatus
-> Text
-> Revision
-> ResourceSyncAttempt
ResourceSyncAttempt'
            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
"events" 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 a
Data..: Key
"initialRevision")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"startedAt")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"status")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"target")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"targetRevision")
      )

instance Prelude.Hashable ResourceSyncAttempt where
  hashWithSalt :: Int -> ResourceSyncAttempt -> Int
hashWithSalt Int
_salt ResourceSyncAttempt' {[ResourceSyncEvent]
Text
POSIX
ResourceSyncStatus
Revision
targetRevision :: Revision
target :: Text
status :: ResourceSyncStatus
startedAt :: POSIX
initialRevision :: Revision
events :: [ResourceSyncEvent]
$sel:targetRevision:ResourceSyncAttempt' :: ResourceSyncAttempt -> Revision
$sel:target:ResourceSyncAttempt' :: ResourceSyncAttempt -> Text
$sel:status:ResourceSyncAttempt' :: ResourceSyncAttempt -> ResourceSyncStatus
$sel:startedAt:ResourceSyncAttempt' :: ResourceSyncAttempt -> POSIX
$sel:initialRevision:ResourceSyncAttempt' :: ResourceSyncAttempt -> Revision
$sel:events:ResourceSyncAttempt' :: ResourceSyncAttempt -> [ResourceSyncEvent]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [ResourceSyncEvent]
events
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Revision
initialRevision
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
startedAt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ResourceSyncStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
target
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Revision
targetRevision

instance Prelude.NFData ResourceSyncAttempt where
  rnf :: ResourceSyncAttempt -> ()
rnf ResourceSyncAttempt' {[ResourceSyncEvent]
Text
POSIX
ResourceSyncStatus
Revision
targetRevision :: Revision
target :: Text
status :: ResourceSyncStatus
startedAt :: POSIX
initialRevision :: Revision
events :: [ResourceSyncEvent]
$sel:targetRevision:ResourceSyncAttempt' :: ResourceSyncAttempt -> Revision
$sel:target:ResourceSyncAttempt' :: ResourceSyncAttempt -> Text
$sel:status:ResourceSyncAttempt' :: ResourceSyncAttempt -> ResourceSyncStatus
$sel:startedAt:ResourceSyncAttempt' :: ResourceSyncAttempt -> POSIX
$sel:initialRevision:ResourceSyncAttempt' :: ResourceSyncAttempt -> Revision
$sel:events:ResourceSyncAttempt' :: ResourceSyncAttempt -> [ResourceSyncEvent]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf [ResourceSyncEvent]
events
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Revision
initialRevision
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
startedAt
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ResourceSyncStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
target
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Revision
targetRevision