{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.QualificationType
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.MechanicalTurk.Types.QualificationType 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.QualificationTypeStatus
import qualified Amazonka.Prelude as Prelude

-- | The QualificationType data structure represents a Qualification type, a
-- description of a property of a Worker that must match the requirements
-- of a HIT for the Worker to be able to accept the HIT. The type also
-- describes how a Worker can obtain a Qualification of that type, such as
-- through a Qualification test.
--
-- /See:/ 'newQualificationType' smart constructor.
data QualificationType = QualificationType'
  { -- | The answers to the Qualification test specified in the Test parameter.
    QualificationType -> Maybe Text
answerKey :: Prelude.Maybe Prelude.Text,
    -- | Specifies that requests for the Qualification type are granted
    -- immediately, without prompting the Worker with a Qualification test.
    -- Valid values are True | False.
    QualificationType -> Maybe Bool
autoGranted :: Prelude.Maybe Prelude.Bool,
    -- | The Qualification integer value to use for automatically granted
    -- Qualifications, if AutoGranted is true. This is 1 by default.
    QualificationType -> Maybe Int
autoGrantedValue :: Prelude.Maybe Prelude.Int,
    -- | The date and time the Qualification type was created.
    QualificationType -> Maybe POSIX
creationTime :: Prelude.Maybe Data.POSIX,
    -- | A long description for the Qualification type.
    QualificationType -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | Specifies whether the Qualification type is one that a user can request
    -- through the Amazon Mechanical Turk web site, such as by taking a
    -- Qualification test. This value is False for Qualifications assigned
    -- automatically by the system. Valid values are True | False.
    QualificationType -> Maybe Bool
isRequestable :: Prelude.Maybe Prelude.Bool,
    -- | One or more words or phrases that describe theQualification type,
    -- separated by commas. The Keywords make the type easier to find using a
    -- search.
    QualificationType -> Maybe Text
keywords :: Prelude.Maybe Prelude.Text,
    -- | The name of the Qualification type. The type name is used to identify
    -- the type, and to find the type using a Qualification type search.
    QualificationType -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | A unique identifier for the Qualification type. A Qualification type is
    -- given a Qualification type ID when you call the CreateQualificationType
    -- operation.
    QualificationType -> Maybe Text
qualificationTypeId :: Prelude.Maybe Prelude.Text,
    -- | The status of the Qualification type. A Qualification type\'s status
    -- determines if users can apply to receive a Qualification of this type,
    -- and if HITs can be created with requirements based on this type. Valid
    -- values are Active | Inactive.
    QualificationType -> Maybe QualificationTypeStatus
qualificationTypeStatus :: Prelude.Maybe QualificationTypeStatus,
    -- | The amount of time, in seconds, Workers must wait after taking the
    -- Qualification test before they can take it again. Workers can take a
    -- Qualification test multiple times if they were not granted the
    -- Qualification from a previous attempt, or if the test offers a gradient
    -- score and they want a better score. If not specified, retries are
    -- disabled and Workers can request a Qualification only once.
    QualificationType -> Maybe Integer
retryDelayInSeconds :: Prelude.Maybe Prelude.Integer,
    -- | The questions for a Qualification test associated with this
    -- Qualification type that a user can take to obtain a Qualification of
    -- this type. This parameter must be specified if AnswerKey is present. A
    -- Qualification type cannot have both a specified Test parameter and an
    -- AutoGranted value of true.
    QualificationType -> Maybe Text
test :: Prelude.Maybe Prelude.Text,
    -- | The amount of time, in seconds, given to a Worker to complete the
    -- Qualification test, beginning from the time the Worker requests the
    -- Qualification.
    QualificationType -> Maybe Integer
testDurationInSeconds :: Prelude.Maybe Prelude.Integer
  }
  deriving (QualificationType -> QualificationType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: QualificationType -> QualificationType -> Bool
$c/= :: QualificationType -> QualificationType -> Bool
== :: QualificationType -> QualificationType -> Bool
$c== :: QualificationType -> QualificationType -> Bool
Prelude.Eq, ReadPrec [QualificationType]
ReadPrec QualificationType
Int -> ReadS QualificationType
ReadS [QualificationType]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [QualificationType]
$creadListPrec :: ReadPrec [QualificationType]
readPrec :: ReadPrec QualificationType
$creadPrec :: ReadPrec QualificationType
readList :: ReadS [QualificationType]
$creadList :: ReadS [QualificationType]
readsPrec :: Int -> ReadS QualificationType
$creadsPrec :: Int -> ReadS QualificationType
Prelude.Read, Int -> QualificationType -> ShowS
[QualificationType] -> ShowS
QualificationType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [QualificationType] -> ShowS
$cshowList :: [QualificationType] -> ShowS
show :: QualificationType -> String
$cshow :: QualificationType -> String
showsPrec :: Int -> QualificationType -> ShowS
$cshowsPrec :: Int -> QualificationType -> ShowS
Prelude.Show, forall x. Rep QualificationType x -> QualificationType
forall x. QualificationType -> Rep QualificationType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep QualificationType x -> QualificationType
$cfrom :: forall x. QualificationType -> Rep QualificationType x
Prelude.Generic)

-- |
-- Create a value of 'QualificationType' 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:
--
-- 'answerKey', 'qualificationType_answerKey' - The answers to the Qualification test specified in the Test parameter.
--
-- 'autoGranted', 'qualificationType_autoGranted' - Specifies that requests for the Qualification type are granted
-- immediately, without prompting the Worker with a Qualification test.
-- Valid values are True | False.
--
-- 'autoGrantedValue', 'qualificationType_autoGrantedValue' - The Qualification integer value to use for automatically granted
-- Qualifications, if AutoGranted is true. This is 1 by default.
--
-- 'creationTime', 'qualificationType_creationTime' - The date and time the Qualification type was created.
--
-- 'description', 'qualificationType_description' - A long description for the Qualification type.
--
-- 'isRequestable', 'qualificationType_isRequestable' - Specifies whether the Qualification type is one that a user can request
-- through the Amazon Mechanical Turk web site, such as by taking a
-- Qualification test. This value is False for Qualifications assigned
-- automatically by the system. Valid values are True | False.
--
-- 'keywords', 'qualificationType_keywords' - One or more words or phrases that describe theQualification type,
-- separated by commas. The Keywords make the type easier to find using a
-- search.
--
-- 'name', 'qualificationType_name' - The name of the Qualification type. The type name is used to identify
-- the type, and to find the type using a Qualification type search.
--
-- 'qualificationTypeId', 'qualificationType_qualificationTypeId' - A unique identifier for the Qualification type. A Qualification type is
-- given a Qualification type ID when you call the CreateQualificationType
-- operation.
--
-- 'qualificationTypeStatus', 'qualificationType_qualificationTypeStatus' - The status of the Qualification type. A Qualification type\'s status
-- determines if users can apply to receive a Qualification of this type,
-- and if HITs can be created with requirements based on this type. Valid
-- values are Active | Inactive.
--
-- 'retryDelayInSeconds', 'qualificationType_retryDelayInSeconds' - The amount of time, in seconds, Workers must wait after taking the
-- Qualification test before they can take it again. Workers can take a
-- Qualification test multiple times if they were not granted the
-- Qualification from a previous attempt, or if the test offers a gradient
-- score and they want a better score. If not specified, retries are
-- disabled and Workers can request a Qualification only once.
--
-- 'test', 'qualificationType_test' - The questions for a Qualification test associated with this
-- Qualification type that a user can take to obtain a Qualification of
-- this type. This parameter must be specified if AnswerKey is present. A
-- Qualification type cannot have both a specified Test parameter and an
-- AutoGranted value of true.
--
-- 'testDurationInSeconds', 'qualificationType_testDurationInSeconds' - The amount of time, in seconds, given to a Worker to complete the
-- Qualification test, beginning from the time the Worker requests the
-- Qualification.
newQualificationType ::
  QualificationType
newQualificationType :: QualificationType
newQualificationType =
  QualificationType'
    { $sel:answerKey:QualificationType' :: Maybe Text
answerKey = forall a. Maybe a
Prelude.Nothing,
      $sel:autoGranted:QualificationType' :: Maybe Bool
autoGranted = forall a. Maybe a
Prelude.Nothing,
      $sel:autoGrantedValue:QualificationType' :: Maybe Int
autoGrantedValue = forall a. Maybe a
Prelude.Nothing,
      $sel:creationTime:QualificationType' :: Maybe POSIX
creationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:description:QualificationType' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:isRequestable:QualificationType' :: Maybe Bool
isRequestable = forall a. Maybe a
Prelude.Nothing,
      $sel:keywords:QualificationType' :: Maybe Text
keywords = forall a. Maybe a
Prelude.Nothing,
      $sel:name:QualificationType' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:qualificationTypeId:QualificationType' :: Maybe Text
qualificationTypeId = forall a. Maybe a
Prelude.Nothing,
      $sel:qualificationTypeStatus:QualificationType' :: Maybe QualificationTypeStatus
qualificationTypeStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:retryDelayInSeconds:QualificationType' :: Maybe Integer
retryDelayInSeconds = forall a. Maybe a
Prelude.Nothing,
      $sel:test:QualificationType' :: Maybe Text
test = forall a. Maybe a
Prelude.Nothing,
      $sel:testDurationInSeconds:QualificationType' :: Maybe Integer
testDurationInSeconds = forall a. Maybe a
Prelude.Nothing
    }

-- | The answers to the Qualification test specified in the Test parameter.
qualificationType_answerKey :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Text)
qualificationType_answerKey :: Lens' QualificationType (Maybe Text)
qualificationType_answerKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Text
answerKey :: Maybe Text
$sel:answerKey:QualificationType' :: QualificationType -> Maybe Text
answerKey} -> Maybe Text
answerKey) (\s :: QualificationType
s@QualificationType' {} Maybe Text
a -> QualificationType
s {$sel:answerKey:QualificationType' :: Maybe Text
answerKey = Maybe Text
a} :: QualificationType)

-- | Specifies that requests for the Qualification type are granted
-- immediately, without prompting the Worker with a Qualification test.
-- Valid values are True | False.
qualificationType_autoGranted :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Bool)
qualificationType_autoGranted :: Lens' QualificationType (Maybe Bool)
qualificationType_autoGranted = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Bool
autoGranted :: Maybe Bool
$sel:autoGranted:QualificationType' :: QualificationType -> Maybe Bool
autoGranted} -> Maybe Bool
autoGranted) (\s :: QualificationType
s@QualificationType' {} Maybe Bool
a -> QualificationType
s {$sel:autoGranted:QualificationType' :: Maybe Bool
autoGranted = Maybe Bool
a} :: QualificationType)

-- | The Qualification integer value to use for automatically granted
-- Qualifications, if AutoGranted is true. This is 1 by default.
qualificationType_autoGrantedValue :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Int)
qualificationType_autoGrantedValue :: Lens' QualificationType (Maybe Int)
qualificationType_autoGrantedValue = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Int
autoGrantedValue :: Maybe Int
$sel:autoGrantedValue:QualificationType' :: QualificationType -> Maybe Int
autoGrantedValue} -> Maybe Int
autoGrantedValue) (\s :: QualificationType
s@QualificationType' {} Maybe Int
a -> QualificationType
s {$sel:autoGrantedValue:QualificationType' :: Maybe Int
autoGrantedValue = Maybe Int
a} :: QualificationType)

-- | The date and time the Qualification type was created.
qualificationType_creationTime :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.UTCTime)
qualificationType_creationTime :: Lens' QualificationType (Maybe UTCTime)
qualificationType_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe POSIX
creationTime :: Maybe POSIX
$sel:creationTime:QualificationType' :: QualificationType -> Maybe POSIX
creationTime} -> Maybe POSIX
creationTime) (\s :: QualificationType
s@QualificationType' {} Maybe POSIX
a -> QualificationType
s {$sel:creationTime:QualificationType' :: Maybe POSIX
creationTime = Maybe POSIX
a} :: QualificationType) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | A long description for the Qualification type.
qualificationType_description :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Text)
qualificationType_description :: Lens' QualificationType (Maybe Text)
qualificationType_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Text
description :: Maybe Text
$sel:description:QualificationType' :: QualificationType -> Maybe Text
description} -> Maybe Text
description) (\s :: QualificationType
s@QualificationType' {} Maybe Text
a -> QualificationType
s {$sel:description:QualificationType' :: Maybe Text
description = Maybe Text
a} :: QualificationType)

-- | Specifies whether the Qualification type is one that a user can request
-- through the Amazon Mechanical Turk web site, such as by taking a
-- Qualification test. This value is False for Qualifications assigned
-- automatically by the system. Valid values are True | False.
qualificationType_isRequestable :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Bool)
qualificationType_isRequestable :: Lens' QualificationType (Maybe Bool)
qualificationType_isRequestable = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Bool
isRequestable :: Maybe Bool
$sel:isRequestable:QualificationType' :: QualificationType -> Maybe Bool
isRequestable} -> Maybe Bool
isRequestable) (\s :: QualificationType
s@QualificationType' {} Maybe Bool
a -> QualificationType
s {$sel:isRequestable:QualificationType' :: Maybe Bool
isRequestable = Maybe Bool
a} :: QualificationType)

-- | One or more words or phrases that describe theQualification type,
-- separated by commas. The Keywords make the type easier to find using a
-- search.
qualificationType_keywords :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Text)
qualificationType_keywords :: Lens' QualificationType (Maybe Text)
qualificationType_keywords = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Text
keywords :: Maybe Text
$sel:keywords:QualificationType' :: QualificationType -> Maybe Text
keywords} -> Maybe Text
keywords) (\s :: QualificationType
s@QualificationType' {} Maybe Text
a -> QualificationType
s {$sel:keywords:QualificationType' :: Maybe Text
keywords = Maybe Text
a} :: QualificationType)

-- | The name of the Qualification type. The type name is used to identify
-- the type, and to find the type using a Qualification type search.
qualificationType_name :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Text)
qualificationType_name :: Lens' QualificationType (Maybe Text)
qualificationType_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Text
name :: Maybe Text
$sel:name:QualificationType' :: QualificationType -> Maybe Text
name} -> Maybe Text
name) (\s :: QualificationType
s@QualificationType' {} Maybe Text
a -> QualificationType
s {$sel:name:QualificationType' :: Maybe Text
name = Maybe Text
a} :: QualificationType)

-- | A unique identifier for the Qualification type. A Qualification type is
-- given a Qualification type ID when you call the CreateQualificationType
-- operation.
qualificationType_qualificationTypeId :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Text)
qualificationType_qualificationTypeId :: Lens' QualificationType (Maybe Text)
qualificationType_qualificationTypeId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Text
qualificationTypeId :: Maybe Text
$sel:qualificationTypeId:QualificationType' :: QualificationType -> Maybe Text
qualificationTypeId} -> Maybe Text
qualificationTypeId) (\s :: QualificationType
s@QualificationType' {} Maybe Text
a -> QualificationType
s {$sel:qualificationTypeId:QualificationType' :: Maybe Text
qualificationTypeId = Maybe Text
a} :: QualificationType)

-- | The status of the Qualification type. A Qualification type\'s status
-- determines if users can apply to receive a Qualification of this type,
-- and if HITs can be created with requirements based on this type. Valid
-- values are Active | Inactive.
qualificationType_qualificationTypeStatus :: Lens.Lens' QualificationType (Prelude.Maybe QualificationTypeStatus)
qualificationType_qualificationTypeStatus :: Lens' QualificationType (Maybe QualificationTypeStatus)
qualificationType_qualificationTypeStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe QualificationTypeStatus
qualificationTypeStatus :: Maybe QualificationTypeStatus
$sel:qualificationTypeStatus:QualificationType' :: QualificationType -> Maybe QualificationTypeStatus
qualificationTypeStatus} -> Maybe QualificationTypeStatus
qualificationTypeStatus) (\s :: QualificationType
s@QualificationType' {} Maybe QualificationTypeStatus
a -> QualificationType
s {$sel:qualificationTypeStatus:QualificationType' :: Maybe QualificationTypeStatus
qualificationTypeStatus = Maybe QualificationTypeStatus
a} :: QualificationType)

-- | The amount of time, in seconds, Workers must wait after taking the
-- Qualification test before they can take it again. Workers can take a
-- Qualification test multiple times if they were not granted the
-- Qualification from a previous attempt, or if the test offers a gradient
-- score and they want a better score. If not specified, retries are
-- disabled and Workers can request a Qualification only once.
qualificationType_retryDelayInSeconds :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Integer)
qualificationType_retryDelayInSeconds :: Lens' QualificationType (Maybe Integer)
qualificationType_retryDelayInSeconds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Integer
retryDelayInSeconds :: Maybe Integer
$sel:retryDelayInSeconds:QualificationType' :: QualificationType -> Maybe Integer
retryDelayInSeconds} -> Maybe Integer
retryDelayInSeconds) (\s :: QualificationType
s@QualificationType' {} Maybe Integer
a -> QualificationType
s {$sel:retryDelayInSeconds:QualificationType' :: Maybe Integer
retryDelayInSeconds = Maybe Integer
a} :: QualificationType)

-- | The questions for a Qualification test associated with this
-- Qualification type that a user can take to obtain a Qualification of
-- this type. This parameter must be specified if AnswerKey is present. A
-- Qualification type cannot have both a specified Test parameter and an
-- AutoGranted value of true.
qualificationType_test :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Text)
qualificationType_test :: Lens' QualificationType (Maybe Text)
qualificationType_test = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Text
test :: Maybe Text
$sel:test:QualificationType' :: QualificationType -> Maybe Text
test} -> Maybe Text
test) (\s :: QualificationType
s@QualificationType' {} Maybe Text
a -> QualificationType
s {$sel:test:QualificationType' :: Maybe Text
test = Maybe Text
a} :: QualificationType)

-- | The amount of time, in seconds, given to a Worker to complete the
-- Qualification test, beginning from the time the Worker requests the
-- Qualification.
qualificationType_testDurationInSeconds :: Lens.Lens' QualificationType (Prelude.Maybe Prelude.Integer)
qualificationType_testDurationInSeconds :: Lens' QualificationType (Maybe Integer)
qualificationType_testDurationInSeconds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\QualificationType' {Maybe Integer
testDurationInSeconds :: Maybe Integer
$sel:testDurationInSeconds:QualificationType' :: QualificationType -> Maybe Integer
testDurationInSeconds} -> Maybe Integer
testDurationInSeconds) (\s :: QualificationType
s@QualificationType' {} Maybe Integer
a -> QualificationType
s {$sel:testDurationInSeconds:QualificationType' :: Maybe Integer
testDurationInSeconds = Maybe Integer
a} :: QualificationType)

instance Data.FromJSON QualificationType where
  parseJSON :: Value -> Parser QualificationType
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"QualificationType"
      ( \Object
x ->
          Maybe Text
-> Maybe Bool
-> Maybe Int
-> Maybe POSIX
-> Maybe Text
-> Maybe Bool
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe QualificationTypeStatus
-> Maybe Integer
-> Maybe Text
-> Maybe Integer
-> QualificationType
QualificationType'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"AnswerKey")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"AutoGranted")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"AutoGrantedValue")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CreationTime")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Description")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"IsRequestable")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Keywords")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Name")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"QualificationTypeId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"QualificationTypeStatus")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"RetryDelayInSeconds")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Test")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"TestDurationInSeconds")
      )

instance Prelude.Hashable QualificationType where
  hashWithSalt :: Int -> QualificationType -> Int
hashWithSalt Int
_salt QualificationType' {Maybe Bool
Maybe Int
Maybe Integer
Maybe Text
Maybe POSIX
Maybe QualificationTypeStatus
testDurationInSeconds :: Maybe Integer
test :: Maybe Text
retryDelayInSeconds :: Maybe Integer
qualificationTypeStatus :: Maybe QualificationTypeStatus
qualificationTypeId :: Maybe Text
name :: Maybe Text
keywords :: Maybe Text
isRequestable :: Maybe Bool
description :: Maybe Text
creationTime :: Maybe POSIX
autoGrantedValue :: Maybe Int
autoGranted :: Maybe Bool
answerKey :: Maybe Text
$sel:testDurationInSeconds:QualificationType' :: QualificationType -> Maybe Integer
$sel:test:QualificationType' :: QualificationType -> Maybe Text
$sel:retryDelayInSeconds:QualificationType' :: QualificationType -> Maybe Integer
$sel:qualificationTypeStatus:QualificationType' :: QualificationType -> Maybe QualificationTypeStatus
$sel:qualificationTypeId:QualificationType' :: QualificationType -> Maybe Text
$sel:name:QualificationType' :: QualificationType -> Maybe Text
$sel:keywords:QualificationType' :: QualificationType -> Maybe Text
$sel:isRequestable:QualificationType' :: QualificationType -> Maybe Bool
$sel:description:QualificationType' :: QualificationType -> Maybe Text
$sel:creationTime:QualificationType' :: QualificationType -> Maybe POSIX
$sel:autoGrantedValue:QualificationType' :: QualificationType -> Maybe Int
$sel:autoGranted:QualificationType' :: QualificationType -> Maybe Bool
$sel:answerKey:QualificationType' :: QualificationType -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
answerKey
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
autoGranted
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
autoGrantedValue
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
creationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
isRequestable
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
keywords
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
qualificationTypeId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe QualificationTypeStatus
qualificationTypeStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
retryDelayInSeconds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
test
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
testDurationInSeconds

instance Prelude.NFData QualificationType where
  rnf :: QualificationType -> ()
rnf QualificationType' {Maybe Bool
Maybe Int
Maybe Integer
Maybe Text
Maybe POSIX
Maybe QualificationTypeStatus
testDurationInSeconds :: Maybe Integer
test :: Maybe Text
retryDelayInSeconds :: Maybe Integer
qualificationTypeStatus :: Maybe QualificationTypeStatus
qualificationTypeId :: Maybe Text
name :: Maybe Text
keywords :: Maybe Text
isRequestable :: Maybe Bool
description :: Maybe Text
creationTime :: Maybe POSIX
autoGrantedValue :: Maybe Int
autoGranted :: Maybe Bool
answerKey :: Maybe Text
$sel:testDurationInSeconds:QualificationType' :: QualificationType -> Maybe Integer
$sel:test:QualificationType' :: QualificationType -> Maybe Text
$sel:retryDelayInSeconds:QualificationType' :: QualificationType -> Maybe Integer
$sel:qualificationTypeStatus:QualificationType' :: QualificationType -> Maybe QualificationTypeStatus
$sel:qualificationTypeId:QualificationType' :: QualificationType -> Maybe Text
$sel:name:QualificationType' :: QualificationType -> Maybe Text
$sel:keywords:QualificationType' :: QualificationType -> Maybe Text
$sel:isRequestable:QualificationType' :: QualificationType -> Maybe Bool
$sel:description:QualificationType' :: QualificationType -> Maybe Text
$sel:creationTime:QualificationType' :: QualificationType -> Maybe POSIX
$sel:autoGrantedValue:QualificationType' :: QualificationType -> Maybe Int
$sel:autoGranted:QualificationType' :: QualificationType -> Maybe Bool
$sel:answerKey:QualificationType' :: QualificationType -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
answerKey
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
autoGranted
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
autoGrantedValue
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
creationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
isRequestable
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
keywords
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
qualificationTypeId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe QualificationTypeStatus
qualificationTypeStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
retryDelayInSeconds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
test
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
testDurationInSeconds