{-# 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.CodeDeploy.Types.ECSTarget
-- 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.CodeDeploy.Types.ECSTarget where

import Amazonka.CodeDeploy.Types.ECSTaskSet
import Amazonka.CodeDeploy.Types.LifecycleEvent
import Amazonka.CodeDeploy.Types.TargetStatus
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

-- | Information about the target of an Amazon ECS deployment.
--
-- /See:/ 'newECSTarget' smart constructor.
data ECSTarget = ECSTarget'
  { -- | The unique ID of a deployment.
    ECSTarget -> Maybe Text
deploymentId :: Prelude.Maybe Prelude.Text,
    -- | The date and time when the target Amazon ECS application was updated by
    -- a deployment.
    ECSTarget -> Maybe POSIX
lastUpdatedAt :: Prelude.Maybe Data.POSIX,
    -- | The lifecycle events of the deployment to this target Amazon ECS
    -- application.
    ECSTarget -> Maybe [LifecycleEvent]
lifecycleEvents :: Prelude.Maybe [LifecycleEvent],
    -- | The status an Amazon ECS deployment\'s target ECS application.
    ECSTarget -> Maybe TargetStatus
status :: Prelude.Maybe TargetStatus,
    -- | The Amazon Resource Name (ARN) of the target.
    ECSTarget -> Maybe Text
targetArn :: Prelude.Maybe Prelude.Text,
    -- | The unique ID of a deployment target that has a type of @ecsTarget@.
    ECSTarget -> Maybe Text
targetId :: Prelude.Maybe Prelude.Text,
    -- | The @ECSTaskSet@ objects associated with the ECS target.
    ECSTarget -> Maybe [ECSTaskSet]
taskSetsInfo :: Prelude.Maybe [ECSTaskSet]
  }
  deriving (ECSTarget -> ECSTarget -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ECSTarget -> ECSTarget -> Bool
$c/= :: ECSTarget -> ECSTarget -> Bool
== :: ECSTarget -> ECSTarget -> Bool
$c== :: ECSTarget -> ECSTarget -> Bool
Prelude.Eq, ReadPrec [ECSTarget]
ReadPrec ECSTarget
Int -> ReadS ECSTarget
ReadS [ECSTarget]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ECSTarget]
$creadListPrec :: ReadPrec [ECSTarget]
readPrec :: ReadPrec ECSTarget
$creadPrec :: ReadPrec ECSTarget
readList :: ReadS [ECSTarget]
$creadList :: ReadS [ECSTarget]
readsPrec :: Int -> ReadS ECSTarget
$creadsPrec :: Int -> ReadS ECSTarget
Prelude.Read, Int -> ECSTarget -> ShowS
[ECSTarget] -> ShowS
ECSTarget -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ECSTarget] -> ShowS
$cshowList :: [ECSTarget] -> ShowS
show :: ECSTarget -> String
$cshow :: ECSTarget -> String
showsPrec :: Int -> ECSTarget -> ShowS
$cshowsPrec :: Int -> ECSTarget -> ShowS
Prelude.Show, forall x. Rep ECSTarget x -> ECSTarget
forall x. ECSTarget -> Rep ECSTarget x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ECSTarget x -> ECSTarget
$cfrom :: forall x. ECSTarget -> Rep ECSTarget x
Prelude.Generic)

-- |
-- Create a value of 'ECSTarget' 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:
--
-- 'deploymentId', 'eCSTarget_deploymentId' - The unique ID of a deployment.
--
-- 'lastUpdatedAt', 'eCSTarget_lastUpdatedAt' - The date and time when the target Amazon ECS application was updated by
-- a deployment.
--
-- 'lifecycleEvents', 'eCSTarget_lifecycleEvents' - The lifecycle events of the deployment to this target Amazon ECS
-- application.
--
-- 'status', 'eCSTarget_status' - The status an Amazon ECS deployment\'s target ECS application.
--
-- 'targetArn', 'eCSTarget_targetArn' - The Amazon Resource Name (ARN) of the target.
--
-- 'targetId', 'eCSTarget_targetId' - The unique ID of a deployment target that has a type of @ecsTarget@.
--
-- 'taskSetsInfo', 'eCSTarget_taskSetsInfo' - The @ECSTaskSet@ objects associated with the ECS target.
newECSTarget ::
  ECSTarget
newECSTarget :: ECSTarget
newECSTarget =
  ECSTarget'
    { $sel:deploymentId:ECSTarget' :: Maybe Text
deploymentId = forall a. Maybe a
Prelude.Nothing,
      $sel:lastUpdatedAt:ECSTarget' :: Maybe POSIX
lastUpdatedAt = forall a. Maybe a
Prelude.Nothing,
      $sel:lifecycleEvents:ECSTarget' :: Maybe [LifecycleEvent]
lifecycleEvents = forall a. Maybe a
Prelude.Nothing,
      $sel:status:ECSTarget' :: Maybe TargetStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:targetArn:ECSTarget' :: Maybe Text
targetArn = forall a. Maybe a
Prelude.Nothing,
      $sel:targetId:ECSTarget' :: Maybe Text
targetId = forall a. Maybe a
Prelude.Nothing,
      $sel:taskSetsInfo:ECSTarget' :: Maybe [ECSTaskSet]
taskSetsInfo = forall a. Maybe a
Prelude.Nothing
    }

-- | The unique ID of a deployment.
eCSTarget_deploymentId :: Lens.Lens' ECSTarget (Prelude.Maybe Prelude.Text)
eCSTarget_deploymentId :: Lens' ECSTarget (Maybe Text)
eCSTarget_deploymentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ECSTarget' {Maybe Text
deploymentId :: Maybe Text
$sel:deploymentId:ECSTarget' :: ECSTarget -> Maybe Text
deploymentId} -> Maybe Text
deploymentId) (\s :: ECSTarget
s@ECSTarget' {} Maybe Text
a -> ECSTarget
s {$sel:deploymentId:ECSTarget' :: Maybe Text
deploymentId = Maybe Text
a} :: ECSTarget)

-- | The date and time when the target Amazon ECS application was updated by
-- a deployment.
eCSTarget_lastUpdatedAt :: Lens.Lens' ECSTarget (Prelude.Maybe Prelude.UTCTime)
eCSTarget_lastUpdatedAt :: Lens' ECSTarget (Maybe UTCTime)
eCSTarget_lastUpdatedAt = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ECSTarget' {Maybe POSIX
lastUpdatedAt :: Maybe POSIX
$sel:lastUpdatedAt:ECSTarget' :: ECSTarget -> Maybe POSIX
lastUpdatedAt} -> Maybe POSIX
lastUpdatedAt) (\s :: ECSTarget
s@ECSTarget' {} Maybe POSIX
a -> ECSTarget
s {$sel:lastUpdatedAt:ECSTarget' :: Maybe POSIX
lastUpdatedAt = Maybe POSIX
a} :: ECSTarget) 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 lifecycle events of the deployment to this target Amazon ECS
-- application.
eCSTarget_lifecycleEvents :: Lens.Lens' ECSTarget (Prelude.Maybe [LifecycleEvent])
eCSTarget_lifecycleEvents :: Lens' ECSTarget (Maybe [LifecycleEvent])
eCSTarget_lifecycleEvents = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ECSTarget' {Maybe [LifecycleEvent]
lifecycleEvents :: Maybe [LifecycleEvent]
$sel:lifecycleEvents:ECSTarget' :: ECSTarget -> Maybe [LifecycleEvent]
lifecycleEvents} -> Maybe [LifecycleEvent]
lifecycleEvents) (\s :: ECSTarget
s@ECSTarget' {} Maybe [LifecycleEvent]
a -> ECSTarget
s {$sel:lifecycleEvents:ECSTarget' :: Maybe [LifecycleEvent]
lifecycleEvents = Maybe [LifecycleEvent]
a} :: ECSTarget) 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 status an Amazon ECS deployment\'s target ECS application.
eCSTarget_status :: Lens.Lens' ECSTarget (Prelude.Maybe TargetStatus)
eCSTarget_status :: Lens' ECSTarget (Maybe TargetStatus)
eCSTarget_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ECSTarget' {Maybe TargetStatus
status :: Maybe TargetStatus
$sel:status:ECSTarget' :: ECSTarget -> Maybe TargetStatus
status} -> Maybe TargetStatus
status) (\s :: ECSTarget
s@ECSTarget' {} Maybe TargetStatus
a -> ECSTarget
s {$sel:status:ECSTarget' :: Maybe TargetStatus
status = Maybe TargetStatus
a} :: ECSTarget)

-- | The Amazon Resource Name (ARN) of the target.
eCSTarget_targetArn :: Lens.Lens' ECSTarget (Prelude.Maybe Prelude.Text)
eCSTarget_targetArn :: Lens' ECSTarget (Maybe Text)
eCSTarget_targetArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ECSTarget' {Maybe Text
targetArn :: Maybe Text
$sel:targetArn:ECSTarget' :: ECSTarget -> Maybe Text
targetArn} -> Maybe Text
targetArn) (\s :: ECSTarget
s@ECSTarget' {} Maybe Text
a -> ECSTarget
s {$sel:targetArn:ECSTarget' :: Maybe Text
targetArn = Maybe Text
a} :: ECSTarget)

-- | The unique ID of a deployment target that has a type of @ecsTarget@.
eCSTarget_targetId :: Lens.Lens' ECSTarget (Prelude.Maybe Prelude.Text)
eCSTarget_targetId :: Lens' ECSTarget (Maybe Text)
eCSTarget_targetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ECSTarget' {Maybe Text
targetId :: Maybe Text
$sel:targetId:ECSTarget' :: ECSTarget -> Maybe Text
targetId} -> Maybe Text
targetId) (\s :: ECSTarget
s@ECSTarget' {} Maybe Text
a -> ECSTarget
s {$sel:targetId:ECSTarget' :: Maybe Text
targetId = Maybe Text
a} :: ECSTarget)

-- | The @ECSTaskSet@ objects associated with the ECS target.
eCSTarget_taskSetsInfo :: Lens.Lens' ECSTarget (Prelude.Maybe [ECSTaskSet])
eCSTarget_taskSetsInfo :: Lens' ECSTarget (Maybe [ECSTaskSet])
eCSTarget_taskSetsInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ECSTarget' {Maybe [ECSTaskSet]
taskSetsInfo :: Maybe [ECSTaskSet]
$sel:taskSetsInfo:ECSTarget' :: ECSTarget -> Maybe [ECSTaskSet]
taskSetsInfo} -> Maybe [ECSTaskSet]
taskSetsInfo) (\s :: ECSTarget
s@ECSTarget' {} Maybe [ECSTaskSet]
a -> ECSTarget
s {$sel:taskSetsInfo:ECSTarget' :: Maybe [ECSTaskSet]
taskSetsInfo = Maybe [ECSTaskSet]
a} :: ECSTarget) 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

instance Data.FromJSON ECSTarget where
  parseJSON :: Value -> Parser ECSTarget
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ECSTarget"
      ( \Object
x ->
          Maybe Text
-> Maybe POSIX
-> Maybe [LifecycleEvent]
-> Maybe TargetStatus
-> Maybe Text
-> Maybe Text
-> Maybe [ECSTaskSet]
-> ECSTarget
ECSTarget'
            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
"deploymentId")
            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
"lastUpdatedAt")
            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
"lifecycleEvents"
                            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
"status")
            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
"targetArn")
            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
"targetId")
            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
"taskSetsInfo" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
      )

instance Prelude.Hashable ECSTarget where
  hashWithSalt :: Int -> ECSTarget -> Int
hashWithSalt Int
_salt ECSTarget' {Maybe [LifecycleEvent]
Maybe [ECSTaskSet]
Maybe Text
Maybe POSIX
Maybe TargetStatus
taskSetsInfo :: Maybe [ECSTaskSet]
targetId :: Maybe Text
targetArn :: Maybe Text
status :: Maybe TargetStatus
lifecycleEvents :: Maybe [LifecycleEvent]
lastUpdatedAt :: Maybe POSIX
deploymentId :: Maybe Text
$sel:taskSetsInfo:ECSTarget' :: ECSTarget -> Maybe [ECSTaskSet]
$sel:targetId:ECSTarget' :: ECSTarget -> Maybe Text
$sel:targetArn:ECSTarget' :: ECSTarget -> Maybe Text
$sel:status:ECSTarget' :: ECSTarget -> Maybe TargetStatus
$sel:lifecycleEvents:ECSTarget' :: ECSTarget -> Maybe [LifecycleEvent]
$sel:lastUpdatedAt:ECSTarget' :: ECSTarget -> Maybe POSIX
$sel:deploymentId:ECSTarget' :: ECSTarget -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
deploymentId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastUpdatedAt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [LifecycleEvent]
lifecycleEvents
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TargetStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
targetArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
targetId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [ECSTaskSet]
taskSetsInfo

instance Prelude.NFData ECSTarget where
  rnf :: ECSTarget -> ()
rnf ECSTarget' {Maybe [LifecycleEvent]
Maybe [ECSTaskSet]
Maybe Text
Maybe POSIX
Maybe TargetStatus
taskSetsInfo :: Maybe [ECSTaskSet]
targetId :: Maybe Text
targetArn :: Maybe Text
status :: Maybe TargetStatus
lifecycleEvents :: Maybe [LifecycleEvent]
lastUpdatedAt :: Maybe POSIX
deploymentId :: Maybe Text
$sel:taskSetsInfo:ECSTarget' :: ECSTarget -> Maybe [ECSTaskSet]
$sel:targetId:ECSTarget' :: ECSTarget -> Maybe Text
$sel:targetArn:ECSTarget' :: ECSTarget -> Maybe Text
$sel:status:ECSTarget' :: ECSTarget -> Maybe TargetStatus
$sel:lifecycleEvents:ECSTarget' :: ECSTarget -> Maybe [LifecycleEvent]
$sel:lastUpdatedAt:ECSTarget' :: ECSTarget -> Maybe POSIX
$sel:deploymentId:ECSTarget' :: ECSTarget -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
deploymentId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastUpdatedAt
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [LifecycleEvent]
lifecycleEvents
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TargetStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
targetArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
targetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [ECSTaskSet]
taskSetsInfo