{-# 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.CreateIdentityProvider
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates an IdP for a user pool.
module Amazonka.CognitoIdentityProvider.CreateIdentityProvider
  ( -- * Creating a Request
    CreateIdentityProvider (..),
    newCreateIdentityProvider,

    -- * Request Lenses
    createIdentityProvider_attributeMapping,
    createIdentityProvider_idpIdentifiers,
    createIdentityProvider_userPoolId,
    createIdentityProvider_providerName,
    createIdentityProvider_providerType,
    createIdentityProvider_providerDetails,

    -- * Destructuring the Response
    CreateIdentityProviderResponse (..),
    newCreateIdentityProviderResponse,

    -- * Response Lenses
    createIdentityProviderResponse_httpStatus,
    createIdentityProviderResponse_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:/ 'newCreateIdentityProvider' smart constructor.
data CreateIdentityProvider = CreateIdentityProvider'
  { -- | A mapping of IdP attributes to standard and custom user pool attributes.
    CreateIdentityProvider -> Maybe (HashMap Text Text)
attributeMapping :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | A list of IdP identifiers.
    CreateIdentityProvider -> Maybe [Text]
idpIdentifiers :: Prelude.Maybe [Prelude.Text],
    -- | The user pool ID.
    CreateIdentityProvider -> Text
userPoolId :: Prelude.Text,
    -- | The IdP name.
    CreateIdentityProvider -> Text
providerName :: Prelude.Text,
    -- | The IdP type.
    CreateIdentityProvider -> IdentityProviderTypeType
providerType :: IdentityProviderTypeType,
    -- | The IdP details. The following list describes the provider detail keys
    -- for each IdP type.
    --
    -- -   For Google and Login with Amazon:
    --
    --     -   client_id
    --
    --     -   client_secret
    --
    --     -   authorize_scopes
    --
    -- -   For Facebook:
    --
    --     -   client_id
    --
    --     -   client_secret
    --
    --     -   authorize_scopes
    --
    --     -   api_version
    --
    -- -   For Sign in with Apple:
    --
    --     -   client_id
    --
    --     -   team_id
    --
    --     -   key_id
    --
    --     -   private_key
    --
    --     -   authorize_scopes
    --
    -- -   For OpenID Connect (OIDC) providers:
    --
    --     -   client_id
    --
    --     -   client_secret
    --
    --     -   attributes_request_method
    --
    --     -   oidc_issuer
    --
    --     -   authorize_scopes
    --
    --     -   The following keys are only present if Amazon Cognito didn\'t
    --         discover them at the @oidc_issuer@ URL.
    --
    --         -   authorize_url
    --
    --         -   token_url
    --
    --         -   attributes_url
    --
    --         -   jwks_uri
    --
    --     -   Amazon Cognito sets the value of the following keys
    --         automatically. They are read-only.
    --
    --         -   attributes_url_add_attributes
    --
    -- -   For SAML providers:
    --
    --     -   MetadataFile or MetadataURL
    --
    --     -   IDPSignout /optional/
    CreateIdentityProvider -> HashMap Text Text
providerDetails :: Prelude.HashMap Prelude.Text Prelude.Text
  }
  deriving (CreateIdentityProvider -> CreateIdentityProvider -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateIdentityProvider -> CreateIdentityProvider -> Bool
$c/= :: CreateIdentityProvider -> CreateIdentityProvider -> Bool
== :: CreateIdentityProvider -> CreateIdentityProvider -> Bool
$c== :: CreateIdentityProvider -> CreateIdentityProvider -> Bool
Prelude.Eq, ReadPrec [CreateIdentityProvider]
ReadPrec CreateIdentityProvider
Int -> ReadS CreateIdentityProvider
ReadS [CreateIdentityProvider]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateIdentityProvider]
$creadListPrec :: ReadPrec [CreateIdentityProvider]
readPrec :: ReadPrec CreateIdentityProvider
$creadPrec :: ReadPrec CreateIdentityProvider
readList :: ReadS [CreateIdentityProvider]
$creadList :: ReadS [CreateIdentityProvider]
readsPrec :: Int -> ReadS CreateIdentityProvider
$creadsPrec :: Int -> ReadS CreateIdentityProvider
Prelude.Read, Int -> CreateIdentityProvider -> ShowS
[CreateIdentityProvider] -> ShowS
CreateIdentityProvider -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateIdentityProvider] -> ShowS
$cshowList :: [CreateIdentityProvider] -> ShowS
show :: CreateIdentityProvider -> String
$cshow :: CreateIdentityProvider -> String
showsPrec :: Int -> CreateIdentityProvider -> ShowS
$cshowsPrec :: Int -> CreateIdentityProvider -> ShowS
Prelude.Show, forall x. Rep CreateIdentityProvider x -> CreateIdentityProvider
forall x. CreateIdentityProvider -> Rep CreateIdentityProvider x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateIdentityProvider x -> CreateIdentityProvider
$cfrom :: forall x. CreateIdentityProvider -> Rep CreateIdentityProvider x
Prelude.Generic)

-- |
-- Create a value of 'CreateIdentityProvider' 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:
--
-- 'attributeMapping', 'createIdentityProvider_attributeMapping' - A mapping of IdP attributes to standard and custom user pool attributes.
--
-- 'idpIdentifiers', 'createIdentityProvider_idpIdentifiers' - A list of IdP identifiers.
--
-- 'userPoolId', 'createIdentityProvider_userPoolId' - The user pool ID.
--
-- 'providerName', 'createIdentityProvider_providerName' - The IdP name.
--
-- 'providerType', 'createIdentityProvider_providerType' - The IdP type.
--
-- 'providerDetails', 'createIdentityProvider_providerDetails' - The IdP details. The following list describes the provider detail keys
-- for each IdP type.
--
-- -   For Google and Login with Amazon:
--
--     -   client_id
--
--     -   client_secret
--
--     -   authorize_scopes
--
-- -   For Facebook:
--
--     -   client_id
--
--     -   client_secret
--
--     -   authorize_scopes
--
--     -   api_version
--
-- -   For Sign in with Apple:
--
--     -   client_id
--
--     -   team_id
--
--     -   key_id
--
--     -   private_key
--
--     -   authorize_scopes
--
-- -   For OpenID Connect (OIDC) providers:
--
--     -   client_id
--
--     -   client_secret
--
--     -   attributes_request_method
--
--     -   oidc_issuer
--
--     -   authorize_scopes
--
--     -   The following keys are only present if Amazon Cognito didn\'t
--         discover them at the @oidc_issuer@ URL.
--
--         -   authorize_url
--
--         -   token_url
--
--         -   attributes_url
--
--         -   jwks_uri
--
--     -   Amazon Cognito sets the value of the following keys
--         automatically. They are read-only.
--
--         -   attributes_url_add_attributes
--
-- -   For SAML providers:
--
--     -   MetadataFile or MetadataURL
--
--     -   IDPSignout /optional/
newCreateIdentityProvider ::
  -- | 'userPoolId'
  Prelude.Text ->
  -- | 'providerName'
  Prelude.Text ->
  -- | 'providerType'
  IdentityProviderTypeType ->
  CreateIdentityProvider
newCreateIdentityProvider :: Text -> Text -> IdentityProviderTypeType -> CreateIdentityProvider
newCreateIdentityProvider
  Text
pUserPoolId_
  Text
pProviderName_
  IdentityProviderTypeType
pProviderType_ =
    CreateIdentityProvider'
      { $sel:attributeMapping:CreateIdentityProvider' :: Maybe (HashMap Text Text)
attributeMapping =
          forall a. Maybe a
Prelude.Nothing,
        $sel:idpIdentifiers:CreateIdentityProvider' :: Maybe [Text]
idpIdentifiers = forall a. Maybe a
Prelude.Nothing,
        $sel:userPoolId:CreateIdentityProvider' :: Text
userPoolId = Text
pUserPoolId_,
        $sel:providerName:CreateIdentityProvider' :: Text
providerName = Text
pProviderName_,
        $sel:providerType:CreateIdentityProvider' :: IdentityProviderTypeType
providerType = IdentityProviderTypeType
pProviderType_,
        $sel:providerDetails:CreateIdentityProvider' :: HashMap Text Text
providerDetails = forall a. Monoid a => a
Prelude.mempty
      }

-- | A mapping of IdP attributes to standard and custom user pool attributes.
createIdentityProvider_attributeMapping :: Lens.Lens' CreateIdentityProvider (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createIdentityProvider_attributeMapping :: Lens' CreateIdentityProvider (Maybe (HashMap Text Text))
createIdentityProvider_attributeMapping = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIdentityProvider' {Maybe (HashMap Text Text)
attributeMapping :: Maybe (HashMap Text Text)
$sel:attributeMapping:CreateIdentityProvider' :: CreateIdentityProvider -> Maybe (HashMap Text Text)
attributeMapping} -> Maybe (HashMap Text Text)
attributeMapping) (\s :: CreateIdentityProvider
s@CreateIdentityProvider' {} Maybe (HashMap Text Text)
a -> CreateIdentityProvider
s {$sel:attributeMapping:CreateIdentityProvider' :: Maybe (HashMap Text Text)
attributeMapping = Maybe (HashMap Text Text)
a} :: CreateIdentityProvider) 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 s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | A list of IdP identifiers.
createIdentityProvider_idpIdentifiers :: Lens.Lens' CreateIdentityProvider (Prelude.Maybe [Prelude.Text])
createIdentityProvider_idpIdentifiers :: Lens' CreateIdentityProvider (Maybe [Text])
createIdentityProvider_idpIdentifiers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIdentityProvider' {Maybe [Text]
idpIdentifiers :: Maybe [Text]
$sel:idpIdentifiers:CreateIdentityProvider' :: CreateIdentityProvider -> Maybe [Text]
idpIdentifiers} -> Maybe [Text]
idpIdentifiers) (\s :: CreateIdentityProvider
s@CreateIdentityProvider' {} Maybe [Text]
a -> CreateIdentityProvider
s {$sel:idpIdentifiers:CreateIdentityProvider' :: Maybe [Text]
idpIdentifiers = Maybe [Text]
a} :: CreateIdentityProvider) 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 s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

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

-- | The IdP name.
createIdentityProvider_providerName :: Lens.Lens' CreateIdentityProvider Prelude.Text
createIdentityProvider_providerName :: Lens' CreateIdentityProvider Text
createIdentityProvider_providerName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIdentityProvider' {Text
providerName :: Text
$sel:providerName:CreateIdentityProvider' :: CreateIdentityProvider -> Text
providerName} -> Text
providerName) (\s :: CreateIdentityProvider
s@CreateIdentityProvider' {} Text
a -> CreateIdentityProvider
s {$sel:providerName:CreateIdentityProvider' :: Text
providerName = Text
a} :: CreateIdentityProvider)

-- | The IdP type.
createIdentityProvider_providerType :: Lens.Lens' CreateIdentityProvider IdentityProviderTypeType
createIdentityProvider_providerType :: Lens' CreateIdentityProvider IdentityProviderTypeType
createIdentityProvider_providerType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIdentityProvider' {IdentityProviderTypeType
providerType :: IdentityProviderTypeType
$sel:providerType:CreateIdentityProvider' :: CreateIdentityProvider -> IdentityProviderTypeType
providerType} -> IdentityProviderTypeType
providerType) (\s :: CreateIdentityProvider
s@CreateIdentityProvider' {} IdentityProviderTypeType
a -> CreateIdentityProvider
s {$sel:providerType:CreateIdentityProvider' :: IdentityProviderTypeType
providerType = IdentityProviderTypeType
a} :: CreateIdentityProvider)

-- | The IdP details. The following list describes the provider detail keys
-- for each IdP type.
--
-- -   For Google and Login with Amazon:
--
--     -   client_id
--
--     -   client_secret
--
--     -   authorize_scopes
--
-- -   For Facebook:
--
--     -   client_id
--
--     -   client_secret
--
--     -   authorize_scopes
--
--     -   api_version
--
-- -   For Sign in with Apple:
--
--     -   client_id
--
--     -   team_id
--
--     -   key_id
--
--     -   private_key
--
--     -   authorize_scopes
--
-- -   For OpenID Connect (OIDC) providers:
--
--     -   client_id
--
--     -   client_secret
--
--     -   attributes_request_method
--
--     -   oidc_issuer
--
--     -   authorize_scopes
--
--     -   The following keys are only present if Amazon Cognito didn\'t
--         discover them at the @oidc_issuer@ URL.
--
--         -   authorize_url
--
--         -   token_url
--
--         -   attributes_url
--
--         -   jwks_uri
--
--     -   Amazon Cognito sets the value of the following keys
--         automatically. They are read-only.
--
--         -   attributes_url_add_attributes
--
-- -   For SAML providers:
--
--     -   MetadataFile or MetadataURL
--
--     -   IDPSignout /optional/
createIdentityProvider_providerDetails :: Lens.Lens' CreateIdentityProvider (Prelude.HashMap Prelude.Text Prelude.Text)
createIdentityProvider_providerDetails :: Lens' CreateIdentityProvider (HashMap Text Text)
createIdentityProvider_providerDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIdentityProvider' {HashMap Text Text
providerDetails :: HashMap Text Text
$sel:providerDetails:CreateIdentityProvider' :: CreateIdentityProvider -> HashMap Text Text
providerDetails} -> HashMap Text Text
providerDetails) (\s :: CreateIdentityProvider
s@CreateIdentityProvider' {} HashMap Text Text
a -> CreateIdentityProvider
s {$sel:providerDetails:CreateIdentityProvider' :: HashMap Text Text
providerDetails = HashMap Text Text
a} :: CreateIdentityProvider) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest CreateIdentityProvider where
  type
    AWSResponse CreateIdentityProvider =
      CreateIdentityProviderResponse
  request :: (Service -> Service)
-> CreateIdentityProvider -> Request CreateIdentityProvider
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 CreateIdentityProvider
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateIdentityProvider)))
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 -> CreateIdentityProviderResponse
CreateIdentityProviderResponse'
            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 CreateIdentityProvider where
  hashWithSalt :: Int -> CreateIdentityProvider -> Int
hashWithSalt Int
_salt CreateIdentityProvider' {Maybe [Text]
Maybe (HashMap Text Text)
Text
HashMap Text Text
IdentityProviderTypeType
providerDetails :: HashMap Text Text
providerType :: IdentityProviderTypeType
providerName :: Text
userPoolId :: Text
idpIdentifiers :: Maybe [Text]
attributeMapping :: Maybe (HashMap Text Text)
$sel:providerDetails:CreateIdentityProvider' :: CreateIdentityProvider -> HashMap Text Text
$sel:providerType:CreateIdentityProvider' :: CreateIdentityProvider -> IdentityProviderTypeType
$sel:providerName:CreateIdentityProvider' :: CreateIdentityProvider -> Text
$sel:userPoolId:CreateIdentityProvider' :: CreateIdentityProvider -> Text
$sel:idpIdentifiers:CreateIdentityProvider' :: CreateIdentityProvider -> Maybe [Text]
$sel:attributeMapping:CreateIdentityProvider' :: CreateIdentityProvider -> Maybe (HashMap Text Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
attributeMapping
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
idpIdentifiers
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
userPoolId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
providerName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` IdentityProviderTypeType
providerType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` HashMap Text Text
providerDetails

instance Prelude.NFData CreateIdentityProvider where
  rnf :: CreateIdentityProvider -> ()
rnf CreateIdentityProvider' {Maybe [Text]
Maybe (HashMap Text Text)
Text
HashMap Text Text
IdentityProviderTypeType
providerDetails :: HashMap Text Text
providerType :: IdentityProviderTypeType
providerName :: Text
userPoolId :: Text
idpIdentifiers :: Maybe [Text]
attributeMapping :: Maybe (HashMap Text Text)
$sel:providerDetails:CreateIdentityProvider' :: CreateIdentityProvider -> HashMap Text Text
$sel:providerType:CreateIdentityProvider' :: CreateIdentityProvider -> IdentityProviderTypeType
$sel:providerName:CreateIdentityProvider' :: CreateIdentityProvider -> Text
$sel:userPoolId:CreateIdentityProvider' :: CreateIdentityProvider -> Text
$sel:idpIdentifiers:CreateIdentityProvider' :: CreateIdentityProvider -> Maybe [Text]
$sel:attributeMapping:CreateIdentityProvider' :: CreateIdentityProvider -> Maybe (HashMap Text Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
attributeMapping
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
idpIdentifiers
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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
providerName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf IdentityProviderTypeType
providerType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf HashMap Text Text
providerDetails

instance Data.ToHeaders CreateIdentityProvider where
  toHeaders :: CreateIdentityProvider -> 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.CreateIdentityProvider" ::
                          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 CreateIdentityProvider where
  toJSON :: CreateIdentityProvider -> Value
toJSON CreateIdentityProvider' {Maybe [Text]
Maybe (HashMap Text Text)
Text
HashMap Text Text
IdentityProviderTypeType
providerDetails :: HashMap Text Text
providerType :: IdentityProviderTypeType
providerName :: Text
userPoolId :: Text
idpIdentifiers :: Maybe [Text]
attributeMapping :: Maybe (HashMap Text Text)
$sel:providerDetails:CreateIdentityProvider' :: CreateIdentityProvider -> HashMap Text Text
$sel:providerType:CreateIdentityProvider' :: CreateIdentityProvider -> IdentityProviderTypeType
$sel:providerName:CreateIdentityProvider' :: CreateIdentityProvider -> Text
$sel:userPoolId:CreateIdentityProvider' :: CreateIdentityProvider -> Text
$sel:idpIdentifiers:CreateIdentityProvider' :: CreateIdentityProvider -> Maybe [Text]
$sel:attributeMapping:CreateIdentityProvider' :: CreateIdentityProvider -> Maybe (HashMap Text Text)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AttributeMapping" 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 (HashMap Text Text)
attributeMapping,
            (Key
"IdpIdentifiers" 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]
idpIdentifiers,
            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
"ProviderName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
providerName),
            forall a. a -> Maybe a
Prelude.Just (Key
"ProviderType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= IdentityProviderTypeType
providerType),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ProviderDetails" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= HashMap Text Text
providerDetails)
          ]
      )

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

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

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

-- |
-- Create a value of 'CreateIdentityProviderResponse' 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', 'createIdentityProviderResponse_httpStatus' - The response's http status code.
--
-- 'identityProvider', 'createIdentityProviderResponse_identityProvider' - The newly created IdP object.
newCreateIdentityProviderResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'identityProvider'
  IdentityProviderType ->
  CreateIdentityProviderResponse
newCreateIdentityProviderResponse :: Int -> IdentityProviderType -> CreateIdentityProviderResponse
newCreateIdentityProviderResponse
  Int
pHttpStatus_
  IdentityProviderType
pIdentityProvider_ =
    CreateIdentityProviderResponse'
      { $sel:httpStatus:CreateIdentityProviderResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:identityProvider:CreateIdentityProviderResponse' :: IdentityProviderType
identityProvider = IdentityProviderType
pIdentityProvider_
      }

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

-- | The newly created IdP object.
createIdentityProviderResponse_identityProvider :: Lens.Lens' CreateIdentityProviderResponse IdentityProviderType
createIdentityProviderResponse_identityProvider :: Lens' CreateIdentityProviderResponse IdentityProviderType
createIdentityProviderResponse_identityProvider = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIdentityProviderResponse' {IdentityProviderType
identityProvider :: IdentityProviderType
$sel:identityProvider:CreateIdentityProviderResponse' :: CreateIdentityProviderResponse -> IdentityProviderType
identityProvider} -> IdentityProviderType
identityProvider) (\s :: CreateIdentityProviderResponse
s@CreateIdentityProviderResponse' {} IdentityProviderType
a -> CreateIdentityProviderResponse
s {$sel:identityProvider:CreateIdentityProviderResponse' :: IdentityProviderType
identityProvider = IdentityProviderType
a} :: CreateIdentityProviderResponse)

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