{-# 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.NetworkFirewall.DeleteFirewallPolicy
-- 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 FirewallPolicy.
module Amazonka.NetworkFirewall.DeleteFirewallPolicy
  ( -- * Creating a Request
    DeleteFirewallPolicy (..),
    newDeleteFirewallPolicy,

    -- * Request Lenses
    deleteFirewallPolicy_firewallPolicyArn,
    deleteFirewallPolicy_firewallPolicyName,

    -- * Destructuring the Response
    DeleteFirewallPolicyResponse (..),
    newDeleteFirewallPolicyResponse,

    -- * Response Lenses
    deleteFirewallPolicyResponse_httpStatus,
    deleteFirewallPolicyResponse_firewallPolicyResponse,
  )
where

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

-- | /See:/ 'newDeleteFirewallPolicy' smart constructor.
data DeleteFirewallPolicy = DeleteFirewallPolicy'
  { -- | The Amazon Resource Name (ARN) of the firewall policy.
    --
    -- You must specify the ARN or the name, and you can specify both.
    DeleteFirewallPolicy -> Maybe Text
firewallPolicyArn :: Prelude.Maybe Prelude.Text,
    -- | The descriptive name of the firewall policy. You can\'t change the name
    -- of a firewall policy after you create it.
    --
    -- You must specify the ARN or the name, and you can specify both.
    DeleteFirewallPolicy -> Maybe Text
firewallPolicyName :: Prelude.Maybe Prelude.Text
  }
  deriving (DeleteFirewallPolicy -> DeleteFirewallPolicy -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteFirewallPolicy -> DeleteFirewallPolicy -> Bool
$c/= :: DeleteFirewallPolicy -> DeleteFirewallPolicy -> Bool
== :: DeleteFirewallPolicy -> DeleteFirewallPolicy -> Bool
$c== :: DeleteFirewallPolicy -> DeleteFirewallPolicy -> Bool
Prelude.Eq, ReadPrec [DeleteFirewallPolicy]
ReadPrec DeleteFirewallPolicy
Int -> ReadS DeleteFirewallPolicy
ReadS [DeleteFirewallPolicy]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteFirewallPolicy]
$creadListPrec :: ReadPrec [DeleteFirewallPolicy]
readPrec :: ReadPrec DeleteFirewallPolicy
$creadPrec :: ReadPrec DeleteFirewallPolicy
readList :: ReadS [DeleteFirewallPolicy]
$creadList :: ReadS [DeleteFirewallPolicy]
readsPrec :: Int -> ReadS DeleteFirewallPolicy
$creadsPrec :: Int -> ReadS DeleteFirewallPolicy
Prelude.Read, Int -> DeleteFirewallPolicy -> ShowS
[DeleteFirewallPolicy] -> ShowS
DeleteFirewallPolicy -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteFirewallPolicy] -> ShowS
$cshowList :: [DeleteFirewallPolicy] -> ShowS
show :: DeleteFirewallPolicy -> String
$cshow :: DeleteFirewallPolicy -> String
showsPrec :: Int -> DeleteFirewallPolicy -> ShowS
$cshowsPrec :: Int -> DeleteFirewallPolicy -> ShowS
Prelude.Show, forall x. Rep DeleteFirewallPolicy x -> DeleteFirewallPolicy
forall x. DeleteFirewallPolicy -> Rep DeleteFirewallPolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteFirewallPolicy x -> DeleteFirewallPolicy
$cfrom :: forall x. DeleteFirewallPolicy -> Rep DeleteFirewallPolicy x
Prelude.Generic)

-- |
-- Create a value of 'DeleteFirewallPolicy' 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:
--
-- 'firewallPolicyArn', 'deleteFirewallPolicy_firewallPolicyArn' - The Amazon Resource Name (ARN) of the firewall policy.
--
-- You must specify the ARN or the name, and you can specify both.
--
-- 'firewallPolicyName', 'deleteFirewallPolicy_firewallPolicyName' - The descriptive name of the firewall policy. You can\'t change the name
-- of a firewall policy after you create it.
--
-- You must specify the ARN or the name, and you can specify both.
newDeleteFirewallPolicy ::
  DeleteFirewallPolicy
newDeleteFirewallPolicy :: DeleteFirewallPolicy
newDeleteFirewallPolicy =
  DeleteFirewallPolicy'
    { $sel:firewallPolicyArn:DeleteFirewallPolicy' :: Maybe Text
firewallPolicyArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:firewallPolicyName:DeleteFirewallPolicy' :: Maybe Text
firewallPolicyName = forall a. Maybe a
Prelude.Nothing
    }

-- | The Amazon Resource Name (ARN) of the firewall policy.
--
-- You must specify the ARN or the name, and you can specify both.
deleteFirewallPolicy_firewallPolicyArn :: Lens.Lens' DeleteFirewallPolicy (Prelude.Maybe Prelude.Text)
deleteFirewallPolicy_firewallPolicyArn :: Lens' DeleteFirewallPolicy (Maybe Text)
deleteFirewallPolicy_firewallPolicyArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteFirewallPolicy' {Maybe Text
firewallPolicyArn :: Maybe Text
$sel:firewallPolicyArn:DeleteFirewallPolicy' :: DeleteFirewallPolicy -> Maybe Text
firewallPolicyArn} -> Maybe Text
firewallPolicyArn) (\s :: DeleteFirewallPolicy
s@DeleteFirewallPolicy' {} Maybe Text
a -> DeleteFirewallPolicy
s {$sel:firewallPolicyArn:DeleteFirewallPolicy' :: Maybe Text
firewallPolicyArn = Maybe Text
a} :: DeleteFirewallPolicy)

-- | The descriptive name of the firewall policy. You can\'t change the name
-- of a firewall policy after you create it.
--
-- You must specify the ARN or the name, and you can specify both.
deleteFirewallPolicy_firewallPolicyName :: Lens.Lens' DeleteFirewallPolicy (Prelude.Maybe Prelude.Text)
deleteFirewallPolicy_firewallPolicyName :: Lens' DeleteFirewallPolicy (Maybe Text)
deleteFirewallPolicy_firewallPolicyName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteFirewallPolicy' {Maybe Text
firewallPolicyName :: Maybe Text
$sel:firewallPolicyName:DeleteFirewallPolicy' :: DeleteFirewallPolicy -> Maybe Text
firewallPolicyName} -> Maybe Text
firewallPolicyName) (\s :: DeleteFirewallPolicy
s@DeleteFirewallPolicy' {} Maybe Text
a -> DeleteFirewallPolicy
s {$sel:firewallPolicyName:DeleteFirewallPolicy' :: Maybe Text
firewallPolicyName = Maybe Text
a} :: DeleteFirewallPolicy)

instance Core.AWSRequest DeleteFirewallPolicy where
  type
    AWSResponse DeleteFirewallPolicy =
      DeleteFirewallPolicyResponse
  request :: (Service -> Service)
-> DeleteFirewallPolicy -> Request DeleteFirewallPolicy
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 DeleteFirewallPolicy
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteFirewallPolicy)))
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 ->
          Int -> FirewallPolicyResponse -> DeleteFirewallPolicyResponse
DeleteFirewallPolicyResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"FirewallPolicyResponse")
      )

instance Prelude.Hashable DeleteFirewallPolicy where
  hashWithSalt :: Int -> DeleteFirewallPolicy -> Int
hashWithSalt Int
_salt DeleteFirewallPolicy' {Maybe Text
firewallPolicyName :: Maybe Text
firewallPolicyArn :: Maybe Text
$sel:firewallPolicyName:DeleteFirewallPolicy' :: DeleteFirewallPolicy -> Maybe Text
$sel:firewallPolicyArn:DeleteFirewallPolicy' :: DeleteFirewallPolicy -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
firewallPolicyArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
firewallPolicyName

instance Prelude.NFData DeleteFirewallPolicy where
  rnf :: DeleteFirewallPolicy -> ()
rnf DeleteFirewallPolicy' {Maybe Text
firewallPolicyName :: Maybe Text
firewallPolicyArn :: Maybe Text
$sel:firewallPolicyName:DeleteFirewallPolicy' :: DeleteFirewallPolicy -> Maybe Text
$sel:firewallPolicyArn:DeleteFirewallPolicy' :: DeleteFirewallPolicy -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
firewallPolicyArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
firewallPolicyName

instance Data.ToHeaders DeleteFirewallPolicy where
  toHeaders :: DeleteFirewallPolicy -> 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
"NetworkFirewall_20201112.DeleteFirewallPolicy" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DeleteFirewallPolicy where
  toJSON :: DeleteFirewallPolicy -> Value
toJSON DeleteFirewallPolicy' {Maybe Text
firewallPolicyName :: Maybe Text
firewallPolicyArn :: Maybe Text
$sel:firewallPolicyName:DeleteFirewallPolicy' :: DeleteFirewallPolicy -> Maybe Text
$sel:firewallPolicyArn:DeleteFirewallPolicy' :: DeleteFirewallPolicy -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"FirewallPolicyArn" 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
firewallPolicyArn,
            (Key
"FirewallPolicyName" 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
firewallPolicyName
          ]
      )

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

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

-- | /See:/ 'newDeleteFirewallPolicyResponse' smart constructor.
data DeleteFirewallPolicyResponse = DeleteFirewallPolicyResponse'
  { -- | The response's http status code.
    DeleteFirewallPolicyResponse -> Int
httpStatus :: Prelude.Int,
    -- | The object containing the definition of the FirewallPolicyResponse that
    -- you asked to delete.
    DeleteFirewallPolicyResponse -> FirewallPolicyResponse
firewallPolicyResponse :: FirewallPolicyResponse
  }
  deriving (DeleteFirewallPolicyResponse
-> DeleteFirewallPolicyResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteFirewallPolicyResponse
-> DeleteFirewallPolicyResponse -> Bool
$c/= :: DeleteFirewallPolicyResponse
-> DeleteFirewallPolicyResponse -> Bool
== :: DeleteFirewallPolicyResponse
-> DeleteFirewallPolicyResponse -> Bool
$c== :: DeleteFirewallPolicyResponse
-> DeleteFirewallPolicyResponse -> Bool
Prelude.Eq, ReadPrec [DeleteFirewallPolicyResponse]
ReadPrec DeleteFirewallPolicyResponse
Int -> ReadS DeleteFirewallPolicyResponse
ReadS [DeleteFirewallPolicyResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteFirewallPolicyResponse]
$creadListPrec :: ReadPrec [DeleteFirewallPolicyResponse]
readPrec :: ReadPrec DeleteFirewallPolicyResponse
$creadPrec :: ReadPrec DeleteFirewallPolicyResponse
readList :: ReadS [DeleteFirewallPolicyResponse]
$creadList :: ReadS [DeleteFirewallPolicyResponse]
readsPrec :: Int -> ReadS DeleteFirewallPolicyResponse
$creadsPrec :: Int -> ReadS DeleteFirewallPolicyResponse
Prelude.Read, Int -> DeleteFirewallPolicyResponse -> ShowS
[DeleteFirewallPolicyResponse] -> ShowS
DeleteFirewallPolicyResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteFirewallPolicyResponse] -> ShowS
$cshowList :: [DeleteFirewallPolicyResponse] -> ShowS
show :: DeleteFirewallPolicyResponse -> String
$cshow :: DeleteFirewallPolicyResponse -> String
showsPrec :: Int -> DeleteFirewallPolicyResponse -> ShowS
$cshowsPrec :: Int -> DeleteFirewallPolicyResponse -> ShowS
Prelude.Show, forall x.
Rep DeleteFirewallPolicyResponse x -> DeleteFirewallPolicyResponse
forall x.
DeleteFirewallPolicyResponse -> Rep DeleteFirewallPolicyResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteFirewallPolicyResponse x -> DeleteFirewallPolicyResponse
$cfrom :: forall x.
DeleteFirewallPolicyResponse -> Rep DeleteFirewallPolicyResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteFirewallPolicyResponse' 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:
--
-- 'httpStatus', 'deleteFirewallPolicyResponse_httpStatus' - The response's http status code.
--
-- 'firewallPolicyResponse', 'deleteFirewallPolicyResponse_firewallPolicyResponse' - The object containing the definition of the FirewallPolicyResponse that
-- you asked to delete.
newDeleteFirewallPolicyResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'firewallPolicyResponse'
  FirewallPolicyResponse ->
  DeleteFirewallPolicyResponse
newDeleteFirewallPolicyResponse :: Int -> FirewallPolicyResponse -> DeleteFirewallPolicyResponse
newDeleteFirewallPolicyResponse
  Int
pHttpStatus_
  FirewallPolicyResponse
pFirewallPolicyResponse_ =
    DeleteFirewallPolicyResponse'
      { $sel:httpStatus:DeleteFirewallPolicyResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:firewallPolicyResponse:DeleteFirewallPolicyResponse' :: FirewallPolicyResponse
firewallPolicyResponse =
          FirewallPolicyResponse
pFirewallPolicyResponse_
      }

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

-- | The object containing the definition of the FirewallPolicyResponse that
-- you asked to delete.
deleteFirewallPolicyResponse_firewallPolicyResponse :: Lens.Lens' DeleteFirewallPolicyResponse FirewallPolicyResponse
deleteFirewallPolicyResponse_firewallPolicyResponse :: Lens' DeleteFirewallPolicyResponse FirewallPolicyResponse
deleteFirewallPolicyResponse_firewallPolicyResponse = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteFirewallPolicyResponse' {FirewallPolicyResponse
firewallPolicyResponse :: FirewallPolicyResponse
$sel:firewallPolicyResponse:DeleteFirewallPolicyResponse' :: DeleteFirewallPolicyResponse -> FirewallPolicyResponse
firewallPolicyResponse} -> FirewallPolicyResponse
firewallPolicyResponse) (\s :: DeleteFirewallPolicyResponse
s@DeleteFirewallPolicyResponse' {} FirewallPolicyResponse
a -> DeleteFirewallPolicyResponse
s {$sel:firewallPolicyResponse:DeleteFirewallPolicyResponse' :: FirewallPolicyResponse
firewallPolicyResponse = FirewallPolicyResponse
a} :: DeleteFirewallPolicyResponse)

instance Prelude.NFData DeleteFirewallPolicyResponse where
  rnf :: DeleteFirewallPolicyResponse -> ()
rnf DeleteFirewallPolicyResponse' {Int
FirewallPolicyResponse
firewallPolicyResponse :: FirewallPolicyResponse
httpStatus :: Int
$sel:firewallPolicyResponse:DeleteFirewallPolicyResponse' :: DeleteFirewallPolicyResponse -> FirewallPolicyResponse
$sel:httpStatus:DeleteFirewallPolicyResponse' :: DeleteFirewallPolicyResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf FirewallPolicyResponse
firewallPolicyResponse