{-# 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.MGN.UpdateSourceServerReplicationType
-- 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 change between the AGENT_BASED replication type and the
-- SNAPSHOT_SHIPPING replication type.
module Amazonka.MGN.UpdateSourceServerReplicationType
  ( -- * Creating a Request
    UpdateSourceServerReplicationType (..),
    newUpdateSourceServerReplicationType,

    -- * Request Lenses
    updateSourceServerReplicationType_replicationType,
    updateSourceServerReplicationType_sourceServerID,

    -- * Destructuring the Response
    SourceServer (..),
    newSourceServer,

    -- * Response Lenses
    sourceServer_applicationID,
    sourceServer_arn,
    sourceServer_dataReplicationInfo,
    sourceServer_isArchived,
    sourceServer_launchedInstance,
    sourceServer_lifeCycle,
    sourceServer_replicationType,
    sourceServer_sourceProperties,
    sourceServer_sourceServerID,
    sourceServer_tags,
    sourceServer_vcenterClientID,
  )
where

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

-- | /See:/ 'newUpdateSourceServerReplicationType' smart constructor.
data UpdateSourceServerReplicationType = UpdateSourceServerReplicationType'
  { -- | Replication type to which to update source server.
    UpdateSourceServerReplicationType -> ReplicationType
replicationType :: ReplicationType,
    -- | ID of source server on which to update replication type.
    UpdateSourceServerReplicationType -> Text
sourceServerID :: Prelude.Text
  }
  deriving (UpdateSourceServerReplicationType
-> UpdateSourceServerReplicationType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateSourceServerReplicationType
-> UpdateSourceServerReplicationType -> Bool
$c/= :: UpdateSourceServerReplicationType
-> UpdateSourceServerReplicationType -> Bool
== :: UpdateSourceServerReplicationType
-> UpdateSourceServerReplicationType -> Bool
$c== :: UpdateSourceServerReplicationType
-> UpdateSourceServerReplicationType -> Bool
Prelude.Eq, ReadPrec [UpdateSourceServerReplicationType]
ReadPrec UpdateSourceServerReplicationType
Int -> ReadS UpdateSourceServerReplicationType
ReadS [UpdateSourceServerReplicationType]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateSourceServerReplicationType]
$creadListPrec :: ReadPrec [UpdateSourceServerReplicationType]
readPrec :: ReadPrec UpdateSourceServerReplicationType
$creadPrec :: ReadPrec UpdateSourceServerReplicationType
readList :: ReadS [UpdateSourceServerReplicationType]
$creadList :: ReadS [UpdateSourceServerReplicationType]
readsPrec :: Int -> ReadS UpdateSourceServerReplicationType
$creadsPrec :: Int -> ReadS UpdateSourceServerReplicationType
Prelude.Read, Int -> UpdateSourceServerReplicationType -> ShowS
[UpdateSourceServerReplicationType] -> ShowS
UpdateSourceServerReplicationType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateSourceServerReplicationType] -> ShowS
$cshowList :: [UpdateSourceServerReplicationType] -> ShowS
show :: UpdateSourceServerReplicationType -> String
$cshow :: UpdateSourceServerReplicationType -> String
showsPrec :: Int -> UpdateSourceServerReplicationType -> ShowS
$cshowsPrec :: Int -> UpdateSourceServerReplicationType -> ShowS
Prelude.Show, forall x.
Rep UpdateSourceServerReplicationType x
-> UpdateSourceServerReplicationType
forall x.
UpdateSourceServerReplicationType
-> Rep UpdateSourceServerReplicationType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateSourceServerReplicationType x
-> UpdateSourceServerReplicationType
$cfrom :: forall x.
UpdateSourceServerReplicationType
-> Rep UpdateSourceServerReplicationType x
Prelude.Generic)

-- |
-- Create a value of 'UpdateSourceServerReplicationType' 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:
--
-- 'replicationType', 'updateSourceServerReplicationType_replicationType' - Replication type to which to update source server.
--
-- 'sourceServerID', 'updateSourceServerReplicationType_sourceServerID' - ID of source server on which to update replication type.
newUpdateSourceServerReplicationType ::
  -- | 'replicationType'
  ReplicationType ->
  -- | 'sourceServerID'
  Prelude.Text ->
  UpdateSourceServerReplicationType
newUpdateSourceServerReplicationType :: ReplicationType -> Text -> UpdateSourceServerReplicationType
newUpdateSourceServerReplicationType
  ReplicationType
pReplicationType_
  Text
pSourceServerID_ =
    UpdateSourceServerReplicationType'
      { $sel:replicationType:UpdateSourceServerReplicationType' :: ReplicationType
replicationType =
          ReplicationType
pReplicationType_,
        $sel:sourceServerID:UpdateSourceServerReplicationType' :: Text
sourceServerID = Text
pSourceServerID_
      }

-- | Replication type to which to update source server.
updateSourceServerReplicationType_replicationType :: Lens.Lens' UpdateSourceServerReplicationType ReplicationType
updateSourceServerReplicationType_replicationType :: Lens' UpdateSourceServerReplicationType ReplicationType
updateSourceServerReplicationType_replicationType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateSourceServerReplicationType' {ReplicationType
replicationType :: ReplicationType
$sel:replicationType:UpdateSourceServerReplicationType' :: UpdateSourceServerReplicationType -> ReplicationType
replicationType} -> ReplicationType
replicationType) (\s :: UpdateSourceServerReplicationType
s@UpdateSourceServerReplicationType' {} ReplicationType
a -> UpdateSourceServerReplicationType
s {$sel:replicationType:UpdateSourceServerReplicationType' :: ReplicationType
replicationType = ReplicationType
a} :: UpdateSourceServerReplicationType)

-- | ID of source server on which to update replication type.
updateSourceServerReplicationType_sourceServerID :: Lens.Lens' UpdateSourceServerReplicationType Prelude.Text
updateSourceServerReplicationType_sourceServerID :: Lens' UpdateSourceServerReplicationType Text
updateSourceServerReplicationType_sourceServerID = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateSourceServerReplicationType' {Text
sourceServerID :: Text
$sel:sourceServerID:UpdateSourceServerReplicationType' :: UpdateSourceServerReplicationType -> Text
sourceServerID} -> Text
sourceServerID) (\s :: UpdateSourceServerReplicationType
s@UpdateSourceServerReplicationType' {} Text
a -> UpdateSourceServerReplicationType
s {$sel:sourceServerID:UpdateSourceServerReplicationType' :: Text
sourceServerID = Text
a} :: UpdateSourceServerReplicationType)

instance
  Core.AWSRequest
    UpdateSourceServerReplicationType
  where
  type
    AWSResponse UpdateSourceServerReplicationType =
      SourceServer
  request :: (Service -> Service)
-> UpdateSourceServerReplicationType
-> Request UpdateSourceServerReplicationType
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 UpdateSourceServerReplicationType
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse UpdateSourceServerReplicationType)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      (\Int
s ResponseHeaders
h Object
x -> forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)

instance
  Prelude.Hashable
    UpdateSourceServerReplicationType
  where
  hashWithSalt :: Int -> UpdateSourceServerReplicationType -> Int
hashWithSalt
    Int
_salt
    UpdateSourceServerReplicationType' {Text
ReplicationType
sourceServerID :: Text
replicationType :: ReplicationType
$sel:sourceServerID:UpdateSourceServerReplicationType' :: UpdateSourceServerReplicationType -> Text
$sel:replicationType:UpdateSourceServerReplicationType' :: UpdateSourceServerReplicationType -> ReplicationType
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ReplicationType
replicationType
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sourceServerID

instance
  Prelude.NFData
    UpdateSourceServerReplicationType
  where
  rnf :: UpdateSourceServerReplicationType -> ()
rnf UpdateSourceServerReplicationType' {Text
ReplicationType
sourceServerID :: Text
replicationType :: ReplicationType
$sel:sourceServerID:UpdateSourceServerReplicationType' :: UpdateSourceServerReplicationType -> Text
$sel:replicationType:UpdateSourceServerReplicationType' :: UpdateSourceServerReplicationType -> ReplicationType
..} =
    forall a. NFData a => a -> ()
Prelude.rnf ReplicationType
replicationType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
sourceServerID

instance
  Data.ToHeaders
    UpdateSourceServerReplicationType
  where
  toHeaders :: UpdateSourceServerReplicationType -> ResponseHeaders
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 -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance
  Data.ToJSON
    UpdateSourceServerReplicationType
  where
  toJSON :: UpdateSourceServerReplicationType -> Value
toJSON UpdateSourceServerReplicationType' {Text
ReplicationType
sourceServerID :: Text
replicationType :: ReplicationType
$sel:sourceServerID:UpdateSourceServerReplicationType' :: UpdateSourceServerReplicationType -> Text
$sel:replicationType:UpdateSourceServerReplicationType' :: UpdateSourceServerReplicationType -> ReplicationType
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"replicationType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ReplicationType
replicationType),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"sourceServerID" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
sourceServerID)
          ]
      )

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

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