{-# 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.DMS.MoveReplicationTask
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Moves a replication task from its current replication instance to a
-- different target replication instance using the specified parameters.
-- The target replication instance must be created with the same or later
-- DMS version as the current replication instance.
module Amazonka.DMS.MoveReplicationTask
  ( -- * Creating a Request
    MoveReplicationTask (..),
    newMoveReplicationTask,

    -- * Request Lenses
    moveReplicationTask_replicationTaskArn,
    moveReplicationTask_targetReplicationInstanceArn,

    -- * Destructuring the Response
    MoveReplicationTaskResponse (..),
    newMoveReplicationTaskResponse,

    -- * Response Lenses
    moveReplicationTaskResponse_replicationTask,
    moveReplicationTaskResponse_httpStatus,
  )
where

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

-- |
--
-- /See:/ 'newMoveReplicationTask' smart constructor.
data MoveReplicationTask = MoveReplicationTask'
  { -- | The Amazon Resource Name (ARN) of the task that you want to move.
    MoveReplicationTask -> Text
replicationTaskArn :: Prelude.Text,
    -- | The ARN of the replication instance where you want to move the task to.
    MoveReplicationTask -> Text
targetReplicationInstanceArn :: Prelude.Text
  }
  deriving (MoveReplicationTask -> MoveReplicationTask -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MoveReplicationTask -> MoveReplicationTask -> Bool
$c/= :: MoveReplicationTask -> MoveReplicationTask -> Bool
== :: MoveReplicationTask -> MoveReplicationTask -> Bool
$c== :: MoveReplicationTask -> MoveReplicationTask -> Bool
Prelude.Eq, ReadPrec [MoveReplicationTask]
ReadPrec MoveReplicationTask
Int -> ReadS MoveReplicationTask
ReadS [MoveReplicationTask]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MoveReplicationTask]
$creadListPrec :: ReadPrec [MoveReplicationTask]
readPrec :: ReadPrec MoveReplicationTask
$creadPrec :: ReadPrec MoveReplicationTask
readList :: ReadS [MoveReplicationTask]
$creadList :: ReadS [MoveReplicationTask]
readsPrec :: Int -> ReadS MoveReplicationTask
$creadsPrec :: Int -> ReadS MoveReplicationTask
Prelude.Read, Int -> MoveReplicationTask -> ShowS
[MoveReplicationTask] -> ShowS
MoveReplicationTask -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MoveReplicationTask] -> ShowS
$cshowList :: [MoveReplicationTask] -> ShowS
show :: MoveReplicationTask -> String
$cshow :: MoveReplicationTask -> String
showsPrec :: Int -> MoveReplicationTask -> ShowS
$cshowsPrec :: Int -> MoveReplicationTask -> ShowS
Prelude.Show, forall x. Rep MoveReplicationTask x -> MoveReplicationTask
forall x. MoveReplicationTask -> Rep MoveReplicationTask x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MoveReplicationTask x -> MoveReplicationTask
$cfrom :: forall x. MoveReplicationTask -> Rep MoveReplicationTask x
Prelude.Generic)

-- |
-- Create a value of 'MoveReplicationTask' 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:
--
-- 'replicationTaskArn', 'moveReplicationTask_replicationTaskArn' - The Amazon Resource Name (ARN) of the task that you want to move.
--
-- 'targetReplicationInstanceArn', 'moveReplicationTask_targetReplicationInstanceArn' - The ARN of the replication instance where you want to move the task to.
newMoveReplicationTask ::
  -- | 'replicationTaskArn'
  Prelude.Text ->
  -- | 'targetReplicationInstanceArn'
  Prelude.Text ->
  MoveReplicationTask
newMoveReplicationTask :: Text -> Text -> MoveReplicationTask
newMoveReplicationTask
  Text
pReplicationTaskArn_
  Text
pTargetReplicationInstanceArn_ =
    MoveReplicationTask'
      { $sel:replicationTaskArn:MoveReplicationTask' :: Text
replicationTaskArn =
          Text
pReplicationTaskArn_,
        $sel:targetReplicationInstanceArn:MoveReplicationTask' :: Text
targetReplicationInstanceArn =
          Text
pTargetReplicationInstanceArn_
      }

-- | The Amazon Resource Name (ARN) of the task that you want to move.
moveReplicationTask_replicationTaskArn :: Lens.Lens' MoveReplicationTask Prelude.Text
moveReplicationTask_replicationTaskArn :: Lens' MoveReplicationTask Text
moveReplicationTask_replicationTaskArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MoveReplicationTask' {Text
replicationTaskArn :: Text
$sel:replicationTaskArn:MoveReplicationTask' :: MoveReplicationTask -> Text
replicationTaskArn} -> Text
replicationTaskArn) (\s :: MoveReplicationTask
s@MoveReplicationTask' {} Text
a -> MoveReplicationTask
s {$sel:replicationTaskArn:MoveReplicationTask' :: Text
replicationTaskArn = Text
a} :: MoveReplicationTask)

-- | The ARN of the replication instance where you want to move the task to.
moveReplicationTask_targetReplicationInstanceArn :: Lens.Lens' MoveReplicationTask Prelude.Text
moveReplicationTask_targetReplicationInstanceArn :: Lens' MoveReplicationTask Text
moveReplicationTask_targetReplicationInstanceArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MoveReplicationTask' {Text
targetReplicationInstanceArn :: Text
$sel:targetReplicationInstanceArn:MoveReplicationTask' :: MoveReplicationTask -> Text
targetReplicationInstanceArn} -> Text
targetReplicationInstanceArn) (\s :: MoveReplicationTask
s@MoveReplicationTask' {} Text
a -> MoveReplicationTask
s {$sel:targetReplicationInstanceArn:MoveReplicationTask' :: Text
targetReplicationInstanceArn = Text
a} :: MoveReplicationTask)

instance Core.AWSRequest MoveReplicationTask where
  type
    AWSResponse MoveReplicationTask =
      MoveReplicationTaskResponse
  request :: (Service -> Service)
-> MoveReplicationTask -> Request MoveReplicationTask
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 MoveReplicationTask
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse MoveReplicationTask)))
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 ->
          Maybe ReplicationTask -> Int -> MoveReplicationTaskResponse
MoveReplicationTaskResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"ReplicationTask")
            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 MoveReplicationTask where
  hashWithSalt :: Int -> MoveReplicationTask -> Int
hashWithSalt Int
_salt MoveReplicationTask' {Text
targetReplicationInstanceArn :: Text
replicationTaskArn :: Text
$sel:targetReplicationInstanceArn:MoveReplicationTask' :: MoveReplicationTask -> Text
$sel:replicationTaskArn:MoveReplicationTask' :: MoveReplicationTask -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
replicationTaskArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
targetReplicationInstanceArn

instance Prelude.NFData MoveReplicationTask where
  rnf :: MoveReplicationTask -> ()
rnf MoveReplicationTask' {Text
targetReplicationInstanceArn :: Text
replicationTaskArn :: Text
$sel:targetReplicationInstanceArn:MoveReplicationTask' :: MoveReplicationTask -> Text
$sel:replicationTaskArn:MoveReplicationTask' :: MoveReplicationTask -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
replicationTaskArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
targetReplicationInstanceArn

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

instance Data.ToJSON MoveReplicationTask where
  toJSON :: MoveReplicationTask -> Value
toJSON MoveReplicationTask' {Text
targetReplicationInstanceArn :: Text
replicationTaskArn :: Text
$sel:targetReplicationInstanceArn:MoveReplicationTask' :: MoveReplicationTask -> Text
$sel:replicationTaskArn:MoveReplicationTask' :: MoveReplicationTask -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"ReplicationTaskArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
replicationTaskArn),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"TargetReplicationInstanceArn"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
targetReplicationInstanceArn
              )
          ]
      )

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

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

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

-- |
-- Create a value of 'MoveReplicationTaskResponse' 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:
--
-- 'replicationTask', 'moveReplicationTaskResponse_replicationTask' - The replication task that was moved.
--
-- 'httpStatus', 'moveReplicationTaskResponse_httpStatus' - The response's http status code.
newMoveReplicationTaskResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  MoveReplicationTaskResponse
newMoveReplicationTaskResponse :: Int -> MoveReplicationTaskResponse
newMoveReplicationTaskResponse Int
pHttpStatus_ =
  MoveReplicationTaskResponse'
    { $sel:replicationTask:MoveReplicationTaskResponse' :: Maybe ReplicationTask
replicationTask =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:MoveReplicationTaskResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The replication task that was moved.
moveReplicationTaskResponse_replicationTask :: Lens.Lens' MoveReplicationTaskResponse (Prelude.Maybe ReplicationTask)
moveReplicationTaskResponse_replicationTask :: Lens' MoveReplicationTaskResponse (Maybe ReplicationTask)
moveReplicationTaskResponse_replicationTask = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MoveReplicationTaskResponse' {Maybe ReplicationTask
replicationTask :: Maybe ReplicationTask
$sel:replicationTask:MoveReplicationTaskResponse' :: MoveReplicationTaskResponse -> Maybe ReplicationTask
replicationTask} -> Maybe ReplicationTask
replicationTask) (\s :: MoveReplicationTaskResponse
s@MoveReplicationTaskResponse' {} Maybe ReplicationTask
a -> MoveReplicationTaskResponse
s {$sel:replicationTask:MoveReplicationTaskResponse' :: Maybe ReplicationTask
replicationTask = Maybe ReplicationTask
a} :: MoveReplicationTaskResponse)

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

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