{-# 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.RemoveRoleFromDBCluster
-- 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 the asssociation of an Amazon Web Services Identity and Access
-- Management (IAM) role from a DB cluster.
--
-- For more information on Amazon Aurora DB clusters, see
-- <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html What is Amazon Aurora?>
-- in the /Amazon Aurora User Guide/.
--
-- For more information on Multi-AZ DB clusters, see
-- <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html Multi-AZ deployments with two readable standby DB instances>
-- in the /Amazon RDS User Guide./
module Amazonka.RDS.RemoveRoleFromDBCluster
  ( -- * Creating a Request
    RemoveRoleFromDBCluster (..),
    newRemoveRoleFromDBCluster,

    -- * Request Lenses
    removeRoleFromDBCluster_featureName,
    removeRoleFromDBCluster_dbClusterIdentifier,
    removeRoleFromDBCluster_roleArn,

    -- * Destructuring the Response
    RemoveRoleFromDBClusterResponse (..),
    newRemoveRoleFromDBClusterResponse,
  )
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:/ 'newRemoveRoleFromDBCluster' smart constructor.
data RemoveRoleFromDBCluster = RemoveRoleFromDBCluster'
  { -- | The name of the feature for the DB cluster that the IAM role is to be
    -- disassociated from. For information about supported feature names, see
    -- DBEngineVersion.
    RemoveRoleFromDBCluster -> Maybe Text
featureName :: Prelude.Maybe Prelude.Text,
    -- | The name of the DB cluster to disassociate the IAM role from.
    RemoveRoleFromDBCluster -> Text
dbClusterIdentifier :: Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the IAM role to disassociate from the
    -- Aurora DB cluster, for example
    -- @arn:aws:iam::123456789012:role\/AuroraAccessRole@.
    RemoveRoleFromDBCluster -> Text
roleArn :: Prelude.Text
  }
  deriving (RemoveRoleFromDBCluster -> RemoveRoleFromDBCluster -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RemoveRoleFromDBCluster -> RemoveRoleFromDBCluster -> Bool
$c/= :: RemoveRoleFromDBCluster -> RemoveRoleFromDBCluster -> Bool
== :: RemoveRoleFromDBCluster -> RemoveRoleFromDBCluster -> Bool
$c== :: RemoveRoleFromDBCluster -> RemoveRoleFromDBCluster -> Bool
Prelude.Eq, ReadPrec [RemoveRoleFromDBCluster]
ReadPrec RemoveRoleFromDBCluster
Int -> ReadS RemoveRoleFromDBCluster
ReadS [RemoveRoleFromDBCluster]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RemoveRoleFromDBCluster]
$creadListPrec :: ReadPrec [RemoveRoleFromDBCluster]
readPrec :: ReadPrec RemoveRoleFromDBCluster
$creadPrec :: ReadPrec RemoveRoleFromDBCluster
readList :: ReadS [RemoveRoleFromDBCluster]
$creadList :: ReadS [RemoveRoleFromDBCluster]
readsPrec :: Int -> ReadS RemoveRoleFromDBCluster
$creadsPrec :: Int -> ReadS RemoveRoleFromDBCluster
Prelude.Read, Int -> RemoveRoleFromDBCluster -> ShowS
[RemoveRoleFromDBCluster] -> ShowS
RemoveRoleFromDBCluster -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RemoveRoleFromDBCluster] -> ShowS
$cshowList :: [RemoveRoleFromDBCluster] -> ShowS
show :: RemoveRoleFromDBCluster -> String
$cshow :: RemoveRoleFromDBCluster -> String
showsPrec :: Int -> RemoveRoleFromDBCluster -> ShowS
$cshowsPrec :: Int -> RemoveRoleFromDBCluster -> ShowS
Prelude.Show, forall x. Rep RemoveRoleFromDBCluster x -> RemoveRoleFromDBCluster
forall x. RemoveRoleFromDBCluster -> Rep RemoveRoleFromDBCluster x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RemoveRoleFromDBCluster x -> RemoveRoleFromDBCluster
$cfrom :: forall x. RemoveRoleFromDBCluster -> Rep RemoveRoleFromDBCluster x
Prelude.Generic)

-- |
-- Create a value of 'RemoveRoleFromDBCluster' 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:
--
-- 'featureName', 'removeRoleFromDBCluster_featureName' - The name of the feature for the DB cluster that the IAM role is to be
-- disassociated from. For information about supported feature names, see
-- DBEngineVersion.
--
-- 'dbClusterIdentifier', 'removeRoleFromDBCluster_dbClusterIdentifier' - The name of the DB cluster to disassociate the IAM role from.
--
-- 'roleArn', 'removeRoleFromDBCluster_roleArn' - The Amazon Resource Name (ARN) of the IAM role to disassociate from the
-- Aurora DB cluster, for example
-- @arn:aws:iam::123456789012:role\/AuroraAccessRole@.
newRemoveRoleFromDBCluster ::
  -- | 'dbClusterIdentifier'
  Prelude.Text ->
  -- | 'roleArn'
  Prelude.Text ->
  RemoveRoleFromDBCluster
newRemoveRoleFromDBCluster :: Text -> Text -> RemoveRoleFromDBCluster
newRemoveRoleFromDBCluster
  Text
pDBClusterIdentifier_
  Text
pRoleArn_ =
    RemoveRoleFromDBCluster'
      { $sel:featureName:RemoveRoleFromDBCluster' :: Maybe Text
featureName =
          forall a. Maybe a
Prelude.Nothing,
        $sel:dbClusterIdentifier:RemoveRoleFromDBCluster' :: Text
dbClusterIdentifier = Text
pDBClusterIdentifier_,
        $sel:roleArn:RemoveRoleFromDBCluster' :: Text
roleArn = Text
pRoleArn_
      }

-- | The name of the feature for the DB cluster that the IAM role is to be
-- disassociated from. For information about supported feature names, see
-- DBEngineVersion.
removeRoleFromDBCluster_featureName :: Lens.Lens' RemoveRoleFromDBCluster (Prelude.Maybe Prelude.Text)
removeRoleFromDBCluster_featureName :: Lens' RemoveRoleFromDBCluster (Maybe Text)
removeRoleFromDBCluster_featureName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveRoleFromDBCluster' {Maybe Text
featureName :: Maybe Text
$sel:featureName:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Maybe Text
featureName} -> Maybe Text
featureName) (\s :: RemoveRoleFromDBCluster
s@RemoveRoleFromDBCluster' {} Maybe Text
a -> RemoveRoleFromDBCluster
s {$sel:featureName:RemoveRoleFromDBCluster' :: Maybe Text
featureName = Maybe Text
a} :: RemoveRoleFromDBCluster)

-- | The name of the DB cluster to disassociate the IAM role from.
removeRoleFromDBCluster_dbClusterIdentifier :: Lens.Lens' RemoveRoleFromDBCluster Prelude.Text
removeRoleFromDBCluster_dbClusterIdentifier :: Lens' RemoveRoleFromDBCluster Text
removeRoleFromDBCluster_dbClusterIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveRoleFromDBCluster' {Text
dbClusterIdentifier :: Text
$sel:dbClusterIdentifier:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Text
dbClusterIdentifier} -> Text
dbClusterIdentifier) (\s :: RemoveRoleFromDBCluster
s@RemoveRoleFromDBCluster' {} Text
a -> RemoveRoleFromDBCluster
s {$sel:dbClusterIdentifier:RemoveRoleFromDBCluster' :: Text
dbClusterIdentifier = Text
a} :: RemoveRoleFromDBCluster)

-- | The Amazon Resource Name (ARN) of the IAM role to disassociate from the
-- Aurora DB cluster, for example
-- @arn:aws:iam::123456789012:role\/AuroraAccessRole@.
removeRoleFromDBCluster_roleArn :: Lens.Lens' RemoveRoleFromDBCluster Prelude.Text
removeRoleFromDBCluster_roleArn :: Lens' RemoveRoleFromDBCluster Text
removeRoleFromDBCluster_roleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveRoleFromDBCluster' {Text
roleArn :: Text
$sel:roleArn:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Text
roleArn} -> Text
roleArn) (\s :: RemoveRoleFromDBCluster
s@RemoveRoleFromDBCluster' {} Text
a -> RemoveRoleFromDBCluster
s {$sel:roleArn:RemoveRoleFromDBCluster' :: Text
roleArn = Text
a} :: RemoveRoleFromDBCluster)

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

instance Prelude.Hashable RemoveRoleFromDBCluster where
  hashWithSalt :: Int -> RemoveRoleFromDBCluster -> Int
hashWithSalt Int
_salt RemoveRoleFromDBCluster' {Maybe Text
Text
roleArn :: Text
dbClusterIdentifier :: Text
featureName :: Maybe Text
$sel:roleArn:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Text
$sel:dbClusterIdentifier:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Text
$sel:featureName:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
featureName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dbClusterIdentifier
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
roleArn

instance Prelude.NFData RemoveRoleFromDBCluster where
  rnf :: RemoveRoleFromDBCluster -> ()
rnf RemoveRoleFromDBCluster' {Maybe Text
Text
roleArn :: Text
dbClusterIdentifier :: Text
featureName :: Maybe Text
$sel:roleArn:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Text
$sel:dbClusterIdentifier:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Text
$sel:featureName:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
featureName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dbClusterIdentifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
roleArn

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

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

instance Data.ToQuery RemoveRoleFromDBCluster where
  toQuery :: RemoveRoleFromDBCluster -> QueryString
toQuery RemoveRoleFromDBCluster' {Maybe Text
Text
roleArn :: Text
dbClusterIdentifier :: Text
featureName :: Maybe Text
$sel:roleArn:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Text
$sel:dbClusterIdentifier:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Text
$sel:featureName:RemoveRoleFromDBCluster' :: RemoveRoleFromDBCluster -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"RemoveRoleFromDBCluster" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2014-10-31" :: Prelude.ByteString),
        ByteString
"FeatureName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
featureName,
        ByteString
"DBClusterIdentifier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
dbClusterIdentifier,
        ByteString
"RoleArn" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
roleArn
      ]

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

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

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