{-# 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.DisconnectPlayer
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Disconnects a player from the game runtime.
--
-- If a player has multiple connections, this operation attempts to close
-- all of them.
module Amazonka.GamesParks.DisconnectPlayer
  ( -- * Creating a Request
    DisconnectPlayer (..),
    newDisconnectPlayer,

    -- * Request Lenses
    disconnectPlayer_gameName,
    disconnectPlayer_playerId,
    disconnectPlayer_stageName,

    -- * Destructuring the Response
    DisconnectPlayerResponse (..),
    newDisconnectPlayerResponse,

    -- * Response Lenses
    disconnectPlayerResponse_disconnectFailures,
    disconnectPlayerResponse_disconnectSuccesses,
    disconnectPlayerResponse_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:/ 'newDisconnectPlayer' smart constructor.
data DisconnectPlayer = DisconnectPlayer'
  { -- | The name of the game.
    DisconnectPlayer -> Text
gameName :: Prelude.Text,
    -- | The unique identifier representing a player.
    DisconnectPlayer -> Text
playerId :: Prelude.Text,
    -- | The name of the stage.
    DisconnectPlayer -> Text
stageName :: Prelude.Text
  }
  deriving (DisconnectPlayer -> DisconnectPlayer -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisconnectPlayer -> DisconnectPlayer -> Bool
$c/= :: DisconnectPlayer -> DisconnectPlayer -> Bool
== :: DisconnectPlayer -> DisconnectPlayer -> Bool
$c== :: DisconnectPlayer -> DisconnectPlayer -> Bool
Prelude.Eq, ReadPrec [DisconnectPlayer]
ReadPrec DisconnectPlayer
Int -> ReadS DisconnectPlayer
ReadS [DisconnectPlayer]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DisconnectPlayer]
$creadListPrec :: ReadPrec [DisconnectPlayer]
readPrec :: ReadPrec DisconnectPlayer
$creadPrec :: ReadPrec DisconnectPlayer
readList :: ReadS [DisconnectPlayer]
$creadList :: ReadS [DisconnectPlayer]
readsPrec :: Int -> ReadS DisconnectPlayer
$creadsPrec :: Int -> ReadS DisconnectPlayer
Prelude.Read, Int -> DisconnectPlayer -> ShowS
[DisconnectPlayer] -> ShowS
DisconnectPlayer -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DisconnectPlayer] -> ShowS
$cshowList :: [DisconnectPlayer] -> ShowS
show :: DisconnectPlayer -> String
$cshow :: DisconnectPlayer -> String
showsPrec :: Int -> DisconnectPlayer -> ShowS
$cshowsPrec :: Int -> DisconnectPlayer -> ShowS
Prelude.Show, forall x. Rep DisconnectPlayer x -> DisconnectPlayer
forall x. DisconnectPlayer -> Rep DisconnectPlayer x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DisconnectPlayer x -> DisconnectPlayer
$cfrom :: forall x. DisconnectPlayer -> Rep DisconnectPlayer x
Prelude.Generic)

-- |
-- Create a value of 'DisconnectPlayer' 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', 'disconnectPlayer_gameName' - The name of the game.
--
-- 'playerId', 'disconnectPlayer_playerId' - The unique identifier representing a player.
--
-- 'stageName', 'disconnectPlayer_stageName' - The name of the stage.
newDisconnectPlayer ::
  -- | 'gameName'
  Prelude.Text ->
  -- | 'playerId'
  Prelude.Text ->
  -- | 'stageName'
  Prelude.Text ->
  DisconnectPlayer
newDisconnectPlayer :: Text -> Text -> Text -> DisconnectPlayer
newDisconnectPlayer Text
pGameName_ Text
pPlayerId_ Text
pStageName_ =
  DisconnectPlayer'
    { $sel:gameName:DisconnectPlayer' :: Text
gameName = Text
pGameName_,
      $sel:playerId:DisconnectPlayer' :: Text
playerId = Text
pPlayerId_,
      $sel:stageName:DisconnectPlayer' :: Text
stageName = Text
pStageName_
    }

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

-- | The unique identifier representing a player.
disconnectPlayer_playerId :: Lens.Lens' DisconnectPlayer Prelude.Text
disconnectPlayer_playerId :: Lens' DisconnectPlayer Text
disconnectPlayer_playerId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisconnectPlayer' {Text
playerId :: Text
$sel:playerId:DisconnectPlayer' :: DisconnectPlayer -> Text
playerId} -> Text
playerId) (\s :: DisconnectPlayer
s@DisconnectPlayer' {} Text
a -> DisconnectPlayer
s {$sel:playerId:DisconnectPlayer' :: Text
playerId = Text
a} :: DisconnectPlayer)

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

instance Core.AWSRequest DisconnectPlayer where
  type
    AWSResponse DisconnectPlayer =
      DisconnectPlayerResponse
  request :: (Service -> Service)
-> DisconnectPlayer -> Request DisconnectPlayer
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 DisconnectPlayer
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DisconnectPlayer)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe [Text] -> Maybe [Text] -> Int -> DisconnectPlayerResponse
DisconnectPlayerResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"DisconnectFailures"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ 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 -> Either String (Maybe a)
Data..?> Key
"DisconnectSuccesses"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => 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 DisconnectPlayer where
  hashWithSalt :: Int -> DisconnectPlayer -> Int
hashWithSalt Int
_salt DisconnectPlayer' {Text
stageName :: Text
playerId :: Text
gameName :: Text
$sel:stageName:DisconnectPlayer' :: DisconnectPlayer -> Text
$sel:playerId:DisconnectPlayer' :: DisconnectPlayer -> Text
$sel:gameName:DisconnectPlayer' :: DisconnectPlayer -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
gameName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
playerId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
stageName

instance Prelude.NFData DisconnectPlayer where
  rnf :: DisconnectPlayer -> ()
rnf DisconnectPlayer' {Text
stageName :: Text
playerId :: Text
gameName :: Text
$sel:stageName:DisconnectPlayer' :: DisconnectPlayer -> Text
$sel:playerId:DisconnectPlayer' :: DisconnectPlayer -> Text
$sel:gameName:DisconnectPlayer' :: DisconnectPlayer -> 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
playerId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
stageName

instance Data.ToHeaders DisconnectPlayer where
  toHeaders :: DisconnectPlayer -> 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.ToJSON DisconnectPlayer where
  toJSON :: DisconnectPlayer -> Value
toJSON = forall a b. a -> b -> a
Prelude.const (Object -> Value
Data.Object forall a. Monoid a => a
Prelude.mempty)

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

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

-- | /See:/ 'newDisconnectPlayerResponse' smart constructor.
data DisconnectPlayerResponse = DisconnectPlayerResponse'
  { -- | The list of the connection ids that could not be disconnected.
    DisconnectPlayerResponse -> Maybe [Text]
disconnectFailures :: Prelude.Maybe [Prelude.Text],
    -- | The list of the connection ids that were disconnected.
    DisconnectPlayerResponse -> Maybe [Text]
disconnectSuccesses :: Prelude.Maybe [Prelude.Text],
    -- | The response's http status code.
    DisconnectPlayerResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DisconnectPlayerResponse -> DisconnectPlayerResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisconnectPlayerResponse -> DisconnectPlayerResponse -> Bool
$c/= :: DisconnectPlayerResponse -> DisconnectPlayerResponse -> Bool
== :: DisconnectPlayerResponse -> DisconnectPlayerResponse -> Bool
$c== :: DisconnectPlayerResponse -> DisconnectPlayerResponse -> Bool
Prelude.Eq, ReadPrec [DisconnectPlayerResponse]
ReadPrec DisconnectPlayerResponse
Int -> ReadS DisconnectPlayerResponse
ReadS [DisconnectPlayerResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DisconnectPlayerResponse]
$creadListPrec :: ReadPrec [DisconnectPlayerResponse]
readPrec :: ReadPrec DisconnectPlayerResponse
$creadPrec :: ReadPrec DisconnectPlayerResponse
readList :: ReadS [DisconnectPlayerResponse]
$creadList :: ReadS [DisconnectPlayerResponse]
readsPrec :: Int -> ReadS DisconnectPlayerResponse
$creadsPrec :: Int -> ReadS DisconnectPlayerResponse
Prelude.Read, Int -> DisconnectPlayerResponse -> ShowS
[DisconnectPlayerResponse] -> ShowS
DisconnectPlayerResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DisconnectPlayerResponse] -> ShowS
$cshowList :: [DisconnectPlayerResponse] -> ShowS
show :: DisconnectPlayerResponse -> String
$cshow :: DisconnectPlayerResponse -> String
showsPrec :: Int -> DisconnectPlayerResponse -> ShowS
$cshowsPrec :: Int -> DisconnectPlayerResponse -> ShowS
Prelude.Show, forall x.
Rep DisconnectPlayerResponse x -> DisconnectPlayerResponse
forall x.
DisconnectPlayerResponse -> Rep DisconnectPlayerResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DisconnectPlayerResponse x -> DisconnectPlayerResponse
$cfrom :: forall x.
DisconnectPlayerResponse -> Rep DisconnectPlayerResponse x
Prelude.Generic)

-- |
-- Create a value of 'DisconnectPlayerResponse' 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:
--
-- 'disconnectFailures', 'disconnectPlayerResponse_disconnectFailures' - The list of the connection ids that could not be disconnected.
--
-- 'disconnectSuccesses', 'disconnectPlayerResponse_disconnectSuccesses' - The list of the connection ids that were disconnected.
--
-- 'httpStatus', 'disconnectPlayerResponse_httpStatus' - The response's http status code.
newDisconnectPlayerResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DisconnectPlayerResponse
newDisconnectPlayerResponse :: Int -> DisconnectPlayerResponse
newDisconnectPlayerResponse Int
pHttpStatus_ =
  DisconnectPlayerResponse'
    { $sel:disconnectFailures:DisconnectPlayerResponse' :: Maybe [Text]
disconnectFailures =
        forall a. Maybe a
Prelude.Nothing,
      $sel:disconnectSuccesses:DisconnectPlayerResponse' :: Maybe [Text]
disconnectSuccesses = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DisconnectPlayerResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The list of the connection ids that could not be disconnected.
disconnectPlayerResponse_disconnectFailures :: Lens.Lens' DisconnectPlayerResponse (Prelude.Maybe [Prelude.Text])
disconnectPlayerResponse_disconnectFailures :: Lens' DisconnectPlayerResponse (Maybe [Text])
disconnectPlayerResponse_disconnectFailures = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisconnectPlayerResponse' {Maybe [Text]
disconnectFailures :: Maybe [Text]
$sel:disconnectFailures:DisconnectPlayerResponse' :: DisconnectPlayerResponse -> Maybe [Text]
disconnectFailures} -> Maybe [Text]
disconnectFailures) (\s :: DisconnectPlayerResponse
s@DisconnectPlayerResponse' {} Maybe [Text]
a -> DisconnectPlayerResponse
s {$sel:disconnectFailures:DisconnectPlayerResponse' :: Maybe [Text]
disconnectFailures = Maybe [Text]
a} :: DisconnectPlayerResponse) 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 list of the connection ids that were disconnected.
disconnectPlayerResponse_disconnectSuccesses :: Lens.Lens' DisconnectPlayerResponse (Prelude.Maybe [Prelude.Text])
disconnectPlayerResponse_disconnectSuccesses :: Lens' DisconnectPlayerResponse (Maybe [Text])
disconnectPlayerResponse_disconnectSuccesses = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisconnectPlayerResponse' {Maybe [Text]
disconnectSuccesses :: Maybe [Text]
$sel:disconnectSuccesses:DisconnectPlayerResponse' :: DisconnectPlayerResponse -> Maybe [Text]
disconnectSuccesses} -> Maybe [Text]
disconnectSuccesses) (\s :: DisconnectPlayerResponse
s@DisconnectPlayerResponse' {} Maybe [Text]
a -> DisconnectPlayerResponse
s {$sel:disconnectSuccesses:DisconnectPlayerResponse' :: Maybe [Text]
disconnectSuccesses = Maybe [Text]
a} :: DisconnectPlayerResponse) 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 response's http status code.
disconnectPlayerResponse_httpStatus :: Lens.Lens' DisconnectPlayerResponse Prelude.Int
disconnectPlayerResponse_httpStatus :: Lens' DisconnectPlayerResponse Int
disconnectPlayerResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisconnectPlayerResponse' {Int
httpStatus :: Int
$sel:httpStatus:DisconnectPlayerResponse' :: DisconnectPlayerResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DisconnectPlayerResponse
s@DisconnectPlayerResponse' {} Int
a -> DisconnectPlayerResponse
s {$sel:httpStatus:DisconnectPlayerResponse' :: Int
httpStatus = Int
a} :: DisconnectPlayerResponse)

instance Prelude.NFData DisconnectPlayerResponse where
  rnf :: DisconnectPlayerResponse -> ()
rnf DisconnectPlayerResponse' {Int
Maybe [Text]
httpStatus :: Int
disconnectSuccesses :: Maybe [Text]
disconnectFailures :: Maybe [Text]
$sel:httpStatus:DisconnectPlayerResponse' :: DisconnectPlayerResponse -> Int
$sel:disconnectSuccesses:DisconnectPlayerResponse' :: DisconnectPlayerResponse -> Maybe [Text]
$sel:disconnectFailures:DisconnectPlayerResponse' :: DisconnectPlayerResponse -> Maybe [Text]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
disconnectFailures
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
disconnectSuccesses
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus