{-# 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.GamesParks.DeleteStage
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes a stage from a game, along with the associated game runtime.
module Amazonka.GamesParks.DeleteStage
  ( -- * Creating a Request
    DeleteStage (..),
    newDeleteStage,

    -- * Request Lenses
    deleteStage_gameName,
    deleteStage_stageName,

    -- * Destructuring the Response
    DeleteStageResponse (..),
    newDeleteStageResponse,

    -- * Response Lenses
    deleteStageResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.GamesParks.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDeleteStage' smart constructor.
data DeleteStage = DeleteStage'
  { -- | The name of the game.
    DeleteStage -> Text
gameName :: Prelude.Text,
    -- | The name of the stage to delete.
    DeleteStage -> Text
stageName :: Prelude.Text
  }
  deriving (DeleteStage -> DeleteStage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteStage -> DeleteStage -> Bool
$c/= :: DeleteStage -> DeleteStage -> Bool
== :: DeleteStage -> DeleteStage -> Bool
$c== :: DeleteStage -> DeleteStage -> Bool
Prelude.Eq, ReadPrec [DeleteStage]
ReadPrec DeleteStage
Int -> ReadS DeleteStage
ReadS [DeleteStage]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteStage]
$creadListPrec :: ReadPrec [DeleteStage]
readPrec :: ReadPrec DeleteStage
$creadPrec :: ReadPrec DeleteStage
readList :: ReadS [DeleteStage]
$creadList :: ReadS [DeleteStage]
readsPrec :: Int -> ReadS DeleteStage
$creadsPrec :: Int -> ReadS DeleteStage
Prelude.Read, Int -> DeleteStage -> ShowS
[DeleteStage] -> ShowS
DeleteStage -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteStage] -> ShowS
$cshowList :: [DeleteStage] -> ShowS
show :: DeleteStage -> String
$cshow :: DeleteStage -> String
showsPrec :: Int -> DeleteStage -> ShowS
$cshowsPrec :: Int -> DeleteStage -> ShowS
Prelude.Show, forall x. Rep DeleteStage x -> DeleteStage
forall x. DeleteStage -> Rep DeleteStage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteStage x -> DeleteStage
$cfrom :: forall x. DeleteStage -> Rep DeleteStage x
Prelude.Generic)

-- |
-- Create a value of 'DeleteStage' 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:
--
-- 'gameName', 'deleteStage_gameName' - The name of the game.
--
-- 'stageName', 'deleteStage_stageName' - The name of the stage to delete.
newDeleteStage ::
  -- | 'gameName'
  Prelude.Text ->
  -- | 'stageName'
  Prelude.Text ->
  DeleteStage
newDeleteStage :: Text -> Text -> DeleteStage
newDeleteStage Text
pGameName_ Text
pStageName_ =
  DeleteStage'
    { $sel:gameName:DeleteStage' :: Text
gameName = Text
pGameName_,
      $sel:stageName:DeleteStage' :: Text
stageName = Text
pStageName_
    }

-- | The name of the game.
deleteStage_gameName :: Lens.Lens' DeleteStage Prelude.Text
deleteStage_gameName :: Lens' DeleteStage Text
deleteStage_gameName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteStage' {Text
gameName :: Text
$sel:gameName:DeleteStage' :: DeleteStage -> Text
gameName} -> Text
gameName) (\s :: DeleteStage
s@DeleteStage' {} Text
a -> DeleteStage
s {$sel:gameName:DeleteStage' :: Text
gameName = Text
a} :: DeleteStage)

-- | The name of the stage to delete.
deleteStage_stageName :: Lens.Lens' DeleteStage Prelude.Text
deleteStage_stageName :: Lens' DeleteStage Text
deleteStage_stageName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteStage' {Text
stageName :: Text
$sel:stageName:DeleteStage' :: DeleteStage -> Text
stageName} -> Text
stageName) (\s :: DeleteStage
s@DeleteStage' {} Text
a -> DeleteStage
s {$sel:stageName:DeleteStage' :: Text
stageName = Text
a} :: DeleteStage)

instance Core.AWSRequest DeleteStage where
  type AWSResponse DeleteStage = DeleteStageResponse
  request :: (Service -> Service) -> DeleteStage -> Request DeleteStage
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.delete (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DeleteStage
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteStage)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> DeleteStageResponse
DeleteStageResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable DeleteStage where
  hashWithSalt :: Int -> DeleteStage -> Int
hashWithSalt Int
_salt DeleteStage' {Text
stageName :: Text
gameName :: Text
$sel:stageName:DeleteStage' :: DeleteStage -> Text
$sel:gameName:DeleteStage' :: DeleteStage -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
gameName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
stageName

instance Prelude.NFData DeleteStage where
  rnf :: DeleteStage -> ()
rnf DeleteStage' {Text
stageName :: Text
gameName :: Text
$sel:stageName:DeleteStage' :: DeleteStage -> Text
$sel:gameName:DeleteStage' :: DeleteStage -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
gameName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
stageName

instance Data.ToHeaders DeleteStage where
  toHeaders :: DeleteStage -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToPath DeleteStage where
  toPath :: DeleteStage -> ByteString
toPath DeleteStage' {Text
stageName :: Text
gameName :: Text
$sel:stageName:DeleteStage' :: DeleteStage -> Text
$sel:gameName:DeleteStage' :: DeleteStage -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/game/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
gameName,
        ByteString
"/stage/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
stageName
      ]

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

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

-- |
-- Create a value of 'DeleteStageResponse' 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:
--
-- 'httpStatus', 'deleteStageResponse_httpStatus' - The response's http status code.
newDeleteStageResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteStageResponse
newDeleteStageResponse :: Int -> DeleteStageResponse
newDeleteStageResponse Int
pHttpStatus_ =
  DeleteStageResponse' {$sel:httpStatus:DeleteStageResponse' :: Int
httpStatus = Int
pHttpStatus_}

-- | The response's http status code.
deleteStageResponse_httpStatus :: Lens.Lens' DeleteStageResponse Prelude.Int
deleteStageResponse_httpStatus :: Lens' DeleteStageResponse Int
deleteStageResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteStageResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteStageResponse' :: DeleteStageResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DeleteStageResponse
s@DeleteStageResponse' {} Int
a -> DeleteStageResponse
s {$sel:httpStatus:DeleteStageResponse' :: Int
httpStatus = Int
a} :: DeleteStageResponse)

instance Prelude.NFData DeleteStageResponse where
  rnf :: DeleteStageResponse -> ()
rnf DeleteStageResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteStageResponse' :: DeleteStageResponse -> Int
..} = forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus