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

    -- * Request Lenses
    deleteEndpointAccess_endpointName,

    -- * Destructuring the Response
    DeleteEndpointAccessResponse (..),
    newDeleteEndpointAccessResponse,

    -- * Response Lenses
    deleteEndpointAccessResponse_endpoint,
    deleteEndpointAccessResponse_httpStatus,
  )
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.RedshiftServerLess.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDeleteEndpointAccess' smart constructor.
data DeleteEndpointAccess = DeleteEndpointAccess'
  { -- | The name of the 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 name of the VPC endpoint to delete.
newDeleteEndpointAccess ::
  -- | 'endpointName'
  Prelude.Text ->
  DeleteEndpointAccess
newDeleteEndpointAccess :: Text -> DeleteEndpointAccess
newDeleteEndpointAccess Text
pEndpointName_ =
  DeleteEndpointAccess'
    { $sel:endpointName:DeleteEndpointAccess' :: Text
endpointName =
        Text
pEndpointName_
    }

-- | The name of the 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 =
      DeleteEndpointAccessResponse
  request :: (Service -> Service)
-> DeleteEndpointAccess -> Request DeleteEndpointAccess
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 DeleteEndpointAccess
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteEndpointAccess)))
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 ->
          Maybe EndpointAccess -> Int -> DeleteEndpointAccessResponse
DeleteEndpointAccessResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"endpoint")
            forall (f :: * -> *) a b. Applicative f => 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))
      )

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] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"RedshiftServerless.DeleteEndpointAccess" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DeleteEndpointAccess where
  toJSON :: DeleteEndpointAccess -> Value
toJSON DeleteEndpointAccess' {Text
endpointName :: Text
$sel:endpointName:DeleteEndpointAccess' :: DeleteEndpointAccess -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [forall a. a -> Maybe a
Prelude.Just (Key
"endpointName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
endpointName)]
      )

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 = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newDeleteEndpointAccessResponse' smart constructor.
data DeleteEndpointAccessResponse = DeleteEndpointAccessResponse'
  { -- | The deleted VPC endpoint.
    DeleteEndpointAccessResponse -> Maybe EndpointAccess
endpoint :: Prelude.Maybe EndpointAccess,
    -- | The response's http status code.
    DeleteEndpointAccessResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteEndpointAccessResponse
-> DeleteEndpointAccessResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteEndpointAccessResponse
-> DeleteEndpointAccessResponse -> Bool
$c/= :: DeleteEndpointAccessResponse
-> DeleteEndpointAccessResponse -> Bool
== :: DeleteEndpointAccessResponse
-> DeleteEndpointAccessResponse -> Bool
$c== :: DeleteEndpointAccessResponse
-> DeleteEndpointAccessResponse -> Bool
Prelude.Eq, ReadPrec [DeleteEndpointAccessResponse]
ReadPrec DeleteEndpointAccessResponse
Int -> ReadS DeleteEndpointAccessResponse
ReadS [DeleteEndpointAccessResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteEndpointAccessResponse]
$creadListPrec :: ReadPrec [DeleteEndpointAccessResponse]
readPrec :: ReadPrec DeleteEndpointAccessResponse
$creadPrec :: ReadPrec DeleteEndpointAccessResponse
readList :: ReadS [DeleteEndpointAccessResponse]
$creadList :: ReadS [DeleteEndpointAccessResponse]
readsPrec :: Int -> ReadS DeleteEndpointAccessResponse
$creadsPrec :: Int -> ReadS DeleteEndpointAccessResponse
Prelude.Read, Int -> DeleteEndpointAccessResponse -> ShowS
[DeleteEndpointAccessResponse] -> ShowS
DeleteEndpointAccessResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteEndpointAccessResponse] -> ShowS
$cshowList :: [DeleteEndpointAccessResponse] -> ShowS
show :: DeleteEndpointAccessResponse -> String
$cshow :: DeleteEndpointAccessResponse -> String
showsPrec :: Int -> DeleteEndpointAccessResponse -> ShowS
$cshowsPrec :: Int -> DeleteEndpointAccessResponse -> ShowS
Prelude.Show, forall x.
Rep DeleteEndpointAccessResponse x -> DeleteEndpointAccessResponse
forall x.
DeleteEndpointAccessResponse -> Rep DeleteEndpointAccessResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteEndpointAccessResponse x -> DeleteEndpointAccessResponse
$cfrom :: forall x.
DeleteEndpointAccessResponse -> Rep DeleteEndpointAccessResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteEndpointAccessResponse' 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:
--
-- 'endpoint', 'deleteEndpointAccessResponse_endpoint' - The deleted VPC endpoint.
--
-- 'httpStatus', 'deleteEndpointAccessResponse_httpStatus' - The response's http status code.
newDeleteEndpointAccessResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteEndpointAccessResponse
newDeleteEndpointAccessResponse :: Int -> DeleteEndpointAccessResponse
newDeleteEndpointAccessResponse Int
pHttpStatus_ =
  DeleteEndpointAccessResponse'
    { $sel:endpoint:DeleteEndpointAccessResponse' :: Maybe EndpointAccess
endpoint =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DeleteEndpointAccessResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The deleted VPC endpoint.
deleteEndpointAccessResponse_endpoint :: Lens.Lens' DeleteEndpointAccessResponse (Prelude.Maybe EndpointAccess)
deleteEndpointAccessResponse_endpoint :: Lens' DeleteEndpointAccessResponse (Maybe EndpointAccess)
deleteEndpointAccessResponse_endpoint = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteEndpointAccessResponse' {Maybe EndpointAccess
endpoint :: Maybe EndpointAccess
$sel:endpoint:DeleteEndpointAccessResponse' :: DeleteEndpointAccessResponse -> Maybe EndpointAccess
endpoint} -> Maybe EndpointAccess
endpoint) (\s :: DeleteEndpointAccessResponse
s@DeleteEndpointAccessResponse' {} Maybe EndpointAccess
a -> DeleteEndpointAccessResponse
s {$sel:endpoint:DeleteEndpointAccessResponse' :: Maybe EndpointAccess
endpoint = Maybe EndpointAccess
a} :: DeleteEndpointAccessResponse)

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

instance Prelude.NFData DeleteEndpointAccessResponse where
  rnf :: DeleteEndpointAccessResponse -> ()
rnf DeleteEndpointAccessResponse' {Int
Maybe EndpointAccess
httpStatus :: Int
endpoint :: Maybe EndpointAccess
$sel:httpStatus:DeleteEndpointAccessResponse' :: DeleteEndpointAccessResponse -> Int
$sel:endpoint:DeleteEndpointAccessResponse' :: DeleteEndpointAccessResponse -> Maybe EndpointAccess
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe EndpointAccess
endpoint
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus