{-# 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.RDS.RemoveSourceIdentifierFromSubscription
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Removes a source identifier from an existing RDS event notification
-- subscription.
module Amazonka.RDS.RemoveSourceIdentifierFromSubscription
  ( -- * Creating a Request
    RemoveSourceIdentifierFromSubscription (..),
    newRemoveSourceIdentifierFromSubscription,

    -- * Request Lenses
    removeSourceIdentifierFromSubscription_subscriptionName,
    removeSourceIdentifierFromSubscription_sourceIdentifier,

    -- * Destructuring the Response
    RemoveSourceIdentifierFromSubscriptionResponse (..),
    newRemoveSourceIdentifierFromSubscriptionResponse,

    -- * Response Lenses
    removeSourceIdentifierFromSubscriptionResponse_eventSubscription,
    removeSourceIdentifierFromSubscriptionResponse_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.RDS.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- |
--
-- /See:/ 'newRemoveSourceIdentifierFromSubscription' smart constructor.
data RemoveSourceIdentifierFromSubscription = RemoveSourceIdentifierFromSubscription'
  { -- | The name of the RDS event notification subscription you want to remove a
    -- source identifier from.
    RemoveSourceIdentifierFromSubscription -> Text
subscriptionName :: Prelude.Text,
    -- | The source identifier to be removed from the subscription, such as the
    -- __DB instance identifier__ for a DB instance or the name of a security
    -- group.
    RemoveSourceIdentifierFromSubscription -> Text
sourceIdentifier :: Prelude.Text
  }
  deriving (RemoveSourceIdentifierFromSubscription
-> RemoveSourceIdentifierFromSubscription -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RemoveSourceIdentifierFromSubscription
-> RemoveSourceIdentifierFromSubscription -> Bool
$c/= :: RemoveSourceIdentifierFromSubscription
-> RemoveSourceIdentifierFromSubscription -> Bool
== :: RemoveSourceIdentifierFromSubscription
-> RemoveSourceIdentifierFromSubscription -> Bool
$c== :: RemoveSourceIdentifierFromSubscription
-> RemoveSourceIdentifierFromSubscription -> Bool
Prelude.Eq, ReadPrec [RemoveSourceIdentifierFromSubscription]
ReadPrec RemoveSourceIdentifierFromSubscription
Int -> ReadS RemoveSourceIdentifierFromSubscription
ReadS [RemoveSourceIdentifierFromSubscription]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RemoveSourceIdentifierFromSubscription]
$creadListPrec :: ReadPrec [RemoveSourceIdentifierFromSubscription]
readPrec :: ReadPrec RemoveSourceIdentifierFromSubscription
$creadPrec :: ReadPrec RemoveSourceIdentifierFromSubscription
readList :: ReadS [RemoveSourceIdentifierFromSubscription]
$creadList :: ReadS [RemoveSourceIdentifierFromSubscription]
readsPrec :: Int -> ReadS RemoveSourceIdentifierFromSubscription
$creadsPrec :: Int -> ReadS RemoveSourceIdentifierFromSubscription
Prelude.Read, Int -> RemoveSourceIdentifierFromSubscription -> ShowS
[RemoveSourceIdentifierFromSubscription] -> ShowS
RemoveSourceIdentifierFromSubscription -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RemoveSourceIdentifierFromSubscription] -> ShowS
$cshowList :: [RemoveSourceIdentifierFromSubscription] -> ShowS
show :: RemoveSourceIdentifierFromSubscription -> String
$cshow :: RemoveSourceIdentifierFromSubscription -> String
showsPrec :: Int -> RemoveSourceIdentifierFromSubscription -> ShowS
$cshowsPrec :: Int -> RemoveSourceIdentifierFromSubscription -> ShowS
Prelude.Show, forall x.
Rep RemoveSourceIdentifierFromSubscription x
-> RemoveSourceIdentifierFromSubscription
forall x.
RemoveSourceIdentifierFromSubscription
-> Rep RemoveSourceIdentifierFromSubscription x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RemoveSourceIdentifierFromSubscription x
-> RemoveSourceIdentifierFromSubscription
$cfrom :: forall x.
RemoveSourceIdentifierFromSubscription
-> Rep RemoveSourceIdentifierFromSubscription x
Prelude.Generic)

-- |
-- Create a value of 'RemoveSourceIdentifierFromSubscription' 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:
--
-- 'subscriptionName', 'removeSourceIdentifierFromSubscription_subscriptionName' - The name of the RDS event notification subscription you want to remove a
-- source identifier from.
--
-- 'sourceIdentifier', 'removeSourceIdentifierFromSubscription_sourceIdentifier' - The source identifier to be removed from the subscription, such as the
-- __DB instance identifier__ for a DB instance or the name of a security
-- group.
newRemoveSourceIdentifierFromSubscription ::
  -- | 'subscriptionName'
  Prelude.Text ->
  -- | 'sourceIdentifier'
  Prelude.Text ->
  RemoveSourceIdentifierFromSubscription
newRemoveSourceIdentifierFromSubscription :: Text -> Text -> RemoveSourceIdentifierFromSubscription
newRemoveSourceIdentifierFromSubscription
  Text
pSubscriptionName_
  Text
pSourceIdentifier_ =
    RemoveSourceIdentifierFromSubscription'
      { $sel:subscriptionName:RemoveSourceIdentifierFromSubscription' :: Text
subscriptionName =
          Text
pSubscriptionName_,
        $sel:sourceIdentifier:RemoveSourceIdentifierFromSubscription' :: Text
sourceIdentifier =
          Text
pSourceIdentifier_
      }

-- | The name of the RDS event notification subscription you want to remove a
-- source identifier from.
removeSourceIdentifierFromSubscription_subscriptionName :: Lens.Lens' RemoveSourceIdentifierFromSubscription Prelude.Text
removeSourceIdentifierFromSubscription_subscriptionName :: Lens' RemoveSourceIdentifierFromSubscription Text
removeSourceIdentifierFromSubscription_subscriptionName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveSourceIdentifierFromSubscription' {Text
subscriptionName :: Text
$sel:subscriptionName:RemoveSourceIdentifierFromSubscription' :: RemoveSourceIdentifierFromSubscription -> Text
subscriptionName} -> Text
subscriptionName) (\s :: RemoveSourceIdentifierFromSubscription
s@RemoveSourceIdentifierFromSubscription' {} Text
a -> RemoveSourceIdentifierFromSubscription
s {$sel:subscriptionName:RemoveSourceIdentifierFromSubscription' :: Text
subscriptionName = Text
a} :: RemoveSourceIdentifierFromSubscription)

-- | The source identifier to be removed from the subscription, such as the
-- __DB instance identifier__ for a DB instance or the name of a security
-- group.
removeSourceIdentifierFromSubscription_sourceIdentifier :: Lens.Lens' RemoveSourceIdentifierFromSubscription Prelude.Text
removeSourceIdentifierFromSubscription_sourceIdentifier :: Lens' RemoveSourceIdentifierFromSubscription Text
removeSourceIdentifierFromSubscription_sourceIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveSourceIdentifierFromSubscription' {Text
sourceIdentifier :: Text
$sel:sourceIdentifier:RemoveSourceIdentifierFromSubscription' :: RemoveSourceIdentifierFromSubscription -> Text
sourceIdentifier} -> Text
sourceIdentifier) (\s :: RemoveSourceIdentifierFromSubscription
s@RemoveSourceIdentifierFromSubscription' {} Text
a -> RemoveSourceIdentifierFromSubscription
s {$sel:sourceIdentifier:RemoveSourceIdentifierFromSubscription' :: Text
sourceIdentifier = Text
a} :: RemoveSourceIdentifierFromSubscription)

instance
  Core.AWSRequest
    RemoveSourceIdentifierFromSubscription
  where
  type
    AWSResponse
      RemoveSourceIdentifierFromSubscription =
      RemoveSourceIdentifierFromSubscriptionResponse
  request :: (Service -> Service)
-> RemoveSourceIdentifierFromSubscription
-> Request RemoveSourceIdentifierFromSubscription
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 RemoveSourceIdentifierFromSubscription
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse RemoveSourceIdentifierFromSubscription)))
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
"RemoveSourceIdentifierFromSubscriptionResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe EventSubscription
-> Int -> RemoveSourceIdentifierFromSubscriptionResponse
RemoveSourceIdentifierFromSubscriptionResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"EventSubscription")
            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
    RemoveSourceIdentifierFromSubscription
  where
  hashWithSalt :: Int -> RemoveSourceIdentifierFromSubscription -> Int
hashWithSalt
    Int
_salt
    RemoveSourceIdentifierFromSubscription' {Text
sourceIdentifier :: Text
subscriptionName :: Text
$sel:sourceIdentifier:RemoveSourceIdentifierFromSubscription' :: RemoveSourceIdentifierFromSubscription -> Text
$sel:subscriptionName:RemoveSourceIdentifierFromSubscription' :: RemoveSourceIdentifierFromSubscription -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
subscriptionName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sourceIdentifier

instance
  Prelude.NFData
    RemoveSourceIdentifierFromSubscription
  where
  rnf :: RemoveSourceIdentifierFromSubscription -> ()
rnf RemoveSourceIdentifierFromSubscription' {Text
sourceIdentifier :: Text
subscriptionName :: Text
$sel:sourceIdentifier:RemoveSourceIdentifierFromSubscription' :: RemoveSourceIdentifierFromSubscription -> Text
$sel:subscriptionName:RemoveSourceIdentifierFromSubscription' :: RemoveSourceIdentifierFromSubscription -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
subscriptionName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
sourceIdentifier

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

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

instance
  Data.ToQuery
    RemoveSourceIdentifierFromSubscription
  where
  toQuery :: RemoveSourceIdentifierFromSubscription -> QueryString
toQuery RemoveSourceIdentifierFromSubscription' {Text
sourceIdentifier :: Text
subscriptionName :: Text
$sel:sourceIdentifier:RemoveSourceIdentifierFromSubscription' :: RemoveSourceIdentifierFromSubscription -> Text
$sel:subscriptionName:RemoveSourceIdentifierFromSubscription' :: RemoveSourceIdentifierFromSubscription -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"RemoveSourceIdentifierFromSubscription" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2014-10-31" :: Prelude.ByteString),
        ByteString
"SubscriptionName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
subscriptionName,
        ByteString
"SourceIdentifier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
sourceIdentifier
      ]

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

-- |
-- Create a value of 'RemoveSourceIdentifierFromSubscriptionResponse' 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:
--
-- 'eventSubscription', 'removeSourceIdentifierFromSubscriptionResponse_eventSubscription' - Undocumented member.
--
-- 'httpStatus', 'removeSourceIdentifierFromSubscriptionResponse_httpStatus' - The response's http status code.
newRemoveSourceIdentifierFromSubscriptionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  RemoveSourceIdentifierFromSubscriptionResponse
newRemoveSourceIdentifierFromSubscriptionResponse :: Int -> RemoveSourceIdentifierFromSubscriptionResponse
newRemoveSourceIdentifierFromSubscriptionResponse
  Int
pHttpStatus_ =
    RemoveSourceIdentifierFromSubscriptionResponse'
      { $sel:eventSubscription:RemoveSourceIdentifierFromSubscriptionResponse' :: Maybe EventSubscription
eventSubscription =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:RemoveSourceIdentifierFromSubscriptionResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | Undocumented member.
removeSourceIdentifierFromSubscriptionResponse_eventSubscription :: Lens.Lens' RemoveSourceIdentifierFromSubscriptionResponse (Prelude.Maybe EventSubscription)
removeSourceIdentifierFromSubscriptionResponse_eventSubscription :: Lens'
  RemoveSourceIdentifierFromSubscriptionResponse
  (Maybe EventSubscription)
removeSourceIdentifierFromSubscriptionResponse_eventSubscription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveSourceIdentifierFromSubscriptionResponse' {Maybe EventSubscription
eventSubscription :: Maybe EventSubscription
$sel:eventSubscription:RemoveSourceIdentifierFromSubscriptionResponse' :: RemoveSourceIdentifierFromSubscriptionResponse
-> Maybe EventSubscription
eventSubscription} -> Maybe EventSubscription
eventSubscription) (\s :: RemoveSourceIdentifierFromSubscriptionResponse
s@RemoveSourceIdentifierFromSubscriptionResponse' {} Maybe EventSubscription
a -> RemoveSourceIdentifierFromSubscriptionResponse
s {$sel:eventSubscription:RemoveSourceIdentifierFromSubscriptionResponse' :: Maybe EventSubscription
eventSubscription = Maybe EventSubscription
a} :: RemoveSourceIdentifierFromSubscriptionResponse)

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

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