{-# 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.DrS.UpdateFailbackReplicationConfiguration
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Allows you to update the failback replication configuration of a
-- Recovery Instance by ID.
module Amazonka.DrS.UpdateFailbackReplicationConfiguration
  ( -- * Creating a Request
    UpdateFailbackReplicationConfiguration (..),
    newUpdateFailbackReplicationConfiguration,

    -- * Request Lenses
    updateFailbackReplicationConfiguration_bandwidthThrottling,
    updateFailbackReplicationConfiguration_name,
    updateFailbackReplicationConfiguration_usePrivateIP,
    updateFailbackReplicationConfiguration_recoveryInstanceID,

    -- * Destructuring the Response
    UpdateFailbackReplicationConfigurationResponse (..),
    newUpdateFailbackReplicationConfigurationResponse,
  )
where

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

-- | /See:/ 'newUpdateFailbackReplicationConfiguration' smart constructor.
data UpdateFailbackReplicationConfiguration = UpdateFailbackReplicationConfiguration'
  { -- | Configure bandwidth throttling for the outbound data transfer rate of
    -- the Recovery Instance in Mbps.
    UpdateFailbackReplicationConfiguration -> Maybe Natural
bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
    -- | The name of the Failback Replication Configuration.
    UpdateFailbackReplicationConfiguration -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | Whether to use Private IP for the failback replication of the Recovery
    -- Instance.
    UpdateFailbackReplicationConfiguration -> Maybe Bool
usePrivateIP :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the Recovery Instance.
    UpdateFailbackReplicationConfiguration -> Text
recoveryInstanceID :: Prelude.Text
  }
  deriving (UpdateFailbackReplicationConfiguration
-> UpdateFailbackReplicationConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateFailbackReplicationConfiguration
-> UpdateFailbackReplicationConfiguration -> Bool
$c/= :: UpdateFailbackReplicationConfiguration
-> UpdateFailbackReplicationConfiguration -> Bool
== :: UpdateFailbackReplicationConfiguration
-> UpdateFailbackReplicationConfiguration -> Bool
$c== :: UpdateFailbackReplicationConfiguration
-> UpdateFailbackReplicationConfiguration -> Bool
Prelude.Eq, ReadPrec [UpdateFailbackReplicationConfiguration]
ReadPrec UpdateFailbackReplicationConfiguration
Int -> ReadS UpdateFailbackReplicationConfiguration
ReadS [UpdateFailbackReplicationConfiguration]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateFailbackReplicationConfiguration]
$creadListPrec :: ReadPrec [UpdateFailbackReplicationConfiguration]
readPrec :: ReadPrec UpdateFailbackReplicationConfiguration
$creadPrec :: ReadPrec UpdateFailbackReplicationConfiguration
readList :: ReadS [UpdateFailbackReplicationConfiguration]
$creadList :: ReadS [UpdateFailbackReplicationConfiguration]
readsPrec :: Int -> ReadS UpdateFailbackReplicationConfiguration
$creadsPrec :: Int -> ReadS UpdateFailbackReplicationConfiguration
Prelude.Read, Int -> UpdateFailbackReplicationConfiguration -> ShowS
[UpdateFailbackReplicationConfiguration] -> ShowS
UpdateFailbackReplicationConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateFailbackReplicationConfiguration] -> ShowS
$cshowList :: [UpdateFailbackReplicationConfiguration] -> ShowS
show :: UpdateFailbackReplicationConfiguration -> String
$cshow :: UpdateFailbackReplicationConfiguration -> String
showsPrec :: Int -> UpdateFailbackReplicationConfiguration -> ShowS
$cshowsPrec :: Int -> UpdateFailbackReplicationConfiguration -> ShowS
Prelude.Show, forall x.
Rep UpdateFailbackReplicationConfiguration x
-> UpdateFailbackReplicationConfiguration
forall x.
UpdateFailbackReplicationConfiguration
-> Rep UpdateFailbackReplicationConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateFailbackReplicationConfiguration x
-> UpdateFailbackReplicationConfiguration
$cfrom :: forall x.
UpdateFailbackReplicationConfiguration
-> Rep UpdateFailbackReplicationConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'UpdateFailbackReplicationConfiguration' 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:
--
-- 'bandwidthThrottling', 'updateFailbackReplicationConfiguration_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
-- the Recovery Instance in Mbps.
--
-- 'name', 'updateFailbackReplicationConfiguration_name' - The name of the Failback Replication Configuration.
--
-- 'usePrivateIP', 'updateFailbackReplicationConfiguration_usePrivateIP' - Whether to use Private IP for the failback replication of the Recovery
-- Instance.
--
-- 'recoveryInstanceID', 'updateFailbackReplicationConfiguration_recoveryInstanceID' - The ID of the Recovery Instance.
newUpdateFailbackReplicationConfiguration ::
  -- | 'recoveryInstanceID'
  Prelude.Text ->
  UpdateFailbackReplicationConfiguration
newUpdateFailbackReplicationConfiguration :: Text -> UpdateFailbackReplicationConfiguration
newUpdateFailbackReplicationConfiguration
  Text
pRecoveryInstanceID_ =
    UpdateFailbackReplicationConfiguration'
      { $sel:bandwidthThrottling:UpdateFailbackReplicationConfiguration' :: Maybe Natural
bandwidthThrottling =
          forall a. Maybe a
Prelude.Nothing,
        $sel:name:UpdateFailbackReplicationConfiguration' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
        $sel:usePrivateIP:UpdateFailbackReplicationConfiguration' :: Maybe Bool
usePrivateIP = forall a. Maybe a
Prelude.Nothing,
        $sel:recoveryInstanceID:UpdateFailbackReplicationConfiguration' :: Text
recoveryInstanceID =
          Text
pRecoveryInstanceID_
      }

-- | Configure bandwidth throttling for the outbound data transfer rate of
-- the Recovery Instance in Mbps.
updateFailbackReplicationConfiguration_bandwidthThrottling :: Lens.Lens' UpdateFailbackReplicationConfiguration (Prelude.Maybe Prelude.Natural)
updateFailbackReplicationConfiguration_bandwidthThrottling :: Lens' UpdateFailbackReplicationConfiguration (Maybe Natural)
updateFailbackReplicationConfiguration_bandwidthThrottling = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateFailbackReplicationConfiguration' {Maybe Natural
bandwidthThrottling :: Maybe Natural
$sel:bandwidthThrottling:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Natural
bandwidthThrottling} -> Maybe Natural
bandwidthThrottling) (\s :: UpdateFailbackReplicationConfiguration
s@UpdateFailbackReplicationConfiguration' {} Maybe Natural
a -> UpdateFailbackReplicationConfiguration
s {$sel:bandwidthThrottling:UpdateFailbackReplicationConfiguration' :: Maybe Natural
bandwidthThrottling = Maybe Natural
a} :: UpdateFailbackReplicationConfiguration)

-- | The name of the Failback Replication Configuration.
updateFailbackReplicationConfiguration_name :: Lens.Lens' UpdateFailbackReplicationConfiguration (Prelude.Maybe Prelude.Text)
updateFailbackReplicationConfiguration_name :: Lens' UpdateFailbackReplicationConfiguration (Maybe Text)
updateFailbackReplicationConfiguration_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateFailbackReplicationConfiguration' {Maybe Text
name :: Maybe Text
$sel:name:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Text
name} -> Maybe Text
name) (\s :: UpdateFailbackReplicationConfiguration
s@UpdateFailbackReplicationConfiguration' {} Maybe Text
a -> UpdateFailbackReplicationConfiguration
s {$sel:name:UpdateFailbackReplicationConfiguration' :: Maybe Text
name = Maybe Text
a} :: UpdateFailbackReplicationConfiguration)

-- | Whether to use Private IP for the failback replication of the Recovery
-- Instance.
updateFailbackReplicationConfiguration_usePrivateIP :: Lens.Lens' UpdateFailbackReplicationConfiguration (Prelude.Maybe Prelude.Bool)
updateFailbackReplicationConfiguration_usePrivateIP :: Lens' UpdateFailbackReplicationConfiguration (Maybe Bool)
updateFailbackReplicationConfiguration_usePrivateIP = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateFailbackReplicationConfiguration' {Maybe Bool
usePrivateIP :: Maybe Bool
$sel:usePrivateIP:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Bool
usePrivateIP} -> Maybe Bool
usePrivateIP) (\s :: UpdateFailbackReplicationConfiguration
s@UpdateFailbackReplicationConfiguration' {} Maybe Bool
a -> UpdateFailbackReplicationConfiguration
s {$sel:usePrivateIP:UpdateFailbackReplicationConfiguration' :: Maybe Bool
usePrivateIP = Maybe Bool
a} :: UpdateFailbackReplicationConfiguration)

-- | The ID of the Recovery Instance.
updateFailbackReplicationConfiguration_recoveryInstanceID :: Lens.Lens' UpdateFailbackReplicationConfiguration Prelude.Text
updateFailbackReplicationConfiguration_recoveryInstanceID :: Lens' UpdateFailbackReplicationConfiguration Text
updateFailbackReplicationConfiguration_recoveryInstanceID = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateFailbackReplicationConfiguration' {Text
recoveryInstanceID :: Text
$sel:recoveryInstanceID:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Text
recoveryInstanceID} -> Text
recoveryInstanceID) (\s :: UpdateFailbackReplicationConfiguration
s@UpdateFailbackReplicationConfiguration' {} Text
a -> UpdateFailbackReplicationConfiguration
s {$sel:recoveryInstanceID:UpdateFailbackReplicationConfiguration' :: Text
recoveryInstanceID = Text
a} :: UpdateFailbackReplicationConfiguration)

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

instance
  Prelude.Hashable
    UpdateFailbackReplicationConfiguration
  where
  hashWithSalt :: Int -> UpdateFailbackReplicationConfiguration -> Int
hashWithSalt
    Int
_salt
    UpdateFailbackReplicationConfiguration' {Maybe Bool
Maybe Natural
Maybe Text
Text
recoveryInstanceID :: Text
usePrivateIP :: Maybe Bool
name :: Maybe Text
bandwidthThrottling :: Maybe Natural
$sel:recoveryInstanceID:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Text
$sel:usePrivateIP:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Bool
$sel:name:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Text
$sel:bandwidthThrottling:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Natural
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
bandwidthThrottling
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
usePrivateIP
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
recoveryInstanceID

instance
  Prelude.NFData
    UpdateFailbackReplicationConfiguration
  where
  rnf :: UpdateFailbackReplicationConfiguration -> ()
rnf UpdateFailbackReplicationConfiguration' {Maybe Bool
Maybe Natural
Maybe Text
Text
recoveryInstanceID :: Text
usePrivateIP :: Maybe Bool
name :: Maybe Text
bandwidthThrottling :: Maybe Natural
$sel:recoveryInstanceID:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Text
$sel:usePrivateIP:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Bool
$sel:name:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Text
$sel:bandwidthThrottling:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Natural
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
bandwidthThrottling
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
usePrivateIP
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
recoveryInstanceID

instance
  Data.ToHeaders
    UpdateFailbackReplicationConfiguration
  where
  toHeaders :: UpdateFailbackReplicationConfiguration -> [Header]
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance
  Data.ToJSON
    UpdateFailbackReplicationConfiguration
  where
  toJSON :: UpdateFailbackReplicationConfiguration -> Value
toJSON UpdateFailbackReplicationConfiguration' {Maybe Bool
Maybe Natural
Maybe Text
Text
recoveryInstanceID :: Text
usePrivateIP :: Maybe Bool
name :: Maybe Text
bandwidthThrottling :: Maybe Natural
$sel:recoveryInstanceID:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Text
$sel:usePrivateIP:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Bool
$sel:name:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Text
$sel:bandwidthThrottling:UpdateFailbackReplicationConfiguration' :: UpdateFailbackReplicationConfiguration -> Maybe Natural
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"bandwidthThrottling" 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 Natural
bandwidthThrottling,
            (Key
"name" 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
name,
            (Key
"usePrivateIP" 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 Bool
usePrivateIP,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"recoveryInstanceID" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
recoveryInstanceID)
          ]
      )

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

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

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

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

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