{-# 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.OpsWorks.UpdateRdsDbInstance
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates an Amazon RDS instance.
--
-- __Required Permissions__: To use this action, an IAM user must have a
-- Manage permissions level for the stack, or an attached policy that
-- explicitly grants permissions. For more information on user permissions,
-- see
-- <https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html Managing User Permissions>.
module Amazonka.OpsWorks.UpdateRdsDbInstance
  ( -- * Creating a Request
    UpdateRdsDbInstance (..),
    newUpdateRdsDbInstance,

    -- * Request Lenses
    updateRdsDbInstance_dbPassword,
    updateRdsDbInstance_dbUser,
    updateRdsDbInstance_rdsDbInstanceArn,

    -- * Destructuring the Response
    UpdateRdsDbInstanceResponse (..),
    newUpdateRdsDbInstanceResponse,
  )
where

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

-- | /See:/ 'newUpdateRdsDbInstance' smart constructor.
data UpdateRdsDbInstance = UpdateRdsDbInstance'
  { -- | The database password.
    UpdateRdsDbInstance -> Maybe Text
dbPassword :: Prelude.Maybe Prelude.Text,
    -- | The master user name.
    UpdateRdsDbInstance -> Maybe Text
dbUser :: Prelude.Maybe Prelude.Text,
    -- | The Amazon RDS instance\'s ARN.
    UpdateRdsDbInstance -> Text
rdsDbInstanceArn :: Prelude.Text
  }
  deriving (UpdateRdsDbInstance -> UpdateRdsDbInstance -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateRdsDbInstance -> UpdateRdsDbInstance -> Bool
$c/= :: UpdateRdsDbInstance -> UpdateRdsDbInstance -> Bool
== :: UpdateRdsDbInstance -> UpdateRdsDbInstance -> Bool
$c== :: UpdateRdsDbInstance -> UpdateRdsDbInstance -> Bool
Prelude.Eq, ReadPrec [UpdateRdsDbInstance]
ReadPrec UpdateRdsDbInstance
Int -> ReadS UpdateRdsDbInstance
ReadS [UpdateRdsDbInstance]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateRdsDbInstance]
$creadListPrec :: ReadPrec [UpdateRdsDbInstance]
readPrec :: ReadPrec UpdateRdsDbInstance
$creadPrec :: ReadPrec UpdateRdsDbInstance
readList :: ReadS [UpdateRdsDbInstance]
$creadList :: ReadS [UpdateRdsDbInstance]
readsPrec :: Int -> ReadS UpdateRdsDbInstance
$creadsPrec :: Int -> ReadS UpdateRdsDbInstance
Prelude.Read, Int -> UpdateRdsDbInstance -> ShowS
[UpdateRdsDbInstance] -> ShowS
UpdateRdsDbInstance -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateRdsDbInstance] -> ShowS
$cshowList :: [UpdateRdsDbInstance] -> ShowS
show :: UpdateRdsDbInstance -> String
$cshow :: UpdateRdsDbInstance -> String
showsPrec :: Int -> UpdateRdsDbInstance -> ShowS
$cshowsPrec :: Int -> UpdateRdsDbInstance -> ShowS
Prelude.Show, forall x. Rep UpdateRdsDbInstance x -> UpdateRdsDbInstance
forall x. UpdateRdsDbInstance -> Rep UpdateRdsDbInstance x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateRdsDbInstance x -> UpdateRdsDbInstance
$cfrom :: forall x. UpdateRdsDbInstance -> Rep UpdateRdsDbInstance x
Prelude.Generic)

-- |
-- Create a value of 'UpdateRdsDbInstance' 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:
--
-- 'dbPassword', 'updateRdsDbInstance_dbPassword' - The database password.
--
-- 'dbUser', 'updateRdsDbInstance_dbUser' - The master user name.
--
-- 'rdsDbInstanceArn', 'updateRdsDbInstance_rdsDbInstanceArn' - The Amazon RDS instance\'s ARN.
newUpdateRdsDbInstance ::
  -- | 'rdsDbInstanceArn'
  Prelude.Text ->
  UpdateRdsDbInstance
newUpdateRdsDbInstance :: Text -> UpdateRdsDbInstance
newUpdateRdsDbInstance Text
pRdsDbInstanceArn_ =
  UpdateRdsDbInstance'
    { $sel:dbPassword:UpdateRdsDbInstance' :: Maybe Text
dbPassword = forall a. Maybe a
Prelude.Nothing,
      $sel:dbUser:UpdateRdsDbInstance' :: Maybe Text
dbUser = forall a. Maybe a
Prelude.Nothing,
      $sel:rdsDbInstanceArn:UpdateRdsDbInstance' :: Text
rdsDbInstanceArn = Text
pRdsDbInstanceArn_
    }

-- | The database password.
updateRdsDbInstance_dbPassword :: Lens.Lens' UpdateRdsDbInstance (Prelude.Maybe Prelude.Text)
updateRdsDbInstance_dbPassword :: Lens' UpdateRdsDbInstance (Maybe Text)
updateRdsDbInstance_dbPassword = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRdsDbInstance' {Maybe Text
dbPassword :: Maybe Text
$sel:dbPassword:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Maybe Text
dbPassword} -> Maybe Text
dbPassword) (\s :: UpdateRdsDbInstance
s@UpdateRdsDbInstance' {} Maybe Text
a -> UpdateRdsDbInstance
s {$sel:dbPassword:UpdateRdsDbInstance' :: Maybe Text
dbPassword = Maybe Text
a} :: UpdateRdsDbInstance)

-- | The master user name.
updateRdsDbInstance_dbUser :: Lens.Lens' UpdateRdsDbInstance (Prelude.Maybe Prelude.Text)
updateRdsDbInstance_dbUser :: Lens' UpdateRdsDbInstance (Maybe Text)
updateRdsDbInstance_dbUser = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRdsDbInstance' {Maybe Text
dbUser :: Maybe Text
$sel:dbUser:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Maybe Text
dbUser} -> Maybe Text
dbUser) (\s :: UpdateRdsDbInstance
s@UpdateRdsDbInstance' {} Maybe Text
a -> UpdateRdsDbInstance
s {$sel:dbUser:UpdateRdsDbInstance' :: Maybe Text
dbUser = Maybe Text
a} :: UpdateRdsDbInstance)

-- | The Amazon RDS instance\'s ARN.
updateRdsDbInstance_rdsDbInstanceArn :: Lens.Lens' UpdateRdsDbInstance Prelude.Text
updateRdsDbInstance_rdsDbInstanceArn :: Lens' UpdateRdsDbInstance Text
updateRdsDbInstance_rdsDbInstanceArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRdsDbInstance' {Text
rdsDbInstanceArn :: Text
$sel:rdsDbInstanceArn:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Text
rdsDbInstanceArn} -> Text
rdsDbInstanceArn) (\s :: UpdateRdsDbInstance
s@UpdateRdsDbInstance' {} Text
a -> UpdateRdsDbInstance
s {$sel:rdsDbInstanceArn:UpdateRdsDbInstance' :: Text
rdsDbInstanceArn = Text
a} :: UpdateRdsDbInstance)

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

instance Prelude.Hashable UpdateRdsDbInstance where
  hashWithSalt :: Int -> UpdateRdsDbInstance -> Int
hashWithSalt Int
_salt UpdateRdsDbInstance' {Maybe Text
Text
rdsDbInstanceArn :: Text
dbUser :: Maybe Text
dbPassword :: Maybe Text
$sel:rdsDbInstanceArn:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Text
$sel:dbUser:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Maybe Text
$sel:dbPassword:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
dbPassword
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
dbUser
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
rdsDbInstanceArn

instance Prelude.NFData UpdateRdsDbInstance where
  rnf :: UpdateRdsDbInstance -> ()
rnf UpdateRdsDbInstance' {Maybe Text
Text
rdsDbInstanceArn :: Text
dbUser :: Maybe Text
dbPassword :: Maybe Text
$sel:rdsDbInstanceArn:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Text
$sel:dbUser:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Maybe Text
$sel:dbPassword:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
dbPassword
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
dbUser
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
rdsDbInstanceArn

instance Data.ToHeaders UpdateRdsDbInstance where
  toHeaders :: UpdateRdsDbInstance -> [Header]
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 -> [Header]
Data.=# ( ByteString
"OpsWorks_20130218.UpdateRdsDbInstance" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UpdateRdsDbInstance where
  toJSON :: UpdateRdsDbInstance -> Value
toJSON UpdateRdsDbInstance' {Maybe Text
Text
rdsDbInstanceArn :: Text
dbUser :: Maybe Text
dbPassword :: Maybe Text
$sel:rdsDbInstanceArn:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Text
$sel:dbUser:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Maybe Text
$sel:dbPassword:UpdateRdsDbInstance' :: UpdateRdsDbInstance -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"DbPassword" 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
dbPassword,
            (Key
"DbUser" 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
dbUser,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"RdsDbInstanceArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
rdsDbInstanceArn)
          ]
      )

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

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

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

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

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