{-# 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.QuickSight.CreateIAMPolicyAssignment
-- 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 assignment with one specified IAM policy, identified by its
-- Amazon Resource Name (ARN). This policy assignment is attached to the
-- specified groups or users of Amazon QuickSight. Assignment names are
-- unique per Amazon Web Services account. To avoid overwriting rules in
-- other namespaces, use assignment names that are unique.
module Amazonka.QuickSight.CreateIAMPolicyAssignment
  ( -- * Creating a Request
    CreateIAMPolicyAssignment (..),
    newCreateIAMPolicyAssignment,

    -- * Request Lenses
    createIAMPolicyAssignment_identities,
    createIAMPolicyAssignment_policyArn,
    createIAMPolicyAssignment_awsAccountId,
    createIAMPolicyAssignment_assignmentName,
    createIAMPolicyAssignment_assignmentStatus,
    createIAMPolicyAssignment_namespace,

    -- * Destructuring the Response
    CreateIAMPolicyAssignmentResponse (..),
    newCreateIAMPolicyAssignmentResponse,

    -- * Response Lenses
    createIAMPolicyAssignmentResponse_assignmentId,
    createIAMPolicyAssignmentResponse_assignmentName,
    createIAMPolicyAssignmentResponse_assignmentStatus,
    createIAMPolicyAssignmentResponse_identities,
    createIAMPolicyAssignmentResponse_policyArn,
    createIAMPolicyAssignmentResponse_requestId,
    createIAMPolicyAssignmentResponse_status,
  )
where

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 Amazonka.QuickSight.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newCreateIAMPolicyAssignment' smart constructor.
data CreateIAMPolicyAssignment = CreateIAMPolicyAssignment'
  { -- | The Amazon QuickSight users, groups, or both that you want to assign the
    -- policy to.
    CreateIAMPolicyAssignment -> Maybe (HashMap Text [Text])
identities :: Prelude.Maybe (Prelude.HashMap Prelude.Text [Prelude.Text]),
    -- | The ARN for the IAM policy to apply to the Amazon QuickSight users and
    -- groups specified in this assignment.
    CreateIAMPolicyAssignment -> Maybe Text
policyArn :: Prelude.Maybe Prelude.Text,
    -- | The ID of the Amazon Web Services account where you want to assign an
    -- IAM policy to Amazon QuickSight users or groups.
    CreateIAMPolicyAssignment -> Text
awsAccountId :: Prelude.Text,
    -- | The name of the assignment, also called a rule. It must be unique within
    -- an Amazon Web Services account.
    CreateIAMPolicyAssignment -> Text
assignmentName :: Prelude.Text,
    -- | The status of the assignment. Possible values are as follows:
    --
    -- -   @ENABLED@ - Anything specified in this assignment is used when
    --     creating the data source.
    --
    -- -   @DISABLED@ - This assignment isn\'t used when creating the data
    --     source.
    --
    -- -   @DRAFT@ - This assignment is an unfinished draft and isn\'t used
    --     when creating the data source.
    CreateIAMPolicyAssignment -> AssignmentStatus
assignmentStatus :: AssignmentStatus,
    -- | The namespace that contains the assignment.
    CreateIAMPolicyAssignment -> Text
namespace :: Prelude.Text
  }
  deriving (CreateIAMPolicyAssignment -> CreateIAMPolicyAssignment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateIAMPolicyAssignment -> CreateIAMPolicyAssignment -> Bool
$c/= :: CreateIAMPolicyAssignment -> CreateIAMPolicyAssignment -> Bool
== :: CreateIAMPolicyAssignment -> CreateIAMPolicyAssignment -> Bool
$c== :: CreateIAMPolicyAssignment -> CreateIAMPolicyAssignment -> Bool
Prelude.Eq, ReadPrec [CreateIAMPolicyAssignment]
ReadPrec CreateIAMPolicyAssignment
Int -> ReadS CreateIAMPolicyAssignment
ReadS [CreateIAMPolicyAssignment]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateIAMPolicyAssignment]
$creadListPrec :: ReadPrec [CreateIAMPolicyAssignment]
readPrec :: ReadPrec CreateIAMPolicyAssignment
$creadPrec :: ReadPrec CreateIAMPolicyAssignment
readList :: ReadS [CreateIAMPolicyAssignment]
$creadList :: ReadS [CreateIAMPolicyAssignment]
readsPrec :: Int -> ReadS CreateIAMPolicyAssignment
$creadsPrec :: Int -> ReadS CreateIAMPolicyAssignment
Prelude.Read, Int -> CreateIAMPolicyAssignment -> ShowS
[CreateIAMPolicyAssignment] -> ShowS
CreateIAMPolicyAssignment -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateIAMPolicyAssignment] -> ShowS
$cshowList :: [CreateIAMPolicyAssignment] -> ShowS
show :: CreateIAMPolicyAssignment -> String
$cshow :: CreateIAMPolicyAssignment -> String
showsPrec :: Int -> CreateIAMPolicyAssignment -> ShowS
$cshowsPrec :: Int -> CreateIAMPolicyAssignment -> ShowS
Prelude.Show, forall x.
Rep CreateIAMPolicyAssignment x -> CreateIAMPolicyAssignment
forall x.
CreateIAMPolicyAssignment -> Rep CreateIAMPolicyAssignment x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateIAMPolicyAssignment x -> CreateIAMPolicyAssignment
$cfrom :: forall x.
CreateIAMPolicyAssignment -> Rep CreateIAMPolicyAssignment x
Prelude.Generic)

-- |
-- Create a value of 'CreateIAMPolicyAssignment' 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:
--
-- 'identities', 'createIAMPolicyAssignment_identities' - The Amazon QuickSight users, groups, or both that you want to assign the
-- policy to.
--
-- 'policyArn', 'createIAMPolicyAssignment_policyArn' - The ARN for the IAM policy to apply to the Amazon QuickSight users and
-- groups specified in this assignment.
--
-- 'awsAccountId', 'createIAMPolicyAssignment_awsAccountId' - The ID of the Amazon Web Services account where you want to assign an
-- IAM policy to Amazon QuickSight users or groups.
--
-- 'assignmentName', 'createIAMPolicyAssignment_assignmentName' - The name of the assignment, also called a rule. It must be unique within
-- an Amazon Web Services account.
--
-- 'assignmentStatus', 'createIAMPolicyAssignment_assignmentStatus' - The status of the assignment. Possible values are as follows:
--
-- -   @ENABLED@ - Anything specified in this assignment is used when
--     creating the data source.
--
-- -   @DISABLED@ - This assignment isn\'t used when creating the data
--     source.
--
-- -   @DRAFT@ - This assignment is an unfinished draft and isn\'t used
--     when creating the data source.
--
-- 'namespace', 'createIAMPolicyAssignment_namespace' - The namespace that contains the assignment.
newCreateIAMPolicyAssignment ::
  -- | 'awsAccountId'
  Prelude.Text ->
  -- | 'assignmentName'
  Prelude.Text ->
  -- | 'assignmentStatus'
  AssignmentStatus ->
  -- | 'namespace'
  Prelude.Text ->
  CreateIAMPolicyAssignment
newCreateIAMPolicyAssignment :: Text
-> Text -> AssignmentStatus -> Text -> CreateIAMPolicyAssignment
newCreateIAMPolicyAssignment
  Text
pAwsAccountId_
  Text
pAssignmentName_
  AssignmentStatus
pAssignmentStatus_
  Text
pNamespace_ =
    CreateIAMPolicyAssignment'
      { $sel:identities:CreateIAMPolicyAssignment' :: Maybe (HashMap Text [Text])
identities =
          forall a. Maybe a
Prelude.Nothing,
        $sel:policyArn:CreateIAMPolicyAssignment' :: Maybe Text
policyArn = forall a. Maybe a
Prelude.Nothing,
        $sel:awsAccountId:CreateIAMPolicyAssignment' :: Text
awsAccountId = Text
pAwsAccountId_,
        $sel:assignmentName:CreateIAMPolicyAssignment' :: Text
assignmentName = Text
pAssignmentName_,
        $sel:assignmentStatus:CreateIAMPolicyAssignment' :: AssignmentStatus
assignmentStatus = AssignmentStatus
pAssignmentStatus_,
        $sel:namespace:CreateIAMPolicyAssignment' :: Text
namespace = Text
pNamespace_
      }

-- | The Amazon QuickSight users, groups, or both that you want to assign the
-- policy to.
createIAMPolicyAssignment_identities :: Lens.Lens' CreateIAMPolicyAssignment (Prelude.Maybe (Prelude.HashMap Prelude.Text [Prelude.Text]))
createIAMPolicyAssignment_identities :: Lens' CreateIAMPolicyAssignment (Maybe (HashMap Text [Text]))
createIAMPolicyAssignment_identities = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignment' {Maybe (HashMap Text [Text])
identities :: Maybe (HashMap Text [Text])
$sel:identities:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe (HashMap Text [Text])
identities} -> Maybe (HashMap Text [Text])
identities) (\s :: CreateIAMPolicyAssignment
s@CreateIAMPolicyAssignment' {} Maybe (HashMap Text [Text])
a -> CreateIAMPolicyAssignment
s {$sel:identities:CreateIAMPolicyAssignment' :: Maybe (HashMap Text [Text])
identities = Maybe (HashMap Text [Text])
a} :: CreateIAMPolicyAssignment) 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 ARN for the IAM policy to apply to the Amazon QuickSight users and
-- groups specified in this assignment.
createIAMPolicyAssignment_policyArn :: Lens.Lens' CreateIAMPolicyAssignment (Prelude.Maybe Prelude.Text)
createIAMPolicyAssignment_policyArn :: Lens' CreateIAMPolicyAssignment (Maybe Text)
createIAMPolicyAssignment_policyArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignment' {Maybe Text
policyArn :: Maybe Text
$sel:policyArn:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe Text
policyArn} -> Maybe Text
policyArn) (\s :: CreateIAMPolicyAssignment
s@CreateIAMPolicyAssignment' {} Maybe Text
a -> CreateIAMPolicyAssignment
s {$sel:policyArn:CreateIAMPolicyAssignment' :: Maybe Text
policyArn = Maybe Text
a} :: CreateIAMPolicyAssignment)

-- | The ID of the Amazon Web Services account where you want to assign an
-- IAM policy to Amazon QuickSight users or groups.
createIAMPolicyAssignment_awsAccountId :: Lens.Lens' CreateIAMPolicyAssignment Prelude.Text
createIAMPolicyAssignment_awsAccountId :: Lens' CreateIAMPolicyAssignment Text
createIAMPolicyAssignment_awsAccountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignment' {Text
awsAccountId :: Text
$sel:awsAccountId:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
awsAccountId} -> Text
awsAccountId) (\s :: CreateIAMPolicyAssignment
s@CreateIAMPolicyAssignment' {} Text
a -> CreateIAMPolicyAssignment
s {$sel:awsAccountId:CreateIAMPolicyAssignment' :: Text
awsAccountId = Text
a} :: CreateIAMPolicyAssignment)

-- | The name of the assignment, also called a rule. It must be unique within
-- an Amazon Web Services account.
createIAMPolicyAssignment_assignmentName :: Lens.Lens' CreateIAMPolicyAssignment Prelude.Text
createIAMPolicyAssignment_assignmentName :: Lens' CreateIAMPolicyAssignment Text
createIAMPolicyAssignment_assignmentName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignment' {Text
assignmentName :: Text
$sel:assignmentName:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
assignmentName} -> Text
assignmentName) (\s :: CreateIAMPolicyAssignment
s@CreateIAMPolicyAssignment' {} Text
a -> CreateIAMPolicyAssignment
s {$sel:assignmentName:CreateIAMPolicyAssignment' :: Text
assignmentName = Text
a} :: CreateIAMPolicyAssignment)

-- | The status of the assignment. Possible values are as follows:
--
-- -   @ENABLED@ - Anything specified in this assignment is used when
--     creating the data source.
--
-- -   @DISABLED@ - This assignment isn\'t used when creating the data
--     source.
--
-- -   @DRAFT@ - This assignment is an unfinished draft and isn\'t used
--     when creating the data source.
createIAMPolicyAssignment_assignmentStatus :: Lens.Lens' CreateIAMPolicyAssignment AssignmentStatus
createIAMPolicyAssignment_assignmentStatus :: Lens' CreateIAMPolicyAssignment AssignmentStatus
createIAMPolicyAssignment_assignmentStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignment' {AssignmentStatus
assignmentStatus :: AssignmentStatus
$sel:assignmentStatus:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> AssignmentStatus
assignmentStatus} -> AssignmentStatus
assignmentStatus) (\s :: CreateIAMPolicyAssignment
s@CreateIAMPolicyAssignment' {} AssignmentStatus
a -> CreateIAMPolicyAssignment
s {$sel:assignmentStatus:CreateIAMPolicyAssignment' :: AssignmentStatus
assignmentStatus = AssignmentStatus
a} :: CreateIAMPolicyAssignment)

-- | The namespace that contains the assignment.
createIAMPolicyAssignment_namespace :: Lens.Lens' CreateIAMPolicyAssignment Prelude.Text
createIAMPolicyAssignment_namespace :: Lens' CreateIAMPolicyAssignment Text
createIAMPolicyAssignment_namespace = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignment' {Text
namespace :: Text
$sel:namespace:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
namespace} -> Text
namespace) (\s :: CreateIAMPolicyAssignment
s@CreateIAMPolicyAssignment' {} Text
a -> CreateIAMPolicyAssignment
s {$sel:namespace:CreateIAMPolicyAssignment' :: Text
namespace = Text
a} :: CreateIAMPolicyAssignment)

instance Core.AWSRequest CreateIAMPolicyAssignment where
  type
    AWSResponse CreateIAMPolicyAssignment =
      CreateIAMPolicyAssignmentResponse
  request :: (Service -> Service)
-> CreateIAMPolicyAssignment -> Request CreateIAMPolicyAssignment
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 CreateIAMPolicyAssignment
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateIAMPolicyAssignment)))
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 ->
          Maybe Text
-> Maybe Text
-> Maybe AssignmentStatus
-> Maybe (HashMap Text [Text])
-> Maybe Text
-> Maybe Text
-> Int
-> CreateIAMPolicyAssignmentResponse
CreateIAMPolicyAssignmentResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"AssignmentId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"AssignmentName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"AssignmentStatus")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Identities" forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"PolicyArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"RequestId")
            forall (f :: * -> *) a b. Applicative f => 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 CreateIAMPolicyAssignment where
  hashWithSalt :: Int -> CreateIAMPolicyAssignment -> Int
hashWithSalt Int
_salt CreateIAMPolicyAssignment' {Maybe Text
Maybe (HashMap Text [Text])
Text
AssignmentStatus
namespace :: Text
assignmentStatus :: AssignmentStatus
assignmentName :: Text
awsAccountId :: Text
policyArn :: Maybe Text
identities :: Maybe (HashMap Text [Text])
$sel:namespace:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:assignmentStatus:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> AssignmentStatus
$sel:assignmentName:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:awsAccountId:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:policyArn:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe Text
$sel:identities:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe (HashMap Text [Text])
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text [Text])
identities
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
policyArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
awsAccountId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assignmentName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AssignmentStatus
assignmentStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
namespace

instance Prelude.NFData CreateIAMPolicyAssignment where
  rnf :: CreateIAMPolicyAssignment -> ()
rnf CreateIAMPolicyAssignment' {Maybe Text
Maybe (HashMap Text [Text])
Text
AssignmentStatus
namespace :: Text
assignmentStatus :: AssignmentStatus
assignmentName :: Text
awsAccountId :: Text
policyArn :: Maybe Text
identities :: Maybe (HashMap Text [Text])
$sel:namespace:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:assignmentStatus:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> AssignmentStatus
$sel:assignmentName:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:awsAccountId:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:policyArn:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe Text
$sel:identities:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe (HashMap Text [Text])
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text [Text])
identities
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
policyArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
awsAccountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assignmentName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AssignmentStatus
assignmentStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
namespace

instance Data.ToHeaders CreateIAMPolicyAssignment where
  toHeaders :: CreateIAMPolicyAssignment -> 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.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateIAMPolicyAssignment where
  toJSON :: CreateIAMPolicyAssignment -> Value
toJSON CreateIAMPolicyAssignment' {Maybe Text
Maybe (HashMap Text [Text])
Text
AssignmentStatus
namespace :: Text
assignmentStatus :: AssignmentStatus
assignmentName :: Text
awsAccountId :: Text
policyArn :: Maybe Text
identities :: Maybe (HashMap Text [Text])
$sel:namespace:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:assignmentStatus:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> AssignmentStatus
$sel:assignmentName:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:awsAccountId:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:policyArn:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe Text
$sel:identities:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe (HashMap Text [Text])
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Identities" 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])
identities,
            (Key
"PolicyArn" 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
policyArn,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"AssignmentName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
assignmentName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"AssignmentStatus" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= AssignmentStatus
assignmentStatus)
          ]
      )

instance Data.ToPath CreateIAMPolicyAssignment where
  toPath :: CreateIAMPolicyAssignment -> ByteString
toPath CreateIAMPolicyAssignment' {Maybe Text
Maybe (HashMap Text [Text])
Text
AssignmentStatus
namespace :: Text
assignmentStatus :: AssignmentStatus
assignmentName :: Text
awsAccountId :: Text
policyArn :: Maybe Text
identities :: Maybe (HashMap Text [Text])
$sel:namespace:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:assignmentStatus:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> AssignmentStatus
$sel:assignmentName:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:awsAccountId:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Text
$sel:policyArn:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe Text
$sel:identities:CreateIAMPolicyAssignment' :: CreateIAMPolicyAssignment -> Maybe (HashMap Text [Text])
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/accounts/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
awsAccountId,
        ByteString
"/namespaces/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
namespace,
        ByteString
"/iam-policy-assignments/"
      ]

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

-- | /See:/ 'newCreateIAMPolicyAssignmentResponse' smart constructor.
data CreateIAMPolicyAssignmentResponse = CreateIAMPolicyAssignmentResponse'
  { -- | The ID for the assignment.
    CreateIAMPolicyAssignmentResponse -> Maybe Text
assignmentId :: Prelude.Maybe Prelude.Text,
    -- | The name of the assignment. This name must be unique within the Amazon
    -- Web Services account.
    CreateIAMPolicyAssignmentResponse -> Maybe Text
assignmentName :: Prelude.Maybe Prelude.Text,
    -- | The status of the assignment. Possible values are as follows:
    --
    -- -   @ENABLED@ - Anything specified in this assignment is used when
    --     creating the data source.
    --
    -- -   @DISABLED@ - This assignment isn\'t used when creating the data
    --     source.
    --
    -- -   @DRAFT@ - This assignment is an unfinished draft and isn\'t used
    --     when creating the data source.
    CreateIAMPolicyAssignmentResponse -> Maybe AssignmentStatus
assignmentStatus :: Prelude.Maybe AssignmentStatus,
    -- | The Amazon QuickSight users, groups, or both that the IAM policy is
    -- assigned to.
    CreateIAMPolicyAssignmentResponse -> Maybe (HashMap Text [Text])
identities :: Prelude.Maybe (Prelude.HashMap Prelude.Text [Prelude.Text]),
    -- | The ARN for the IAM policy that is applied to the Amazon QuickSight
    -- users and groups specified in this assignment.
    CreateIAMPolicyAssignmentResponse -> Maybe Text
policyArn :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Web Services request ID for this operation.
    CreateIAMPolicyAssignmentResponse -> Maybe Text
requestId :: Prelude.Maybe Prelude.Text,
    -- | The HTTP status of the request.
    CreateIAMPolicyAssignmentResponse -> Int
status :: Prelude.Int
  }
  deriving (CreateIAMPolicyAssignmentResponse
-> CreateIAMPolicyAssignmentResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateIAMPolicyAssignmentResponse
-> CreateIAMPolicyAssignmentResponse -> Bool
$c/= :: CreateIAMPolicyAssignmentResponse
-> CreateIAMPolicyAssignmentResponse -> Bool
== :: CreateIAMPolicyAssignmentResponse
-> CreateIAMPolicyAssignmentResponse -> Bool
$c== :: CreateIAMPolicyAssignmentResponse
-> CreateIAMPolicyAssignmentResponse -> Bool
Prelude.Eq, ReadPrec [CreateIAMPolicyAssignmentResponse]
ReadPrec CreateIAMPolicyAssignmentResponse
Int -> ReadS CreateIAMPolicyAssignmentResponse
ReadS [CreateIAMPolicyAssignmentResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateIAMPolicyAssignmentResponse]
$creadListPrec :: ReadPrec [CreateIAMPolicyAssignmentResponse]
readPrec :: ReadPrec CreateIAMPolicyAssignmentResponse
$creadPrec :: ReadPrec CreateIAMPolicyAssignmentResponse
readList :: ReadS [CreateIAMPolicyAssignmentResponse]
$creadList :: ReadS [CreateIAMPolicyAssignmentResponse]
readsPrec :: Int -> ReadS CreateIAMPolicyAssignmentResponse
$creadsPrec :: Int -> ReadS CreateIAMPolicyAssignmentResponse
Prelude.Read, Int -> CreateIAMPolicyAssignmentResponse -> ShowS
[CreateIAMPolicyAssignmentResponse] -> ShowS
CreateIAMPolicyAssignmentResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateIAMPolicyAssignmentResponse] -> ShowS
$cshowList :: [CreateIAMPolicyAssignmentResponse] -> ShowS
show :: CreateIAMPolicyAssignmentResponse -> String
$cshow :: CreateIAMPolicyAssignmentResponse -> String
showsPrec :: Int -> CreateIAMPolicyAssignmentResponse -> ShowS
$cshowsPrec :: Int -> CreateIAMPolicyAssignmentResponse -> ShowS
Prelude.Show, forall x.
Rep CreateIAMPolicyAssignmentResponse x
-> CreateIAMPolicyAssignmentResponse
forall x.
CreateIAMPolicyAssignmentResponse
-> Rep CreateIAMPolicyAssignmentResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateIAMPolicyAssignmentResponse x
-> CreateIAMPolicyAssignmentResponse
$cfrom :: forall x.
CreateIAMPolicyAssignmentResponse
-> Rep CreateIAMPolicyAssignmentResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateIAMPolicyAssignmentResponse' 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:
--
-- 'assignmentId', 'createIAMPolicyAssignmentResponse_assignmentId' - The ID for the assignment.
--
-- 'assignmentName', 'createIAMPolicyAssignmentResponse_assignmentName' - The name of the assignment. This name must be unique within the Amazon
-- Web Services account.
--
-- 'assignmentStatus', 'createIAMPolicyAssignmentResponse_assignmentStatus' - The status of the assignment. Possible values are as follows:
--
-- -   @ENABLED@ - Anything specified in this assignment is used when
--     creating the data source.
--
-- -   @DISABLED@ - This assignment isn\'t used when creating the data
--     source.
--
-- -   @DRAFT@ - This assignment is an unfinished draft and isn\'t used
--     when creating the data source.
--
-- 'identities', 'createIAMPolicyAssignmentResponse_identities' - The Amazon QuickSight users, groups, or both that the IAM policy is
-- assigned to.
--
-- 'policyArn', 'createIAMPolicyAssignmentResponse_policyArn' - The ARN for the IAM policy that is applied to the Amazon QuickSight
-- users and groups specified in this assignment.
--
-- 'requestId', 'createIAMPolicyAssignmentResponse_requestId' - The Amazon Web Services request ID for this operation.
--
-- 'status', 'createIAMPolicyAssignmentResponse_status' - The HTTP status of the request.
newCreateIAMPolicyAssignmentResponse ::
  -- | 'status'
  Prelude.Int ->
  CreateIAMPolicyAssignmentResponse
newCreateIAMPolicyAssignmentResponse :: Int -> CreateIAMPolicyAssignmentResponse
newCreateIAMPolicyAssignmentResponse Int
pStatus_ =
  CreateIAMPolicyAssignmentResponse'
    { $sel:assignmentId:CreateIAMPolicyAssignmentResponse' :: Maybe Text
assignmentId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:assignmentName:CreateIAMPolicyAssignmentResponse' :: Maybe Text
assignmentName = forall a. Maybe a
Prelude.Nothing,
      $sel:assignmentStatus:CreateIAMPolicyAssignmentResponse' :: Maybe AssignmentStatus
assignmentStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:identities:CreateIAMPolicyAssignmentResponse' :: Maybe (HashMap Text [Text])
identities = forall a. Maybe a
Prelude.Nothing,
      $sel:policyArn:CreateIAMPolicyAssignmentResponse' :: Maybe Text
policyArn = forall a. Maybe a
Prelude.Nothing,
      $sel:requestId:CreateIAMPolicyAssignmentResponse' :: Maybe Text
requestId = forall a. Maybe a
Prelude.Nothing,
      $sel:status:CreateIAMPolicyAssignmentResponse' :: Int
status = Int
pStatus_
    }

-- | The ID for the assignment.
createIAMPolicyAssignmentResponse_assignmentId :: Lens.Lens' CreateIAMPolicyAssignmentResponse (Prelude.Maybe Prelude.Text)
createIAMPolicyAssignmentResponse_assignmentId :: Lens' CreateIAMPolicyAssignmentResponse (Maybe Text)
createIAMPolicyAssignmentResponse_assignmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignmentResponse' {Maybe Text
assignmentId :: Maybe Text
$sel:assignmentId:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe Text
assignmentId} -> Maybe Text
assignmentId) (\s :: CreateIAMPolicyAssignmentResponse
s@CreateIAMPolicyAssignmentResponse' {} Maybe Text
a -> CreateIAMPolicyAssignmentResponse
s {$sel:assignmentId:CreateIAMPolicyAssignmentResponse' :: Maybe Text
assignmentId = Maybe Text
a} :: CreateIAMPolicyAssignmentResponse)

-- | The name of the assignment. This name must be unique within the Amazon
-- Web Services account.
createIAMPolicyAssignmentResponse_assignmentName :: Lens.Lens' CreateIAMPolicyAssignmentResponse (Prelude.Maybe Prelude.Text)
createIAMPolicyAssignmentResponse_assignmentName :: Lens' CreateIAMPolicyAssignmentResponse (Maybe Text)
createIAMPolicyAssignmentResponse_assignmentName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignmentResponse' {Maybe Text
assignmentName :: Maybe Text
$sel:assignmentName:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe Text
assignmentName} -> Maybe Text
assignmentName) (\s :: CreateIAMPolicyAssignmentResponse
s@CreateIAMPolicyAssignmentResponse' {} Maybe Text
a -> CreateIAMPolicyAssignmentResponse
s {$sel:assignmentName:CreateIAMPolicyAssignmentResponse' :: Maybe Text
assignmentName = Maybe Text
a} :: CreateIAMPolicyAssignmentResponse)

-- | The status of the assignment. Possible values are as follows:
--
-- -   @ENABLED@ - Anything specified in this assignment is used when
--     creating the data source.
--
-- -   @DISABLED@ - This assignment isn\'t used when creating the data
--     source.
--
-- -   @DRAFT@ - This assignment is an unfinished draft and isn\'t used
--     when creating the data source.
createIAMPolicyAssignmentResponse_assignmentStatus :: Lens.Lens' CreateIAMPolicyAssignmentResponse (Prelude.Maybe AssignmentStatus)
createIAMPolicyAssignmentResponse_assignmentStatus :: Lens' CreateIAMPolicyAssignmentResponse (Maybe AssignmentStatus)
createIAMPolicyAssignmentResponse_assignmentStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignmentResponse' {Maybe AssignmentStatus
assignmentStatus :: Maybe AssignmentStatus
$sel:assignmentStatus:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe AssignmentStatus
assignmentStatus} -> Maybe AssignmentStatus
assignmentStatus) (\s :: CreateIAMPolicyAssignmentResponse
s@CreateIAMPolicyAssignmentResponse' {} Maybe AssignmentStatus
a -> CreateIAMPolicyAssignmentResponse
s {$sel:assignmentStatus:CreateIAMPolicyAssignmentResponse' :: Maybe AssignmentStatus
assignmentStatus = Maybe AssignmentStatus
a} :: CreateIAMPolicyAssignmentResponse)

-- | The Amazon QuickSight users, groups, or both that the IAM policy is
-- assigned to.
createIAMPolicyAssignmentResponse_identities :: Lens.Lens' CreateIAMPolicyAssignmentResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text [Prelude.Text]))
createIAMPolicyAssignmentResponse_identities :: Lens'
  CreateIAMPolicyAssignmentResponse (Maybe (HashMap Text [Text]))
createIAMPolicyAssignmentResponse_identities = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignmentResponse' {Maybe (HashMap Text [Text])
identities :: Maybe (HashMap Text [Text])
$sel:identities:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe (HashMap Text [Text])
identities} -> Maybe (HashMap Text [Text])
identities) (\s :: CreateIAMPolicyAssignmentResponse
s@CreateIAMPolicyAssignmentResponse' {} Maybe (HashMap Text [Text])
a -> CreateIAMPolicyAssignmentResponse
s {$sel:identities:CreateIAMPolicyAssignmentResponse' :: Maybe (HashMap Text [Text])
identities = Maybe (HashMap Text [Text])
a} :: CreateIAMPolicyAssignmentResponse) 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 ARN for the IAM policy that is applied to the Amazon QuickSight
-- users and groups specified in this assignment.
createIAMPolicyAssignmentResponse_policyArn :: Lens.Lens' CreateIAMPolicyAssignmentResponse (Prelude.Maybe Prelude.Text)
createIAMPolicyAssignmentResponse_policyArn :: Lens' CreateIAMPolicyAssignmentResponse (Maybe Text)
createIAMPolicyAssignmentResponse_policyArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignmentResponse' {Maybe Text
policyArn :: Maybe Text
$sel:policyArn:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe Text
policyArn} -> Maybe Text
policyArn) (\s :: CreateIAMPolicyAssignmentResponse
s@CreateIAMPolicyAssignmentResponse' {} Maybe Text
a -> CreateIAMPolicyAssignmentResponse
s {$sel:policyArn:CreateIAMPolicyAssignmentResponse' :: Maybe Text
policyArn = Maybe Text
a} :: CreateIAMPolicyAssignmentResponse)

-- | The Amazon Web Services request ID for this operation.
createIAMPolicyAssignmentResponse_requestId :: Lens.Lens' CreateIAMPolicyAssignmentResponse (Prelude.Maybe Prelude.Text)
createIAMPolicyAssignmentResponse_requestId :: Lens' CreateIAMPolicyAssignmentResponse (Maybe Text)
createIAMPolicyAssignmentResponse_requestId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignmentResponse' {Maybe Text
requestId :: Maybe Text
$sel:requestId:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe Text
requestId} -> Maybe Text
requestId) (\s :: CreateIAMPolicyAssignmentResponse
s@CreateIAMPolicyAssignmentResponse' {} Maybe Text
a -> CreateIAMPolicyAssignmentResponse
s {$sel:requestId:CreateIAMPolicyAssignmentResponse' :: Maybe Text
requestId = Maybe Text
a} :: CreateIAMPolicyAssignmentResponse)

-- | The HTTP status of the request.
createIAMPolicyAssignmentResponse_status :: Lens.Lens' CreateIAMPolicyAssignmentResponse Prelude.Int
createIAMPolicyAssignmentResponse_status :: Lens' CreateIAMPolicyAssignmentResponse Int
createIAMPolicyAssignmentResponse_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateIAMPolicyAssignmentResponse' {Int
status :: Int
$sel:status:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Int
status} -> Int
status) (\s :: CreateIAMPolicyAssignmentResponse
s@CreateIAMPolicyAssignmentResponse' {} Int
a -> CreateIAMPolicyAssignmentResponse
s {$sel:status:CreateIAMPolicyAssignmentResponse' :: Int
status = Int
a} :: CreateIAMPolicyAssignmentResponse)

instance
  Prelude.NFData
    CreateIAMPolicyAssignmentResponse
  where
  rnf :: CreateIAMPolicyAssignmentResponse -> ()
rnf CreateIAMPolicyAssignmentResponse' {Int
Maybe Text
Maybe (HashMap Text [Text])
Maybe AssignmentStatus
status :: Int
requestId :: Maybe Text
policyArn :: Maybe Text
identities :: Maybe (HashMap Text [Text])
assignmentStatus :: Maybe AssignmentStatus
assignmentName :: Maybe Text
assignmentId :: Maybe Text
$sel:status:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Int
$sel:requestId:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe Text
$sel:policyArn:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe Text
$sel:identities:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe (HashMap Text [Text])
$sel:assignmentStatus:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe AssignmentStatus
$sel:assignmentName:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe Text
$sel:assignmentId:CreateIAMPolicyAssignmentResponse' :: CreateIAMPolicyAssignmentResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
assignmentId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
assignmentName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AssignmentStatus
assignmentStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text [Text])
identities
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
policyArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
requestId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
status