{-# 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.AssociateUserToPermissionGroup
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Adds a user account to a permission group to grant permissions for
-- actions a user can perform in FinSpace.
module Amazonka.FinSpaceData.AssociateUserToPermissionGroup
  ( -- * Creating a Request
    AssociateUserToPermissionGroup (..),
    newAssociateUserToPermissionGroup,

    -- * Request Lenses
    associateUserToPermissionGroup_clientToken,
    associateUserToPermissionGroup_permissionGroupId,
    associateUserToPermissionGroup_userId,

    -- * Destructuring the Response
    AssociateUserToPermissionGroupResponse (..),
    newAssociateUserToPermissionGroupResponse,

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

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

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

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

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

instance
  Core.AWSRequest
    AssociateUserToPermissionGroup
  where
  type
    AWSResponse AssociateUserToPermissionGroup =
      AssociateUserToPermissionGroupResponse
  request :: (Service -> Service)
-> AssociateUserToPermissionGroup
-> Request AssociateUserToPermissionGroup
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 AssociateUserToPermissionGroup
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse AssociateUserToPermissionGroup)))
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 -> AssociateUserToPermissionGroupResponse
AssociateUserToPermissionGroupResponse'
            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
    AssociateUserToPermissionGroup
  where
  hashWithSalt :: Int -> AssociateUserToPermissionGroup -> Int
hashWithSalt
    Int
_salt
    AssociateUserToPermissionGroup' {Maybe Text
Text
userId :: Text
permissionGroupId :: Text
clientToken :: Maybe Text
$sel:userId:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Text
$sel:permissionGroupId:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Text
$sel:clientToken:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> 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
    AssociateUserToPermissionGroup
  where
  rnf :: AssociateUserToPermissionGroup -> ()
rnf AssociateUserToPermissionGroup' {Maybe Text
Text
userId :: Text
permissionGroupId :: Text
clientToken :: Maybe Text
$sel:userId:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Text
$sel:permissionGroupId:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Text
$sel:clientToken:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> 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
    AssociateUserToPermissionGroup
  where
  toHeaders :: AssociateUserToPermissionGroup -> 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 AssociateUserToPermissionGroup where
  toJSON :: AssociateUserToPermissionGroup -> Value
toJSON AssociateUserToPermissionGroup' {Maybe Text
Text
userId :: Text
permissionGroupId :: Text
clientToken :: Maybe Text
$sel:userId:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Text
$sel:permissionGroupId:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Text
$sel:clientToken:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [(Key
"clientToken" 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
clientToken]
      )

instance Data.ToPath AssociateUserToPermissionGroup where
  toPath :: AssociateUserToPermissionGroup -> ByteString
toPath AssociateUserToPermissionGroup' {Maybe Text
Text
userId :: Text
permissionGroupId :: Text
clientToken :: Maybe Text
$sel:userId:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Text
$sel:permissionGroupId:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> Text
$sel:clientToken:AssociateUserToPermissionGroup' :: AssociateUserToPermissionGroup -> 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 AssociateUserToPermissionGroup where
  toQuery :: AssociateUserToPermissionGroup -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

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

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

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