{-# 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.Athena.GetSessionStatus
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets the current status of a session.
module Amazonka.Athena.GetSessionStatus
  ( -- * Creating a Request
    GetSessionStatus (..),
    newGetSessionStatus,

    -- * Request Lenses
    getSessionStatus_sessionId,

    -- * Destructuring the Response
    GetSessionStatusResponse (..),
    newGetSessionStatusResponse,

    -- * Response Lenses
    getSessionStatusResponse_sessionId,
    getSessionStatusResponse_status,
    getSessionStatusResponse_httpStatus,
  )
where

import Amazonka.Athena.Types
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

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

-- |
-- Create a value of 'GetSessionStatus' 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:
--
-- 'sessionId', 'getSessionStatus_sessionId' - The session ID.
newGetSessionStatus ::
  -- | 'sessionId'
  Prelude.Text ->
  GetSessionStatus
newGetSessionStatus :: Text -> GetSessionStatus
newGetSessionStatus Text
pSessionId_ =
  GetSessionStatus' {$sel:sessionId:GetSessionStatus' :: Text
sessionId = Text
pSessionId_}

-- | The session ID.
getSessionStatus_sessionId :: Lens.Lens' GetSessionStatus Prelude.Text
getSessionStatus_sessionId :: Lens' GetSessionStatus Text
getSessionStatus_sessionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSessionStatus' {Text
sessionId :: Text
$sel:sessionId:GetSessionStatus' :: GetSessionStatus -> Text
sessionId} -> Text
sessionId) (\s :: GetSessionStatus
s@GetSessionStatus' {} Text
a -> GetSessionStatus
s {$sel:sessionId:GetSessionStatus' :: Text
sessionId = Text
a} :: GetSessionStatus)

instance Core.AWSRequest GetSessionStatus where
  type
    AWSResponse GetSessionStatus =
      GetSessionStatusResponse
  request :: (Service -> Service)
-> GetSessionStatus -> Request GetSessionStatus
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 GetSessionStatus
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetSessionStatus)))
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 SessionStatus -> Int -> GetSessionStatusResponse
GetSessionStatusResponse'
            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
"SessionId")
            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
"Status")
            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 GetSessionStatus where
  hashWithSalt :: Int -> GetSessionStatus -> Int
hashWithSalt Int
_salt GetSessionStatus' {Text
sessionId :: Text
$sel:sessionId:GetSessionStatus' :: GetSessionStatus -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sessionId

instance Prelude.NFData GetSessionStatus where
  rnf :: GetSessionStatus -> ()
rnf GetSessionStatus' {Text
sessionId :: Text
$sel:sessionId:GetSessionStatus' :: GetSessionStatus -> Text
..} = forall a. NFData a => a -> ()
Prelude.rnf Text
sessionId

instance Data.ToHeaders GetSessionStatus where
  toHeaders :: GetSessionStatus -> 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
"AmazonAthena.GetSessionStatus" ::
                          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 GetSessionStatus where
  toJSON :: GetSessionStatus -> Value
toJSON GetSessionStatus' {Text
sessionId :: Text
$sel:sessionId:GetSessionStatus' :: GetSessionStatus -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [forall a. a -> Maybe a
Prelude.Just (Key
"SessionId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
sessionId)]
      )

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

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

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

-- |
-- Create a value of 'GetSessionStatusResponse' 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:
--
-- 'sessionId', 'getSessionStatusResponse_sessionId' - The session ID.
--
-- 'status', 'getSessionStatusResponse_status' - Contains information about the status of the session.
--
-- 'httpStatus', 'getSessionStatusResponse_httpStatus' - The response's http status code.
newGetSessionStatusResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetSessionStatusResponse
newGetSessionStatusResponse :: Int -> GetSessionStatusResponse
newGetSessionStatusResponse Int
pHttpStatus_ =
  GetSessionStatusResponse'
    { $sel:sessionId:GetSessionStatusResponse' :: Maybe Text
sessionId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:status:GetSessionStatusResponse' :: Maybe SessionStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetSessionStatusResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The session ID.
getSessionStatusResponse_sessionId :: Lens.Lens' GetSessionStatusResponse (Prelude.Maybe Prelude.Text)
getSessionStatusResponse_sessionId :: Lens' GetSessionStatusResponse (Maybe Text)
getSessionStatusResponse_sessionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSessionStatusResponse' {Maybe Text
sessionId :: Maybe Text
$sel:sessionId:GetSessionStatusResponse' :: GetSessionStatusResponse -> Maybe Text
sessionId} -> Maybe Text
sessionId) (\s :: GetSessionStatusResponse
s@GetSessionStatusResponse' {} Maybe Text
a -> GetSessionStatusResponse
s {$sel:sessionId:GetSessionStatusResponse' :: Maybe Text
sessionId = Maybe Text
a} :: GetSessionStatusResponse)

-- | Contains information about the status of the session.
getSessionStatusResponse_status :: Lens.Lens' GetSessionStatusResponse (Prelude.Maybe SessionStatus)
getSessionStatusResponse_status :: Lens' GetSessionStatusResponse (Maybe SessionStatus)
getSessionStatusResponse_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSessionStatusResponse' {Maybe SessionStatus
status :: Maybe SessionStatus
$sel:status:GetSessionStatusResponse' :: GetSessionStatusResponse -> Maybe SessionStatus
status} -> Maybe SessionStatus
status) (\s :: GetSessionStatusResponse
s@GetSessionStatusResponse' {} Maybe SessionStatus
a -> GetSessionStatusResponse
s {$sel:status:GetSessionStatusResponse' :: Maybe SessionStatus
status = Maybe SessionStatus
a} :: GetSessionStatusResponse)

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

instance Prelude.NFData GetSessionStatusResponse where
  rnf :: GetSessionStatusResponse -> ()
rnf GetSessionStatusResponse' {Int
Maybe Text
Maybe SessionStatus
httpStatus :: Int
status :: Maybe SessionStatus
sessionId :: Maybe Text
$sel:httpStatus:GetSessionStatusResponse' :: GetSessionStatusResponse -> Int
$sel:status:GetSessionStatusResponse' :: GetSessionStatusResponse -> Maybe SessionStatus
$sel:sessionId:GetSessionStatusResponse' :: GetSessionStatusResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
sessionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SessionStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus