{-# 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.WAFV2.CreateWebACL
-- 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 a WebACL per the specifications provided.
--
-- A web ACL defines a collection of rules to use to inspect and control
-- web requests. Each rule has an action defined (allow, block, or count)
-- for requests that match the statement of the rule. In the web ACL, you
-- assign a default action to take (allow, block) for any request that does
-- not match any of the rules. The rules in a web ACL can be a combination
-- of the types Rule, RuleGroup, and managed rule group. You can associate
-- a web ACL with one or more Amazon Web Services resources to protect. The
-- resources can be an Amazon CloudFront distribution, an Amazon API
-- Gateway REST API, an Application Load Balancer, an AppSync GraphQL API,
-- or an Amazon Cognito user pool.
module Amazonka.WAFV2.CreateWebACL
  ( -- * Creating a Request
    CreateWebACL (..),
    newCreateWebACL,

    -- * Request Lenses
    createWebACL_captchaConfig,
    createWebACL_challengeConfig,
    createWebACL_customResponseBodies,
    createWebACL_description,
    createWebACL_rules,
    createWebACL_tags,
    createWebACL_tokenDomains,
    createWebACL_name,
    createWebACL_scope,
    createWebACL_defaultAction,
    createWebACL_visibilityConfig,

    -- * Destructuring the Response
    CreateWebACLResponse (..),
    newCreateWebACLResponse,

    -- * Response Lenses
    createWebACLResponse_summary,
    createWebACLResponse_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.WAFV2.Types

-- | /See:/ 'newCreateWebACL' smart constructor.
data CreateWebACL = CreateWebACL'
  { -- | Specifies how WAF should handle @CAPTCHA@ evaluations for rules that
    -- don\'t have their own @CaptchaConfig@ settings. If you don\'t specify
    -- this, WAF uses its default settings for @CaptchaConfig@.
    CreateWebACL -> Maybe CaptchaConfig
captchaConfig :: Prelude.Maybe CaptchaConfig,
    -- | Specifies how WAF should handle challenge evaluations for rules that
    -- don\'t have their own @ChallengeConfig@ settings. If you don\'t specify
    -- this, WAF uses its default settings for @ChallengeConfig@.
    CreateWebACL -> Maybe ChallengeConfig
challengeConfig :: Prelude.Maybe ChallengeConfig,
    -- | A map of custom response keys and content bodies. When you create a rule
    -- with a block action, you can send a custom response to the web request.
    -- You define these for the web ACL, and then use them in the rules and
    -- default actions that you define in the web ACL.
    --
    -- For information about customizing web requests and responses, see
    -- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html Customizing web requests and responses in WAF>
    -- in the
    -- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html WAF Developer Guide>.
    --
    -- For information about the limits on count and size for custom request
    -- and response settings, see
    -- <https://docs.aws.amazon.com/waf/latest/developerguide/limits.html WAF quotas>
    -- in the
    -- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html WAF Developer Guide>.
    CreateWebACL -> Maybe (HashMap Text CustomResponseBody)
customResponseBodies :: Prelude.Maybe (Prelude.HashMap Prelude.Text CustomResponseBody),
    -- | A description of the web ACL that helps with identification.
    CreateWebACL -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The Rule statements used to identify the web requests that you want to
    -- allow, block, or count. Each rule includes one top-level statement that
    -- WAF uses to identify matching web requests, and parameters that govern
    -- how WAF handles them.
    CreateWebACL -> Maybe [Rule]
rules :: Prelude.Maybe [Rule],
    -- | An array of key:value pairs to associate with the resource.
    CreateWebACL -> Maybe (NonEmpty Tag)
tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
    -- | Specifies the domains that WAF should accept in a web request token.
    -- This enables the use of tokens across multiple protected websites. When
    -- WAF provides a token, it uses the domain of the Amazon Web Services
    -- resource that the web ACL is protecting. If you don\'t specify a list of
    -- token domains, WAF accepts tokens only for the domain of the protected
    -- resource. With a token domain list, WAF accepts the resource\'s host
    -- domain plus all domains in the token domain list, including their
    -- prefixed subdomains.
    --
    -- Example JSON:
    -- @\"TokenDomains\": { \"mywebsite.com\", \"myotherwebsite.com\" }@
    --
    -- Public suffixes aren\'t allowed. For example, you can\'t use @usa.gov@
    -- or @co.uk@ as token domains.
    CreateWebACL -> Maybe (NonEmpty Text)
tokenDomains :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | The name of the web ACL. You cannot change the name of a web ACL after
    -- you create it.
    CreateWebACL -> Text
name :: Prelude.Text,
    -- | Specifies whether this is for an Amazon CloudFront distribution or for a
    -- regional application. A regional application can be an Application Load
    -- Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API,
    -- or an Amazon Cognito user pool.
    --
    -- To work with CloudFront, you must also specify the Region US East (N.
    -- Virginia) as follows:
    --
    -- -   CLI - Specify the Region when you use the CloudFront scope:
    --     @--scope=CLOUDFRONT --region=us-east-1@.
    --
    -- -   API and SDKs - For all calls, use the Region endpoint us-east-1.
    CreateWebACL -> Scope
scope :: Scope,
    -- | The action to perform if none of the @Rules@ contained in the @WebACL@
    -- match.
    CreateWebACL -> DefaultAction
defaultAction :: DefaultAction,
    -- | Defines and enables Amazon CloudWatch metrics and web request sample
    -- collection.
    CreateWebACL -> VisibilityConfig
visibilityConfig :: VisibilityConfig
  }
  deriving (CreateWebACL -> CreateWebACL -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateWebACL -> CreateWebACL -> Bool
$c/= :: CreateWebACL -> CreateWebACL -> Bool
== :: CreateWebACL -> CreateWebACL -> Bool
$c== :: CreateWebACL -> CreateWebACL -> Bool
Prelude.Eq, ReadPrec [CreateWebACL]
ReadPrec CreateWebACL
Int -> ReadS CreateWebACL
ReadS [CreateWebACL]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateWebACL]
$creadListPrec :: ReadPrec [CreateWebACL]
readPrec :: ReadPrec CreateWebACL
$creadPrec :: ReadPrec CreateWebACL
readList :: ReadS [CreateWebACL]
$creadList :: ReadS [CreateWebACL]
readsPrec :: Int -> ReadS CreateWebACL
$creadsPrec :: Int -> ReadS CreateWebACL
Prelude.Read, Int -> CreateWebACL -> ShowS
[CreateWebACL] -> ShowS
CreateWebACL -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateWebACL] -> ShowS
$cshowList :: [CreateWebACL] -> ShowS
show :: CreateWebACL -> String
$cshow :: CreateWebACL -> String
showsPrec :: Int -> CreateWebACL -> ShowS
$cshowsPrec :: Int -> CreateWebACL -> ShowS
Prelude.Show, forall x. Rep CreateWebACL x -> CreateWebACL
forall x. CreateWebACL -> Rep CreateWebACL x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateWebACL x -> CreateWebACL
$cfrom :: forall x. CreateWebACL -> Rep CreateWebACL x
Prelude.Generic)

-- |
-- Create a value of 'CreateWebACL' 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:
--
-- 'captchaConfig', 'createWebACL_captchaConfig' - Specifies how WAF should handle @CAPTCHA@ evaluations for rules that
-- don\'t have their own @CaptchaConfig@ settings. If you don\'t specify
-- this, WAF uses its default settings for @CaptchaConfig@.
--
-- 'challengeConfig', 'createWebACL_challengeConfig' - Specifies how WAF should handle challenge evaluations for rules that
-- don\'t have their own @ChallengeConfig@ settings. If you don\'t specify
-- this, WAF uses its default settings for @ChallengeConfig@.
--
-- 'customResponseBodies', 'createWebACL_customResponseBodies' - A map of custom response keys and content bodies. When you create a rule
-- with a block action, you can send a custom response to the web request.
-- You define these for the web ACL, and then use them in the rules and
-- default actions that you define in the web ACL.
--
-- For information about customizing web requests and responses, see
-- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html Customizing web requests and responses in WAF>
-- in the
-- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html WAF Developer Guide>.
--
-- For information about the limits on count and size for custom request
-- and response settings, see
-- <https://docs.aws.amazon.com/waf/latest/developerguide/limits.html WAF quotas>
-- in the
-- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html WAF Developer Guide>.
--
-- 'description', 'createWebACL_description' - A description of the web ACL that helps with identification.
--
-- 'rules', 'createWebACL_rules' - The Rule statements used to identify the web requests that you want to
-- allow, block, or count. Each rule includes one top-level statement that
-- WAF uses to identify matching web requests, and parameters that govern
-- how WAF handles them.
--
-- 'tags', 'createWebACL_tags' - An array of key:value pairs to associate with the resource.
--
-- 'tokenDomains', 'createWebACL_tokenDomains' - Specifies the domains that WAF should accept in a web request token.
-- This enables the use of tokens across multiple protected websites. When
-- WAF provides a token, it uses the domain of the Amazon Web Services
-- resource that the web ACL is protecting. If you don\'t specify a list of
-- token domains, WAF accepts tokens only for the domain of the protected
-- resource. With a token domain list, WAF accepts the resource\'s host
-- domain plus all domains in the token domain list, including their
-- prefixed subdomains.
--
-- Example JSON:
-- @\"TokenDomains\": { \"mywebsite.com\", \"myotherwebsite.com\" }@
--
-- Public suffixes aren\'t allowed. For example, you can\'t use @usa.gov@
-- or @co.uk@ as token domains.
--
-- 'name', 'createWebACL_name' - The name of the web ACL. You cannot change the name of a web ACL after
-- you create it.
--
-- 'scope', 'createWebACL_scope' - Specifies whether this is for an Amazon CloudFront distribution or for a
-- regional application. A regional application can be an Application Load
-- Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API,
-- or an Amazon Cognito user pool.
--
-- To work with CloudFront, you must also specify the Region US East (N.
-- Virginia) as follows:
--
-- -   CLI - Specify the Region when you use the CloudFront scope:
--     @--scope=CLOUDFRONT --region=us-east-1@.
--
-- -   API and SDKs - For all calls, use the Region endpoint us-east-1.
--
-- 'defaultAction', 'createWebACL_defaultAction' - The action to perform if none of the @Rules@ contained in the @WebACL@
-- match.
--
-- 'visibilityConfig', 'createWebACL_visibilityConfig' - Defines and enables Amazon CloudWatch metrics and web request sample
-- collection.
newCreateWebACL ::
  -- | 'name'
  Prelude.Text ->
  -- | 'scope'
  Scope ->
  -- | 'defaultAction'
  DefaultAction ->
  -- | 'visibilityConfig'
  VisibilityConfig ->
  CreateWebACL
newCreateWebACL :: Text -> Scope -> DefaultAction -> VisibilityConfig -> CreateWebACL
newCreateWebACL
  Text
pName_
  Scope
pScope_
  DefaultAction
pDefaultAction_
  VisibilityConfig
pVisibilityConfig_ =
    CreateWebACL'
      { $sel:captchaConfig:CreateWebACL' :: Maybe CaptchaConfig
captchaConfig = forall a. Maybe a
Prelude.Nothing,
        $sel:challengeConfig:CreateWebACL' :: Maybe ChallengeConfig
challengeConfig = forall a. Maybe a
Prelude.Nothing,
        $sel:customResponseBodies:CreateWebACL' :: Maybe (HashMap Text CustomResponseBody)
customResponseBodies = forall a. Maybe a
Prelude.Nothing,
        $sel:description:CreateWebACL' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
        $sel:rules:CreateWebACL' :: Maybe [Rule]
rules = forall a. Maybe a
Prelude.Nothing,
        $sel:tags:CreateWebACL' :: Maybe (NonEmpty Tag)
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:tokenDomains:CreateWebACL' :: Maybe (NonEmpty Text)
tokenDomains = forall a. Maybe a
Prelude.Nothing,
        $sel:name:CreateWebACL' :: Text
name = Text
pName_,
        $sel:scope:CreateWebACL' :: Scope
scope = Scope
pScope_,
        $sel:defaultAction:CreateWebACL' :: DefaultAction
defaultAction = DefaultAction
pDefaultAction_,
        $sel:visibilityConfig:CreateWebACL' :: VisibilityConfig
visibilityConfig = VisibilityConfig
pVisibilityConfig_
      }

-- | Specifies how WAF should handle @CAPTCHA@ evaluations for rules that
-- don\'t have their own @CaptchaConfig@ settings. If you don\'t specify
-- this, WAF uses its default settings for @CaptchaConfig@.
createWebACL_captchaConfig :: Lens.Lens' CreateWebACL (Prelude.Maybe CaptchaConfig)
createWebACL_captchaConfig :: Lens' CreateWebACL (Maybe CaptchaConfig)
createWebACL_captchaConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Maybe CaptchaConfig
captchaConfig :: Maybe CaptchaConfig
$sel:captchaConfig:CreateWebACL' :: CreateWebACL -> Maybe CaptchaConfig
captchaConfig} -> Maybe CaptchaConfig
captchaConfig) (\s :: CreateWebACL
s@CreateWebACL' {} Maybe CaptchaConfig
a -> CreateWebACL
s {$sel:captchaConfig:CreateWebACL' :: Maybe CaptchaConfig
captchaConfig = Maybe CaptchaConfig
a} :: CreateWebACL)

-- | Specifies how WAF should handle challenge evaluations for rules that
-- don\'t have their own @ChallengeConfig@ settings. If you don\'t specify
-- this, WAF uses its default settings for @ChallengeConfig@.
createWebACL_challengeConfig :: Lens.Lens' CreateWebACL (Prelude.Maybe ChallengeConfig)
createWebACL_challengeConfig :: Lens' CreateWebACL (Maybe ChallengeConfig)
createWebACL_challengeConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Maybe ChallengeConfig
challengeConfig :: Maybe ChallengeConfig
$sel:challengeConfig:CreateWebACL' :: CreateWebACL -> Maybe ChallengeConfig
challengeConfig} -> Maybe ChallengeConfig
challengeConfig) (\s :: CreateWebACL
s@CreateWebACL' {} Maybe ChallengeConfig
a -> CreateWebACL
s {$sel:challengeConfig:CreateWebACL' :: Maybe ChallengeConfig
challengeConfig = Maybe ChallengeConfig
a} :: CreateWebACL)

-- | A map of custom response keys and content bodies. When you create a rule
-- with a block action, you can send a custom response to the web request.
-- You define these for the web ACL, and then use them in the rules and
-- default actions that you define in the web ACL.
--
-- For information about customizing web requests and responses, see
-- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html Customizing web requests and responses in WAF>
-- in the
-- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html WAF Developer Guide>.
--
-- For information about the limits on count and size for custom request
-- and response settings, see
-- <https://docs.aws.amazon.com/waf/latest/developerguide/limits.html WAF quotas>
-- in the
-- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html WAF Developer Guide>.
createWebACL_customResponseBodies :: Lens.Lens' CreateWebACL (Prelude.Maybe (Prelude.HashMap Prelude.Text CustomResponseBody))
createWebACL_customResponseBodies :: Lens' CreateWebACL (Maybe (HashMap Text CustomResponseBody))
createWebACL_customResponseBodies = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Maybe (HashMap Text CustomResponseBody)
customResponseBodies :: Maybe (HashMap Text CustomResponseBody)
$sel:customResponseBodies:CreateWebACL' :: CreateWebACL -> Maybe (HashMap Text CustomResponseBody)
customResponseBodies} -> Maybe (HashMap Text CustomResponseBody)
customResponseBodies) (\s :: CreateWebACL
s@CreateWebACL' {} Maybe (HashMap Text CustomResponseBody)
a -> CreateWebACL
s {$sel:customResponseBodies:CreateWebACL' :: Maybe (HashMap Text CustomResponseBody)
customResponseBodies = Maybe (HashMap Text CustomResponseBody)
a} :: CreateWebACL) 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

-- | A description of the web ACL that helps with identification.
createWebACL_description :: Lens.Lens' CreateWebACL (Prelude.Maybe Prelude.Text)
createWebACL_description :: Lens' CreateWebACL (Maybe Text)
createWebACL_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Maybe Text
description :: Maybe Text
$sel:description:CreateWebACL' :: CreateWebACL -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateWebACL
s@CreateWebACL' {} Maybe Text
a -> CreateWebACL
s {$sel:description:CreateWebACL' :: Maybe Text
description = Maybe Text
a} :: CreateWebACL)

-- | The Rule statements used to identify the web requests that you want to
-- allow, block, or count. Each rule includes one top-level statement that
-- WAF uses to identify matching web requests, and parameters that govern
-- how WAF handles them.
createWebACL_rules :: Lens.Lens' CreateWebACL (Prelude.Maybe [Rule])
createWebACL_rules :: Lens' CreateWebACL (Maybe [Rule])
createWebACL_rules = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Maybe [Rule]
rules :: Maybe [Rule]
$sel:rules:CreateWebACL' :: CreateWebACL -> Maybe [Rule]
rules} -> Maybe [Rule]
rules) (\s :: CreateWebACL
s@CreateWebACL' {} Maybe [Rule]
a -> CreateWebACL
s {$sel:rules:CreateWebACL' :: Maybe [Rule]
rules = Maybe [Rule]
a} :: CreateWebACL) 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

-- | An array of key:value pairs to associate with the resource.
createWebACL_tags :: Lens.Lens' CreateWebACL (Prelude.Maybe (Prelude.NonEmpty Tag))
createWebACL_tags :: Lens' CreateWebACL (Maybe (NonEmpty Tag))
createWebACL_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Maybe (NonEmpty Tag)
tags :: Maybe (NonEmpty Tag)
$sel:tags:CreateWebACL' :: CreateWebACL -> Maybe (NonEmpty Tag)
tags} -> Maybe (NonEmpty Tag)
tags) (\s :: CreateWebACL
s@CreateWebACL' {} Maybe (NonEmpty Tag)
a -> CreateWebACL
s {$sel:tags:CreateWebACL' :: Maybe (NonEmpty Tag)
tags = Maybe (NonEmpty Tag)
a} :: CreateWebACL) 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

-- | Specifies the domains that WAF should accept in a web request token.
-- This enables the use of tokens across multiple protected websites. When
-- WAF provides a token, it uses the domain of the Amazon Web Services
-- resource that the web ACL is protecting. If you don\'t specify a list of
-- token domains, WAF accepts tokens only for the domain of the protected
-- resource. With a token domain list, WAF accepts the resource\'s host
-- domain plus all domains in the token domain list, including their
-- prefixed subdomains.
--
-- Example JSON:
-- @\"TokenDomains\": { \"mywebsite.com\", \"myotherwebsite.com\" }@
--
-- Public suffixes aren\'t allowed. For example, you can\'t use @usa.gov@
-- or @co.uk@ as token domains.
createWebACL_tokenDomains :: Lens.Lens' CreateWebACL (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
createWebACL_tokenDomains :: Lens' CreateWebACL (Maybe (NonEmpty Text))
createWebACL_tokenDomains = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Maybe (NonEmpty Text)
tokenDomains :: Maybe (NonEmpty Text)
$sel:tokenDomains:CreateWebACL' :: CreateWebACL -> Maybe (NonEmpty Text)
tokenDomains} -> Maybe (NonEmpty Text)
tokenDomains) (\s :: CreateWebACL
s@CreateWebACL' {} Maybe (NonEmpty Text)
a -> CreateWebACL
s {$sel:tokenDomains:CreateWebACL' :: Maybe (NonEmpty Text)
tokenDomains = Maybe (NonEmpty Text)
a} :: CreateWebACL) 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 name of the web ACL. You cannot change the name of a web ACL after
-- you create it.
createWebACL_name :: Lens.Lens' CreateWebACL Prelude.Text
createWebACL_name :: Lens' CreateWebACL Text
createWebACL_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Text
name :: Text
$sel:name:CreateWebACL' :: CreateWebACL -> Text
name} -> Text
name) (\s :: CreateWebACL
s@CreateWebACL' {} Text
a -> CreateWebACL
s {$sel:name:CreateWebACL' :: Text
name = Text
a} :: CreateWebACL)

-- | Specifies whether this is for an Amazon CloudFront distribution or for a
-- regional application. A regional application can be an Application Load
-- Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API,
-- or an Amazon Cognito user pool.
--
-- To work with CloudFront, you must also specify the Region US East (N.
-- Virginia) as follows:
--
-- -   CLI - Specify the Region when you use the CloudFront scope:
--     @--scope=CLOUDFRONT --region=us-east-1@.
--
-- -   API and SDKs - For all calls, use the Region endpoint us-east-1.
createWebACL_scope :: Lens.Lens' CreateWebACL Scope
createWebACL_scope :: Lens' CreateWebACL Scope
createWebACL_scope = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {Scope
scope :: Scope
$sel:scope:CreateWebACL' :: CreateWebACL -> Scope
scope} -> Scope
scope) (\s :: CreateWebACL
s@CreateWebACL' {} Scope
a -> CreateWebACL
s {$sel:scope:CreateWebACL' :: Scope
scope = Scope
a} :: CreateWebACL)

-- | The action to perform if none of the @Rules@ contained in the @WebACL@
-- match.
createWebACL_defaultAction :: Lens.Lens' CreateWebACL DefaultAction
createWebACL_defaultAction :: Lens' CreateWebACL DefaultAction
createWebACL_defaultAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {DefaultAction
defaultAction :: DefaultAction
$sel:defaultAction:CreateWebACL' :: CreateWebACL -> DefaultAction
defaultAction} -> DefaultAction
defaultAction) (\s :: CreateWebACL
s@CreateWebACL' {} DefaultAction
a -> CreateWebACL
s {$sel:defaultAction:CreateWebACL' :: DefaultAction
defaultAction = DefaultAction
a} :: CreateWebACL)

-- | Defines and enables Amazon CloudWatch metrics and web request sample
-- collection.
createWebACL_visibilityConfig :: Lens.Lens' CreateWebACL VisibilityConfig
createWebACL_visibilityConfig :: Lens' CreateWebACL VisibilityConfig
createWebACL_visibilityConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACL' {VisibilityConfig
visibilityConfig :: VisibilityConfig
$sel:visibilityConfig:CreateWebACL' :: CreateWebACL -> VisibilityConfig
visibilityConfig} -> VisibilityConfig
visibilityConfig) (\s :: CreateWebACL
s@CreateWebACL' {} VisibilityConfig
a -> CreateWebACL
s {$sel:visibilityConfig:CreateWebACL' :: VisibilityConfig
visibilityConfig = VisibilityConfig
a} :: CreateWebACL)

instance Core.AWSRequest CreateWebACL where
  type AWSResponse CreateWebACL = CreateWebACLResponse
  request :: (Service -> Service) -> CreateWebACL -> Request CreateWebACL
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 CreateWebACL
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateWebACL)))
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 WebACLSummary -> Int -> CreateWebACLResponse
CreateWebACLResponse'
            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
"Summary")
            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 CreateWebACL where
  hashWithSalt :: Int -> CreateWebACL -> Int
hashWithSalt Int
_salt CreateWebACL' {Maybe [Rule]
Maybe (NonEmpty Text)
Maybe (NonEmpty Tag)
Maybe Text
Maybe (HashMap Text CustomResponseBody)
Maybe ChallengeConfig
Maybe CaptchaConfig
Text
DefaultAction
Scope
VisibilityConfig
visibilityConfig :: VisibilityConfig
defaultAction :: DefaultAction
scope :: Scope
name :: Text
tokenDomains :: Maybe (NonEmpty Text)
tags :: Maybe (NonEmpty Tag)
rules :: Maybe [Rule]
description :: Maybe Text
customResponseBodies :: Maybe (HashMap Text CustomResponseBody)
challengeConfig :: Maybe ChallengeConfig
captchaConfig :: Maybe CaptchaConfig
$sel:visibilityConfig:CreateWebACL' :: CreateWebACL -> VisibilityConfig
$sel:defaultAction:CreateWebACL' :: CreateWebACL -> DefaultAction
$sel:scope:CreateWebACL' :: CreateWebACL -> Scope
$sel:name:CreateWebACL' :: CreateWebACL -> Text
$sel:tokenDomains:CreateWebACL' :: CreateWebACL -> Maybe (NonEmpty Text)
$sel:tags:CreateWebACL' :: CreateWebACL -> Maybe (NonEmpty Tag)
$sel:rules:CreateWebACL' :: CreateWebACL -> Maybe [Rule]
$sel:description:CreateWebACL' :: CreateWebACL -> Maybe Text
$sel:customResponseBodies:CreateWebACL' :: CreateWebACL -> Maybe (HashMap Text CustomResponseBody)
$sel:challengeConfig:CreateWebACL' :: CreateWebACL -> Maybe ChallengeConfig
$sel:captchaConfig:CreateWebACL' :: CreateWebACL -> Maybe CaptchaConfig
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CaptchaConfig
captchaConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ChallengeConfig
challengeConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text CustomResponseBody)
customResponseBodies
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Rule]
rules
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Tag)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
tokenDomains
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Scope
scope
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DefaultAction
defaultAction
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VisibilityConfig
visibilityConfig

instance Prelude.NFData CreateWebACL where
  rnf :: CreateWebACL -> ()
rnf CreateWebACL' {Maybe [Rule]
Maybe (NonEmpty Text)
Maybe (NonEmpty Tag)
Maybe Text
Maybe (HashMap Text CustomResponseBody)
Maybe ChallengeConfig
Maybe CaptchaConfig
Text
DefaultAction
Scope
VisibilityConfig
visibilityConfig :: VisibilityConfig
defaultAction :: DefaultAction
scope :: Scope
name :: Text
tokenDomains :: Maybe (NonEmpty Text)
tags :: Maybe (NonEmpty Tag)
rules :: Maybe [Rule]
description :: Maybe Text
customResponseBodies :: Maybe (HashMap Text CustomResponseBody)
challengeConfig :: Maybe ChallengeConfig
captchaConfig :: Maybe CaptchaConfig
$sel:visibilityConfig:CreateWebACL' :: CreateWebACL -> VisibilityConfig
$sel:defaultAction:CreateWebACL' :: CreateWebACL -> DefaultAction
$sel:scope:CreateWebACL' :: CreateWebACL -> Scope
$sel:name:CreateWebACL' :: CreateWebACL -> Text
$sel:tokenDomains:CreateWebACL' :: CreateWebACL -> Maybe (NonEmpty Text)
$sel:tags:CreateWebACL' :: CreateWebACL -> Maybe (NonEmpty Tag)
$sel:rules:CreateWebACL' :: CreateWebACL -> Maybe [Rule]
$sel:description:CreateWebACL' :: CreateWebACL -> Maybe Text
$sel:customResponseBodies:CreateWebACL' :: CreateWebACL -> Maybe (HashMap Text CustomResponseBody)
$sel:challengeConfig:CreateWebACL' :: CreateWebACL -> Maybe ChallengeConfig
$sel:captchaConfig:CreateWebACL' :: CreateWebACL -> Maybe CaptchaConfig
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe CaptchaConfig
captchaConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ChallengeConfig
challengeConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text CustomResponseBody)
customResponseBodies
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Rule]
rules
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Tag)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
tokenDomains
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Scope
scope
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DefaultAction
defaultAction
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VisibilityConfig
visibilityConfig

instance Data.ToHeaders CreateWebACL where
  toHeaders :: CreateWebACL -> 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
"AWSWAF_20190729.CreateWebACL" ::
                          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 CreateWebACL where
  toJSON :: CreateWebACL -> Value
toJSON CreateWebACL' {Maybe [Rule]
Maybe (NonEmpty Text)
Maybe (NonEmpty Tag)
Maybe Text
Maybe (HashMap Text CustomResponseBody)
Maybe ChallengeConfig
Maybe CaptchaConfig
Text
DefaultAction
Scope
VisibilityConfig
visibilityConfig :: VisibilityConfig
defaultAction :: DefaultAction
scope :: Scope
name :: Text
tokenDomains :: Maybe (NonEmpty Text)
tags :: Maybe (NonEmpty Tag)
rules :: Maybe [Rule]
description :: Maybe Text
customResponseBodies :: Maybe (HashMap Text CustomResponseBody)
challengeConfig :: Maybe ChallengeConfig
captchaConfig :: Maybe CaptchaConfig
$sel:visibilityConfig:CreateWebACL' :: CreateWebACL -> VisibilityConfig
$sel:defaultAction:CreateWebACL' :: CreateWebACL -> DefaultAction
$sel:scope:CreateWebACL' :: CreateWebACL -> Scope
$sel:name:CreateWebACL' :: CreateWebACL -> Text
$sel:tokenDomains:CreateWebACL' :: CreateWebACL -> Maybe (NonEmpty Text)
$sel:tags:CreateWebACL' :: CreateWebACL -> Maybe (NonEmpty Tag)
$sel:rules:CreateWebACL' :: CreateWebACL -> Maybe [Rule]
$sel:description:CreateWebACL' :: CreateWebACL -> Maybe Text
$sel:customResponseBodies:CreateWebACL' :: CreateWebACL -> Maybe (HashMap Text CustomResponseBody)
$sel:challengeConfig:CreateWebACL' :: CreateWebACL -> Maybe ChallengeConfig
$sel:captchaConfig:CreateWebACL' :: CreateWebACL -> Maybe CaptchaConfig
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"CaptchaConfig" 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 CaptchaConfig
captchaConfig,
            (Key
"ChallengeConfig" 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 ChallengeConfig
challengeConfig,
            (Key
"CustomResponseBodies" 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 CustomResponseBody)
customResponseBodies,
            (Key
"Description" 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
description,
            (Key
"Rules" 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 [Rule]
rules,
            (Key
"Tags" 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 (NonEmpty Tag)
tags,
            (Key
"TokenDomains" 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 (NonEmpty Text)
tokenDomains,
            forall a. a -> Maybe a
Prelude.Just (Key
"Name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name),
            forall a. a -> Maybe a
Prelude.Just (Key
"Scope" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Scope
scope),
            forall a. a -> Maybe a
Prelude.Just (Key
"DefaultAction" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DefaultAction
defaultAction),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"VisibilityConfig" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= VisibilityConfig
visibilityConfig)
          ]
      )

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

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

-- | /See:/ 'newCreateWebACLResponse' smart constructor.
data CreateWebACLResponse = CreateWebACLResponse'
  { -- | High-level information about a WebACL, returned by operations like
    -- create and list. This provides information like the ID, that you can use
    -- to retrieve and manage a @WebACL@, and the ARN, that you provide to
    -- operations like AssociateWebACL.
    CreateWebACLResponse -> Maybe WebACLSummary
summary :: Prelude.Maybe WebACLSummary,
    -- | The response's http status code.
    CreateWebACLResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateWebACLResponse -> CreateWebACLResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateWebACLResponse -> CreateWebACLResponse -> Bool
$c/= :: CreateWebACLResponse -> CreateWebACLResponse -> Bool
== :: CreateWebACLResponse -> CreateWebACLResponse -> Bool
$c== :: CreateWebACLResponse -> CreateWebACLResponse -> Bool
Prelude.Eq, ReadPrec [CreateWebACLResponse]
ReadPrec CreateWebACLResponse
Int -> ReadS CreateWebACLResponse
ReadS [CreateWebACLResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateWebACLResponse]
$creadListPrec :: ReadPrec [CreateWebACLResponse]
readPrec :: ReadPrec CreateWebACLResponse
$creadPrec :: ReadPrec CreateWebACLResponse
readList :: ReadS [CreateWebACLResponse]
$creadList :: ReadS [CreateWebACLResponse]
readsPrec :: Int -> ReadS CreateWebACLResponse
$creadsPrec :: Int -> ReadS CreateWebACLResponse
Prelude.Read, Int -> CreateWebACLResponse -> ShowS
[CreateWebACLResponse] -> ShowS
CreateWebACLResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateWebACLResponse] -> ShowS
$cshowList :: [CreateWebACLResponse] -> ShowS
show :: CreateWebACLResponse -> String
$cshow :: CreateWebACLResponse -> String
showsPrec :: Int -> CreateWebACLResponse -> ShowS
$cshowsPrec :: Int -> CreateWebACLResponse -> ShowS
Prelude.Show, forall x. Rep CreateWebACLResponse x -> CreateWebACLResponse
forall x. CreateWebACLResponse -> Rep CreateWebACLResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateWebACLResponse x -> CreateWebACLResponse
$cfrom :: forall x. CreateWebACLResponse -> Rep CreateWebACLResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateWebACLResponse' 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:
--
-- 'summary', 'createWebACLResponse_summary' - High-level information about a WebACL, returned by operations like
-- create and list. This provides information like the ID, that you can use
-- to retrieve and manage a @WebACL@, and the ARN, that you provide to
-- operations like AssociateWebACL.
--
-- 'httpStatus', 'createWebACLResponse_httpStatus' - The response's http status code.
newCreateWebACLResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateWebACLResponse
newCreateWebACLResponse :: Int -> CreateWebACLResponse
newCreateWebACLResponse Int
pHttpStatus_ =
  CreateWebACLResponse'
    { $sel:summary:CreateWebACLResponse' :: Maybe WebACLSummary
summary = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateWebACLResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | High-level information about a WebACL, returned by operations like
-- create and list. This provides information like the ID, that you can use
-- to retrieve and manage a @WebACL@, and the ARN, that you provide to
-- operations like AssociateWebACL.
createWebACLResponse_summary :: Lens.Lens' CreateWebACLResponse (Prelude.Maybe WebACLSummary)
createWebACLResponse_summary :: Lens' CreateWebACLResponse (Maybe WebACLSummary)
createWebACLResponse_summary = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateWebACLResponse' {Maybe WebACLSummary
summary :: Maybe WebACLSummary
$sel:summary:CreateWebACLResponse' :: CreateWebACLResponse -> Maybe WebACLSummary
summary} -> Maybe WebACLSummary
summary) (\s :: CreateWebACLResponse
s@CreateWebACLResponse' {} Maybe WebACLSummary
a -> CreateWebACLResponse
s {$sel:summary:CreateWebACLResponse' :: Maybe WebACLSummary
summary = Maybe WebACLSummary
a} :: CreateWebACLResponse)

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

instance Prelude.NFData CreateWebACLResponse where
  rnf :: CreateWebACLResponse -> ()
rnf CreateWebACLResponse' {Int
Maybe WebACLSummary
httpStatus :: Int
summary :: Maybe WebACLSummary
$sel:httpStatus:CreateWebACLResponse' :: CreateWebACLResponse -> Int
$sel:summary:CreateWebACLResponse' :: CreateWebACLResponse -> Maybe WebACLSummary
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe WebACLSummary
summary
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus