{-# 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.FinSpaceData.DisassociateUserFromPermissionGroup
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Removes a user account from a permission group.
module Amazonka.FinSpaceData.DisassociateUserFromPermissionGroup
  ( -- * Creating a Request
    DisassociateUserFromPermissionGroup (..),
    newDisassociateUserFromPermissionGroup,

    -- * Request Lenses
    disassociateUserFromPermissionGroup_clientToken,
    disassociateUserFromPermissionGroup_permissionGroupId,
    disassociateUserFromPermissionGroup_userId,

    -- * Destructuring the Response
    DisassociateUserFromPermissionGroupResponse (..),
    newDisassociateUserFromPermissionGroupResponse,

    -- * Response Lenses
    disassociateUserFromPermissionGroupResponse_statusCode,
  )
where

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

-- | /See:/ 'newDisassociateUserFromPermissionGroup' smart constructor.
data DisassociateUserFromPermissionGroup = DisassociateUserFromPermissionGroup'
  { -- | A token that ensures idempotency. This token expires in 10 minutes.
    DisassociateUserFromPermissionGroup -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The unique identifier for the permission group.
    DisassociateUserFromPermissionGroup -> Text
permissionGroupId :: Prelude.Text,
    -- | The unique identifier for the user.
    DisassociateUserFromPermissionGroup -> Text
userId :: Prelude.Text
  }
  deriving (DisassociateUserFromPermissionGroup
-> DisassociateUserFromPermissionGroup -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisassociateUserFromPermissionGroup
-> DisassociateUserFromPermissionGroup -> Bool
$c/= :: DisassociateUserFromPermissionGroup
-> DisassociateUserFromPermissionGroup -> Bool
== :: DisassociateUserFromPermissionGroup
-> DisassociateUserFromPermissionGroup -> Bool
$c== :: DisassociateUserFromPermissionGroup
-> DisassociateUserFromPermissionGroup -> Bool
Prelude.Eq, ReadPrec [DisassociateUserFromPermissionGroup]
ReadPrec DisassociateUserFromPermissionGroup
Int -> ReadS DisassociateUserFromPermissionGroup
ReadS [DisassociateUserFromPermissionGroup]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DisassociateUserFromPermissionGroup]
$creadListPrec :: ReadPrec [DisassociateUserFromPermissionGroup]
readPrec :: ReadPrec DisassociateUserFromPermissionGroup
$creadPrec :: ReadPrec DisassociateUserFromPermissionGroup
readList :: ReadS [DisassociateUserFromPermissionGroup]
$creadList :: ReadS [DisassociateUserFromPermissionGroup]
readsPrec :: Int -> ReadS DisassociateUserFromPermissionGroup
$creadsPrec :: Int -> ReadS DisassociateUserFromPermissionGroup
Prelude.Read, Int -> DisassociateUserFromPermissionGroup -> ShowS
[DisassociateUserFromPermissionGroup] -> ShowS
DisassociateUserFromPermissionGroup -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DisassociateUserFromPermissionGroup] -> ShowS
$cshowList :: [DisassociateUserFromPermissionGroup] -> ShowS
show :: DisassociateUserFromPermissionGroup -> String
$cshow :: DisassociateUserFromPermissionGroup -> String
showsPrec :: Int -> DisassociateUserFromPermissionGroup -> ShowS
$cshowsPrec :: Int -> DisassociateUserFromPermissionGroup -> ShowS
Prelude.Show, forall x.
Rep DisassociateUserFromPermissionGroup x
-> DisassociateUserFromPermissionGroup
forall x.
DisassociateUserFromPermissionGroup
-> Rep DisassociateUserFromPermissionGroup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DisassociateUserFromPermissionGroup x
-> DisassociateUserFromPermissionGroup
$cfrom :: forall x.
DisassociateUserFromPermissionGroup
-> Rep DisassociateUserFromPermissionGroup x
Prelude.Generic)

-- |
-- Create a value of 'DisassociateUserFromPermissionGroup' 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:
--
-- 'clientToken', 'disassociateUserFromPermissionGroup_clientToken' - A token that ensures idempotency. This token expires in 10 minutes.
--
-- 'permissionGroupId', 'disassociateUserFromPermissionGroup_permissionGroupId' - The unique identifier for the permission group.
--
-- 'userId', 'disassociateUserFromPermissionGroup_userId' - The unique identifier for the user.
newDisassociateUserFromPermissionGroup ::
  -- | 'permissionGroupId'
  Prelude.Text ->
  -- | 'userId'
  Prelude.Text ->
  DisassociateUserFromPermissionGroup
newDisassociateUserFromPermissionGroup :: Text -> Text -> DisassociateUserFromPermissionGroup
newDisassociateUserFromPermissionGroup
  Text
pPermissionGroupId_
  Text
pUserId_ =
    DisassociateUserFromPermissionGroup'
      { $sel:clientToken:DisassociateUserFromPermissionGroup' :: Maybe Text
clientToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:permissionGroupId:DisassociateUserFromPermissionGroup' :: Text
permissionGroupId =
          Text
pPermissionGroupId_,
        $sel:userId:DisassociateUserFromPermissionGroup' :: Text
userId = Text
pUserId_
      }

-- | A token that ensures idempotency. This token expires in 10 minutes.
disassociateUserFromPermissionGroup_clientToken :: Lens.Lens' DisassociateUserFromPermissionGroup (Prelude.Maybe Prelude.Text)
disassociateUserFromPermissionGroup_clientToken :: Lens' DisassociateUserFromPermissionGroup (Maybe Text)
disassociateUserFromPermissionGroup_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateUserFromPermissionGroup' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: DisassociateUserFromPermissionGroup
s@DisassociateUserFromPermissionGroup' {} Maybe Text
a -> DisassociateUserFromPermissionGroup
s {$sel:clientToken:DisassociateUserFromPermissionGroup' :: Maybe Text
clientToken = Maybe Text
a} :: DisassociateUserFromPermissionGroup)

-- | The unique identifier for the permission group.
disassociateUserFromPermissionGroup_permissionGroupId :: Lens.Lens' DisassociateUserFromPermissionGroup Prelude.Text
disassociateUserFromPermissionGroup_permissionGroupId :: Lens' DisassociateUserFromPermissionGroup Text
disassociateUserFromPermissionGroup_permissionGroupId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateUserFromPermissionGroup' {Text
permissionGroupId :: Text
$sel:permissionGroupId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
permissionGroupId} -> Text
permissionGroupId) (\s :: DisassociateUserFromPermissionGroup
s@DisassociateUserFromPermissionGroup' {} Text
a -> DisassociateUserFromPermissionGroup
s {$sel:permissionGroupId:DisassociateUserFromPermissionGroup' :: Text
permissionGroupId = Text
a} :: DisassociateUserFromPermissionGroup)

-- | The unique identifier for the user.
disassociateUserFromPermissionGroup_userId :: Lens.Lens' DisassociateUserFromPermissionGroup Prelude.Text
disassociateUserFromPermissionGroup_userId :: Lens' DisassociateUserFromPermissionGroup Text
disassociateUserFromPermissionGroup_userId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateUserFromPermissionGroup' {Text
userId :: Text
$sel:userId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
userId} -> Text
userId) (\s :: DisassociateUserFromPermissionGroup
s@DisassociateUserFromPermissionGroup' {} Text
a -> DisassociateUserFromPermissionGroup
s {$sel:userId:DisassociateUserFromPermissionGroup' :: Text
userId = Text
a} :: DisassociateUserFromPermissionGroup)

instance
  Core.AWSRequest
    DisassociateUserFromPermissionGroup
  where
  type
    AWSResponse DisassociateUserFromPermissionGroup =
      DisassociateUserFromPermissionGroupResponse
  request :: (Service -> Service)
-> DisassociateUserFromPermissionGroup
-> Request DisassociateUserFromPermissionGroup
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.delete (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DisassociateUserFromPermissionGroup
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DisassociateUserFromPermissionGroup)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> DisassociateUserFromPermissionGroupResponse
DisassociateUserFromPermissionGroupResponse'
            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))
      )

instance
  Prelude.Hashable
    DisassociateUserFromPermissionGroup
  where
  hashWithSalt :: Int -> DisassociateUserFromPermissionGroup -> Int
hashWithSalt
    Int
_salt
    DisassociateUserFromPermissionGroup' {Maybe Text
Text
userId :: Text
permissionGroupId :: Text
clientToken :: Maybe Text
$sel:userId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
$sel:permissionGroupId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
$sel:clientToken:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
permissionGroupId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
userId

instance
  Prelude.NFData
    DisassociateUserFromPermissionGroup
  where
  rnf :: DisassociateUserFromPermissionGroup -> ()
rnf DisassociateUserFromPermissionGroup' {Maybe Text
Text
userId :: Text
permissionGroupId :: Text
clientToken :: Maybe Text
$sel:userId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
$sel:permissionGroupId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
$sel:clientToken:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
permissionGroupId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
userId

instance
  Data.ToHeaders
    DisassociateUserFromPermissionGroup
  where
  toHeaders :: DisassociateUserFromPermissionGroup -> 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.ToPath
    DisassociateUserFromPermissionGroup
  where
  toPath :: DisassociateUserFromPermissionGroup -> ByteString
toPath DisassociateUserFromPermissionGroup' {Maybe Text
Text
userId :: Text
permissionGroupId :: Text
clientToken :: Maybe Text
$sel:userId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
$sel:permissionGroupId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
$sel:clientToken:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/permission-group/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
permissionGroupId,
        ByteString
"/users/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
userId
      ]

instance
  Data.ToQuery
    DisassociateUserFromPermissionGroup
  where
  toQuery :: DisassociateUserFromPermissionGroup -> QueryString
toQuery DisassociateUserFromPermissionGroup' {Maybe Text
Text
userId :: Text
permissionGroupId :: Text
clientToken :: Maybe Text
$sel:userId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
$sel:permissionGroupId:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Text
$sel:clientToken:DisassociateUserFromPermissionGroup' :: DisassociateUserFromPermissionGroup -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"clientToken" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
clientToken]

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

-- |
-- Create a value of 'DisassociateUserFromPermissionGroupResponse' 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:
--
-- 'statusCode', 'disassociateUserFromPermissionGroupResponse_statusCode' - The returned status code of the response.
newDisassociateUserFromPermissionGroupResponse ::
  -- | 'statusCode'
  Prelude.Int ->
  DisassociateUserFromPermissionGroupResponse
newDisassociateUserFromPermissionGroupResponse :: Int -> DisassociateUserFromPermissionGroupResponse
newDisassociateUserFromPermissionGroupResponse
  Int
pStatusCode_ =
    DisassociateUserFromPermissionGroupResponse'
      { $sel:statusCode:DisassociateUserFromPermissionGroupResponse' :: Int
statusCode =
          Int
pStatusCode_
      }

-- | The returned status code of the response.
disassociateUserFromPermissionGroupResponse_statusCode :: Lens.Lens' DisassociateUserFromPermissionGroupResponse Prelude.Int
disassociateUserFromPermissionGroupResponse_statusCode :: Lens' DisassociateUserFromPermissionGroupResponse Int
disassociateUserFromPermissionGroupResponse_statusCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateUserFromPermissionGroupResponse' {Int
statusCode :: Int
$sel:statusCode:DisassociateUserFromPermissionGroupResponse' :: DisassociateUserFromPermissionGroupResponse -> Int
statusCode} -> Int
statusCode) (\s :: DisassociateUserFromPermissionGroupResponse
s@DisassociateUserFromPermissionGroupResponse' {} Int
a -> DisassociateUserFromPermissionGroupResponse
s {$sel:statusCode:DisassociateUserFromPermissionGroupResponse' :: Int
statusCode = Int
a} :: DisassociateUserFromPermissionGroupResponse)

instance
  Prelude.NFData
    DisassociateUserFromPermissionGroupResponse
  where
  rnf :: DisassociateUserFromPermissionGroupResponse -> ()
rnf DisassociateUserFromPermissionGroupResponse' {Int
statusCode :: Int
$sel:statusCode:DisassociateUserFromPermissionGroupResponse' :: DisassociateUserFromPermissionGroupResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
statusCode