{-# 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.DeleteNetworkAcl
-- 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 network ACL. You can\'t delete the ACL if it\'s
-- associated with any subnets. You can\'t delete the default network ACL.
module Amazonka.EC2.DeleteNetworkAcl
  ( -- * Creating a Request
    DeleteNetworkAcl (..),
    newDeleteNetworkAcl,

    -- * Request Lenses
    deleteNetworkAcl_dryRun,
    deleteNetworkAcl_networkAclId,

    -- * Destructuring the Response
    DeleteNetworkAclResponse (..),
    newDeleteNetworkAclResponse,
  )
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:/ 'newDeleteNetworkAcl' smart constructor.
data DeleteNetworkAcl = DeleteNetworkAcl'
  { -- | 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@.
    DeleteNetworkAcl -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the network ACL.
    DeleteNetworkAcl -> Text
networkAclId :: Prelude.Text
  }
  deriving (DeleteNetworkAcl -> DeleteNetworkAcl -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteNetworkAcl -> DeleteNetworkAcl -> Bool
$c/= :: DeleteNetworkAcl -> DeleteNetworkAcl -> Bool
== :: DeleteNetworkAcl -> DeleteNetworkAcl -> Bool
$c== :: DeleteNetworkAcl -> DeleteNetworkAcl -> Bool
Prelude.Eq, ReadPrec [DeleteNetworkAcl]
ReadPrec DeleteNetworkAcl
Int -> ReadS DeleteNetworkAcl
ReadS [DeleteNetworkAcl]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteNetworkAcl]
$creadListPrec :: ReadPrec [DeleteNetworkAcl]
readPrec :: ReadPrec DeleteNetworkAcl
$creadPrec :: ReadPrec DeleteNetworkAcl
readList :: ReadS [DeleteNetworkAcl]
$creadList :: ReadS [DeleteNetworkAcl]
readsPrec :: Int -> ReadS DeleteNetworkAcl
$creadsPrec :: Int -> ReadS DeleteNetworkAcl
Prelude.Read, Int -> DeleteNetworkAcl -> ShowS
[DeleteNetworkAcl] -> ShowS
DeleteNetworkAcl -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteNetworkAcl] -> ShowS
$cshowList :: [DeleteNetworkAcl] -> ShowS
show :: DeleteNetworkAcl -> String
$cshow :: DeleteNetworkAcl -> String
showsPrec :: Int -> DeleteNetworkAcl -> ShowS
$cshowsPrec :: Int -> DeleteNetworkAcl -> ShowS
Prelude.Show, forall x. Rep DeleteNetworkAcl x -> DeleteNetworkAcl
forall x. DeleteNetworkAcl -> Rep DeleteNetworkAcl x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteNetworkAcl x -> DeleteNetworkAcl
$cfrom :: forall x. DeleteNetworkAcl -> Rep DeleteNetworkAcl x
Prelude.Generic)

-- |
-- Create a value of 'DeleteNetworkAcl' 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', 'deleteNetworkAcl_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@.
--
-- 'networkAclId', 'deleteNetworkAcl_networkAclId' - The ID of the network ACL.
newDeleteNetworkAcl ::
  -- | 'networkAclId'
  Prelude.Text ->
  DeleteNetworkAcl
newDeleteNetworkAcl :: Text -> DeleteNetworkAcl
newDeleteNetworkAcl Text
pNetworkAclId_ =
  DeleteNetworkAcl'
    { $sel:dryRun:DeleteNetworkAcl' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
      $sel:networkAclId:DeleteNetworkAcl' :: Text
networkAclId = Text
pNetworkAclId_
    }

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

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

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

instance Prelude.Hashable DeleteNetworkAcl where
  hashWithSalt :: Int -> DeleteNetworkAcl -> Int
hashWithSalt Int
_salt DeleteNetworkAcl' {Maybe Bool
Text
networkAclId :: Text
dryRun :: Maybe Bool
$sel:networkAclId:DeleteNetworkAcl' :: DeleteNetworkAcl -> Text
$sel:dryRun:DeleteNetworkAcl' :: DeleteNetworkAcl -> 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` Text
networkAclId

instance Prelude.NFData DeleteNetworkAcl where
  rnf :: DeleteNetworkAcl -> ()
rnf DeleteNetworkAcl' {Maybe Bool
Text
networkAclId :: Text
dryRun :: Maybe Bool
$sel:networkAclId:DeleteNetworkAcl' :: DeleteNetworkAcl -> Text
$sel:dryRun:DeleteNetworkAcl' :: DeleteNetworkAcl -> 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 Text
networkAclId

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

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

instance Data.ToQuery DeleteNetworkAcl where
  toQuery :: DeleteNetworkAcl -> QueryString
toQuery DeleteNetworkAcl' {Maybe Bool
Text
networkAclId :: Text
dryRun :: Maybe Bool
$sel:networkAclId:DeleteNetworkAcl' :: DeleteNetworkAcl -> Text
$sel:dryRun:DeleteNetworkAcl' :: DeleteNetworkAcl -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"DeleteNetworkAcl" :: 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
"NetworkAclId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
networkAclId
      ]

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

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

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