{-# 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.Glue.GetStatement
-- 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 the statement.
module Amazonka.Glue.GetStatement
  ( -- * Creating a Request
    GetStatement (..),
    newGetStatement,

    -- * Request Lenses
    getStatement_requestOrigin,
    getStatement_sessionId,
    getStatement_id,

    -- * Destructuring the Response
    GetStatementResponse (..),
    newGetStatementResponse,

    -- * Response Lenses
    getStatementResponse_statement,
    getStatementResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetStatement' smart constructor.
data GetStatement = GetStatement'
  { -- | The origin of the request.
    GetStatement -> Maybe Text
requestOrigin :: Prelude.Maybe Prelude.Text,
    -- | The Session ID of the statement.
    GetStatement -> Text
sessionId :: Prelude.Text,
    -- | The Id of the statement.
    GetStatement -> Int
id :: Prelude.Int
  }
  deriving (GetStatement -> GetStatement -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetStatement -> GetStatement -> Bool
$c/= :: GetStatement -> GetStatement -> Bool
== :: GetStatement -> GetStatement -> Bool
$c== :: GetStatement -> GetStatement -> Bool
Prelude.Eq, ReadPrec [GetStatement]
ReadPrec GetStatement
Int -> ReadS GetStatement
ReadS [GetStatement]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetStatement]
$creadListPrec :: ReadPrec [GetStatement]
readPrec :: ReadPrec GetStatement
$creadPrec :: ReadPrec GetStatement
readList :: ReadS [GetStatement]
$creadList :: ReadS [GetStatement]
readsPrec :: Int -> ReadS GetStatement
$creadsPrec :: Int -> ReadS GetStatement
Prelude.Read, Int -> GetStatement -> ShowS
[GetStatement] -> ShowS
GetStatement -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetStatement] -> ShowS
$cshowList :: [GetStatement] -> ShowS
show :: GetStatement -> String
$cshow :: GetStatement -> String
showsPrec :: Int -> GetStatement -> ShowS
$cshowsPrec :: Int -> GetStatement -> ShowS
Prelude.Show, forall x. Rep GetStatement x -> GetStatement
forall x. GetStatement -> Rep GetStatement x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetStatement x -> GetStatement
$cfrom :: forall x. GetStatement -> Rep GetStatement x
Prelude.Generic)

-- |
-- Create a value of 'GetStatement' 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:
--
-- 'requestOrigin', 'getStatement_requestOrigin' - The origin of the request.
--
-- 'sessionId', 'getStatement_sessionId' - The Session ID of the statement.
--
-- 'id', 'getStatement_id' - The Id of the statement.
newGetStatement ::
  -- | 'sessionId'
  Prelude.Text ->
  -- | 'id'
  Prelude.Int ->
  GetStatement
newGetStatement :: Text -> Int -> GetStatement
newGetStatement Text
pSessionId_ Int
pId_ =
  GetStatement'
    { $sel:requestOrigin:GetStatement' :: Maybe Text
requestOrigin = forall a. Maybe a
Prelude.Nothing,
      $sel:sessionId:GetStatement' :: Text
sessionId = Text
pSessionId_,
      $sel:id:GetStatement' :: Int
id = Int
pId_
    }

-- | The origin of the request.
getStatement_requestOrigin :: Lens.Lens' GetStatement (Prelude.Maybe Prelude.Text)
getStatement_requestOrigin :: Lens' GetStatement (Maybe Text)
getStatement_requestOrigin = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStatement' {Maybe Text
requestOrigin :: Maybe Text
$sel:requestOrigin:GetStatement' :: GetStatement -> Maybe Text
requestOrigin} -> Maybe Text
requestOrigin) (\s :: GetStatement
s@GetStatement' {} Maybe Text
a -> GetStatement
s {$sel:requestOrigin:GetStatement' :: Maybe Text
requestOrigin = Maybe Text
a} :: GetStatement)

-- | The Session ID of the statement.
getStatement_sessionId :: Lens.Lens' GetStatement Prelude.Text
getStatement_sessionId :: Lens' GetStatement Text
getStatement_sessionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStatement' {Text
sessionId :: Text
$sel:sessionId:GetStatement' :: GetStatement -> Text
sessionId} -> Text
sessionId) (\s :: GetStatement
s@GetStatement' {} Text
a -> GetStatement
s {$sel:sessionId:GetStatement' :: Text
sessionId = Text
a} :: GetStatement)

-- | The Id of the statement.
getStatement_id :: Lens.Lens' GetStatement Prelude.Int
getStatement_id :: Lens' GetStatement Int
getStatement_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStatement' {Int
id :: Int
$sel:id:GetStatement' :: GetStatement -> Int
id} -> Int
id) (\s :: GetStatement
s@GetStatement' {} Int
a -> GetStatement
s {$sel:id:GetStatement' :: Int
id = Int
a} :: GetStatement)

instance Core.AWSRequest GetStatement where
  type AWSResponse GetStatement = GetStatementResponse
  request :: (Service -> Service) -> GetStatement -> Request GetStatement
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 GetStatement
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetStatement)))
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 Statement -> Int -> GetStatementResponse
GetStatementResponse'
            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
"Statement")
            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 GetStatement where
  hashWithSalt :: Int -> GetStatement -> Int
hashWithSalt Int
_salt GetStatement' {Int
Maybe Text
Text
id :: Int
sessionId :: Text
requestOrigin :: Maybe Text
$sel:id:GetStatement' :: GetStatement -> Int
$sel:sessionId:GetStatement' :: GetStatement -> Text
$sel:requestOrigin:GetStatement' :: GetStatement -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
requestOrigin
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sessionId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Int
id

instance Prelude.NFData GetStatement where
  rnf :: GetStatement -> ()
rnf GetStatement' {Int
Maybe Text
Text
id :: Int
sessionId :: Text
requestOrigin :: Maybe Text
$sel:id:GetStatement' :: GetStatement -> Int
$sel:sessionId:GetStatement' :: GetStatement -> Text
$sel:requestOrigin:GetStatement' :: GetStatement -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
requestOrigin
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
sessionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
id

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

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

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

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

-- |
-- Create a value of 'GetStatementResponse' 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:
--
-- 'statement', 'getStatementResponse_statement' - Returns the statement.
--
-- 'httpStatus', 'getStatementResponse_httpStatus' - The response's http status code.
newGetStatementResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetStatementResponse
newGetStatementResponse :: Int -> GetStatementResponse
newGetStatementResponse Int
pHttpStatus_ =
  GetStatementResponse'
    { $sel:statement:GetStatementResponse' :: Maybe Statement
statement = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetStatementResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Returns the statement.
getStatementResponse_statement :: Lens.Lens' GetStatementResponse (Prelude.Maybe Statement)
getStatementResponse_statement :: Lens' GetStatementResponse (Maybe Statement)
getStatementResponse_statement = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetStatementResponse' {Maybe Statement
statement :: Maybe Statement
$sel:statement:GetStatementResponse' :: GetStatementResponse -> Maybe Statement
statement} -> Maybe Statement
statement) (\s :: GetStatementResponse
s@GetStatementResponse' {} Maybe Statement
a -> GetStatementResponse
s {$sel:statement:GetStatementResponse' :: Maybe Statement
statement = Maybe Statement
a} :: GetStatementResponse)

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

instance Prelude.NFData GetStatementResponse where
  rnf :: GetStatementResponse -> ()
rnf GetStatementResponse' {Int
Maybe Statement
httpStatus :: Int
statement :: Maybe Statement
$sel:httpStatus:GetStatementResponse' :: GetStatementResponse -> Int
$sel:statement:GetStatementResponse' :: GetStatementResponse -> Maybe Statement
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Statement
statement
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus