{-# 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.MechanicalTurk.GetQualificationType
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- The @GetQualificationType@operation retrieves information about a
-- Qualification type using its ID.
module Amazonka.MechanicalTurk.GetQualificationType
  ( -- * Creating a Request
    GetQualificationType (..),
    newGetQualificationType,

    -- * Request Lenses
    getQualificationType_qualificationTypeId,

    -- * Destructuring the Response
    GetQualificationTypeResponse (..),
    newGetQualificationTypeResponse,

    -- * Response Lenses
    getQualificationTypeResponse_qualificationType,
    getQualificationTypeResponse_httpStatus,
  )
where

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

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

-- |
-- Create a value of 'GetQualificationType' 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:
--
-- 'qualificationTypeId', 'getQualificationType_qualificationTypeId' - The ID of the QualificationType.
newGetQualificationType ::
  -- | 'qualificationTypeId'
  Prelude.Text ->
  GetQualificationType
newGetQualificationType :: Text -> GetQualificationType
newGetQualificationType Text
pQualificationTypeId_ =
  GetQualificationType'
    { $sel:qualificationTypeId:GetQualificationType' :: Text
qualificationTypeId =
        Text
pQualificationTypeId_
    }

-- | The ID of the QualificationType.
getQualificationType_qualificationTypeId :: Lens.Lens' GetQualificationType Prelude.Text
getQualificationType_qualificationTypeId :: Lens' GetQualificationType Text
getQualificationType_qualificationTypeId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetQualificationType' {Text
qualificationTypeId :: Text
$sel:qualificationTypeId:GetQualificationType' :: GetQualificationType -> Text
qualificationTypeId} -> Text
qualificationTypeId) (\s :: GetQualificationType
s@GetQualificationType' {} Text
a -> GetQualificationType
s {$sel:qualificationTypeId:GetQualificationType' :: Text
qualificationTypeId = Text
a} :: GetQualificationType)

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

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

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

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

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

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

-- |
-- Create a value of 'GetQualificationTypeResponse' 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:
--
-- 'qualificationType', 'getQualificationTypeResponse_qualificationType' - The returned Qualification Type
--
-- 'httpStatus', 'getQualificationTypeResponse_httpStatus' - The response's http status code.
newGetQualificationTypeResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetQualificationTypeResponse
newGetQualificationTypeResponse :: Int -> GetQualificationTypeResponse
newGetQualificationTypeResponse Int
pHttpStatus_ =
  GetQualificationTypeResponse'
    { $sel:qualificationType:GetQualificationTypeResponse' :: Maybe QualificationType
qualificationType =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetQualificationTypeResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The returned Qualification Type
getQualificationTypeResponse_qualificationType :: Lens.Lens' GetQualificationTypeResponse (Prelude.Maybe QualificationType)
getQualificationTypeResponse_qualificationType :: Lens' GetQualificationTypeResponse (Maybe QualificationType)
getQualificationTypeResponse_qualificationType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetQualificationTypeResponse' {Maybe QualificationType
qualificationType :: Maybe QualificationType
$sel:qualificationType:GetQualificationTypeResponse' :: GetQualificationTypeResponse -> Maybe QualificationType
qualificationType} -> Maybe QualificationType
qualificationType) (\s :: GetQualificationTypeResponse
s@GetQualificationTypeResponse' {} Maybe QualificationType
a -> GetQualificationTypeResponse
s {$sel:qualificationType:GetQualificationTypeResponse' :: Maybe QualificationType
qualificationType = Maybe QualificationType
a} :: GetQualificationTypeResponse)

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

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