{-# 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.WorkMail.GetAccessControlEffect
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets the effects of an organization\'s access control rules as they
-- apply to a specified IPv4 address, access protocol action, and user ID
-- or impersonation role ID. You must provide either the user ID or
-- impersonation role ID. Impersonation role ID can only be used with
-- Action EWS.
module Amazonka.WorkMail.GetAccessControlEffect
  ( -- * Creating a Request
    GetAccessControlEffect (..),
    newGetAccessControlEffect,

    -- * Request Lenses
    getAccessControlEffect_impersonationRoleId,
    getAccessControlEffect_userId,
    getAccessControlEffect_organizationId,
    getAccessControlEffect_ipAddress,
    getAccessControlEffect_action,

    -- * Destructuring the Response
    GetAccessControlEffectResponse (..),
    newGetAccessControlEffectResponse,

    -- * Response Lenses
    getAccessControlEffectResponse_effect,
    getAccessControlEffectResponse_matchedRules,
    getAccessControlEffectResponse_httpStatus,
  )
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.WorkMail.Types

-- | /See:/ 'newGetAccessControlEffect' smart constructor.
data GetAccessControlEffect = GetAccessControlEffect'
  { -- | The impersonation role ID.
    GetAccessControlEffect -> Maybe Text
impersonationRoleId :: Prelude.Maybe Prelude.Text,
    -- | The user ID.
    GetAccessControlEffect -> Maybe Text
userId :: Prelude.Maybe Prelude.Text,
    -- | The identifier for the organization.
    GetAccessControlEffect -> Text
organizationId :: Prelude.Text,
    -- | The IPv4 address.
    GetAccessControlEffect -> Text
ipAddress :: Prelude.Text,
    -- | The access protocol action. Valid values include @ActiveSync@,
    -- @AutoDiscover@, @EWS@, @IMAP@, @SMTP@, @WindowsOutlook@, and @WebMail@.
    GetAccessControlEffect -> Text
action :: Prelude.Text
  }
  deriving (GetAccessControlEffect -> GetAccessControlEffect -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetAccessControlEffect -> GetAccessControlEffect -> Bool
$c/= :: GetAccessControlEffect -> GetAccessControlEffect -> Bool
== :: GetAccessControlEffect -> GetAccessControlEffect -> Bool
$c== :: GetAccessControlEffect -> GetAccessControlEffect -> Bool
Prelude.Eq, ReadPrec [GetAccessControlEffect]
ReadPrec GetAccessControlEffect
Int -> ReadS GetAccessControlEffect
ReadS [GetAccessControlEffect]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetAccessControlEffect]
$creadListPrec :: ReadPrec [GetAccessControlEffect]
readPrec :: ReadPrec GetAccessControlEffect
$creadPrec :: ReadPrec GetAccessControlEffect
readList :: ReadS [GetAccessControlEffect]
$creadList :: ReadS [GetAccessControlEffect]
readsPrec :: Int -> ReadS GetAccessControlEffect
$creadsPrec :: Int -> ReadS GetAccessControlEffect
Prelude.Read, Int -> GetAccessControlEffect -> ShowS
[GetAccessControlEffect] -> ShowS
GetAccessControlEffect -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetAccessControlEffect] -> ShowS
$cshowList :: [GetAccessControlEffect] -> ShowS
show :: GetAccessControlEffect -> String
$cshow :: GetAccessControlEffect -> String
showsPrec :: Int -> GetAccessControlEffect -> ShowS
$cshowsPrec :: Int -> GetAccessControlEffect -> ShowS
Prelude.Show, forall x. Rep GetAccessControlEffect x -> GetAccessControlEffect
forall x. GetAccessControlEffect -> Rep GetAccessControlEffect x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetAccessControlEffect x -> GetAccessControlEffect
$cfrom :: forall x. GetAccessControlEffect -> Rep GetAccessControlEffect x
Prelude.Generic)

-- |
-- Create a value of 'GetAccessControlEffect' 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:
--
-- 'impersonationRoleId', 'getAccessControlEffect_impersonationRoleId' - The impersonation role ID.
--
-- 'userId', 'getAccessControlEffect_userId' - The user ID.
--
-- 'organizationId', 'getAccessControlEffect_organizationId' - The identifier for the organization.
--
-- 'ipAddress', 'getAccessControlEffect_ipAddress' - The IPv4 address.
--
-- 'action', 'getAccessControlEffect_action' - The access protocol action. Valid values include @ActiveSync@,
-- @AutoDiscover@, @EWS@, @IMAP@, @SMTP@, @WindowsOutlook@, and @WebMail@.
newGetAccessControlEffect ::
  -- | 'organizationId'
  Prelude.Text ->
  -- | 'ipAddress'
  Prelude.Text ->
  -- | 'action'
  Prelude.Text ->
  GetAccessControlEffect
newGetAccessControlEffect :: Text -> Text -> Text -> GetAccessControlEffect
newGetAccessControlEffect
  Text
pOrganizationId_
  Text
pIpAddress_
  Text
pAction_ =
    GetAccessControlEffect'
      { $sel:impersonationRoleId:GetAccessControlEffect' :: Maybe Text
impersonationRoleId =
          forall a. Maybe a
Prelude.Nothing,
        $sel:userId:GetAccessControlEffect' :: Maybe Text
userId = forall a. Maybe a
Prelude.Nothing,
        $sel:organizationId:GetAccessControlEffect' :: Text
organizationId = Text
pOrganizationId_,
        $sel:ipAddress:GetAccessControlEffect' :: Text
ipAddress = Text
pIpAddress_,
        $sel:action:GetAccessControlEffect' :: Text
action = Text
pAction_
      }

-- | The impersonation role ID.
getAccessControlEffect_impersonationRoleId :: Lens.Lens' GetAccessControlEffect (Prelude.Maybe Prelude.Text)
getAccessControlEffect_impersonationRoleId :: Lens' GetAccessControlEffect (Maybe Text)
getAccessControlEffect_impersonationRoleId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessControlEffect' {Maybe Text
impersonationRoleId :: Maybe Text
$sel:impersonationRoleId:GetAccessControlEffect' :: GetAccessControlEffect -> Maybe Text
impersonationRoleId} -> Maybe Text
impersonationRoleId) (\s :: GetAccessControlEffect
s@GetAccessControlEffect' {} Maybe Text
a -> GetAccessControlEffect
s {$sel:impersonationRoleId:GetAccessControlEffect' :: Maybe Text
impersonationRoleId = Maybe Text
a} :: GetAccessControlEffect)

-- | The user ID.
getAccessControlEffect_userId :: Lens.Lens' GetAccessControlEffect (Prelude.Maybe Prelude.Text)
getAccessControlEffect_userId :: Lens' GetAccessControlEffect (Maybe Text)
getAccessControlEffect_userId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessControlEffect' {Maybe Text
userId :: Maybe Text
$sel:userId:GetAccessControlEffect' :: GetAccessControlEffect -> Maybe Text
userId} -> Maybe Text
userId) (\s :: GetAccessControlEffect
s@GetAccessControlEffect' {} Maybe Text
a -> GetAccessControlEffect
s {$sel:userId:GetAccessControlEffect' :: Maybe Text
userId = Maybe Text
a} :: GetAccessControlEffect)

-- | The identifier for the organization.
getAccessControlEffect_organizationId :: Lens.Lens' GetAccessControlEffect Prelude.Text
getAccessControlEffect_organizationId :: Lens' GetAccessControlEffect Text
getAccessControlEffect_organizationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessControlEffect' {Text
organizationId :: Text
$sel:organizationId:GetAccessControlEffect' :: GetAccessControlEffect -> Text
organizationId} -> Text
organizationId) (\s :: GetAccessControlEffect
s@GetAccessControlEffect' {} Text
a -> GetAccessControlEffect
s {$sel:organizationId:GetAccessControlEffect' :: Text
organizationId = Text
a} :: GetAccessControlEffect)

-- | The IPv4 address.
getAccessControlEffect_ipAddress :: Lens.Lens' GetAccessControlEffect Prelude.Text
getAccessControlEffect_ipAddress :: Lens' GetAccessControlEffect Text
getAccessControlEffect_ipAddress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessControlEffect' {Text
ipAddress :: Text
$sel:ipAddress:GetAccessControlEffect' :: GetAccessControlEffect -> Text
ipAddress} -> Text
ipAddress) (\s :: GetAccessControlEffect
s@GetAccessControlEffect' {} Text
a -> GetAccessControlEffect
s {$sel:ipAddress:GetAccessControlEffect' :: Text
ipAddress = Text
a} :: GetAccessControlEffect)

-- | The access protocol action. Valid values include @ActiveSync@,
-- @AutoDiscover@, @EWS@, @IMAP@, @SMTP@, @WindowsOutlook@, and @WebMail@.
getAccessControlEffect_action :: Lens.Lens' GetAccessControlEffect Prelude.Text
getAccessControlEffect_action :: Lens' GetAccessControlEffect Text
getAccessControlEffect_action = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessControlEffect' {Text
action :: Text
$sel:action:GetAccessControlEffect' :: GetAccessControlEffect -> Text
action} -> Text
action) (\s :: GetAccessControlEffect
s@GetAccessControlEffect' {} Text
a -> GetAccessControlEffect
s {$sel:action:GetAccessControlEffect' :: Text
action = Text
a} :: GetAccessControlEffect)

instance Core.AWSRequest GetAccessControlEffect where
  type
    AWSResponse GetAccessControlEffect =
      GetAccessControlEffectResponse
  request :: (Service -> Service)
-> GetAccessControlEffect -> Request GetAccessControlEffect
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 GetAccessControlEffect
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetAccessControlEffect)))
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 AccessControlRuleEffect
-> Maybe [Text] -> Int -> GetAccessControlEffectResponse
GetAccessControlEffectResponse'
            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
"Effect")
            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
"MatchedRules" 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.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable GetAccessControlEffect where
  hashWithSalt :: Int -> GetAccessControlEffect -> Int
hashWithSalt Int
_salt GetAccessControlEffect' {Maybe Text
Text
action :: Text
ipAddress :: Text
organizationId :: Text
userId :: Maybe Text
impersonationRoleId :: Maybe Text
$sel:action:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:ipAddress:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:organizationId:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:userId:GetAccessControlEffect' :: GetAccessControlEffect -> Maybe Text
$sel:impersonationRoleId:GetAccessControlEffect' :: GetAccessControlEffect -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
impersonationRoleId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
userId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
organizationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
ipAddress
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
action

instance Prelude.NFData GetAccessControlEffect where
  rnf :: GetAccessControlEffect -> ()
rnf GetAccessControlEffect' {Maybe Text
Text
action :: Text
ipAddress :: Text
organizationId :: Text
userId :: Maybe Text
impersonationRoleId :: Maybe Text
$sel:action:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:ipAddress:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:organizationId:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:userId:GetAccessControlEffect' :: GetAccessControlEffect -> Maybe Text
$sel:impersonationRoleId:GetAccessControlEffect' :: GetAccessControlEffect -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
impersonationRoleId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
userId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
organizationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
ipAddress
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
action

instance Data.ToHeaders GetAccessControlEffect where
  toHeaders :: GetAccessControlEffect -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"WorkMailService.GetAccessControlEffect" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON GetAccessControlEffect where
  toJSON :: GetAccessControlEffect -> Value
toJSON GetAccessControlEffect' {Maybe Text
Text
action :: Text
ipAddress :: Text
organizationId :: Text
userId :: Maybe Text
impersonationRoleId :: Maybe Text
$sel:action:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:ipAddress:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:organizationId:GetAccessControlEffect' :: GetAccessControlEffect -> Text
$sel:userId:GetAccessControlEffect' :: GetAccessControlEffect -> Maybe Text
$sel:impersonationRoleId:GetAccessControlEffect' :: GetAccessControlEffect -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ImpersonationRoleId" 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
impersonationRoleId,
            (Key
"UserId" 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
userId,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"OrganizationId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
organizationId),
            forall a. a -> Maybe a
Prelude.Just (Key
"IpAddress" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
ipAddress),
            forall a. a -> Maybe a
Prelude.Just (Key
"Action" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
action)
          ]
      )

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

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

-- | /See:/ 'newGetAccessControlEffectResponse' smart constructor.
data GetAccessControlEffectResponse = GetAccessControlEffectResponse'
  { -- | The rule effect.
    GetAccessControlEffectResponse -> Maybe AccessControlRuleEffect
effect :: Prelude.Maybe AccessControlRuleEffect,
    -- | The rules that match the given parameters, resulting in an effect.
    GetAccessControlEffectResponse -> Maybe [Text]
matchedRules :: Prelude.Maybe [Prelude.Text],
    -- | The response's http status code.
    GetAccessControlEffectResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetAccessControlEffectResponse
-> GetAccessControlEffectResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetAccessControlEffectResponse
-> GetAccessControlEffectResponse -> Bool
$c/= :: GetAccessControlEffectResponse
-> GetAccessControlEffectResponse -> Bool
== :: GetAccessControlEffectResponse
-> GetAccessControlEffectResponse -> Bool
$c== :: GetAccessControlEffectResponse
-> GetAccessControlEffectResponse -> Bool
Prelude.Eq, ReadPrec [GetAccessControlEffectResponse]
ReadPrec GetAccessControlEffectResponse
Int -> ReadS GetAccessControlEffectResponse
ReadS [GetAccessControlEffectResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetAccessControlEffectResponse]
$creadListPrec :: ReadPrec [GetAccessControlEffectResponse]
readPrec :: ReadPrec GetAccessControlEffectResponse
$creadPrec :: ReadPrec GetAccessControlEffectResponse
readList :: ReadS [GetAccessControlEffectResponse]
$creadList :: ReadS [GetAccessControlEffectResponse]
readsPrec :: Int -> ReadS GetAccessControlEffectResponse
$creadsPrec :: Int -> ReadS GetAccessControlEffectResponse
Prelude.Read, Int -> GetAccessControlEffectResponse -> ShowS
[GetAccessControlEffectResponse] -> ShowS
GetAccessControlEffectResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetAccessControlEffectResponse] -> ShowS
$cshowList :: [GetAccessControlEffectResponse] -> ShowS
show :: GetAccessControlEffectResponse -> String
$cshow :: GetAccessControlEffectResponse -> String
showsPrec :: Int -> GetAccessControlEffectResponse -> ShowS
$cshowsPrec :: Int -> GetAccessControlEffectResponse -> ShowS
Prelude.Show, forall x.
Rep GetAccessControlEffectResponse x
-> GetAccessControlEffectResponse
forall x.
GetAccessControlEffectResponse
-> Rep GetAccessControlEffectResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetAccessControlEffectResponse x
-> GetAccessControlEffectResponse
$cfrom :: forall x.
GetAccessControlEffectResponse
-> Rep GetAccessControlEffectResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetAccessControlEffectResponse' 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:
--
-- 'effect', 'getAccessControlEffectResponse_effect' - The rule effect.
--
-- 'matchedRules', 'getAccessControlEffectResponse_matchedRules' - The rules that match the given parameters, resulting in an effect.
--
-- 'httpStatus', 'getAccessControlEffectResponse_httpStatus' - The response's http status code.
newGetAccessControlEffectResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetAccessControlEffectResponse
newGetAccessControlEffectResponse :: Int -> GetAccessControlEffectResponse
newGetAccessControlEffectResponse Int
pHttpStatus_ =
  GetAccessControlEffectResponse'
    { $sel:effect:GetAccessControlEffectResponse' :: Maybe AccessControlRuleEffect
effect =
        forall a. Maybe a
Prelude.Nothing,
      $sel:matchedRules:GetAccessControlEffectResponse' :: Maybe [Text]
matchedRules = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetAccessControlEffectResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The rule effect.
getAccessControlEffectResponse_effect :: Lens.Lens' GetAccessControlEffectResponse (Prelude.Maybe AccessControlRuleEffect)
getAccessControlEffectResponse_effect :: Lens'
  GetAccessControlEffectResponse (Maybe AccessControlRuleEffect)
getAccessControlEffectResponse_effect = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessControlEffectResponse' {Maybe AccessControlRuleEffect
effect :: Maybe AccessControlRuleEffect
$sel:effect:GetAccessControlEffectResponse' :: GetAccessControlEffectResponse -> Maybe AccessControlRuleEffect
effect} -> Maybe AccessControlRuleEffect
effect) (\s :: GetAccessControlEffectResponse
s@GetAccessControlEffectResponse' {} Maybe AccessControlRuleEffect
a -> GetAccessControlEffectResponse
s {$sel:effect:GetAccessControlEffectResponse' :: Maybe AccessControlRuleEffect
effect = Maybe AccessControlRuleEffect
a} :: GetAccessControlEffectResponse)

-- | The rules that match the given parameters, resulting in an effect.
getAccessControlEffectResponse_matchedRules :: Lens.Lens' GetAccessControlEffectResponse (Prelude.Maybe [Prelude.Text])
getAccessControlEffectResponse_matchedRules :: Lens' GetAccessControlEffectResponse (Maybe [Text])
getAccessControlEffectResponse_matchedRules = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessControlEffectResponse' {Maybe [Text]
matchedRules :: Maybe [Text]
$sel:matchedRules:GetAccessControlEffectResponse' :: GetAccessControlEffectResponse -> Maybe [Text]
matchedRules} -> Maybe [Text]
matchedRules) (\s :: GetAccessControlEffectResponse
s@GetAccessControlEffectResponse' {} Maybe [Text]
a -> GetAccessControlEffectResponse
s {$sel:matchedRules:GetAccessControlEffectResponse' :: Maybe [Text]
matchedRules = Maybe [Text]
a} :: GetAccessControlEffectResponse) 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 response's http status code.
getAccessControlEffectResponse_httpStatus :: Lens.Lens' GetAccessControlEffectResponse Prelude.Int
getAccessControlEffectResponse_httpStatus :: Lens' GetAccessControlEffectResponse Int
getAccessControlEffectResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessControlEffectResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetAccessControlEffectResponse' :: GetAccessControlEffectResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetAccessControlEffectResponse
s@GetAccessControlEffectResponse' {} Int
a -> GetAccessControlEffectResponse
s {$sel:httpStatus:GetAccessControlEffectResponse' :: Int
httpStatus = Int
a} :: GetAccessControlEffectResponse)

instance
  Prelude.NFData
    GetAccessControlEffectResponse
  where
  rnf :: GetAccessControlEffectResponse -> ()
rnf GetAccessControlEffectResponse' {Int
Maybe [Text]
Maybe AccessControlRuleEffect
httpStatus :: Int
matchedRules :: Maybe [Text]
effect :: Maybe AccessControlRuleEffect
$sel:httpStatus:GetAccessControlEffectResponse' :: GetAccessControlEffectResponse -> Int
$sel:matchedRules:GetAccessControlEffectResponse' :: GetAccessControlEffectResponse -> Maybe [Text]
$sel:effect:GetAccessControlEffectResponse' :: GetAccessControlEffectResponse -> Maybe AccessControlRuleEffect
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AccessControlRuleEffect
effect
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
matchedRules
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus