{-# 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.CognitoIdentityProvider.GetIdentityProviderByIdentifier
-- 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 specified IdP.
module Amazonka.CognitoIdentityProvider.GetIdentityProviderByIdentifier
  ( -- * Creating a Request
    GetIdentityProviderByIdentifier (..),
    newGetIdentityProviderByIdentifier,

    -- * Request Lenses
    getIdentityProviderByIdentifier_userPoolId,
    getIdentityProviderByIdentifier_idpIdentifier,

    -- * Destructuring the Response
    GetIdentityProviderByIdentifierResponse (..),
    newGetIdentityProviderByIdentifierResponse,

    -- * Response Lenses
    getIdentityProviderByIdentifierResponse_httpStatus,
    getIdentityProviderByIdentifierResponse_identityProvider,
  )
where

import Amazonka.CognitoIdentityProvider.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:/ 'newGetIdentityProviderByIdentifier' smart constructor.
data GetIdentityProviderByIdentifier = GetIdentityProviderByIdentifier'
  { -- | The user pool ID.
    GetIdentityProviderByIdentifier -> Text
userPoolId :: Prelude.Text,
    -- | The IdP identifier.
    GetIdentityProviderByIdentifier -> Text
idpIdentifier :: Prelude.Text
  }
  deriving (GetIdentityProviderByIdentifier
-> GetIdentityProviderByIdentifier -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetIdentityProviderByIdentifier
-> GetIdentityProviderByIdentifier -> Bool
$c/= :: GetIdentityProviderByIdentifier
-> GetIdentityProviderByIdentifier -> Bool
== :: GetIdentityProviderByIdentifier
-> GetIdentityProviderByIdentifier -> Bool
$c== :: GetIdentityProviderByIdentifier
-> GetIdentityProviderByIdentifier -> Bool
Prelude.Eq, ReadPrec [GetIdentityProviderByIdentifier]
ReadPrec GetIdentityProviderByIdentifier
Int -> ReadS GetIdentityProviderByIdentifier
ReadS [GetIdentityProviderByIdentifier]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetIdentityProviderByIdentifier]
$creadListPrec :: ReadPrec [GetIdentityProviderByIdentifier]
readPrec :: ReadPrec GetIdentityProviderByIdentifier
$creadPrec :: ReadPrec GetIdentityProviderByIdentifier
readList :: ReadS [GetIdentityProviderByIdentifier]
$creadList :: ReadS [GetIdentityProviderByIdentifier]
readsPrec :: Int -> ReadS GetIdentityProviderByIdentifier
$creadsPrec :: Int -> ReadS GetIdentityProviderByIdentifier
Prelude.Read, Int -> GetIdentityProviderByIdentifier -> ShowS
[GetIdentityProviderByIdentifier] -> ShowS
GetIdentityProviderByIdentifier -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetIdentityProviderByIdentifier] -> ShowS
$cshowList :: [GetIdentityProviderByIdentifier] -> ShowS
show :: GetIdentityProviderByIdentifier -> String
$cshow :: GetIdentityProviderByIdentifier -> String
showsPrec :: Int -> GetIdentityProviderByIdentifier -> ShowS
$cshowsPrec :: Int -> GetIdentityProviderByIdentifier -> ShowS
Prelude.Show, forall x.
Rep GetIdentityProviderByIdentifier x
-> GetIdentityProviderByIdentifier
forall x.
GetIdentityProviderByIdentifier
-> Rep GetIdentityProviderByIdentifier x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetIdentityProviderByIdentifier x
-> GetIdentityProviderByIdentifier
$cfrom :: forall x.
GetIdentityProviderByIdentifier
-> Rep GetIdentityProviderByIdentifier x
Prelude.Generic)

-- |
-- Create a value of 'GetIdentityProviderByIdentifier' 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:
--
-- 'userPoolId', 'getIdentityProviderByIdentifier_userPoolId' - The user pool ID.
--
-- 'idpIdentifier', 'getIdentityProviderByIdentifier_idpIdentifier' - The IdP identifier.
newGetIdentityProviderByIdentifier ::
  -- | 'userPoolId'
  Prelude.Text ->
  -- | 'idpIdentifier'
  Prelude.Text ->
  GetIdentityProviderByIdentifier
newGetIdentityProviderByIdentifier :: Text -> Text -> GetIdentityProviderByIdentifier
newGetIdentityProviderByIdentifier
  Text
pUserPoolId_
  Text
pIdpIdentifier_ =
    GetIdentityProviderByIdentifier'
      { $sel:userPoolId:GetIdentityProviderByIdentifier' :: Text
userPoolId =
          Text
pUserPoolId_,
        $sel:idpIdentifier:GetIdentityProviderByIdentifier' :: Text
idpIdentifier = Text
pIdpIdentifier_
      }

-- | The user pool ID.
getIdentityProviderByIdentifier_userPoolId :: Lens.Lens' GetIdentityProviderByIdentifier Prelude.Text
getIdentityProviderByIdentifier_userPoolId :: Lens' GetIdentityProviderByIdentifier Text
getIdentityProviderByIdentifier_userPoolId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetIdentityProviderByIdentifier' {Text
userPoolId :: Text
$sel:userPoolId:GetIdentityProviderByIdentifier' :: GetIdentityProviderByIdentifier -> Text
userPoolId} -> Text
userPoolId) (\s :: GetIdentityProviderByIdentifier
s@GetIdentityProviderByIdentifier' {} Text
a -> GetIdentityProviderByIdentifier
s {$sel:userPoolId:GetIdentityProviderByIdentifier' :: Text
userPoolId = Text
a} :: GetIdentityProviderByIdentifier)

-- | The IdP identifier.
getIdentityProviderByIdentifier_idpIdentifier :: Lens.Lens' GetIdentityProviderByIdentifier Prelude.Text
getIdentityProviderByIdentifier_idpIdentifier :: Lens' GetIdentityProviderByIdentifier Text
getIdentityProviderByIdentifier_idpIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetIdentityProviderByIdentifier' {Text
idpIdentifier :: Text
$sel:idpIdentifier:GetIdentityProviderByIdentifier' :: GetIdentityProviderByIdentifier -> Text
idpIdentifier} -> Text
idpIdentifier) (\s :: GetIdentityProviderByIdentifier
s@GetIdentityProviderByIdentifier' {} Text
a -> GetIdentityProviderByIdentifier
s {$sel:idpIdentifier:GetIdentityProviderByIdentifier' :: Text
idpIdentifier = Text
a} :: GetIdentityProviderByIdentifier)

instance
  Core.AWSRequest
    GetIdentityProviderByIdentifier
  where
  type
    AWSResponse GetIdentityProviderByIdentifier =
      GetIdentityProviderByIdentifierResponse
  request :: (Service -> Service)
-> GetIdentityProviderByIdentifier
-> Request GetIdentityProviderByIdentifier
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 GetIdentityProviderByIdentifier
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse GetIdentityProviderByIdentifier)))
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
-> IdentityProviderType -> GetIdentityProviderByIdentifierResponse
GetIdentityProviderByIdentifierResponse'
            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.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"IdentityProvider")
      )

instance
  Prelude.Hashable
    GetIdentityProviderByIdentifier
  where
  hashWithSalt :: Int -> GetIdentityProviderByIdentifier -> Int
hashWithSalt
    Int
_salt
    GetIdentityProviderByIdentifier' {Text
idpIdentifier :: Text
userPoolId :: Text
$sel:idpIdentifier:GetIdentityProviderByIdentifier' :: GetIdentityProviderByIdentifier -> Text
$sel:userPoolId:GetIdentityProviderByIdentifier' :: GetIdentityProviderByIdentifier -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
userPoolId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
idpIdentifier

instance
  Prelude.NFData
    GetIdentityProviderByIdentifier
  where
  rnf :: GetIdentityProviderByIdentifier -> ()
rnf GetIdentityProviderByIdentifier' {Text
idpIdentifier :: Text
userPoolId :: Text
$sel:idpIdentifier:GetIdentityProviderByIdentifier' :: GetIdentityProviderByIdentifier -> Text
$sel:userPoolId:GetIdentityProviderByIdentifier' :: GetIdentityProviderByIdentifier -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
userPoolId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
idpIdentifier

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

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

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

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

-- |
-- Create a value of 'GetIdentityProviderByIdentifierResponse' 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', 'getIdentityProviderByIdentifierResponse_httpStatus' - The response's http status code.
--
-- 'identityProvider', 'getIdentityProviderByIdentifierResponse_identityProvider' - The identity provider details.
newGetIdentityProviderByIdentifierResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'identityProvider'
  IdentityProviderType ->
  GetIdentityProviderByIdentifierResponse
newGetIdentityProviderByIdentifierResponse :: Int
-> IdentityProviderType -> GetIdentityProviderByIdentifierResponse
newGetIdentityProviderByIdentifierResponse
  Int
pHttpStatus_
  IdentityProviderType
pIdentityProvider_ =
    GetIdentityProviderByIdentifierResponse'
      { $sel:httpStatus:GetIdentityProviderByIdentifierResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:identityProvider:GetIdentityProviderByIdentifierResponse' :: IdentityProviderType
identityProvider =
          IdentityProviderType
pIdentityProvider_
      }

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

-- | The identity provider details.
getIdentityProviderByIdentifierResponse_identityProvider :: Lens.Lens' GetIdentityProviderByIdentifierResponse IdentityProviderType
getIdentityProviderByIdentifierResponse_identityProvider :: Lens' GetIdentityProviderByIdentifierResponse IdentityProviderType
getIdentityProviderByIdentifierResponse_identityProvider = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetIdentityProviderByIdentifierResponse' {IdentityProviderType
identityProvider :: IdentityProviderType
$sel:identityProvider:GetIdentityProviderByIdentifierResponse' :: GetIdentityProviderByIdentifierResponse -> IdentityProviderType
identityProvider} -> IdentityProviderType
identityProvider) (\s :: GetIdentityProviderByIdentifierResponse
s@GetIdentityProviderByIdentifierResponse' {} IdentityProviderType
a -> GetIdentityProviderByIdentifierResponse
s {$sel:identityProvider:GetIdentityProviderByIdentifierResponse' :: IdentityProviderType
identityProvider = IdentityProviderType
a} :: GetIdentityProviderByIdentifierResponse)

instance
  Prelude.NFData
    GetIdentityProviderByIdentifierResponse
  where
  rnf :: GetIdentityProviderByIdentifierResponse -> ()
rnf GetIdentityProviderByIdentifierResponse' {Int
IdentityProviderType
identityProvider :: IdentityProviderType
httpStatus :: Int
$sel:identityProvider:GetIdentityProviderByIdentifierResponse' :: GetIdentityProviderByIdentifierResponse -> IdentityProviderType
$sel:httpStatus:GetIdentityProviderByIdentifierResponse' :: GetIdentityProviderByIdentifierResponse -> 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 IdentityProviderType
identityProvider