{-# 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.Pinpoint.VerifyOTPMessage
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Verify an OTP
module Amazonka.Pinpoint.VerifyOTPMessage
  ( -- * Creating a Request
    VerifyOTPMessage (..),
    newVerifyOTPMessage,

    -- * Request Lenses
    verifyOTPMessage_applicationId,
    verifyOTPMessage_verifyOTPMessageRequestParameters,

    -- * Destructuring the Response
    VerifyOTPMessageResponse (..),
    newVerifyOTPMessageResponse,

    -- * Response Lenses
    verifyOTPMessageResponse_httpStatus,
    verifyOTPMessageResponse_verificationResponse,
  )
where

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

-- | /See:/ 'newVerifyOTPMessage' smart constructor.
data VerifyOTPMessage = VerifyOTPMessage'
  { -- | The unique ID of your Amazon Pinpoint application.
    VerifyOTPMessage -> Text
applicationId :: Prelude.Text,
    VerifyOTPMessage -> VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters :: VerifyOTPMessageRequestParameters
  }
  deriving (VerifyOTPMessage -> VerifyOTPMessage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VerifyOTPMessage -> VerifyOTPMessage -> Bool
$c/= :: VerifyOTPMessage -> VerifyOTPMessage -> Bool
== :: VerifyOTPMessage -> VerifyOTPMessage -> Bool
$c== :: VerifyOTPMessage -> VerifyOTPMessage -> Bool
Prelude.Eq, ReadPrec [VerifyOTPMessage]
ReadPrec VerifyOTPMessage
Int -> ReadS VerifyOTPMessage
ReadS [VerifyOTPMessage]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [VerifyOTPMessage]
$creadListPrec :: ReadPrec [VerifyOTPMessage]
readPrec :: ReadPrec VerifyOTPMessage
$creadPrec :: ReadPrec VerifyOTPMessage
readList :: ReadS [VerifyOTPMessage]
$creadList :: ReadS [VerifyOTPMessage]
readsPrec :: Int -> ReadS VerifyOTPMessage
$creadsPrec :: Int -> ReadS VerifyOTPMessage
Prelude.Read, Int -> VerifyOTPMessage -> ShowS
[VerifyOTPMessage] -> ShowS
VerifyOTPMessage -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VerifyOTPMessage] -> ShowS
$cshowList :: [VerifyOTPMessage] -> ShowS
show :: VerifyOTPMessage -> String
$cshow :: VerifyOTPMessage -> String
showsPrec :: Int -> VerifyOTPMessage -> ShowS
$cshowsPrec :: Int -> VerifyOTPMessage -> ShowS
Prelude.Show, forall x. Rep VerifyOTPMessage x -> VerifyOTPMessage
forall x. VerifyOTPMessage -> Rep VerifyOTPMessage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep VerifyOTPMessage x -> VerifyOTPMessage
$cfrom :: forall x. VerifyOTPMessage -> Rep VerifyOTPMessage x
Prelude.Generic)

-- |
-- Create a value of 'VerifyOTPMessage' 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:
--
-- 'applicationId', 'verifyOTPMessage_applicationId' - The unique ID of your Amazon Pinpoint application.
--
-- 'verifyOTPMessageRequestParameters', 'verifyOTPMessage_verifyOTPMessageRequestParameters' - Undocumented member.
newVerifyOTPMessage ::
  -- | 'applicationId'
  Prelude.Text ->
  -- | 'verifyOTPMessageRequestParameters'
  VerifyOTPMessageRequestParameters ->
  VerifyOTPMessage
newVerifyOTPMessage :: Text -> VerifyOTPMessageRequestParameters -> VerifyOTPMessage
newVerifyOTPMessage
  Text
pApplicationId_
  VerifyOTPMessageRequestParameters
pVerifyOTPMessageRequestParameters_ =
    VerifyOTPMessage'
      { $sel:applicationId:VerifyOTPMessage' :: Text
applicationId = Text
pApplicationId_,
        $sel:verifyOTPMessageRequestParameters:VerifyOTPMessage' :: VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters =
          VerifyOTPMessageRequestParameters
pVerifyOTPMessageRequestParameters_
      }

-- | The unique ID of your Amazon Pinpoint application.
verifyOTPMessage_applicationId :: Lens.Lens' VerifyOTPMessage Prelude.Text
verifyOTPMessage_applicationId :: Lens' VerifyOTPMessage Text
verifyOTPMessage_applicationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VerifyOTPMessage' {Text
applicationId :: Text
$sel:applicationId:VerifyOTPMessage' :: VerifyOTPMessage -> Text
applicationId} -> Text
applicationId) (\s :: VerifyOTPMessage
s@VerifyOTPMessage' {} Text
a -> VerifyOTPMessage
s {$sel:applicationId:VerifyOTPMessage' :: Text
applicationId = Text
a} :: VerifyOTPMessage)

-- | Undocumented member.
verifyOTPMessage_verifyOTPMessageRequestParameters :: Lens.Lens' VerifyOTPMessage VerifyOTPMessageRequestParameters
verifyOTPMessage_verifyOTPMessageRequestParameters :: Lens' VerifyOTPMessage VerifyOTPMessageRequestParameters
verifyOTPMessage_verifyOTPMessageRequestParameters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VerifyOTPMessage' {VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters :: VerifyOTPMessageRequestParameters
$sel:verifyOTPMessageRequestParameters:VerifyOTPMessage' :: VerifyOTPMessage -> VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters} -> VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters) (\s :: VerifyOTPMessage
s@VerifyOTPMessage' {} VerifyOTPMessageRequestParameters
a -> VerifyOTPMessage
s {$sel:verifyOTPMessageRequestParameters:VerifyOTPMessage' :: VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters = VerifyOTPMessageRequestParameters
a} :: VerifyOTPMessage)

instance Core.AWSRequest VerifyOTPMessage where
  type
    AWSResponse VerifyOTPMessage =
      VerifyOTPMessageResponse
  request :: (Service -> Service)
-> VerifyOTPMessage -> Request VerifyOTPMessage
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 VerifyOTPMessage
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse VerifyOTPMessage)))
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 ->
          Int -> VerificationResponse -> VerifyOTPMessageResponse
VerifyOTPMessageResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)
      )

instance Prelude.Hashable VerifyOTPMessage where
  hashWithSalt :: Int -> VerifyOTPMessage -> Int
hashWithSalt Int
_salt VerifyOTPMessage' {Text
VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters :: VerifyOTPMessageRequestParameters
applicationId :: Text
$sel:verifyOTPMessageRequestParameters:VerifyOTPMessage' :: VerifyOTPMessage -> VerifyOTPMessageRequestParameters
$sel:applicationId:VerifyOTPMessage' :: VerifyOTPMessage -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
applicationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters

instance Prelude.NFData VerifyOTPMessage where
  rnf :: VerifyOTPMessage -> ()
rnf VerifyOTPMessage' {Text
VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters :: VerifyOTPMessageRequestParameters
applicationId :: Text
$sel:verifyOTPMessageRequestParameters:VerifyOTPMessage' :: VerifyOTPMessage -> VerifyOTPMessageRequestParameters
$sel:applicationId:VerifyOTPMessage' :: VerifyOTPMessage -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
applicationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters

instance Data.ToHeaders VerifyOTPMessage where
  toHeaders :: VerifyOTPMessage -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON VerifyOTPMessage where
  toJSON :: VerifyOTPMessage -> Value
toJSON VerifyOTPMessage' {Text
VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters :: VerifyOTPMessageRequestParameters
applicationId :: Text
$sel:verifyOTPMessageRequestParameters:VerifyOTPMessage' :: VerifyOTPMessage -> VerifyOTPMessageRequestParameters
$sel:applicationId:VerifyOTPMessage' :: VerifyOTPMessage -> Text
..} =
    forall a. ToJSON a => a -> Value
Data.toJSON VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters

instance Data.ToPath VerifyOTPMessage where
  toPath :: VerifyOTPMessage -> ByteString
toPath VerifyOTPMessage' {Text
VerifyOTPMessageRequestParameters
verifyOTPMessageRequestParameters :: VerifyOTPMessageRequestParameters
applicationId :: Text
$sel:verifyOTPMessageRequestParameters:VerifyOTPMessage' :: VerifyOTPMessage -> VerifyOTPMessageRequestParameters
$sel:applicationId:VerifyOTPMessage' :: VerifyOTPMessage -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/v1/apps/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
applicationId, ByteString
"/verify-otp"]

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

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

-- |
-- Create a value of 'VerifyOTPMessageResponse' 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:
--
-- 'httpStatus', 'verifyOTPMessageResponse_httpStatus' - The response's http status code.
--
-- 'verificationResponse', 'verifyOTPMessageResponse_verificationResponse' - Undocumented member.
newVerifyOTPMessageResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'verificationResponse'
  VerificationResponse ->
  VerifyOTPMessageResponse
newVerifyOTPMessageResponse :: Int -> VerificationResponse -> VerifyOTPMessageResponse
newVerifyOTPMessageResponse
  Int
pHttpStatus_
  VerificationResponse
pVerificationResponse_ =
    VerifyOTPMessageResponse'
      { $sel:httpStatus:VerifyOTPMessageResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:verificationResponse:VerifyOTPMessageResponse' :: VerificationResponse
verificationResponse = VerificationResponse
pVerificationResponse_
      }

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

-- | Undocumented member.
verifyOTPMessageResponse_verificationResponse :: Lens.Lens' VerifyOTPMessageResponse VerificationResponse
verifyOTPMessageResponse_verificationResponse :: Lens' VerifyOTPMessageResponse VerificationResponse
verifyOTPMessageResponse_verificationResponse = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VerifyOTPMessageResponse' {VerificationResponse
verificationResponse :: VerificationResponse
$sel:verificationResponse:VerifyOTPMessageResponse' :: VerifyOTPMessageResponse -> VerificationResponse
verificationResponse} -> VerificationResponse
verificationResponse) (\s :: VerifyOTPMessageResponse
s@VerifyOTPMessageResponse' {} VerificationResponse
a -> VerifyOTPMessageResponse
s {$sel:verificationResponse:VerifyOTPMessageResponse' :: VerificationResponse
verificationResponse = VerificationResponse
a} :: VerifyOTPMessageResponse)

instance Prelude.NFData VerifyOTPMessageResponse where
  rnf :: VerifyOTPMessageResponse -> ()
rnf VerifyOTPMessageResponse' {Int
VerificationResponse
verificationResponse :: VerificationResponse
httpStatus :: Int
$sel:verificationResponse:VerifyOTPMessageResponse' :: VerifyOTPMessageResponse -> VerificationResponse
$sel:httpStatus:VerifyOTPMessageResponse' :: VerifyOTPMessageResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VerificationResponse
verificationResponse