{-# 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.Redshift.DeleteEndpointAccess
-- 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 a Redshift-managed VPC endpoint.
module Amazonka.Redshift.DeleteEndpointAccess
  ( -- * Creating a Request
    DeleteEndpointAccess (..),
    newDeleteEndpointAccess,

    -- * Request Lenses
    deleteEndpointAccess_endpointName,

    -- * Destructuring the Response
    EndpointAccess (..),
    newEndpointAccess,

    -- * Response Lenses
    endpointAccess_address,
    endpointAccess_clusterIdentifier,
    endpointAccess_endpointCreateTime,
    endpointAccess_endpointName,
    endpointAccess_endpointStatus,
    endpointAccess_port,
    endpointAccess_resourceOwner,
    endpointAccess_subnetGroupName,
    endpointAccess_vpcEndpoint,
    endpointAccess_vpcSecurityGroups,
  )
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 Amazonka.Redshift.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

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

-- |
-- Create a value of 'DeleteEndpointAccess' 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:
--
-- 'endpointName', 'deleteEndpointAccess_endpointName' - The Redshift-managed VPC endpoint to delete.
newDeleteEndpointAccess ::
  -- | 'endpointName'
  Prelude.Text ->
  DeleteEndpointAccess
newDeleteEndpointAccess :: Text -> DeleteEndpointAccess
newDeleteEndpointAccess Text
pEndpointName_ =
  DeleteEndpointAccess'
    { $sel:endpointName:DeleteEndpointAccess' :: Text
endpointName =
        Text
pEndpointName_
    }

-- | The Redshift-managed VPC endpoint to delete.
deleteEndpointAccess_endpointName :: Lens.Lens' DeleteEndpointAccess Prelude.Text
deleteEndpointAccess_endpointName :: Lens' DeleteEndpointAccess Text
deleteEndpointAccess_endpointName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteEndpointAccess' {Text
endpointName :: Text
$sel:endpointName:DeleteEndpointAccess' :: DeleteEndpointAccess -> Text
endpointName} -> Text
endpointName) (\s :: DeleteEndpointAccess
s@DeleteEndpointAccess' {} Text
a -> DeleteEndpointAccess
s {$sel:endpointName:DeleteEndpointAccess' :: Text
endpointName = Text
a} :: DeleteEndpointAccess)

instance Core.AWSRequest DeleteEndpointAccess where
  type
    AWSResponse DeleteEndpointAccess =
      EndpointAccess
  request :: (Service -> Service)
-> DeleteEndpointAccess -> Request DeleteEndpointAccess
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 DeleteEndpointAccess
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteEndpointAccess)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"DeleteEndpointAccessResult"
      (\Int
s ResponseHeaders
h [Node]
x -> forall a. FromXML a => [Node] -> Either String a
Data.parseXML [Node]
x)

instance Prelude.Hashable DeleteEndpointAccess where
  hashWithSalt :: Int -> DeleteEndpointAccess -> Int
hashWithSalt Int
_salt DeleteEndpointAccess' {Text
endpointName :: Text
$sel:endpointName:DeleteEndpointAccess' :: DeleteEndpointAccess -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
endpointName

instance Prelude.NFData DeleteEndpointAccess where
  rnf :: DeleteEndpointAccess -> ()
rnf DeleteEndpointAccess' {Text
endpointName :: Text
$sel:endpointName:DeleteEndpointAccess' :: DeleteEndpointAccess -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
endpointName

instance Data.ToHeaders DeleteEndpointAccess where
  toHeaders :: DeleteEndpointAccess -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery DeleteEndpointAccess where
  toQuery :: DeleteEndpointAccess -> QueryString
toQuery DeleteEndpointAccess' {Text
endpointName :: Text
$sel:endpointName:DeleteEndpointAccess' :: DeleteEndpointAccess -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"DeleteEndpointAccess" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2012-12-01" :: Prelude.ByteString),
        ByteString
"EndpointName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
endpointName
      ]