{-# 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.EC2.CreateNetworkAclEntry
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates an entry (a rule) in a network ACL with the specified rule
-- number. Each network ACL has a set of numbered ingress rules and a
-- separate set of numbered egress rules. When determining whether a packet
-- should be allowed in or out of a subnet associated with the ACL, we
-- process the entries in the ACL according to the rule numbers, in
-- ascending order. Each network ACL has a set of ingress rules and a
-- separate set of egress rules.
--
-- We recommend that you leave room between the rule numbers (for example,
-- 100, 110, 120, ...), and not number them one right after the other (for
-- example, 101, 102, 103, ...). This makes it easier to add a rule between
-- existing ones without having to renumber the rules.
--
-- After you add an entry, you can\'t modify it; you must either replace
-- it, or create an entry and delete the old one.
--
-- For more information about network ACLs, see
-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html Network ACLs>
-- in the /Amazon Virtual Private Cloud User Guide/.
module Amazonka.EC2.CreateNetworkAclEntry
  ( -- * Creating a Request
    CreateNetworkAclEntry (..),
    newCreateNetworkAclEntry,

    -- * Request Lenses
    createNetworkAclEntry_cidrBlock,
    createNetworkAclEntry_dryRun,
    createNetworkAclEntry_icmpTypeCode,
    createNetworkAclEntry_ipv6CidrBlock,
    createNetworkAclEntry_portRange,
    createNetworkAclEntry_egress,
    createNetworkAclEntry_networkAclId,
    createNetworkAclEntry_protocol,
    createNetworkAclEntry_ruleAction,
    createNetworkAclEntry_ruleNumber,

    -- * Destructuring the Response
    CreateNetworkAclEntryResponse (..),
    newCreateNetworkAclEntryResponse,
  )
where

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

-- | /See:/ 'newCreateNetworkAclEntry' smart constructor.
data CreateNetworkAclEntry = CreateNetworkAclEntry'
  { -- | The IPv4 network range to allow or deny, in CIDR notation (for example
    -- @172.16.0.0\/24@). We modify the specified CIDR block to its canonical
    -- form; for example, if you specify @100.68.0.18\/18@, we modify it to
    -- @100.68.0.0\/18@.
    CreateNetworkAclEntry -> Maybe Text
cidrBlock :: Prelude.Maybe Prelude.Text,
    -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    CreateNetworkAclEntry -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
    -- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
    CreateNetworkAclEntry -> Maybe IcmpTypeCode
icmpTypeCode :: Prelude.Maybe IcmpTypeCode,
    -- | The IPv6 network range to allow or deny, in CIDR notation (for example
    -- @2001:db8:1234:1a00::\/64@).
    CreateNetworkAclEntry -> Maybe Text
ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
    -- | TCP or UDP protocols: The range of ports the rule applies to. Required
    -- if specifying protocol 6 (TCP) or 17 (UDP).
    CreateNetworkAclEntry -> Maybe PortRange
portRange :: Prelude.Maybe PortRange,
    -- | Indicates whether this is an egress rule (rule is applied to traffic
    -- leaving the subnet).
    CreateNetworkAclEntry -> Bool
egress :: Prelude.Bool,
    -- | The ID of the network ACL.
    CreateNetworkAclEntry -> Text
networkAclId :: Prelude.Text,
    -- | The protocol number. A value of \"-1\" means all protocols. If you
    -- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
    -- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
    -- any ports or ICMP types or codes that you specify. If you specify
    -- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
    -- ICMP types and codes allowed, regardless of any that you specify. If you
    -- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
    -- must specify an ICMP type and code.
    CreateNetworkAclEntry -> Text
protocol :: Prelude.Text,
    -- | Indicates whether to allow or deny the traffic that matches the rule.
    CreateNetworkAclEntry -> RuleAction
ruleAction :: RuleAction,
    -- | The rule number for the entry (for example, 100). ACL entries are
    -- processed in ascending order by rule number.
    --
    -- Constraints: Positive integer from 1 to 32766. The range 32767 to 65535
    -- is reserved for internal use.
    CreateNetworkAclEntry -> Int
ruleNumber :: Prelude.Int
  }
  deriving (CreateNetworkAclEntry -> CreateNetworkAclEntry -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateNetworkAclEntry -> CreateNetworkAclEntry -> Bool
$c/= :: CreateNetworkAclEntry -> CreateNetworkAclEntry -> Bool
== :: CreateNetworkAclEntry -> CreateNetworkAclEntry -> Bool
$c== :: CreateNetworkAclEntry -> CreateNetworkAclEntry -> Bool
Prelude.Eq, ReadPrec [CreateNetworkAclEntry]
ReadPrec CreateNetworkAclEntry
Int -> ReadS CreateNetworkAclEntry
ReadS [CreateNetworkAclEntry]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateNetworkAclEntry]
$creadListPrec :: ReadPrec [CreateNetworkAclEntry]
readPrec :: ReadPrec CreateNetworkAclEntry
$creadPrec :: ReadPrec CreateNetworkAclEntry
readList :: ReadS [CreateNetworkAclEntry]
$creadList :: ReadS [CreateNetworkAclEntry]
readsPrec :: Int -> ReadS CreateNetworkAclEntry
$creadsPrec :: Int -> ReadS CreateNetworkAclEntry
Prelude.Read, Int -> CreateNetworkAclEntry -> ShowS
[CreateNetworkAclEntry] -> ShowS
CreateNetworkAclEntry -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateNetworkAclEntry] -> ShowS
$cshowList :: [CreateNetworkAclEntry] -> ShowS
show :: CreateNetworkAclEntry -> String
$cshow :: CreateNetworkAclEntry -> String
showsPrec :: Int -> CreateNetworkAclEntry -> ShowS
$cshowsPrec :: Int -> CreateNetworkAclEntry -> ShowS
Prelude.Show, forall x. Rep CreateNetworkAclEntry x -> CreateNetworkAclEntry
forall x. CreateNetworkAclEntry -> Rep CreateNetworkAclEntry x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateNetworkAclEntry x -> CreateNetworkAclEntry
$cfrom :: forall x. CreateNetworkAclEntry -> Rep CreateNetworkAclEntry x
Prelude.Generic)

-- |
-- Create a value of 'CreateNetworkAclEntry' 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:
--
-- 'cidrBlock', 'createNetworkAclEntry_cidrBlock' - The IPv4 network range to allow or deny, in CIDR notation (for example
-- @172.16.0.0\/24@). We modify the specified CIDR block to its canonical
-- form; for example, if you specify @100.68.0.18\/18@, we modify it to
-- @100.68.0.0\/18@.
--
-- 'dryRun', 'createNetworkAclEntry_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'icmpTypeCode', 'createNetworkAclEntry_icmpTypeCode' - ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
-- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
--
-- 'ipv6CidrBlock', 'createNetworkAclEntry_ipv6CidrBlock' - The IPv6 network range to allow or deny, in CIDR notation (for example
-- @2001:db8:1234:1a00::\/64@).
--
-- 'portRange', 'createNetworkAclEntry_portRange' - TCP or UDP protocols: The range of ports the rule applies to. Required
-- if specifying protocol 6 (TCP) or 17 (UDP).
--
-- 'egress', 'createNetworkAclEntry_egress' - Indicates whether this is an egress rule (rule is applied to traffic
-- leaving the subnet).
--
-- 'networkAclId', 'createNetworkAclEntry_networkAclId' - The ID of the network ACL.
--
-- 'protocol', 'createNetworkAclEntry_protocol' - The protocol number. A value of \"-1\" means all protocols. If you
-- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
-- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
-- any ports or ICMP types or codes that you specify. If you specify
-- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
-- ICMP types and codes allowed, regardless of any that you specify. If you
-- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
-- must specify an ICMP type and code.
--
-- 'ruleAction', 'createNetworkAclEntry_ruleAction' - Indicates whether to allow or deny the traffic that matches the rule.
--
-- 'ruleNumber', 'createNetworkAclEntry_ruleNumber' - The rule number for the entry (for example, 100). ACL entries are
-- processed in ascending order by rule number.
--
-- Constraints: Positive integer from 1 to 32766. The range 32767 to 65535
-- is reserved for internal use.
newCreateNetworkAclEntry ::
  -- | 'egress'
  Prelude.Bool ->
  -- | 'networkAclId'
  Prelude.Text ->
  -- | 'protocol'
  Prelude.Text ->
  -- | 'ruleAction'
  RuleAction ->
  -- | 'ruleNumber'
  Prelude.Int ->
  CreateNetworkAclEntry
newCreateNetworkAclEntry :: Bool -> Text -> Text -> RuleAction -> Int -> CreateNetworkAclEntry
newCreateNetworkAclEntry
  Bool
pEgress_
  Text
pNetworkAclId_
  Text
pProtocol_
  RuleAction
pRuleAction_
  Int
pRuleNumber_ =
    CreateNetworkAclEntry'
      { $sel:cidrBlock:CreateNetworkAclEntry' :: Maybe Text
cidrBlock = forall a. Maybe a
Prelude.Nothing,
        $sel:dryRun:CreateNetworkAclEntry' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
        $sel:icmpTypeCode:CreateNetworkAclEntry' :: Maybe IcmpTypeCode
icmpTypeCode = forall a. Maybe a
Prelude.Nothing,
        $sel:ipv6CidrBlock:CreateNetworkAclEntry' :: Maybe Text
ipv6CidrBlock = forall a. Maybe a
Prelude.Nothing,
        $sel:portRange:CreateNetworkAclEntry' :: Maybe PortRange
portRange = forall a. Maybe a
Prelude.Nothing,
        $sel:egress:CreateNetworkAclEntry' :: Bool
egress = Bool
pEgress_,
        $sel:networkAclId:CreateNetworkAclEntry' :: Text
networkAclId = Text
pNetworkAclId_,
        $sel:protocol:CreateNetworkAclEntry' :: Text
protocol = Text
pProtocol_,
        $sel:ruleAction:CreateNetworkAclEntry' :: RuleAction
ruleAction = RuleAction
pRuleAction_,
        $sel:ruleNumber:CreateNetworkAclEntry' :: Int
ruleNumber = Int
pRuleNumber_
      }

-- | The IPv4 network range to allow or deny, in CIDR notation (for example
-- @172.16.0.0\/24@). We modify the specified CIDR block to its canonical
-- form; for example, if you specify @100.68.0.18\/18@, we modify it to
-- @100.68.0.0\/18@.
createNetworkAclEntry_cidrBlock :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe Prelude.Text)
createNetworkAclEntry_cidrBlock :: Lens' CreateNetworkAclEntry (Maybe Text)
createNetworkAclEntry_cidrBlock = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Maybe Text
cidrBlock :: Maybe Text
$sel:cidrBlock:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Text
cidrBlock} -> Maybe Text
cidrBlock) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Maybe Text
a -> CreateNetworkAclEntry
s {$sel:cidrBlock:CreateNetworkAclEntry' :: Maybe Text
cidrBlock = Maybe Text
a} :: CreateNetworkAclEntry)

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
createNetworkAclEntry_dryRun :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe Prelude.Bool)
createNetworkAclEntry_dryRun :: Lens' CreateNetworkAclEntry (Maybe Bool)
createNetworkAclEntry_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Maybe Bool
a -> CreateNetworkAclEntry
s {$sel:dryRun:CreateNetworkAclEntry' :: Maybe Bool
dryRun = Maybe Bool
a} :: CreateNetworkAclEntry)

-- | ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
-- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
createNetworkAclEntry_icmpTypeCode :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe IcmpTypeCode)
createNetworkAclEntry_icmpTypeCode :: Lens' CreateNetworkAclEntry (Maybe IcmpTypeCode)
createNetworkAclEntry_icmpTypeCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Maybe IcmpTypeCode
icmpTypeCode :: Maybe IcmpTypeCode
$sel:icmpTypeCode:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe IcmpTypeCode
icmpTypeCode} -> Maybe IcmpTypeCode
icmpTypeCode) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Maybe IcmpTypeCode
a -> CreateNetworkAclEntry
s {$sel:icmpTypeCode:CreateNetworkAclEntry' :: Maybe IcmpTypeCode
icmpTypeCode = Maybe IcmpTypeCode
a} :: CreateNetworkAclEntry)

-- | The IPv6 network range to allow or deny, in CIDR notation (for example
-- @2001:db8:1234:1a00::\/64@).
createNetworkAclEntry_ipv6CidrBlock :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe Prelude.Text)
createNetworkAclEntry_ipv6CidrBlock :: Lens' CreateNetworkAclEntry (Maybe Text)
createNetworkAclEntry_ipv6CidrBlock = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Maybe Text
ipv6CidrBlock :: Maybe Text
$sel:ipv6CidrBlock:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Text
ipv6CidrBlock} -> Maybe Text
ipv6CidrBlock) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Maybe Text
a -> CreateNetworkAclEntry
s {$sel:ipv6CidrBlock:CreateNetworkAclEntry' :: Maybe Text
ipv6CidrBlock = Maybe Text
a} :: CreateNetworkAclEntry)

-- | TCP or UDP protocols: The range of ports the rule applies to. Required
-- if specifying protocol 6 (TCP) or 17 (UDP).
createNetworkAclEntry_portRange :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe PortRange)
createNetworkAclEntry_portRange :: Lens' CreateNetworkAclEntry (Maybe PortRange)
createNetworkAclEntry_portRange = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Maybe PortRange
portRange :: Maybe PortRange
$sel:portRange:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe PortRange
portRange} -> Maybe PortRange
portRange) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Maybe PortRange
a -> CreateNetworkAclEntry
s {$sel:portRange:CreateNetworkAclEntry' :: Maybe PortRange
portRange = Maybe PortRange
a} :: CreateNetworkAclEntry)

-- | Indicates whether this is an egress rule (rule is applied to traffic
-- leaving the subnet).
createNetworkAclEntry_egress :: Lens.Lens' CreateNetworkAclEntry Prelude.Bool
createNetworkAclEntry_egress :: Lens' CreateNetworkAclEntry Bool
createNetworkAclEntry_egress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Bool
egress :: Bool
$sel:egress:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Bool
egress} -> Bool
egress) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Bool
a -> CreateNetworkAclEntry
s {$sel:egress:CreateNetworkAclEntry' :: Bool
egress = Bool
a} :: CreateNetworkAclEntry)

-- | The ID of the network ACL.
createNetworkAclEntry_networkAclId :: Lens.Lens' CreateNetworkAclEntry Prelude.Text
createNetworkAclEntry_networkAclId :: Lens' CreateNetworkAclEntry Text
createNetworkAclEntry_networkAclId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Text
networkAclId :: Text
$sel:networkAclId:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Text
networkAclId} -> Text
networkAclId) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Text
a -> CreateNetworkAclEntry
s {$sel:networkAclId:CreateNetworkAclEntry' :: Text
networkAclId = Text
a} :: CreateNetworkAclEntry)

-- | The protocol number. A value of \"-1\" means all protocols. If you
-- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
-- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
-- any ports or ICMP types or codes that you specify. If you specify
-- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
-- ICMP types and codes allowed, regardless of any that you specify. If you
-- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
-- must specify an ICMP type and code.
createNetworkAclEntry_protocol :: Lens.Lens' CreateNetworkAclEntry Prelude.Text
createNetworkAclEntry_protocol :: Lens' CreateNetworkAclEntry Text
createNetworkAclEntry_protocol = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Text
protocol :: Text
$sel:protocol:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Text
protocol} -> Text
protocol) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Text
a -> CreateNetworkAclEntry
s {$sel:protocol:CreateNetworkAclEntry' :: Text
protocol = Text
a} :: CreateNetworkAclEntry)

-- | Indicates whether to allow or deny the traffic that matches the rule.
createNetworkAclEntry_ruleAction :: Lens.Lens' CreateNetworkAclEntry RuleAction
createNetworkAclEntry_ruleAction :: Lens' CreateNetworkAclEntry RuleAction
createNetworkAclEntry_ruleAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {RuleAction
ruleAction :: RuleAction
$sel:ruleAction:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> RuleAction
ruleAction} -> RuleAction
ruleAction) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} RuleAction
a -> CreateNetworkAclEntry
s {$sel:ruleAction:CreateNetworkAclEntry' :: RuleAction
ruleAction = RuleAction
a} :: CreateNetworkAclEntry)

-- | The rule number for the entry (for example, 100). ACL entries are
-- processed in ascending order by rule number.
--
-- Constraints: Positive integer from 1 to 32766. The range 32767 to 65535
-- is reserved for internal use.
createNetworkAclEntry_ruleNumber :: Lens.Lens' CreateNetworkAclEntry Prelude.Int
createNetworkAclEntry_ruleNumber :: Lens' CreateNetworkAclEntry Int
createNetworkAclEntry_ruleNumber = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateNetworkAclEntry' {Int
ruleNumber :: Int
$sel:ruleNumber:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Int
ruleNumber} -> Int
ruleNumber) (\s :: CreateNetworkAclEntry
s@CreateNetworkAclEntry' {} Int
a -> CreateNetworkAclEntry
s {$sel:ruleNumber:CreateNetworkAclEntry' :: Int
ruleNumber = Int
a} :: CreateNetworkAclEntry)

instance Core.AWSRequest CreateNetworkAclEntry where
  type
    AWSResponse CreateNetworkAclEntry =
      CreateNetworkAclEntryResponse
  request :: (Service -> Service)
-> CreateNetworkAclEntry -> Request CreateNetworkAclEntry
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 CreateNetworkAclEntry
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateNetworkAclEntry)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull CreateNetworkAclEntryResponse
CreateNetworkAclEntryResponse'

instance Prelude.Hashable CreateNetworkAclEntry where
  hashWithSalt :: Int -> CreateNetworkAclEntry -> Int
hashWithSalt Int
_salt CreateNetworkAclEntry' {Bool
Int
Maybe Bool
Maybe Text
Maybe IcmpTypeCode
Maybe PortRange
Text
RuleAction
ruleNumber :: Int
ruleAction :: RuleAction
protocol :: Text
networkAclId :: Text
egress :: Bool
portRange :: Maybe PortRange
ipv6CidrBlock :: Maybe Text
icmpTypeCode :: Maybe IcmpTypeCode
dryRun :: Maybe Bool
cidrBlock :: Maybe Text
$sel:ruleNumber:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Int
$sel:ruleAction:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> RuleAction
$sel:protocol:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Text
$sel:networkAclId:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Text
$sel:egress:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Bool
$sel:portRange:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe PortRange
$sel:ipv6CidrBlock:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Text
$sel:icmpTypeCode:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe IcmpTypeCode
$sel:dryRun:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Bool
$sel:cidrBlock:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
cidrBlock
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe IcmpTypeCode
icmpTypeCode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ipv6CidrBlock
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PortRange
portRange
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Bool
egress
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
networkAclId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
protocol
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` RuleAction
ruleAction
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Int
ruleNumber

instance Prelude.NFData CreateNetworkAclEntry where
  rnf :: CreateNetworkAclEntry -> ()
rnf CreateNetworkAclEntry' {Bool
Int
Maybe Bool
Maybe Text
Maybe IcmpTypeCode
Maybe PortRange
Text
RuleAction
ruleNumber :: Int
ruleAction :: RuleAction
protocol :: Text
networkAclId :: Text
egress :: Bool
portRange :: Maybe PortRange
ipv6CidrBlock :: Maybe Text
icmpTypeCode :: Maybe IcmpTypeCode
dryRun :: Maybe Bool
cidrBlock :: Maybe Text
$sel:ruleNumber:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Int
$sel:ruleAction:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> RuleAction
$sel:protocol:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Text
$sel:networkAclId:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Text
$sel:egress:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Bool
$sel:portRange:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe PortRange
$sel:ipv6CidrBlock:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Text
$sel:icmpTypeCode:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe IcmpTypeCode
$sel:dryRun:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Bool
$sel:cidrBlock:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
cidrBlock
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
dryRun
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe IcmpTypeCode
icmpTypeCode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ipv6CidrBlock
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PortRange
portRange
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Bool
egress
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
networkAclId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
protocol
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf RuleAction
ruleAction
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
ruleNumber

instance Data.ToHeaders CreateNetworkAclEntry where
  toHeaders :: CreateNetworkAclEntry -> [Header]
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery CreateNetworkAclEntry where
  toQuery :: CreateNetworkAclEntry -> QueryString
toQuery CreateNetworkAclEntry' {Bool
Int
Maybe Bool
Maybe Text
Maybe IcmpTypeCode
Maybe PortRange
Text
RuleAction
ruleNumber :: Int
ruleAction :: RuleAction
protocol :: Text
networkAclId :: Text
egress :: Bool
portRange :: Maybe PortRange
ipv6CidrBlock :: Maybe Text
icmpTypeCode :: Maybe IcmpTypeCode
dryRun :: Maybe Bool
cidrBlock :: Maybe Text
$sel:ruleNumber:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Int
$sel:ruleAction:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> RuleAction
$sel:protocol:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Text
$sel:networkAclId:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Text
$sel:egress:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Bool
$sel:portRange:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe PortRange
$sel:ipv6CidrBlock:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Text
$sel:icmpTypeCode:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe IcmpTypeCode
$sel:dryRun:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Bool
$sel:cidrBlock:CreateNetworkAclEntry' :: CreateNetworkAclEntry -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"CreateNetworkAclEntry" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"CidrBlock" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
cidrBlock,
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun,
        ByteString
"Icmp" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe IcmpTypeCode
icmpTypeCode,
        ByteString
"Ipv6CidrBlock" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
ipv6CidrBlock,
        ByteString
"PortRange" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe PortRange
portRange,
        ByteString
"Egress" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Bool
egress,
        ByteString
"NetworkAclId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
networkAclId,
        ByteString
"Protocol" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
protocol,
        ByteString
"RuleAction" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: RuleAction
ruleAction,
        ByteString
"RuleNumber" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Int
ruleNumber
      ]

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

-- |
-- Create a value of 'CreateNetworkAclEntryResponse' 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.
newCreateNetworkAclEntryResponse ::
  CreateNetworkAclEntryResponse
newCreateNetworkAclEntryResponse :: CreateNetworkAclEntryResponse
newCreateNetworkAclEntryResponse =
  CreateNetworkAclEntryResponse
CreateNetworkAclEntryResponse'

instance Prelude.NFData CreateNetworkAclEntryResponse where
  rnf :: CreateNetworkAclEntryResponse -> ()
rnf CreateNetworkAclEntryResponse
_ = ()