{-# 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.SwitchoverReadReplica
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Switches over an Oracle standby database in an Oracle Data Guard
-- environment, making it the new primary database. Issue this command in
-- the Region that hosts the current standby database.
module Amazonka.RDS.SwitchoverReadReplica
  ( -- * Creating a Request
    SwitchoverReadReplica (..),
    newSwitchoverReadReplica,

    -- * Request Lenses
    switchoverReadReplica_dbInstanceIdentifier,

    -- * Destructuring the Response
    SwitchoverReadReplicaResponse (..),
    newSwitchoverReadReplicaResponse,

    -- * Response Lenses
    switchoverReadReplicaResponse_dbInstance,
    switchoverReadReplicaResponse_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:/ 'newSwitchoverReadReplica' smart constructor.
data SwitchoverReadReplica = SwitchoverReadReplica'
  { -- | The DB instance identifier of the current standby database. This value
    -- is stored as a lowercase string.
    --
    -- Constraints:
    --
    -- -   Must match the identifier of an existing Oracle read replica DB
    --     instance.
    SwitchoverReadReplica -> Text
dbInstanceIdentifier :: Prelude.Text
  }
  deriving (SwitchoverReadReplica -> SwitchoverReadReplica -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SwitchoverReadReplica -> SwitchoverReadReplica -> Bool
$c/= :: SwitchoverReadReplica -> SwitchoverReadReplica -> Bool
== :: SwitchoverReadReplica -> SwitchoverReadReplica -> Bool
$c== :: SwitchoverReadReplica -> SwitchoverReadReplica -> Bool
Prelude.Eq, ReadPrec [SwitchoverReadReplica]
ReadPrec SwitchoverReadReplica
Int -> ReadS SwitchoverReadReplica
ReadS [SwitchoverReadReplica]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SwitchoverReadReplica]
$creadListPrec :: ReadPrec [SwitchoverReadReplica]
readPrec :: ReadPrec SwitchoverReadReplica
$creadPrec :: ReadPrec SwitchoverReadReplica
readList :: ReadS [SwitchoverReadReplica]
$creadList :: ReadS [SwitchoverReadReplica]
readsPrec :: Int -> ReadS SwitchoverReadReplica
$creadsPrec :: Int -> ReadS SwitchoverReadReplica
Prelude.Read, Int -> SwitchoverReadReplica -> ShowS
[SwitchoverReadReplica] -> ShowS
SwitchoverReadReplica -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SwitchoverReadReplica] -> ShowS
$cshowList :: [SwitchoverReadReplica] -> ShowS
show :: SwitchoverReadReplica -> String
$cshow :: SwitchoverReadReplica -> String
showsPrec :: Int -> SwitchoverReadReplica -> ShowS
$cshowsPrec :: Int -> SwitchoverReadReplica -> ShowS
Prelude.Show, forall x. Rep SwitchoverReadReplica x -> SwitchoverReadReplica
forall x. SwitchoverReadReplica -> Rep SwitchoverReadReplica x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SwitchoverReadReplica x -> SwitchoverReadReplica
$cfrom :: forall x. SwitchoverReadReplica -> Rep SwitchoverReadReplica x
Prelude.Generic)

-- |
-- Create a value of 'SwitchoverReadReplica' 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:
--
-- 'dbInstanceIdentifier', 'switchoverReadReplica_dbInstanceIdentifier' - The DB instance identifier of the current standby database. This value
-- is stored as a lowercase string.
--
-- Constraints:
--
-- -   Must match the identifier of an existing Oracle read replica DB
--     instance.
newSwitchoverReadReplica ::
  -- | 'dbInstanceIdentifier'
  Prelude.Text ->
  SwitchoverReadReplica
newSwitchoverReadReplica :: Text -> SwitchoverReadReplica
newSwitchoverReadReplica Text
pDBInstanceIdentifier_ =
  SwitchoverReadReplica'
    { $sel:dbInstanceIdentifier:SwitchoverReadReplica' :: Text
dbInstanceIdentifier =
        Text
pDBInstanceIdentifier_
    }

-- | The DB instance identifier of the current standby database. This value
-- is stored as a lowercase string.
--
-- Constraints:
--
-- -   Must match the identifier of an existing Oracle read replica DB
--     instance.
switchoverReadReplica_dbInstanceIdentifier :: Lens.Lens' SwitchoverReadReplica Prelude.Text
switchoverReadReplica_dbInstanceIdentifier :: Lens' SwitchoverReadReplica Text
switchoverReadReplica_dbInstanceIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SwitchoverReadReplica' {Text
dbInstanceIdentifier :: Text
$sel:dbInstanceIdentifier:SwitchoverReadReplica' :: SwitchoverReadReplica -> Text
dbInstanceIdentifier} -> Text
dbInstanceIdentifier) (\s :: SwitchoverReadReplica
s@SwitchoverReadReplica' {} Text
a -> SwitchoverReadReplica
s {$sel:dbInstanceIdentifier:SwitchoverReadReplica' :: Text
dbInstanceIdentifier = Text
a} :: SwitchoverReadReplica)

instance Core.AWSRequest SwitchoverReadReplica where
  type
    AWSResponse SwitchoverReadReplica =
      SwitchoverReadReplicaResponse
  request :: (Service -> Service)
-> SwitchoverReadReplica -> Request SwitchoverReadReplica
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 SwitchoverReadReplica
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse SwitchoverReadReplica)))
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
"SwitchoverReadReplicaResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe DBInstance -> Int -> SwitchoverReadReplicaResponse
SwitchoverReadReplicaResponse'
            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
"DBInstance")
            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 SwitchoverReadReplica where
  hashWithSalt :: Int -> SwitchoverReadReplica -> Int
hashWithSalt Int
_salt SwitchoverReadReplica' {Text
dbInstanceIdentifier :: Text
$sel:dbInstanceIdentifier:SwitchoverReadReplica' :: SwitchoverReadReplica -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dbInstanceIdentifier

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

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

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

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

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

-- |
-- Create a value of 'SwitchoverReadReplicaResponse' 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:
--
-- 'dbInstance', 'switchoverReadReplicaResponse_dbInstance' - Undocumented member.
--
-- 'httpStatus', 'switchoverReadReplicaResponse_httpStatus' - The response's http status code.
newSwitchoverReadReplicaResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  SwitchoverReadReplicaResponse
newSwitchoverReadReplicaResponse :: Int -> SwitchoverReadReplicaResponse
newSwitchoverReadReplicaResponse Int
pHttpStatus_ =
  SwitchoverReadReplicaResponse'
    { $sel:dbInstance:SwitchoverReadReplicaResponse' :: Maybe DBInstance
dbInstance =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:SwitchoverReadReplicaResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
switchoverReadReplicaResponse_dbInstance :: Lens.Lens' SwitchoverReadReplicaResponse (Prelude.Maybe DBInstance)
switchoverReadReplicaResponse_dbInstance :: Lens' SwitchoverReadReplicaResponse (Maybe DBInstance)
switchoverReadReplicaResponse_dbInstance = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SwitchoverReadReplicaResponse' {Maybe DBInstance
dbInstance :: Maybe DBInstance
$sel:dbInstance:SwitchoverReadReplicaResponse' :: SwitchoverReadReplicaResponse -> Maybe DBInstance
dbInstance} -> Maybe DBInstance
dbInstance) (\s :: SwitchoverReadReplicaResponse
s@SwitchoverReadReplicaResponse' {} Maybe DBInstance
a -> SwitchoverReadReplicaResponse
s {$sel:dbInstance:SwitchoverReadReplicaResponse' :: Maybe DBInstance
dbInstance = Maybe DBInstance
a} :: SwitchoverReadReplicaResponse)

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

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