{-# 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.DeleteNetworkAclEntry
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes the specified ingress or egress entry (rule) from the specified
-- network ACL.
module Amazonka.EC2.DeleteNetworkAclEntry
  ( -- * Creating a Request
    DeleteNetworkAclEntry (..),
    newDeleteNetworkAclEntry,

    -- * Request Lenses
    deleteNetworkAclEntry_dryRun,
    deleteNetworkAclEntry_egress,
    deleteNetworkAclEntry_networkAclId,
    deleteNetworkAclEntry_ruleNumber,

    -- * Destructuring the Response
    DeleteNetworkAclEntryResponse (..),
    newDeleteNetworkAclEntryResponse,
  )
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:/ 'newDeleteNetworkAclEntry' smart constructor.
data DeleteNetworkAclEntry = DeleteNetworkAclEntry'
  { -- | 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@.
    DeleteNetworkAclEntry -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | Indicates whether the rule is an egress rule.
    DeleteNetworkAclEntry -> Bool
egress :: Prelude.Bool,
    -- | The ID of the network ACL.
    DeleteNetworkAclEntry -> Text
networkAclId :: Prelude.Text,
    -- | The rule number of the entry to delete.
    DeleteNetworkAclEntry -> Int
ruleNumber :: Prelude.Int
  }
  deriving (DeleteNetworkAclEntry -> DeleteNetworkAclEntry -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteNetworkAclEntry -> DeleteNetworkAclEntry -> Bool
$c/= :: DeleteNetworkAclEntry -> DeleteNetworkAclEntry -> Bool
== :: DeleteNetworkAclEntry -> DeleteNetworkAclEntry -> Bool
$c== :: DeleteNetworkAclEntry -> DeleteNetworkAclEntry -> Bool
Prelude.Eq, ReadPrec [DeleteNetworkAclEntry]
ReadPrec DeleteNetworkAclEntry
Int -> ReadS DeleteNetworkAclEntry
ReadS [DeleteNetworkAclEntry]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteNetworkAclEntry]
$creadListPrec :: ReadPrec [DeleteNetworkAclEntry]
readPrec :: ReadPrec DeleteNetworkAclEntry
$creadPrec :: ReadPrec DeleteNetworkAclEntry
readList :: ReadS [DeleteNetworkAclEntry]
$creadList :: ReadS [DeleteNetworkAclEntry]
readsPrec :: Int -> ReadS DeleteNetworkAclEntry
$creadsPrec :: Int -> ReadS DeleteNetworkAclEntry
Prelude.Read, Int -> DeleteNetworkAclEntry -> ShowS
[DeleteNetworkAclEntry] -> ShowS
DeleteNetworkAclEntry -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteNetworkAclEntry] -> ShowS
$cshowList :: [DeleteNetworkAclEntry] -> ShowS
show :: DeleteNetworkAclEntry -> String
$cshow :: DeleteNetworkAclEntry -> String
showsPrec :: Int -> DeleteNetworkAclEntry -> ShowS
$cshowsPrec :: Int -> DeleteNetworkAclEntry -> ShowS
Prelude.Show, forall x. Rep DeleteNetworkAclEntry x -> DeleteNetworkAclEntry
forall x. DeleteNetworkAclEntry -> Rep DeleteNetworkAclEntry x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteNetworkAclEntry x -> DeleteNetworkAclEntry
$cfrom :: forall x. DeleteNetworkAclEntry -> Rep DeleteNetworkAclEntry x
Prelude.Generic)

-- |
-- Create a value of 'DeleteNetworkAclEntry' 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:
--
-- 'dryRun', 'deleteNetworkAclEntry_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@.
--
-- 'egress', 'deleteNetworkAclEntry_egress' - Indicates whether the rule is an egress rule.
--
-- 'networkAclId', 'deleteNetworkAclEntry_networkAclId' - The ID of the network ACL.
--
-- 'ruleNumber', 'deleteNetworkAclEntry_ruleNumber' - The rule number of the entry to delete.
newDeleteNetworkAclEntry ::
  -- | 'egress'
  Prelude.Bool ->
  -- | 'networkAclId'
  Prelude.Text ->
  -- | 'ruleNumber'
  Prelude.Int ->
  DeleteNetworkAclEntry
newDeleteNetworkAclEntry :: Bool -> Text -> Int -> DeleteNetworkAclEntry
newDeleteNetworkAclEntry
  Bool
pEgress_
  Text
pNetworkAclId_
  Int
pRuleNumber_ =
    DeleteNetworkAclEntry'
      { $sel:dryRun:DeleteNetworkAclEntry' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
        $sel:egress:DeleteNetworkAclEntry' :: Bool
egress = Bool
pEgress_,
        $sel:networkAclId:DeleteNetworkAclEntry' :: Text
networkAclId = Text
pNetworkAclId_,
        $sel:ruleNumber:DeleteNetworkAclEntry' :: Int
ruleNumber = Int
pRuleNumber_
      }

-- | 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@.
deleteNetworkAclEntry_dryRun :: Lens.Lens' DeleteNetworkAclEntry (Prelude.Maybe Prelude.Bool)
deleteNetworkAclEntry_dryRun :: Lens' DeleteNetworkAclEntry (Maybe Bool)
deleteNetworkAclEntry_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteNetworkAclEntry' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: DeleteNetworkAclEntry
s@DeleteNetworkAclEntry' {} Maybe Bool
a -> DeleteNetworkAclEntry
s {$sel:dryRun:DeleteNetworkAclEntry' :: Maybe Bool
dryRun = Maybe Bool
a} :: DeleteNetworkAclEntry)

-- | Indicates whether the rule is an egress rule.
deleteNetworkAclEntry_egress :: Lens.Lens' DeleteNetworkAclEntry Prelude.Bool
deleteNetworkAclEntry_egress :: Lens' DeleteNetworkAclEntry Bool
deleteNetworkAclEntry_egress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteNetworkAclEntry' {Bool
egress :: Bool
$sel:egress:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Bool
egress} -> Bool
egress) (\s :: DeleteNetworkAclEntry
s@DeleteNetworkAclEntry' {} Bool
a -> DeleteNetworkAclEntry
s {$sel:egress:DeleteNetworkAclEntry' :: Bool
egress = Bool
a} :: DeleteNetworkAclEntry)

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

-- | The rule number of the entry to delete.
deleteNetworkAclEntry_ruleNumber :: Lens.Lens' DeleteNetworkAclEntry Prelude.Int
deleteNetworkAclEntry_ruleNumber :: Lens' DeleteNetworkAclEntry Int
deleteNetworkAclEntry_ruleNumber = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteNetworkAclEntry' {Int
ruleNumber :: Int
$sel:ruleNumber:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Int
ruleNumber} -> Int
ruleNumber) (\s :: DeleteNetworkAclEntry
s@DeleteNetworkAclEntry' {} Int
a -> DeleteNetworkAclEntry
s {$sel:ruleNumber:DeleteNetworkAclEntry' :: Int
ruleNumber = Int
a} :: DeleteNetworkAclEntry)

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

instance Prelude.Hashable DeleteNetworkAclEntry where
  hashWithSalt :: Int -> DeleteNetworkAclEntry -> Int
hashWithSalt Int
_salt DeleteNetworkAclEntry' {Bool
Int
Maybe Bool
Text
ruleNumber :: Int
networkAclId :: Text
egress :: Bool
dryRun :: Maybe Bool
$sel:ruleNumber:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Int
$sel:networkAclId:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Text
$sel:egress:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Bool
$sel:dryRun:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun
      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` Int
ruleNumber

instance Prelude.NFData DeleteNetworkAclEntry where
  rnf :: DeleteNetworkAclEntry -> ()
rnf DeleteNetworkAclEntry' {Bool
Int
Maybe Bool
Text
ruleNumber :: Int
networkAclId :: Text
egress :: Bool
dryRun :: Maybe Bool
$sel:ruleNumber:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Int
$sel:networkAclId:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Text
$sel:egress:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Bool
$sel:dryRun:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Maybe Bool
..} =
    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 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 Int
ruleNumber

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

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

instance Data.ToQuery DeleteNetworkAclEntry where
  toQuery :: DeleteNetworkAclEntry -> QueryString
toQuery DeleteNetworkAclEntry' {Bool
Int
Maybe Bool
Text
ruleNumber :: Int
networkAclId :: Text
egress :: Bool
dryRun :: Maybe Bool
$sel:ruleNumber:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Int
$sel:networkAclId:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Text
$sel:egress:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Bool
$sel:dryRun:DeleteNetworkAclEntry' :: DeleteNetworkAclEntry -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"DeleteNetworkAclEntry" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun,
        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
"RuleNumber" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Int
ruleNumber
      ]

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

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

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