{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SageMaker.CreateEdgeDeploymentStage
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a new stage in an existing edge deployment plan.
module Amazonka.SageMaker.CreateEdgeDeploymentStage
  ( -- * Creating a Request
    CreateEdgeDeploymentStage (..),
    newCreateEdgeDeploymentStage,

    -- * Request Lenses
    createEdgeDeploymentStage_edgeDeploymentPlanName,
    createEdgeDeploymentStage_stages,

    -- * Destructuring the Response
    CreateEdgeDeploymentStageResponse (..),
    newCreateEdgeDeploymentStageResponse,
  )
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.SageMaker.Types

-- | /See:/ 'newCreateEdgeDeploymentStage' smart constructor.
data CreateEdgeDeploymentStage = CreateEdgeDeploymentStage'
  { -- | The name of the edge deployment plan.
    CreateEdgeDeploymentStage -> Text
edgeDeploymentPlanName :: Prelude.Text,
    -- | List of stages to be added to the edge deployment plan.
    CreateEdgeDeploymentStage -> [DeploymentStage]
stages :: [DeploymentStage]
  }
  deriving (CreateEdgeDeploymentStage -> CreateEdgeDeploymentStage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateEdgeDeploymentStage -> CreateEdgeDeploymentStage -> Bool
$c/= :: CreateEdgeDeploymentStage -> CreateEdgeDeploymentStage -> Bool
== :: CreateEdgeDeploymentStage -> CreateEdgeDeploymentStage -> Bool
$c== :: CreateEdgeDeploymentStage -> CreateEdgeDeploymentStage -> Bool
Prelude.Eq, ReadPrec [CreateEdgeDeploymentStage]
ReadPrec CreateEdgeDeploymentStage
Int -> ReadS CreateEdgeDeploymentStage
ReadS [CreateEdgeDeploymentStage]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateEdgeDeploymentStage]
$creadListPrec :: ReadPrec [CreateEdgeDeploymentStage]
readPrec :: ReadPrec CreateEdgeDeploymentStage
$creadPrec :: ReadPrec CreateEdgeDeploymentStage
readList :: ReadS [CreateEdgeDeploymentStage]
$creadList :: ReadS [CreateEdgeDeploymentStage]
readsPrec :: Int -> ReadS CreateEdgeDeploymentStage
$creadsPrec :: Int -> ReadS CreateEdgeDeploymentStage
Prelude.Read, Int -> CreateEdgeDeploymentStage -> ShowS
[CreateEdgeDeploymentStage] -> ShowS
CreateEdgeDeploymentStage -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateEdgeDeploymentStage] -> ShowS
$cshowList :: [CreateEdgeDeploymentStage] -> ShowS
show :: CreateEdgeDeploymentStage -> String
$cshow :: CreateEdgeDeploymentStage -> String
showsPrec :: Int -> CreateEdgeDeploymentStage -> ShowS
$cshowsPrec :: Int -> CreateEdgeDeploymentStage -> ShowS
Prelude.Show, forall x.
Rep CreateEdgeDeploymentStage x -> CreateEdgeDeploymentStage
forall x.
CreateEdgeDeploymentStage -> Rep CreateEdgeDeploymentStage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateEdgeDeploymentStage x -> CreateEdgeDeploymentStage
$cfrom :: forall x.
CreateEdgeDeploymentStage -> Rep CreateEdgeDeploymentStage x
Prelude.Generic)

-- |
-- Create a value of 'CreateEdgeDeploymentStage' 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:
--
-- 'edgeDeploymentPlanName', 'createEdgeDeploymentStage_edgeDeploymentPlanName' - The name of the edge deployment plan.
--
-- 'stages', 'createEdgeDeploymentStage_stages' - List of stages to be added to the edge deployment plan.
newCreateEdgeDeploymentStage ::
  -- | 'edgeDeploymentPlanName'
  Prelude.Text ->
  CreateEdgeDeploymentStage
newCreateEdgeDeploymentStage :: Text -> CreateEdgeDeploymentStage
newCreateEdgeDeploymentStage Text
pEdgeDeploymentPlanName_ =
  CreateEdgeDeploymentStage'
    { $sel:edgeDeploymentPlanName:CreateEdgeDeploymentStage' :: Text
edgeDeploymentPlanName =
        Text
pEdgeDeploymentPlanName_,
      $sel:stages:CreateEdgeDeploymentStage' :: [DeploymentStage]
stages = forall a. Monoid a => a
Prelude.mempty
    }

-- | The name of the edge deployment plan.
createEdgeDeploymentStage_edgeDeploymentPlanName :: Lens.Lens' CreateEdgeDeploymentStage Prelude.Text
createEdgeDeploymentStage_edgeDeploymentPlanName :: Lens' CreateEdgeDeploymentStage Text
createEdgeDeploymentStage_edgeDeploymentPlanName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateEdgeDeploymentStage' {Text
edgeDeploymentPlanName :: Text
$sel:edgeDeploymentPlanName:CreateEdgeDeploymentStage' :: CreateEdgeDeploymentStage -> Text
edgeDeploymentPlanName} -> Text
edgeDeploymentPlanName) (\s :: CreateEdgeDeploymentStage
s@CreateEdgeDeploymentStage' {} Text
a -> CreateEdgeDeploymentStage
s {$sel:edgeDeploymentPlanName:CreateEdgeDeploymentStage' :: Text
edgeDeploymentPlanName = Text
a} :: CreateEdgeDeploymentStage)

-- | List of stages to be added to the edge deployment plan.
createEdgeDeploymentStage_stages :: Lens.Lens' CreateEdgeDeploymentStage [DeploymentStage]
createEdgeDeploymentStage_stages :: Lens' CreateEdgeDeploymentStage [DeploymentStage]
createEdgeDeploymentStage_stages = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateEdgeDeploymentStage' {[DeploymentStage]
stages :: [DeploymentStage]
$sel:stages:CreateEdgeDeploymentStage' :: CreateEdgeDeploymentStage -> [DeploymentStage]
stages} -> [DeploymentStage]
stages) (\s :: CreateEdgeDeploymentStage
s@CreateEdgeDeploymentStage' {} [DeploymentStage]
a -> CreateEdgeDeploymentStage
s {$sel:stages:CreateEdgeDeploymentStage' :: [DeploymentStage]
stages = [DeploymentStage]
a} :: CreateEdgeDeploymentStage) 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

instance Core.AWSRequest CreateEdgeDeploymentStage where
  type
    AWSResponse CreateEdgeDeploymentStage =
      CreateEdgeDeploymentStageResponse
  request :: (Service -> Service)
-> CreateEdgeDeploymentStage -> Request CreateEdgeDeploymentStage
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateEdgeDeploymentStage
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateEdgeDeploymentStage)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      CreateEdgeDeploymentStageResponse
CreateEdgeDeploymentStageResponse'

instance Prelude.Hashable CreateEdgeDeploymentStage where
  hashWithSalt :: Int -> CreateEdgeDeploymentStage -> Int
hashWithSalt Int
_salt CreateEdgeDeploymentStage' {[DeploymentStage]
Text
stages :: [DeploymentStage]
edgeDeploymentPlanName :: Text
$sel:stages:CreateEdgeDeploymentStage' :: CreateEdgeDeploymentStage -> [DeploymentStage]
$sel:edgeDeploymentPlanName:CreateEdgeDeploymentStage' :: CreateEdgeDeploymentStage -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
edgeDeploymentPlanName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [DeploymentStage]
stages

instance Prelude.NFData CreateEdgeDeploymentStage where
  rnf :: CreateEdgeDeploymentStage -> ()
rnf CreateEdgeDeploymentStage' {[DeploymentStage]
Text
stages :: [DeploymentStage]
edgeDeploymentPlanName :: Text
$sel:stages:CreateEdgeDeploymentStage' :: CreateEdgeDeploymentStage -> [DeploymentStage]
$sel:edgeDeploymentPlanName:CreateEdgeDeploymentStage' :: CreateEdgeDeploymentStage -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
edgeDeploymentPlanName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [DeploymentStage]
stages

instance Data.ToHeaders CreateEdgeDeploymentStage where
  toHeaders :: CreateEdgeDeploymentStage -> [Header]
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"SageMaker.CreateEdgeDeploymentStage" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateEdgeDeploymentStage where
  toJSON :: CreateEdgeDeploymentStage -> Value
toJSON CreateEdgeDeploymentStage' {[DeploymentStage]
Text
stages :: [DeploymentStage]
edgeDeploymentPlanName :: Text
$sel:stages:CreateEdgeDeploymentStage' :: CreateEdgeDeploymentStage -> [DeploymentStage]
$sel:edgeDeploymentPlanName:CreateEdgeDeploymentStage' :: CreateEdgeDeploymentStage -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              ( Key
"EdgeDeploymentPlanName"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
edgeDeploymentPlanName
              ),
            forall a. a -> Maybe a
Prelude.Just (Key
"Stages" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [DeploymentStage]
stages)
          ]
      )

instance Data.ToPath CreateEdgeDeploymentStage where
  toPath :: CreateEdgeDeploymentStage -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery CreateEdgeDeploymentStage where
  toQuery :: CreateEdgeDeploymentStage -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newCreateEdgeDeploymentStageResponse' smart constructor.
data CreateEdgeDeploymentStageResponse = CreateEdgeDeploymentStageResponse'
  {
  }
  deriving (CreateEdgeDeploymentStageResponse
-> CreateEdgeDeploymentStageResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateEdgeDeploymentStageResponse
-> CreateEdgeDeploymentStageResponse -> Bool
$c/= :: CreateEdgeDeploymentStageResponse
-> CreateEdgeDeploymentStageResponse -> Bool
== :: CreateEdgeDeploymentStageResponse
-> CreateEdgeDeploymentStageResponse -> Bool
$c== :: CreateEdgeDeploymentStageResponse
-> CreateEdgeDeploymentStageResponse -> Bool
Prelude.Eq, ReadPrec [CreateEdgeDeploymentStageResponse]
ReadPrec CreateEdgeDeploymentStageResponse
Int -> ReadS CreateEdgeDeploymentStageResponse
ReadS [CreateEdgeDeploymentStageResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateEdgeDeploymentStageResponse]
$creadListPrec :: ReadPrec [CreateEdgeDeploymentStageResponse]
readPrec :: ReadPrec CreateEdgeDeploymentStageResponse
$creadPrec :: ReadPrec CreateEdgeDeploymentStageResponse
readList :: ReadS [CreateEdgeDeploymentStageResponse]
$creadList :: ReadS [CreateEdgeDeploymentStageResponse]
readsPrec :: Int -> ReadS CreateEdgeDeploymentStageResponse
$creadsPrec :: Int -> ReadS CreateEdgeDeploymentStageResponse
Prelude.Read, Int -> CreateEdgeDeploymentStageResponse -> ShowS
[CreateEdgeDeploymentStageResponse] -> ShowS
CreateEdgeDeploymentStageResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateEdgeDeploymentStageResponse] -> ShowS
$cshowList :: [CreateEdgeDeploymentStageResponse] -> ShowS
show :: CreateEdgeDeploymentStageResponse -> String
$cshow :: CreateEdgeDeploymentStageResponse -> String
showsPrec :: Int -> CreateEdgeDeploymentStageResponse -> ShowS
$cshowsPrec :: Int -> CreateEdgeDeploymentStageResponse -> ShowS
Prelude.Show, forall x.
Rep CreateEdgeDeploymentStageResponse x
-> CreateEdgeDeploymentStageResponse
forall x.
CreateEdgeDeploymentStageResponse
-> Rep CreateEdgeDeploymentStageResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateEdgeDeploymentStageResponse x
-> CreateEdgeDeploymentStageResponse
$cfrom :: forall x.
CreateEdgeDeploymentStageResponse
-> Rep CreateEdgeDeploymentStageResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateEdgeDeploymentStageResponse' 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.
newCreateEdgeDeploymentStageResponse ::
  CreateEdgeDeploymentStageResponse
newCreateEdgeDeploymentStageResponse :: CreateEdgeDeploymentStageResponse
newCreateEdgeDeploymentStageResponse =
  CreateEdgeDeploymentStageResponse
CreateEdgeDeploymentStageResponse'

instance
  Prelude.NFData
    CreateEdgeDeploymentStageResponse
  where
  rnf :: CreateEdgeDeploymentStageResponse -> ()
rnf CreateEdgeDeploymentStageResponse
_ = ()