{-# 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.IAM.ListPoliciesGrantingServiceAccess
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves a list of policies that the IAM identity (user, group, or
-- role) can use to access each specified service.
--
-- This operation does not use other policy types when determining whether
-- a resource could access a service. These other policy types include
-- resource-based policies, access control lists, Organizations policies,
-- IAM permissions boundaries, and STS assume role policies. It only
-- applies permissions policy logic. For more about the evaluation of
-- policy types, see
-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics Evaluating policies>
-- in the /IAM User Guide/.
--
-- The list of policies returned by the operation depends on the ARN of the
-- identity that you provide.
--
-- -   __User__ – The list of policies includes the managed and inline
--     policies that are attached to the user directly. The list also
--     includes any additional managed and inline policies that are
--     attached to the group to which the user belongs.
--
-- -   __Group__ – The list of policies includes only the managed and
--     inline policies that are attached to the group directly. Policies
--     that are attached to the group’s user are not included.
--
-- -   __Role__ – The list of policies includes only the managed and inline
--     policies that are attached to the role.
--
-- For each managed policy, this operation returns the ARN and policy name.
-- For each inline policy, it returns the policy name and the entity to
-- which it is attached. Inline policies do not have an ARN. For more
-- information about these policy types, see
-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html Managed policies and inline policies>
-- in the /IAM User Guide/.
--
-- Policies that are attached to users and roles as permissions boundaries
-- are not returned. To view which managed policy is currently used to set
-- the permissions boundary for a user or role, use the GetUser or GetRole
-- operations.
module Amazonka.IAM.ListPoliciesGrantingServiceAccess
  ( -- * Creating a Request
    ListPoliciesGrantingServiceAccess (..),
    newListPoliciesGrantingServiceAccess,

    -- * Request Lenses
    listPoliciesGrantingServiceAccess_marker,
    listPoliciesGrantingServiceAccess_arn,
    listPoliciesGrantingServiceAccess_serviceNamespaces,

    -- * Destructuring the Response
    ListPoliciesGrantingServiceAccessResponse (..),
    newListPoliciesGrantingServiceAccessResponse,

    -- * Response Lenses
    listPoliciesGrantingServiceAccessResponse_isTruncated,
    listPoliciesGrantingServiceAccessResponse_marker,
    listPoliciesGrantingServiceAccessResponse_httpStatus,
    listPoliciesGrantingServiceAccessResponse_policiesGrantingServiceAccess,
  )
where

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

-- | /See:/ 'newListPoliciesGrantingServiceAccess' smart constructor.
data ListPoliciesGrantingServiceAccess = ListPoliciesGrantingServiceAccess'
  { -- | Use this parameter only when paginating results and only after you
    -- receive a response indicating that the results are truncated. Set it to
    -- the value of the @Marker@ element in the response that you received to
    -- indicate where the next call should start.
    ListPoliciesGrantingServiceAccess -> Maybe Text
marker :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the IAM identity (user, group, or role) whose policies you
    -- want to list.
    ListPoliciesGrantingServiceAccess -> Text
arn :: Prelude.Text,
    -- | The service namespace for the Amazon Web Services services whose
    -- policies you want to list.
    --
    -- To learn the service namespace for a service, see
    -- <https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html Actions, resources, and condition keys for Amazon Web Services services>
    -- in the /IAM User Guide/. Choose the name of the service to view details
    -- for that service. In the first paragraph, find the service prefix. For
    -- example, @(service prefix: a4b)@. For more information about service
    -- namespaces, see
    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces Amazon Web Services service namespaces>
    -- in the /Amazon Web Services General Reference/.
    ListPoliciesGrantingServiceAccess -> NonEmpty Text
serviceNamespaces :: Prelude.NonEmpty Prelude.Text
  }
  deriving (ListPoliciesGrantingServiceAccess
-> ListPoliciesGrantingServiceAccess -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListPoliciesGrantingServiceAccess
-> ListPoliciesGrantingServiceAccess -> Bool
$c/= :: ListPoliciesGrantingServiceAccess
-> ListPoliciesGrantingServiceAccess -> Bool
== :: ListPoliciesGrantingServiceAccess
-> ListPoliciesGrantingServiceAccess -> Bool
$c== :: ListPoliciesGrantingServiceAccess
-> ListPoliciesGrantingServiceAccess -> Bool
Prelude.Eq, ReadPrec [ListPoliciesGrantingServiceAccess]
ReadPrec ListPoliciesGrantingServiceAccess
Int -> ReadS ListPoliciesGrantingServiceAccess
ReadS [ListPoliciesGrantingServiceAccess]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListPoliciesGrantingServiceAccess]
$creadListPrec :: ReadPrec [ListPoliciesGrantingServiceAccess]
readPrec :: ReadPrec ListPoliciesGrantingServiceAccess
$creadPrec :: ReadPrec ListPoliciesGrantingServiceAccess
readList :: ReadS [ListPoliciesGrantingServiceAccess]
$creadList :: ReadS [ListPoliciesGrantingServiceAccess]
readsPrec :: Int -> ReadS ListPoliciesGrantingServiceAccess
$creadsPrec :: Int -> ReadS ListPoliciesGrantingServiceAccess
Prelude.Read, Int -> ListPoliciesGrantingServiceAccess -> ShowS
[ListPoliciesGrantingServiceAccess] -> ShowS
ListPoliciesGrantingServiceAccess -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListPoliciesGrantingServiceAccess] -> ShowS
$cshowList :: [ListPoliciesGrantingServiceAccess] -> ShowS
show :: ListPoliciesGrantingServiceAccess -> String
$cshow :: ListPoliciesGrantingServiceAccess -> String
showsPrec :: Int -> ListPoliciesGrantingServiceAccess -> ShowS
$cshowsPrec :: Int -> ListPoliciesGrantingServiceAccess -> ShowS
Prelude.Show, forall x.
Rep ListPoliciesGrantingServiceAccess x
-> ListPoliciesGrantingServiceAccess
forall x.
ListPoliciesGrantingServiceAccess
-> Rep ListPoliciesGrantingServiceAccess x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ListPoliciesGrantingServiceAccess x
-> ListPoliciesGrantingServiceAccess
$cfrom :: forall x.
ListPoliciesGrantingServiceAccess
-> Rep ListPoliciesGrantingServiceAccess x
Prelude.Generic)

-- |
-- Create a value of 'ListPoliciesGrantingServiceAccess' 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:
--
-- 'marker', 'listPoliciesGrantingServiceAccess_marker' - Use this parameter only when paginating results and only after you
-- receive a response indicating that the results are truncated. Set it to
-- the value of the @Marker@ element in the response that you received to
-- indicate where the next call should start.
--
-- 'arn', 'listPoliciesGrantingServiceAccess_arn' - The ARN of the IAM identity (user, group, or role) whose policies you
-- want to list.
--
-- 'serviceNamespaces', 'listPoliciesGrantingServiceAccess_serviceNamespaces' - The service namespace for the Amazon Web Services services whose
-- policies you want to list.
--
-- To learn the service namespace for a service, see
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html Actions, resources, and condition keys for Amazon Web Services services>
-- in the /IAM User Guide/. Choose the name of the service to view details
-- for that service. In the first paragraph, find the service prefix. For
-- example, @(service prefix: a4b)@. For more information about service
-- namespaces, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces Amazon Web Services service namespaces>
-- in the /Amazon Web Services General Reference/.
newListPoliciesGrantingServiceAccess ::
  -- | 'arn'
  Prelude.Text ->
  -- | 'serviceNamespaces'
  Prelude.NonEmpty Prelude.Text ->
  ListPoliciesGrantingServiceAccess
newListPoliciesGrantingServiceAccess :: Text -> NonEmpty Text -> ListPoliciesGrantingServiceAccess
newListPoliciesGrantingServiceAccess
  Text
pArn_
  NonEmpty Text
pServiceNamespaces_ =
    ListPoliciesGrantingServiceAccess'
      { $sel:marker:ListPoliciesGrantingServiceAccess' :: Maybe Text
marker =
          forall a. Maybe a
Prelude.Nothing,
        $sel:arn:ListPoliciesGrantingServiceAccess' :: Text
arn = Text
pArn_,
        $sel:serviceNamespaces:ListPoliciesGrantingServiceAccess' :: NonEmpty Text
serviceNamespaces =
          forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced
            forall t b. AReview t b -> b -> t
Lens.# NonEmpty Text
pServiceNamespaces_
      }

-- | Use this parameter only when paginating results and only after you
-- receive a response indicating that the results are truncated. Set it to
-- the value of the @Marker@ element in the response that you received to
-- indicate where the next call should start.
listPoliciesGrantingServiceAccess_marker :: Lens.Lens' ListPoliciesGrantingServiceAccess (Prelude.Maybe Prelude.Text)
listPoliciesGrantingServiceAccess_marker :: Lens' ListPoliciesGrantingServiceAccess (Maybe Text)
listPoliciesGrantingServiceAccess_marker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListPoliciesGrantingServiceAccess' {Maybe Text
marker :: Maybe Text
$sel:marker:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> Maybe Text
marker} -> Maybe Text
marker) (\s :: ListPoliciesGrantingServiceAccess
s@ListPoliciesGrantingServiceAccess' {} Maybe Text
a -> ListPoliciesGrantingServiceAccess
s {$sel:marker:ListPoliciesGrantingServiceAccess' :: Maybe Text
marker = Maybe Text
a} :: ListPoliciesGrantingServiceAccess)

-- | The ARN of the IAM identity (user, group, or role) whose policies you
-- want to list.
listPoliciesGrantingServiceAccess_arn :: Lens.Lens' ListPoliciesGrantingServiceAccess Prelude.Text
listPoliciesGrantingServiceAccess_arn :: Lens' ListPoliciesGrantingServiceAccess Text
listPoliciesGrantingServiceAccess_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListPoliciesGrantingServiceAccess' {Text
arn :: Text
$sel:arn:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> Text
arn} -> Text
arn) (\s :: ListPoliciesGrantingServiceAccess
s@ListPoliciesGrantingServiceAccess' {} Text
a -> ListPoliciesGrantingServiceAccess
s {$sel:arn:ListPoliciesGrantingServiceAccess' :: Text
arn = Text
a} :: ListPoliciesGrantingServiceAccess)

-- | The service namespace for the Amazon Web Services services whose
-- policies you want to list.
--
-- To learn the service namespace for a service, see
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html Actions, resources, and condition keys for Amazon Web Services services>
-- in the /IAM User Guide/. Choose the name of the service to view details
-- for that service. In the first paragraph, find the service prefix. For
-- example, @(service prefix: a4b)@. For more information about service
-- namespaces, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces Amazon Web Services service namespaces>
-- in the /Amazon Web Services General Reference/.
listPoliciesGrantingServiceAccess_serviceNamespaces :: Lens.Lens' ListPoliciesGrantingServiceAccess (Prelude.NonEmpty Prelude.Text)
listPoliciesGrantingServiceAccess_serviceNamespaces :: Lens' ListPoliciesGrantingServiceAccess (NonEmpty Text)
listPoliciesGrantingServiceAccess_serviceNamespaces = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListPoliciesGrantingServiceAccess' {NonEmpty Text
serviceNamespaces :: NonEmpty Text
$sel:serviceNamespaces:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> NonEmpty Text
serviceNamespaces} -> NonEmpty Text
serviceNamespaces) (\s :: ListPoliciesGrantingServiceAccess
s@ListPoliciesGrantingServiceAccess' {} NonEmpty Text
a -> ListPoliciesGrantingServiceAccess
s {$sel:serviceNamespaces:ListPoliciesGrantingServiceAccess' :: NonEmpty Text
serviceNamespaces = NonEmpty Text
a} :: ListPoliciesGrantingServiceAccess) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance
  Core.AWSRequest
    ListPoliciesGrantingServiceAccess
  where
  type
    AWSResponse ListPoliciesGrantingServiceAccess =
      ListPoliciesGrantingServiceAccessResponse
  request :: (Service -> Service)
-> ListPoliciesGrantingServiceAccess
-> Request ListPoliciesGrantingServiceAccess
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy ListPoliciesGrantingServiceAccess
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse ListPoliciesGrantingServiceAccess)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"ListPoliciesGrantingServiceAccessResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Bool
-> Maybe Text
-> Int
-> [ListPoliciesGrantingServiceAccessEntry]
-> ListPoliciesGrantingServiceAccessResponse
ListPoliciesGrantingServiceAccessResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"IsTruncated")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Marker")
            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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                            forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"PoliciesGrantingServiceAccess"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                            forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member"
                        )
      )

instance
  Prelude.Hashable
    ListPoliciesGrantingServiceAccess
  where
  hashWithSalt :: Int -> ListPoliciesGrantingServiceAccess -> Int
hashWithSalt
    Int
_salt
    ListPoliciesGrantingServiceAccess' {Maybe Text
NonEmpty Text
Text
serviceNamespaces :: NonEmpty Text
arn :: Text
marker :: Maybe Text
$sel:serviceNamespaces:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> NonEmpty Text
$sel:arn:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> Text
$sel:marker:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
marker
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
arn
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Text
serviceNamespaces

instance
  Prelude.NFData
    ListPoliciesGrantingServiceAccess
  where
  rnf :: ListPoliciesGrantingServiceAccess -> ()
rnf ListPoliciesGrantingServiceAccess' {Maybe Text
NonEmpty Text
Text
serviceNamespaces :: NonEmpty Text
arn :: Text
marker :: Maybe Text
$sel:serviceNamespaces:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> NonEmpty Text
$sel:arn:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> Text
$sel:marker:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
marker
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty Text
serviceNamespaces

instance
  Data.ToHeaders
    ListPoliciesGrantingServiceAccess
  where
  toHeaders :: ListPoliciesGrantingServiceAccess -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance
  Data.ToQuery
    ListPoliciesGrantingServiceAccess
  where
  toQuery :: ListPoliciesGrantingServiceAccess -> QueryString
toQuery ListPoliciesGrantingServiceAccess' {Maybe Text
NonEmpty Text
Text
serviceNamespaces :: NonEmpty Text
arn :: Text
marker :: Maybe Text
$sel:serviceNamespaces:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> NonEmpty Text
$sel:arn:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> Text
$sel:marker:ListPoliciesGrantingServiceAccess' :: ListPoliciesGrantingServiceAccess -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"ListPoliciesGrantingServiceAccess" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2010-05-08" :: Prelude.ByteString),
        ByteString
"Marker" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
marker,
        ByteString
"Arn" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
arn,
        ByteString
"ServiceNamespaces"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member" NonEmpty Text
serviceNamespaces
      ]

-- | /See:/ 'newListPoliciesGrantingServiceAccessResponse' smart constructor.
data ListPoliciesGrantingServiceAccessResponse = ListPoliciesGrantingServiceAccessResponse'
  { -- | A flag that indicates whether there are more items to return. If your
    -- results were truncated, you can make a subsequent pagination request
    -- using the @Marker@ request parameter to retrieve more items. We
    -- recommend that you check @IsTruncated@ after every call to ensure that
    -- you receive all your results.
    ListPoliciesGrantingServiceAccessResponse -> Maybe Bool
isTruncated :: Prelude.Maybe Prelude.Bool,
    -- | When @IsTruncated@ is @true@, this element is present and contains the
    -- value to use for the @Marker@ parameter in a subsequent pagination
    -- request.
    ListPoliciesGrantingServiceAccessResponse -> Maybe Text
marker :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    ListPoliciesGrantingServiceAccessResponse -> Int
httpStatus :: Prelude.Int,
    -- | A @ListPoliciesGrantingServiceAccess@ object that contains details about
    -- the permissions policies attached to the specified identity (user,
    -- group, or role).
    ListPoliciesGrantingServiceAccessResponse
-> [ListPoliciesGrantingServiceAccessEntry]
policiesGrantingServiceAccess :: [ListPoliciesGrantingServiceAccessEntry]
  }
  deriving (ListPoliciesGrantingServiceAccessResponse
-> ListPoliciesGrantingServiceAccessResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListPoliciesGrantingServiceAccessResponse
-> ListPoliciesGrantingServiceAccessResponse -> Bool
$c/= :: ListPoliciesGrantingServiceAccessResponse
-> ListPoliciesGrantingServiceAccessResponse -> Bool
== :: ListPoliciesGrantingServiceAccessResponse
-> ListPoliciesGrantingServiceAccessResponse -> Bool
$c== :: ListPoliciesGrantingServiceAccessResponse
-> ListPoliciesGrantingServiceAccessResponse -> Bool
Prelude.Eq, ReadPrec [ListPoliciesGrantingServiceAccessResponse]
ReadPrec ListPoliciesGrantingServiceAccessResponse
Int -> ReadS ListPoliciesGrantingServiceAccessResponse
ReadS [ListPoliciesGrantingServiceAccessResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListPoliciesGrantingServiceAccessResponse]
$creadListPrec :: ReadPrec [ListPoliciesGrantingServiceAccessResponse]
readPrec :: ReadPrec ListPoliciesGrantingServiceAccessResponse
$creadPrec :: ReadPrec ListPoliciesGrantingServiceAccessResponse
readList :: ReadS [ListPoliciesGrantingServiceAccessResponse]
$creadList :: ReadS [ListPoliciesGrantingServiceAccessResponse]
readsPrec :: Int -> ReadS ListPoliciesGrantingServiceAccessResponse
$creadsPrec :: Int -> ReadS ListPoliciesGrantingServiceAccessResponse
Prelude.Read, Int -> ListPoliciesGrantingServiceAccessResponse -> ShowS
[ListPoliciesGrantingServiceAccessResponse] -> ShowS
ListPoliciesGrantingServiceAccessResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListPoliciesGrantingServiceAccessResponse] -> ShowS
$cshowList :: [ListPoliciesGrantingServiceAccessResponse] -> ShowS
show :: ListPoliciesGrantingServiceAccessResponse -> String
$cshow :: ListPoliciesGrantingServiceAccessResponse -> String
showsPrec :: Int -> ListPoliciesGrantingServiceAccessResponse -> ShowS
$cshowsPrec :: Int -> ListPoliciesGrantingServiceAccessResponse -> ShowS
Prelude.Show, forall x.
Rep ListPoliciesGrantingServiceAccessResponse x
-> ListPoliciesGrantingServiceAccessResponse
forall x.
ListPoliciesGrantingServiceAccessResponse
-> Rep ListPoliciesGrantingServiceAccessResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ListPoliciesGrantingServiceAccessResponse x
-> ListPoliciesGrantingServiceAccessResponse
$cfrom :: forall x.
ListPoliciesGrantingServiceAccessResponse
-> Rep ListPoliciesGrantingServiceAccessResponse x
Prelude.Generic)

-- |
-- Create a value of 'ListPoliciesGrantingServiceAccessResponse' 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:
--
-- 'isTruncated', 'listPoliciesGrantingServiceAccessResponse_isTruncated' - A flag that indicates whether there are more items to return. If your
-- results were truncated, you can make a subsequent pagination request
-- using the @Marker@ request parameter to retrieve more items. We
-- recommend that you check @IsTruncated@ after every call to ensure that
-- you receive all your results.
--
-- 'marker', 'listPoliciesGrantingServiceAccessResponse_marker' - When @IsTruncated@ is @true@, this element is present and contains the
-- value to use for the @Marker@ parameter in a subsequent pagination
-- request.
--
-- 'httpStatus', 'listPoliciesGrantingServiceAccessResponse_httpStatus' - The response's http status code.
--
-- 'policiesGrantingServiceAccess', 'listPoliciesGrantingServiceAccessResponse_policiesGrantingServiceAccess' - A @ListPoliciesGrantingServiceAccess@ object that contains details about
-- the permissions policies attached to the specified identity (user,
-- group, or role).
newListPoliciesGrantingServiceAccessResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ListPoliciesGrantingServiceAccessResponse
newListPoliciesGrantingServiceAccessResponse :: Int -> ListPoliciesGrantingServiceAccessResponse
newListPoliciesGrantingServiceAccessResponse
  Int
pHttpStatus_ =
    ListPoliciesGrantingServiceAccessResponse'
      { $sel:isTruncated:ListPoliciesGrantingServiceAccessResponse' :: Maybe Bool
isTruncated =
          forall a. Maybe a
Prelude.Nothing,
        $sel:marker:ListPoliciesGrantingServiceAccessResponse' :: Maybe Text
marker = forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:ListPoliciesGrantingServiceAccessResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:policiesGrantingServiceAccess:ListPoliciesGrantingServiceAccessResponse' :: [ListPoliciesGrantingServiceAccessEntry]
policiesGrantingServiceAccess =
          forall a. Monoid a => a
Prelude.mempty
      }

-- | A flag that indicates whether there are more items to return. If your
-- results were truncated, you can make a subsequent pagination request
-- using the @Marker@ request parameter to retrieve more items. We
-- recommend that you check @IsTruncated@ after every call to ensure that
-- you receive all your results.
listPoliciesGrantingServiceAccessResponse_isTruncated :: Lens.Lens' ListPoliciesGrantingServiceAccessResponse (Prelude.Maybe Prelude.Bool)
listPoliciesGrantingServiceAccessResponse_isTruncated :: Lens' ListPoliciesGrantingServiceAccessResponse (Maybe Bool)
listPoliciesGrantingServiceAccessResponse_isTruncated = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListPoliciesGrantingServiceAccessResponse' {Maybe Bool
isTruncated :: Maybe Bool
$sel:isTruncated:ListPoliciesGrantingServiceAccessResponse' :: ListPoliciesGrantingServiceAccessResponse -> Maybe Bool
isTruncated} -> Maybe Bool
isTruncated) (\s :: ListPoliciesGrantingServiceAccessResponse
s@ListPoliciesGrantingServiceAccessResponse' {} Maybe Bool
a -> ListPoliciesGrantingServiceAccessResponse
s {$sel:isTruncated:ListPoliciesGrantingServiceAccessResponse' :: Maybe Bool
isTruncated = Maybe Bool
a} :: ListPoliciesGrantingServiceAccessResponse)

-- | When @IsTruncated@ is @true@, this element is present and contains the
-- value to use for the @Marker@ parameter in a subsequent pagination
-- request.
listPoliciesGrantingServiceAccessResponse_marker :: Lens.Lens' ListPoliciesGrantingServiceAccessResponse (Prelude.Maybe Prelude.Text)
listPoliciesGrantingServiceAccessResponse_marker :: Lens' ListPoliciesGrantingServiceAccessResponse (Maybe Text)
listPoliciesGrantingServiceAccessResponse_marker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListPoliciesGrantingServiceAccessResponse' {Maybe Text
marker :: Maybe Text
$sel:marker:ListPoliciesGrantingServiceAccessResponse' :: ListPoliciesGrantingServiceAccessResponse -> Maybe Text
marker} -> Maybe Text
marker) (\s :: ListPoliciesGrantingServiceAccessResponse
s@ListPoliciesGrantingServiceAccessResponse' {} Maybe Text
a -> ListPoliciesGrantingServiceAccessResponse
s {$sel:marker:ListPoliciesGrantingServiceAccessResponse' :: Maybe Text
marker = Maybe Text
a} :: ListPoliciesGrantingServiceAccessResponse)

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

-- | A @ListPoliciesGrantingServiceAccess@ object that contains details about
-- the permissions policies attached to the specified identity (user,
-- group, or role).
listPoliciesGrantingServiceAccessResponse_policiesGrantingServiceAccess :: Lens.Lens' ListPoliciesGrantingServiceAccessResponse [ListPoliciesGrantingServiceAccessEntry]
listPoliciesGrantingServiceAccessResponse_policiesGrantingServiceAccess :: Lens'
  ListPoliciesGrantingServiceAccessResponse
  [ListPoliciesGrantingServiceAccessEntry]
listPoliciesGrantingServiceAccessResponse_policiesGrantingServiceAccess = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListPoliciesGrantingServiceAccessResponse' {[ListPoliciesGrantingServiceAccessEntry]
policiesGrantingServiceAccess :: [ListPoliciesGrantingServiceAccessEntry]
$sel:policiesGrantingServiceAccess:ListPoliciesGrantingServiceAccessResponse' :: ListPoliciesGrantingServiceAccessResponse
-> [ListPoliciesGrantingServiceAccessEntry]
policiesGrantingServiceAccess} -> [ListPoliciesGrantingServiceAccessEntry]
policiesGrantingServiceAccess) (\s :: ListPoliciesGrantingServiceAccessResponse
s@ListPoliciesGrantingServiceAccessResponse' {} [ListPoliciesGrantingServiceAccessEntry]
a -> ListPoliciesGrantingServiceAccessResponse
s {$sel:policiesGrantingServiceAccess:ListPoliciesGrantingServiceAccessResponse' :: [ListPoliciesGrantingServiceAccessEntry]
policiesGrantingServiceAccess = [ListPoliciesGrantingServiceAccessEntry]
a} :: ListPoliciesGrantingServiceAccessResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance
  Prelude.NFData
    ListPoliciesGrantingServiceAccessResponse
  where
  rnf :: ListPoliciesGrantingServiceAccessResponse -> ()
rnf ListPoliciesGrantingServiceAccessResponse' {Int
[ListPoliciesGrantingServiceAccessEntry]
Maybe Bool
Maybe Text
policiesGrantingServiceAccess :: [ListPoliciesGrantingServiceAccessEntry]
httpStatus :: Int
marker :: Maybe Text
isTruncated :: Maybe Bool
$sel:policiesGrantingServiceAccess:ListPoliciesGrantingServiceAccessResponse' :: ListPoliciesGrantingServiceAccessResponse
-> [ListPoliciesGrantingServiceAccessEntry]
$sel:httpStatus:ListPoliciesGrantingServiceAccessResponse' :: ListPoliciesGrantingServiceAccessResponse -> Int
$sel:marker:ListPoliciesGrantingServiceAccessResponse' :: ListPoliciesGrantingServiceAccessResponse -> Maybe Text
$sel:isTruncated:ListPoliciesGrantingServiceAccessResponse' :: ListPoliciesGrantingServiceAccessResponse -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
isTruncated
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
marker
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [ListPoliciesGrantingServiceAccessEntry]
policiesGrantingServiceAccess