{-# 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.SageMakerEdge.Types.EdgeDeployment
-- 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.SageMakerEdge.Types.EdgeDeployment 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.SageMakerEdge.Types.Definition
import Amazonka.SageMakerEdge.Types.DeploymentType
import Amazonka.SageMakerEdge.Types.FailureHandlingPolicy

-- | Information about a deployment on an edge device that is registered with
-- SageMaker Edge Manager.
--
-- /See:/ 'newEdgeDeployment' smart constructor.
data EdgeDeployment = EdgeDeployment'
  { -- | Returns a list of Definition objects.
    EdgeDeployment -> Maybe [Definition]
definitions :: Prelude.Maybe [Definition],
    -- | The name and unique ID of the deployment.
    EdgeDeployment -> Maybe Text
deploymentName :: Prelude.Maybe Prelude.Text,
    -- | Determines whether to rollback to previous configuration if deployment
    -- fails.
    EdgeDeployment -> Maybe FailureHandlingPolicy
failureHandlingPolicy :: Prelude.Maybe FailureHandlingPolicy,
    -- | The type of the deployment.
    EdgeDeployment -> Maybe DeploymentType
type' :: Prelude.Maybe DeploymentType
  }
  deriving (EdgeDeployment -> EdgeDeployment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EdgeDeployment -> EdgeDeployment -> Bool
$c/= :: EdgeDeployment -> EdgeDeployment -> Bool
== :: EdgeDeployment -> EdgeDeployment -> Bool
$c== :: EdgeDeployment -> EdgeDeployment -> Bool
Prelude.Eq, ReadPrec [EdgeDeployment]
ReadPrec EdgeDeployment
Int -> ReadS EdgeDeployment
ReadS [EdgeDeployment]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EdgeDeployment]
$creadListPrec :: ReadPrec [EdgeDeployment]
readPrec :: ReadPrec EdgeDeployment
$creadPrec :: ReadPrec EdgeDeployment
readList :: ReadS [EdgeDeployment]
$creadList :: ReadS [EdgeDeployment]
readsPrec :: Int -> ReadS EdgeDeployment
$creadsPrec :: Int -> ReadS EdgeDeployment
Prelude.Read, Int -> EdgeDeployment -> ShowS
[EdgeDeployment] -> ShowS
EdgeDeployment -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EdgeDeployment] -> ShowS
$cshowList :: [EdgeDeployment] -> ShowS
show :: EdgeDeployment -> String
$cshow :: EdgeDeployment -> String
showsPrec :: Int -> EdgeDeployment -> ShowS
$cshowsPrec :: Int -> EdgeDeployment -> ShowS
Prelude.Show, forall x. Rep EdgeDeployment x -> EdgeDeployment
forall x. EdgeDeployment -> Rep EdgeDeployment x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EdgeDeployment x -> EdgeDeployment
$cfrom :: forall x. EdgeDeployment -> Rep EdgeDeployment x
Prelude.Generic)

-- |
-- Create a value of 'EdgeDeployment' 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:
--
-- 'definitions', 'edgeDeployment_definitions' - Returns a list of Definition objects.
--
-- 'deploymentName', 'edgeDeployment_deploymentName' - The name and unique ID of the deployment.
--
-- 'failureHandlingPolicy', 'edgeDeployment_failureHandlingPolicy' - Determines whether to rollback to previous configuration if deployment
-- fails.
--
-- 'type'', 'edgeDeployment_type' - The type of the deployment.
newEdgeDeployment ::
  EdgeDeployment
newEdgeDeployment :: EdgeDeployment
newEdgeDeployment =
  EdgeDeployment'
    { $sel:definitions:EdgeDeployment' :: Maybe [Definition]
definitions = forall a. Maybe a
Prelude.Nothing,
      $sel:deploymentName:EdgeDeployment' :: Maybe Text
deploymentName = forall a. Maybe a
Prelude.Nothing,
      $sel:failureHandlingPolicy:EdgeDeployment' :: Maybe FailureHandlingPolicy
failureHandlingPolicy = forall a. Maybe a
Prelude.Nothing,
      $sel:type':EdgeDeployment' :: Maybe DeploymentType
type' = forall a. Maybe a
Prelude.Nothing
    }

-- | Returns a list of Definition objects.
edgeDeployment_definitions :: Lens.Lens' EdgeDeployment (Prelude.Maybe [Definition])
edgeDeployment_definitions :: Lens' EdgeDeployment (Maybe [Definition])
edgeDeployment_definitions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EdgeDeployment' {Maybe [Definition]
definitions :: Maybe [Definition]
$sel:definitions:EdgeDeployment' :: EdgeDeployment -> Maybe [Definition]
definitions} -> Maybe [Definition]
definitions) (\s :: EdgeDeployment
s@EdgeDeployment' {} Maybe [Definition]
a -> EdgeDeployment
s {$sel:definitions:EdgeDeployment' :: Maybe [Definition]
definitions = Maybe [Definition]
a} :: EdgeDeployment) 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 name and unique ID of the deployment.
edgeDeployment_deploymentName :: Lens.Lens' EdgeDeployment (Prelude.Maybe Prelude.Text)
edgeDeployment_deploymentName :: Lens' EdgeDeployment (Maybe Text)
edgeDeployment_deploymentName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EdgeDeployment' {Maybe Text
deploymentName :: Maybe Text
$sel:deploymentName:EdgeDeployment' :: EdgeDeployment -> Maybe Text
deploymentName} -> Maybe Text
deploymentName) (\s :: EdgeDeployment
s@EdgeDeployment' {} Maybe Text
a -> EdgeDeployment
s {$sel:deploymentName:EdgeDeployment' :: Maybe Text
deploymentName = Maybe Text
a} :: EdgeDeployment)

-- | Determines whether to rollback to previous configuration if deployment
-- fails.
edgeDeployment_failureHandlingPolicy :: Lens.Lens' EdgeDeployment (Prelude.Maybe FailureHandlingPolicy)
edgeDeployment_failureHandlingPolicy :: Lens' EdgeDeployment (Maybe FailureHandlingPolicy)
edgeDeployment_failureHandlingPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EdgeDeployment' {Maybe FailureHandlingPolicy
failureHandlingPolicy :: Maybe FailureHandlingPolicy
$sel:failureHandlingPolicy:EdgeDeployment' :: EdgeDeployment -> Maybe FailureHandlingPolicy
failureHandlingPolicy} -> Maybe FailureHandlingPolicy
failureHandlingPolicy) (\s :: EdgeDeployment
s@EdgeDeployment' {} Maybe FailureHandlingPolicy
a -> EdgeDeployment
s {$sel:failureHandlingPolicy:EdgeDeployment' :: Maybe FailureHandlingPolicy
failureHandlingPolicy = Maybe FailureHandlingPolicy
a} :: EdgeDeployment)

-- | The type of the deployment.
edgeDeployment_type :: Lens.Lens' EdgeDeployment (Prelude.Maybe DeploymentType)
edgeDeployment_type :: Lens' EdgeDeployment (Maybe DeploymentType)
edgeDeployment_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EdgeDeployment' {Maybe DeploymentType
type' :: Maybe DeploymentType
$sel:type':EdgeDeployment' :: EdgeDeployment -> Maybe DeploymentType
type'} -> Maybe DeploymentType
type') (\s :: EdgeDeployment
s@EdgeDeployment' {} Maybe DeploymentType
a -> EdgeDeployment
s {$sel:type':EdgeDeployment' :: Maybe DeploymentType
type' = Maybe DeploymentType
a} :: EdgeDeployment)

instance Data.FromJSON EdgeDeployment where
  parseJSON :: Value -> Parser EdgeDeployment
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"EdgeDeployment"
      ( \Object
x ->
          Maybe [Definition]
-> Maybe Text
-> Maybe FailureHandlingPolicy
-> Maybe DeploymentType
-> EdgeDeployment
EdgeDeployment'
            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
"Definitions" 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
"DeploymentName")
            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
"FailureHandlingPolicy")
            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
"Type")
      )

instance Prelude.Hashable EdgeDeployment where
  hashWithSalt :: Int -> EdgeDeployment -> Int
hashWithSalt Int
_salt EdgeDeployment' {Maybe [Definition]
Maybe Text
Maybe DeploymentType
Maybe FailureHandlingPolicy
type' :: Maybe DeploymentType
failureHandlingPolicy :: Maybe FailureHandlingPolicy
deploymentName :: Maybe Text
definitions :: Maybe [Definition]
$sel:type':EdgeDeployment' :: EdgeDeployment -> Maybe DeploymentType
$sel:failureHandlingPolicy:EdgeDeployment' :: EdgeDeployment -> Maybe FailureHandlingPolicy
$sel:deploymentName:EdgeDeployment' :: EdgeDeployment -> Maybe Text
$sel:definitions:EdgeDeployment' :: EdgeDeployment -> Maybe [Definition]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Definition]
definitions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
deploymentName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FailureHandlingPolicy
failureHandlingPolicy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DeploymentType
type'

instance Prelude.NFData EdgeDeployment where
  rnf :: EdgeDeployment -> ()
rnf EdgeDeployment' {Maybe [Definition]
Maybe Text
Maybe DeploymentType
Maybe FailureHandlingPolicy
type' :: Maybe DeploymentType
failureHandlingPolicy :: Maybe FailureHandlingPolicy
deploymentName :: Maybe Text
definitions :: Maybe [Definition]
$sel:type':EdgeDeployment' :: EdgeDeployment -> Maybe DeploymentType
$sel:failureHandlingPolicy:EdgeDeployment' :: EdgeDeployment -> Maybe FailureHandlingPolicy
$sel:deploymentName:EdgeDeployment' :: EdgeDeployment -> Maybe Text
$sel:definitions:EdgeDeployment' :: EdgeDeployment -> Maybe [Definition]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Definition]
definitions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
deploymentName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FailureHandlingPolicy
failureHandlingPolicy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DeploymentType
type'