{-# 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.CognitoIdentity.UnlinkDeveloperIdentity
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Unlinks a @DeveloperUserIdentifier@ from an existing identity. Unlinked
-- developer users will be considered new identities next time they are
-- seen. If, for a given Cognito identity, you remove all federated
-- identities as well as the developer user identifier, the Cognito
-- identity becomes inaccessible.
--
-- You must use AWS Developer credentials to call this API.
module Amazonka.CognitoIdentity.UnlinkDeveloperIdentity
  ( -- * Creating a Request
    UnlinkDeveloperIdentity (..),
    newUnlinkDeveloperIdentity,

    -- * Request Lenses
    unlinkDeveloperIdentity_identityId,
    unlinkDeveloperIdentity_identityPoolId,
    unlinkDeveloperIdentity_developerProviderName,
    unlinkDeveloperIdentity_developerUserIdentifier,

    -- * Destructuring the Response
    UnlinkDeveloperIdentityResponse (..),
    newUnlinkDeveloperIdentityResponse,
  )
where

import Amazonka.CognitoIdentity.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

-- | Input to the @UnlinkDeveloperIdentity@ action.
--
-- /See:/ 'newUnlinkDeveloperIdentity' smart constructor.
data UnlinkDeveloperIdentity = UnlinkDeveloperIdentity'
  { -- | A unique identifier in the format REGION:GUID.
    UnlinkDeveloperIdentity -> Text
identityId :: Prelude.Text,
    -- | An identity pool ID in the format REGION:GUID.
    UnlinkDeveloperIdentity -> Text
identityPoolId :: Prelude.Text,
    -- | The \"domain\" by which Cognito will refer to your users.
    UnlinkDeveloperIdentity -> Text
developerProviderName :: Prelude.Text,
    -- | A unique ID used by your backend authentication process to identify a
    -- user.
    UnlinkDeveloperIdentity -> Text
developerUserIdentifier :: Prelude.Text
  }
  deriving (UnlinkDeveloperIdentity -> UnlinkDeveloperIdentity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UnlinkDeveloperIdentity -> UnlinkDeveloperIdentity -> Bool
$c/= :: UnlinkDeveloperIdentity -> UnlinkDeveloperIdentity -> Bool
== :: UnlinkDeveloperIdentity -> UnlinkDeveloperIdentity -> Bool
$c== :: UnlinkDeveloperIdentity -> UnlinkDeveloperIdentity -> Bool
Prelude.Eq, ReadPrec [UnlinkDeveloperIdentity]
ReadPrec UnlinkDeveloperIdentity
Int -> ReadS UnlinkDeveloperIdentity
ReadS [UnlinkDeveloperIdentity]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UnlinkDeveloperIdentity]
$creadListPrec :: ReadPrec [UnlinkDeveloperIdentity]
readPrec :: ReadPrec UnlinkDeveloperIdentity
$creadPrec :: ReadPrec UnlinkDeveloperIdentity
readList :: ReadS [UnlinkDeveloperIdentity]
$creadList :: ReadS [UnlinkDeveloperIdentity]
readsPrec :: Int -> ReadS UnlinkDeveloperIdentity
$creadsPrec :: Int -> ReadS UnlinkDeveloperIdentity
Prelude.Read, Int -> UnlinkDeveloperIdentity -> ShowS
[UnlinkDeveloperIdentity] -> ShowS
UnlinkDeveloperIdentity -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UnlinkDeveloperIdentity] -> ShowS
$cshowList :: [UnlinkDeveloperIdentity] -> ShowS
show :: UnlinkDeveloperIdentity -> String
$cshow :: UnlinkDeveloperIdentity -> String
showsPrec :: Int -> UnlinkDeveloperIdentity -> ShowS
$cshowsPrec :: Int -> UnlinkDeveloperIdentity -> ShowS
Prelude.Show, forall x. Rep UnlinkDeveloperIdentity x -> UnlinkDeveloperIdentity
forall x. UnlinkDeveloperIdentity -> Rep UnlinkDeveloperIdentity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UnlinkDeveloperIdentity x -> UnlinkDeveloperIdentity
$cfrom :: forall x. UnlinkDeveloperIdentity -> Rep UnlinkDeveloperIdentity x
Prelude.Generic)

-- |
-- Create a value of 'UnlinkDeveloperIdentity' 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:
--
-- 'identityId', 'unlinkDeveloperIdentity_identityId' - A unique identifier in the format REGION:GUID.
--
-- 'identityPoolId', 'unlinkDeveloperIdentity_identityPoolId' - An identity pool ID in the format REGION:GUID.
--
-- 'developerProviderName', 'unlinkDeveloperIdentity_developerProviderName' - The \"domain\" by which Cognito will refer to your users.
--
-- 'developerUserIdentifier', 'unlinkDeveloperIdentity_developerUserIdentifier' - A unique ID used by your backend authentication process to identify a
-- user.
newUnlinkDeveloperIdentity ::
  -- | 'identityId'
  Prelude.Text ->
  -- | 'identityPoolId'
  Prelude.Text ->
  -- | 'developerProviderName'
  Prelude.Text ->
  -- | 'developerUserIdentifier'
  Prelude.Text ->
  UnlinkDeveloperIdentity
newUnlinkDeveloperIdentity :: Text -> Text -> Text -> Text -> UnlinkDeveloperIdentity
newUnlinkDeveloperIdentity
  Text
pIdentityId_
  Text
pIdentityPoolId_
  Text
pDeveloperProviderName_
  Text
pDeveloperUserIdentifier_ =
    UnlinkDeveloperIdentity'
      { $sel:identityId:UnlinkDeveloperIdentity' :: Text
identityId = Text
pIdentityId_,
        $sel:identityPoolId:UnlinkDeveloperIdentity' :: Text
identityPoolId = Text
pIdentityPoolId_,
        $sel:developerProviderName:UnlinkDeveloperIdentity' :: Text
developerProviderName = Text
pDeveloperProviderName_,
        $sel:developerUserIdentifier:UnlinkDeveloperIdentity' :: Text
developerUserIdentifier =
          Text
pDeveloperUserIdentifier_
      }

-- | A unique identifier in the format REGION:GUID.
unlinkDeveloperIdentity_identityId :: Lens.Lens' UnlinkDeveloperIdentity Prelude.Text
unlinkDeveloperIdentity_identityId :: Lens' UnlinkDeveloperIdentity Text
unlinkDeveloperIdentity_identityId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UnlinkDeveloperIdentity' {Text
identityId :: Text
$sel:identityId:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
identityId} -> Text
identityId) (\s :: UnlinkDeveloperIdentity
s@UnlinkDeveloperIdentity' {} Text
a -> UnlinkDeveloperIdentity
s {$sel:identityId:UnlinkDeveloperIdentity' :: Text
identityId = Text
a} :: UnlinkDeveloperIdentity)

-- | An identity pool ID in the format REGION:GUID.
unlinkDeveloperIdentity_identityPoolId :: Lens.Lens' UnlinkDeveloperIdentity Prelude.Text
unlinkDeveloperIdentity_identityPoolId :: Lens' UnlinkDeveloperIdentity Text
unlinkDeveloperIdentity_identityPoolId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UnlinkDeveloperIdentity' {Text
identityPoolId :: Text
$sel:identityPoolId:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
identityPoolId} -> Text
identityPoolId) (\s :: UnlinkDeveloperIdentity
s@UnlinkDeveloperIdentity' {} Text
a -> UnlinkDeveloperIdentity
s {$sel:identityPoolId:UnlinkDeveloperIdentity' :: Text
identityPoolId = Text
a} :: UnlinkDeveloperIdentity)

-- | The \"domain\" by which Cognito will refer to your users.
unlinkDeveloperIdentity_developerProviderName :: Lens.Lens' UnlinkDeveloperIdentity Prelude.Text
unlinkDeveloperIdentity_developerProviderName :: Lens' UnlinkDeveloperIdentity Text
unlinkDeveloperIdentity_developerProviderName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UnlinkDeveloperIdentity' {Text
developerProviderName :: Text
$sel:developerProviderName:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
developerProviderName} -> Text
developerProviderName) (\s :: UnlinkDeveloperIdentity
s@UnlinkDeveloperIdentity' {} Text
a -> UnlinkDeveloperIdentity
s {$sel:developerProviderName:UnlinkDeveloperIdentity' :: Text
developerProviderName = Text
a} :: UnlinkDeveloperIdentity)

-- | A unique ID used by your backend authentication process to identify a
-- user.
unlinkDeveloperIdentity_developerUserIdentifier :: Lens.Lens' UnlinkDeveloperIdentity Prelude.Text
unlinkDeveloperIdentity_developerUserIdentifier :: Lens' UnlinkDeveloperIdentity Text
unlinkDeveloperIdentity_developerUserIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UnlinkDeveloperIdentity' {Text
developerUserIdentifier :: Text
$sel:developerUserIdentifier:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
developerUserIdentifier} -> Text
developerUserIdentifier) (\s :: UnlinkDeveloperIdentity
s@UnlinkDeveloperIdentity' {} Text
a -> UnlinkDeveloperIdentity
s {$sel:developerUserIdentifier:UnlinkDeveloperIdentity' :: Text
developerUserIdentifier = Text
a} :: UnlinkDeveloperIdentity)

instance Core.AWSRequest UnlinkDeveloperIdentity where
  type
    AWSResponse UnlinkDeveloperIdentity =
      UnlinkDeveloperIdentityResponse
  request :: (Service -> Service)
-> UnlinkDeveloperIdentity -> Request UnlinkDeveloperIdentity
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 UnlinkDeveloperIdentity
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UnlinkDeveloperIdentity)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      UnlinkDeveloperIdentityResponse
UnlinkDeveloperIdentityResponse'

instance Prelude.Hashable UnlinkDeveloperIdentity where
  hashWithSalt :: Int -> UnlinkDeveloperIdentity -> Int
hashWithSalt Int
_salt UnlinkDeveloperIdentity' {Text
developerUserIdentifier :: Text
developerProviderName :: Text
identityPoolId :: Text
identityId :: Text
$sel:developerUserIdentifier:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:developerProviderName:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:identityPoolId:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:identityId:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
identityId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
identityPoolId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
developerProviderName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
developerUserIdentifier

instance Prelude.NFData UnlinkDeveloperIdentity where
  rnf :: UnlinkDeveloperIdentity -> ()
rnf UnlinkDeveloperIdentity' {Text
developerUserIdentifier :: Text
developerProviderName :: Text
identityPoolId :: Text
identityId :: Text
$sel:developerUserIdentifier:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:developerProviderName:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:identityPoolId:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:identityId:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
identityId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
identityPoolId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
developerProviderName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
developerUserIdentifier

instance Data.ToHeaders UnlinkDeveloperIdentity where
  toHeaders :: UnlinkDeveloperIdentity -> [Header]
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 -> [Header]
Data.=# ( ByteString
"AWSCognitoIdentityService.UnlinkDeveloperIdentity" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UnlinkDeveloperIdentity where
  toJSON :: UnlinkDeveloperIdentity -> Value
toJSON UnlinkDeveloperIdentity' {Text
developerUserIdentifier :: Text
developerProviderName :: Text
identityPoolId :: Text
identityId :: Text
$sel:developerUserIdentifier:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:developerProviderName:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:identityPoolId:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
$sel:identityId:UnlinkDeveloperIdentity' :: UnlinkDeveloperIdentity -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"IdentityId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
identityId),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"IdentityPoolId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
identityPoolId),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"DeveloperProviderName"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
developerProviderName
              ),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"DeveloperUserIdentifier"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
developerUserIdentifier
              )
          ]
      )

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

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

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

-- |
-- Create a value of 'UnlinkDeveloperIdentityResponse' 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.
newUnlinkDeveloperIdentityResponse ::
  UnlinkDeveloperIdentityResponse
newUnlinkDeveloperIdentityResponse :: UnlinkDeveloperIdentityResponse
newUnlinkDeveloperIdentityResponse =
  UnlinkDeveloperIdentityResponse
UnlinkDeveloperIdentityResponse'

instance
  Prelude.NFData
    UnlinkDeveloperIdentityResponse
  where
  rnf :: UnlinkDeveloperIdentityResponse -> ()
rnf UnlinkDeveloperIdentityResponse
_ = ()