{-# 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.GameLift.DescribePlayerSessions
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves properties for one or more player sessions.
--
-- This action can be used in the following ways:
--
-- -   To retrieve a specific player session, provide the player session ID
--     only.
--
-- -   To retrieve all player sessions in a game session, provide the game
--     session ID only.
--
-- -   To retrieve all player sessions for a specific player, provide a
--     player ID only.
--
-- To request player sessions, specify either a player session ID, game
-- session ID, or player ID. You can filter this request by player session
-- status. Use the pagination parameters to retrieve results as a set of
-- sequential pages.
--
-- If successful, a @PlayerSession@ object is returned for each session
-- that matches the request.
--
-- __Related actions__
--
-- <https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets All APIs by task>
--
-- This operation returns paginated results.
module Amazonka.GameLift.DescribePlayerSessions
  ( -- * Creating a Request
    DescribePlayerSessions (..),
    newDescribePlayerSessions,

    -- * Request Lenses
    describePlayerSessions_gameSessionId,
    describePlayerSessions_limit,
    describePlayerSessions_nextToken,
    describePlayerSessions_playerId,
    describePlayerSessions_playerSessionId,
    describePlayerSessions_playerSessionStatusFilter,

    -- * Destructuring the Response
    DescribePlayerSessionsResponse (..),
    newDescribePlayerSessionsResponse,

    -- * Response Lenses
    describePlayerSessionsResponse_nextToken,
    describePlayerSessionsResponse_playerSessions,
    describePlayerSessionsResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribePlayerSessions' smart constructor.
data DescribePlayerSessions = DescribePlayerSessions'
  { -- | A unique identifier for the game session to retrieve player sessions
    -- for.
    DescribePlayerSessions -> Maybe Text
gameSessionId :: Prelude.Maybe Prelude.Text,
    -- | The maximum number of results to return. Use this parameter with
    -- @NextToken@ to get results as a set of sequential pages. If a player
    -- session ID is specified, this parameter is ignored.
    DescribePlayerSessions -> Maybe Natural
limit :: Prelude.Maybe Prelude.Natural,
    -- | A token that indicates the start of the next sequential page of results.
    -- Use the token that is returned with a previous call to this operation.
    -- To start at the beginning of the result set, do not specify a value. If
    -- a player session ID is specified, this parameter is ignored.
    DescribePlayerSessions -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | A unique identifier for a player to retrieve player sessions for.
    DescribePlayerSessions -> Maybe Text
playerId :: Prelude.Maybe Prelude.Text,
    -- | A unique identifier for a player session to retrieve.
    DescribePlayerSessions -> Maybe Text
playerSessionId :: Prelude.Maybe Prelude.Text,
    -- | Player session status to filter results on. Note that when a
    -- PlayerSessionId or PlayerId is provided in a DescribePlayerSessions
    -- request, then the PlayerSessionStatusFilter has no effect on the
    -- response.
    --
    -- Possible player session statuses include the following:
    --
    -- -   __RESERVED__ -- The player session request has been received, but
    --     the player has not yet connected to the server process and\/or been
    --     validated.
    --
    -- -   __ACTIVE__ -- The player has been validated by the server process
    --     and is currently connected.
    --
    -- -   __COMPLETED__ -- The player connection has been dropped.
    --
    -- -   __TIMEDOUT__ -- A player session request was received, but the
    --     player did not connect and\/or was not validated within the timeout
    --     limit (60 seconds).
    DescribePlayerSessions -> Maybe Text
playerSessionStatusFilter :: Prelude.Maybe Prelude.Text
  }
  deriving (DescribePlayerSessions -> DescribePlayerSessions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribePlayerSessions -> DescribePlayerSessions -> Bool
$c/= :: DescribePlayerSessions -> DescribePlayerSessions -> Bool
== :: DescribePlayerSessions -> DescribePlayerSessions -> Bool
$c== :: DescribePlayerSessions -> DescribePlayerSessions -> Bool
Prelude.Eq, ReadPrec [DescribePlayerSessions]
ReadPrec DescribePlayerSessions
Int -> ReadS DescribePlayerSessions
ReadS [DescribePlayerSessions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribePlayerSessions]
$creadListPrec :: ReadPrec [DescribePlayerSessions]
readPrec :: ReadPrec DescribePlayerSessions
$creadPrec :: ReadPrec DescribePlayerSessions
readList :: ReadS [DescribePlayerSessions]
$creadList :: ReadS [DescribePlayerSessions]
readsPrec :: Int -> ReadS DescribePlayerSessions
$creadsPrec :: Int -> ReadS DescribePlayerSessions
Prelude.Read, Int -> DescribePlayerSessions -> ShowS
[DescribePlayerSessions] -> ShowS
DescribePlayerSessions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribePlayerSessions] -> ShowS
$cshowList :: [DescribePlayerSessions] -> ShowS
show :: DescribePlayerSessions -> String
$cshow :: DescribePlayerSessions -> String
showsPrec :: Int -> DescribePlayerSessions -> ShowS
$cshowsPrec :: Int -> DescribePlayerSessions -> ShowS
Prelude.Show, forall x. Rep DescribePlayerSessions x -> DescribePlayerSessions
forall x. DescribePlayerSessions -> Rep DescribePlayerSessions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribePlayerSessions x -> DescribePlayerSessions
$cfrom :: forall x. DescribePlayerSessions -> Rep DescribePlayerSessions x
Prelude.Generic)

-- |
-- Create a value of 'DescribePlayerSessions' 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:
--
-- 'gameSessionId', 'describePlayerSessions_gameSessionId' - A unique identifier for the game session to retrieve player sessions
-- for.
--
-- 'limit', 'describePlayerSessions_limit' - The maximum number of results to return. Use this parameter with
-- @NextToken@ to get results as a set of sequential pages. If a player
-- session ID is specified, this parameter is ignored.
--
-- 'nextToken', 'describePlayerSessions_nextToken' - A token that indicates the start of the next sequential page of results.
-- Use the token that is returned with a previous call to this operation.
-- To start at the beginning of the result set, do not specify a value. If
-- a player session ID is specified, this parameter is ignored.
--
-- 'playerId', 'describePlayerSessions_playerId' - A unique identifier for a player to retrieve player sessions for.
--
-- 'playerSessionId', 'describePlayerSessions_playerSessionId' - A unique identifier for a player session to retrieve.
--
-- 'playerSessionStatusFilter', 'describePlayerSessions_playerSessionStatusFilter' - Player session status to filter results on. Note that when a
-- PlayerSessionId or PlayerId is provided in a DescribePlayerSessions
-- request, then the PlayerSessionStatusFilter has no effect on the
-- response.
--
-- Possible player session statuses include the following:
--
-- -   __RESERVED__ -- The player session request has been received, but
--     the player has not yet connected to the server process and\/or been
--     validated.
--
-- -   __ACTIVE__ -- The player has been validated by the server process
--     and is currently connected.
--
-- -   __COMPLETED__ -- The player connection has been dropped.
--
-- -   __TIMEDOUT__ -- A player session request was received, but the
--     player did not connect and\/or was not validated within the timeout
--     limit (60 seconds).
newDescribePlayerSessions ::
  DescribePlayerSessions
newDescribePlayerSessions :: DescribePlayerSessions
newDescribePlayerSessions =
  DescribePlayerSessions'
    { $sel:gameSessionId:DescribePlayerSessions' :: Maybe Text
gameSessionId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:limit:DescribePlayerSessions' :: Maybe Natural
limit = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:DescribePlayerSessions' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:playerId:DescribePlayerSessions' :: Maybe Text
playerId = forall a. Maybe a
Prelude.Nothing,
      $sel:playerSessionId:DescribePlayerSessions' :: Maybe Text
playerSessionId = forall a. Maybe a
Prelude.Nothing,
      $sel:playerSessionStatusFilter:DescribePlayerSessions' :: Maybe Text
playerSessionStatusFilter = forall a. Maybe a
Prelude.Nothing
    }

-- | A unique identifier for the game session to retrieve player sessions
-- for.
describePlayerSessions_gameSessionId :: Lens.Lens' DescribePlayerSessions (Prelude.Maybe Prelude.Text)
describePlayerSessions_gameSessionId :: Lens' DescribePlayerSessions (Maybe Text)
describePlayerSessions_gameSessionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessions' {Maybe Text
gameSessionId :: Maybe Text
$sel:gameSessionId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
gameSessionId} -> Maybe Text
gameSessionId) (\s :: DescribePlayerSessions
s@DescribePlayerSessions' {} Maybe Text
a -> DescribePlayerSessions
s {$sel:gameSessionId:DescribePlayerSessions' :: Maybe Text
gameSessionId = Maybe Text
a} :: DescribePlayerSessions)

-- | The maximum number of results to return. Use this parameter with
-- @NextToken@ to get results as a set of sequential pages. If a player
-- session ID is specified, this parameter is ignored.
describePlayerSessions_limit :: Lens.Lens' DescribePlayerSessions (Prelude.Maybe Prelude.Natural)
describePlayerSessions_limit :: Lens' DescribePlayerSessions (Maybe Natural)
describePlayerSessions_limit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessions' {Maybe Natural
limit :: Maybe Natural
$sel:limit:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Natural
limit} -> Maybe Natural
limit) (\s :: DescribePlayerSessions
s@DescribePlayerSessions' {} Maybe Natural
a -> DescribePlayerSessions
s {$sel:limit:DescribePlayerSessions' :: Maybe Natural
limit = Maybe Natural
a} :: DescribePlayerSessions)

-- | A token that indicates the start of the next sequential page of results.
-- Use the token that is returned with a previous call to this operation.
-- To start at the beginning of the result set, do not specify a value. If
-- a player session ID is specified, this parameter is ignored.
describePlayerSessions_nextToken :: Lens.Lens' DescribePlayerSessions (Prelude.Maybe Prelude.Text)
describePlayerSessions_nextToken :: Lens' DescribePlayerSessions (Maybe Text)
describePlayerSessions_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessions' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribePlayerSessions
s@DescribePlayerSessions' {} Maybe Text
a -> DescribePlayerSessions
s {$sel:nextToken:DescribePlayerSessions' :: Maybe Text
nextToken = Maybe Text
a} :: DescribePlayerSessions)

-- | A unique identifier for a player to retrieve player sessions for.
describePlayerSessions_playerId :: Lens.Lens' DescribePlayerSessions (Prelude.Maybe Prelude.Text)
describePlayerSessions_playerId :: Lens' DescribePlayerSessions (Maybe Text)
describePlayerSessions_playerId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessions' {Maybe Text
playerId :: Maybe Text
$sel:playerId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
playerId} -> Maybe Text
playerId) (\s :: DescribePlayerSessions
s@DescribePlayerSessions' {} Maybe Text
a -> DescribePlayerSessions
s {$sel:playerId:DescribePlayerSessions' :: Maybe Text
playerId = Maybe Text
a} :: DescribePlayerSessions)

-- | A unique identifier for a player session to retrieve.
describePlayerSessions_playerSessionId :: Lens.Lens' DescribePlayerSessions (Prelude.Maybe Prelude.Text)
describePlayerSessions_playerSessionId :: Lens' DescribePlayerSessions (Maybe Text)
describePlayerSessions_playerSessionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessions' {Maybe Text
playerSessionId :: Maybe Text
$sel:playerSessionId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
playerSessionId} -> Maybe Text
playerSessionId) (\s :: DescribePlayerSessions
s@DescribePlayerSessions' {} Maybe Text
a -> DescribePlayerSessions
s {$sel:playerSessionId:DescribePlayerSessions' :: Maybe Text
playerSessionId = Maybe Text
a} :: DescribePlayerSessions)

-- | Player session status to filter results on. Note that when a
-- PlayerSessionId or PlayerId is provided in a DescribePlayerSessions
-- request, then the PlayerSessionStatusFilter has no effect on the
-- response.
--
-- Possible player session statuses include the following:
--
-- -   __RESERVED__ -- The player session request has been received, but
--     the player has not yet connected to the server process and\/or been
--     validated.
--
-- -   __ACTIVE__ -- The player has been validated by the server process
--     and is currently connected.
--
-- -   __COMPLETED__ -- The player connection has been dropped.
--
-- -   __TIMEDOUT__ -- A player session request was received, but the
--     player did not connect and\/or was not validated within the timeout
--     limit (60 seconds).
describePlayerSessions_playerSessionStatusFilter :: Lens.Lens' DescribePlayerSessions (Prelude.Maybe Prelude.Text)
describePlayerSessions_playerSessionStatusFilter :: Lens' DescribePlayerSessions (Maybe Text)
describePlayerSessions_playerSessionStatusFilter = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessions' {Maybe Text
playerSessionStatusFilter :: Maybe Text
$sel:playerSessionStatusFilter:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
playerSessionStatusFilter} -> Maybe Text
playerSessionStatusFilter) (\s :: DescribePlayerSessions
s@DescribePlayerSessions' {} Maybe Text
a -> DescribePlayerSessions
s {$sel:playerSessionStatusFilter:DescribePlayerSessions' :: Maybe Text
playerSessionStatusFilter = Maybe Text
a} :: DescribePlayerSessions)

instance Core.AWSPager DescribePlayerSessions where
  page :: DescribePlayerSessions
-> AWSResponse DescribePlayerSessions
-> Maybe DescribePlayerSessions
page DescribePlayerSessions
rq AWSResponse DescribePlayerSessions
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribePlayerSessions
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribePlayerSessionsResponse (Maybe Text)
describePlayerSessionsResponse_nextToken
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribePlayerSessions
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribePlayerSessionsResponse (Maybe [PlayerSession])
describePlayerSessionsResponse_playerSessions
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
        forall a. a -> Maybe a
Prelude.Just
          forall a b. (a -> b) -> a -> b
Prelude.$ DescribePlayerSessions
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' DescribePlayerSessions (Maybe Text)
describePlayerSessions_nextToken
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse DescribePlayerSessions
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribePlayerSessionsResponse (Maybe Text)
describePlayerSessionsResponse_nextToken
          forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance Core.AWSRequest DescribePlayerSessions where
  type
    AWSResponse DescribePlayerSessions =
      DescribePlayerSessionsResponse
  request :: (Service -> Service)
-> DescribePlayerSessions -> Request DescribePlayerSessions
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 DescribePlayerSessions
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribePlayerSessions)))
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 [PlayerSession] -> Int -> DescribePlayerSessionsResponse
DescribePlayerSessionsResponse'
            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
"NextToken")
            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
"PlayerSessions" 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 DescribePlayerSessions where
  hashWithSalt :: Int -> DescribePlayerSessions -> Int
hashWithSalt Int
_salt DescribePlayerSessions' {Maybe Natural
Maybe Text
playerSessionStatusFilter :: Maybe Text
playerSessionId :: Maybe Text
playerId :: Maybe Text
nextToken :: Maybe Text
limit :: Maybe Natural
gameSessionId :: Maybe Text
$sel:playerSessionStatusFilter:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:playerSessionId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:playerId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:nextToken:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:limit:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Natural
$sel:gameSessionId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
gameSessionId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
limit
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
playerId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
playerSessionId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
playerSessionStatusFilter

instance Prelude.NFData DescribePlayerSessions where
  rnf :: DescribePlayerSessions -> ()
rnf DescribePlayerSessions' {Maybe Natural
Maybe Text
playerSessionStatusFilter :: Maybe Text
playerSessionId :: Maybe Text
playerId :: Maybe Text
nextToken :: Maybe Text
limit :: Maybe Natural
gameSessionId :: Maybe Text
$sel:playerSessionStatusFilter:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:playerSessionId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:playerId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:nextToken:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:limit:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Natural
$sel:gameSessionId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
gameSessionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
limit
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
playerId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
playerSessionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
playerSessionStatusFilter

instance Data.ToHeaders DescribePlayerSessions where
  toHeaders :: DescribePlayerSessions -> ResponseHeaders
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 -> ResponseHeaders
Data.=# ( ByteString
"GameLift.DescribePlayerSessions" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DescribePlayerSessions where
  toJSON :: DescribePlayerSessions -> Value
toJSON DescribePlayerSessions' {Maybe Natural
Maybe Text
playerSessionStatusFilter :: Maybe Text
playerSessionId :: Maybe Text
playerId :: Maybe Text
nextToken :: Maybe Text
limit :: Maybe Natural
gameSessionId :: Maybe Text
$sel:playerSessionStatusFilter:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:playerSessionId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:playerId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:nextToken:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
$sel:limit:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Natural
$sel:gameSessionId:DescribePlayerSessions' :: DescribePlayerSessions -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"GameSessionId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
gameSessionId,
            (Key
"Limit" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
limit,
            (Key
"NextToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
nextToken,
            (Key
"PlayerId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
playerId,
            (Key
"PlayerSessionId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
playerSessionId,
            (Key
"PlayerSessionStatusFilter" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
playerSessionStatusFilter
          ]
      )

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

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

-- | /See:/ 'newDescribePlayerSessionsResponse' smart constructor.
data DescribePlayerSessionsResponse = DescribePlayerSessionsResponse'
  { -- | A token that indicates where to resume retrieving results on the next
    -- call to this operation. If no token is returned, these results represent
    -- the end of the list.
    DescribePlayerSessionsResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | A collection of objects containing properties for each player session
    -- that matches the request.
    DescribePlayerSessionsResponse -> Maybe [PlayerSession]
playerSessions :: Prelude.Maybe [PlayerSession],
    -- | The response's http status code.
    DescribePlayerSessionsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribePlayerSessionsResponse
-> DescribePlayerSessionsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribePlayerSessionsResponse
-> DescribePlayerSessionsResponse -> Bool
$c/= :: DescribePlayerSessionsResponse
-> DescribePlayerSessionsResponse -> Bool
== :: DescribePlayerSessionsResponse
-> DescribePlayerSessionsResponse -> Bool
$c== :: DescribePlayerSessionsResponse
-> DescribePlayerSessionsResponse -> Bool
Prelude.Eq, ReadPrec [DescribePlayerSessionsResponse]
ReadPrec DescribePlayerSessionsResponse
Int -> ReadS DescribePlayerSessionsResponse
ReadS [DescribePlayerSessionsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribePlayerSessionsResponse]
$creadListPrec :: ReadPrec [DescribePlayerSessionsResponse]
readPrec :: ReadPrec DescribePlayerSessionsResponse
$creadPrec :: ReadPrec DescribePlayerSessionsResponse
readList :: ReadS [DescribePlayerSessionsResponse]
$creadList :: ReadS [DescribePlayerSessionsResponse]
readsPrec :: Int -> ReadS DescribePlayerSessionsResponse
$creadsPrec :: Int -> ReadS DescribePlayerSessionsResponse
Prelude.Read, Int -> DescribePlayerSessionsResponse -> ShowS
[DescribePlayerSessionsResponse] -> ShowS
DescribePlayerSessionsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribePlayerSessionsResponse] -> ShowS
$cshowList :: [DescribePlayerSessionsResponse] -> ShowS
show :: DescribePlayerSessionsResponse -> String
$cshow :: DescribePlayerSessionsResponse -> String
showsPrec :: Int -> DescribePlayerSessionsResponse -> ShowS
$cshowsPrec :: Int -> DescribePlayerSessionsResponse -> ShowS
Prelude.Show, forall x.
Rep DescribePlayerSessionsResponse x
-> DescribePlayerSessionsResponse
forall x.
DescribePlayerSessionsResponse
-> Rep DescribePlayerSessionsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribePlayerSessionsResponse x
-> DescribePlayerSessionsResponse
$cfrom :: forall x.
DescribePlayerSessionsResponse
-> Rep DescribePlayerSessionsResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribePlayerSessionsResponse' 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:
--
-- 'nextToken', 'describePlayerSessionsResponse_nextToken' - A token that indicates where to resume retrieving results on the next
-- call to this operation. If no token is returned, these results represent
-- the end of the list.
--
-- 'playerSessions', 'describePlayerSessionsResponse_playerSessions' - A collection of objects containing properties for each player session
-- that matches the request.
--
-- 'httpStatus', 'describePlayerSessionsResponse_httpStatus' - The response's http status code.
newDescribePlayerSessionsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribePlayerSessionsResponse
newDescribePlayerSessionsResponse :: Int -> DescribePlayerSessionsResponse
newDescribePlayerSessionsResponse Int
pHttpStatus_ =
  DescribePlayerSessionsResponse'
    { $sel:nextToken:DescribePlayerSessionsResponse' :: Maybe Text
nextToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:playerSessions:DescribePlayerSessionsResponse' :: Maybe [PlayerSession]
playerSessions = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribePlayerSessionsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A token that indicates where to resume retrieving results on the next
-- call to this operation. If no token is returned, these results represent
-- the end of the list.
describePlayerSessionsResponse_nextToken :: Lens.Lens' DescribePlayerSessionsResponse (Prelude.Maybe Prelude.Text)
describePlayerSessionsResponse_nextToken :: Lens' DescribePlayerSessionsResponse (Maybe Text)
describePlayerSessionsResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessionsResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribePlayerSessionsResponse' :: DescribePlayerSessionsResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribePlayerSessionsResponse
s@DescribePlayerSessionsResponse' {} Maybe Text
a -> DescribePlayerSessionsResponse
s {$sel:nextToken:DescribePlayerSessionsResponse' :: Maybe Text
nextToken = Maybe Text
a} :: DescribePlayerSessionsResponse)

-- | A collection of objects containing properties for each player session
-- that matches the request.
describePlayerSessionsResponse_playerSessions :: Lens.Lens' DescribePlayerSessionsResponse (Prelude.Maybe [PlayerSession])
describePlayerSessionsResponse_playerSessions :: Lens' DescribePlayerSessionsResponse (Maybe [PlayerSession])
describePlayerSessionsResponse_playerSessions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessionsResponse' {Maybe [PlayerSession]
playerSessions :: Maybe [PlayerSession]
$sel:playerSessions:DescribePlayerSessionsResponse' :: DescribePlayerSessionsResponse -> Maybe [PlayerSession]
playerSessions} -> Maybe [PlayerSession]
playerSessions) (\s :: DescribePlayerSessionsResponse
s@DescribePlayerSessionsResponse' {} Maybe [PlayerSession]
a -> DescribePlayerSessionsResponse
s {$sel:playerSessions:DescribePlayerSessionsResponse' :: Maybe [PlayerSession]
playerSessions = Maybe [PlayerSession]
a} :: DescribePlayerSessionsResponse) 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.
describePlayerSessionsResponse_httpStatus :: Lens.Lens' DescribePlayerSessionsResponse Prelude.Int
describePlayerSessionsResponse_httpStatus :: Lens' DescribePlayerSessionsResponse Int
describePlayerSessionsResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribePlayerSessionsResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribePlayerSessionsResponse' :: DescribePlayerSessionsResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribePlayerSessionsResponse
s@DescribePlayerSessionsResponse' {} Int
a -> DescribePlayerSessionsResponse
s {$sel:httpStatus:DescribePlayerSessionsResponse' :: Int
httpStatus = Int
a} :: DescribePlayerSessionsResponse)

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