{-# 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.KeySpaces.RestoreTable
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Restores the specified table to the specified point in time within the
-- @earliest_restorable_timestamp@ and the current time. For more
-- information about restore points, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery_HowItWorks.html#howitworks_backup_window Time window for PITR continuous backups>
-- in the /Amazon Keyspaces Developer Guide/.
--
-- Any number of users can execute up to 4 concurrent restores (any type of
-- restore) in a given account.
--
-- When you restore using point in time recovery, Amazon Keyspaces restores
-- your source table\'s schema and data to the state based on the selected
-- timestamp @(day:hour:minute:second)@ to a new table. The Time to Live
-- (TTL) settings are also restored to the state based on the selected
-- timestamp.
--
-- In addition to the table\'s schema, data, and TTL settings,
-- @RestoreTable@ restores the capacity mode, encryption, and point-in-time
-- recovery settings from the source table. Unlike the table\'s schema data
-- and TTL settings, which are restored based on the selected timestamp,
-- these settings are always restored based on the table\'s settings as of
-- the current time or when the table was deleted.
--
-- You can also overwrite these settings during restore:
--
-- • Read\/write capacity mode
--
-- • Provisioned throughput capacity settings
--
-- • Point-in-time (PITR) settings
--
-- • Tags
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery_HowItWorks.html#howitworks_backup_settings PITR restore settings>
-- in the /Amazon Keyspaces Developer Guide/.
--
-- Note that the following settings are not restored, and you must
-- configure them manually for the new table:
--
-- • Automatic scaling policies (for tables that use provisioned capacity
-- mode)
--
-- • Identity and Access Management (IAM) policies
--
-- • Amazon CloudWatch metrics and alarms
module Amazonka.KeySpaces.RestoreTable
  ( -- * Creating a Request
    RestoreTable (..),
    newRestoreTable,

    -- * Request Lenses
    restoreTable_capacitySpecificationOverride,
    restoreTable_encryptionSpecificationOverride,
    restoreTable_pointInTimeRecoveryOverride,
    restoreTable_restoreTimestamp,
    restoreTable_tagsOverride,
    restoreTable_sourceKeyspaceName,
    restoreTable_sourceTableName,
    restoreTable_targetKeyspaceName,
    restoreTable_targetTableName,

    -- * Destructuring the Response
    RestoreTableResponse (..),
    newRestoreTableResponse,

    -- * Response Lenses
    restoreTableResponse_httpStatus,
    restoreTableResponse_restoredTableARN,
  )
where

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

-- | /See:/ 'newRestoreTable' smart constructor.
data RestoreTable = RestoreTable'
  { -- | Specifies the read\/write throughput capacity mode for the target table.
    -- The options are:
    --
    -- • @throughputMode:PAY_PER_REQUEST@
    --
    -- • @throughputMode:PROVISIONED@ - Provisioned capacity mode requires
    -- @readCapacityUnits@ and @writeCapacityUnits@ as input.
    --
    -- The default is @throughput_mode:PAY_PER_REQUEST@.
    --
    -- For more information, see
    -- <https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html Read\/write capacity modes>
    -- in the /Amazon Keyspaces Developer Guide/.
    RestoreTable -> Maybe CapacitySpecification
capacitySpecificationOverride :: Prelude.Maybe CapacitySpecification,
    -- | Specifies the encryption settings for the target table. You can choose
    -- one of the following KMS key (KMS key):
    --
    -- • @type:AWS_OWNED_KMS_KEY@ - This key is owned by Amazon Keyspaces.
    --
    -- • @type:CUSTOMER_MANAGED_KMS_KEY@ - This key is stored in your account
    -- and is created, owned, and managed by you. This option requires the
    -- @kms_key_identifier@ of the KMS key in Amazon Resource Name (ARN) format
    -- as input.
    --
    -- The default is @type:AWS_OWNED_KMS_KEY@.
    --
    -- For more information, see
    -- <https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html Encryption at rest>
    -- in the /Amazon Keyspaces Developer Guide/.
    RestoreTable -> Maybe EncryptionSpecification
encryptionSpecificationOverride :: Prelude.Maybe EncryptionSpecification,
    -- | Specifies the @pointInTimeRecovery@ settings for the target table. The
    -- options are:
    --
    -- • @ENABLED@
    --
    -- • @DISABLED@
    --
    -- If it\'s not specified, the default is @DISABLED@.
    --
    -- For more information, see
    -- <https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery.html Point-in-time recovery>
    -- in the /Amazon Keyspaces Developer Guide/.
    RestoreTable -> Maybe PointInTimeRecovery
pointInTimeRecoveryOverride :: Prelude.Maybe PointInTimeRecovery,
    -- | The restore timestamp in ISO 8601 format.
    RestoreTable -> Maybe POSIX
restoreTimestamp :: Prelude.Maybe Data.POSIX,
    -- | A list of key-value pair tags to be attached to the restored table.
    --
    -- For more information, see
    -- <https://docs.aws.amazon.com/keyspaces/latest/devguide/tagging-keyspaces.html Adding tags and labels to Amazon Keyspaces resources>
    -- in the /Amazon Keyspaces Developer Guide/.
    RestoreTable -> Maybe (NonEmpty Tag)
tagsOverride :: Prelude.Maybe (Prelude.NonEmpty Tag),
    -- | The keyspace name of the source table.
    RestoreTable -> Text
sourceKeyspaceName :: Prelude.Text,
    -- | The name of the source table.
    RestoreTable -> Text
sourceTableName :: Prelude.Text,
    -- | The name of the target keyspace.
    RestoreTable -> Text
targetKeyspaceName :: Prelude.Text,
    -- | The name of the target table.
    RestoreTable -> Text
targetTableName :: Prelude.Text
  }
  deriving (RestoreTable -> RestoreTable -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RestoreTable -> RestoreTable -> Bool
$c/= :: RestoreTable -> RestoreTable -> Bool
== :: RestoreTable -> RestoreTable -> Bool
$c== :: RestoreTable -> RestoreTable -> Bool
Prelude.Eq, ReadPrec [RestoreTable]
ReadPrec RestoreTable
Int -> ReadS RestoreTable
ReadS [RestoreTable]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RestoreTable]
$creadListPrec :: ReadPrec [RestoreTable]
readPrec :: ReadPrec RestoreTable
$creadPrec :: ReadPrec RestoreTable
readList :: ReadS [RestoreTable]
$creadList :: ReadS [RestoreTable]
readsPrec :: Int -> ReadS RestoreTable
$creadsPrec :: Int -> ReadS RestoreTable
Prelude.Read, Int -> RestoreTable -> ShowS
[RestoreTable] -> ShowS
RestoreTable -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RestoreTable] -> ShowS
$cshowList :: [RestoreTable] -> ShowS
show :: RestoreTable -> String
$cshow :: RestoreTable -> String
showsPrec :: Int -> RestoreTable -> ShowS
$cshowsPrec :: Int -> RestoreTable -> ShowS
Prelude.Show, forall x. Rep RestoreTable x -> RestoreTable
forall x. RestoreTable -> Rep RestoreTable x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RestoreTable x -> RestoreTable
$cfrom :: forall x. RestoreTable -> Rep RestoreTable x
Prelude.Generic)

-- |
-- Create a value of 'RestoreTable' 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:
--
-- 'capacitySpecificationOverride', 'restoreTable_capacitySpecificationOverride' - Specifies the read\/write throughput capacity mode for the target table.
-- The options are:
--
-- • @throughputMode:PAY_PER_REQUEST@
--
-- • @throughputMode:PROVISIONED@ - Provisioned capacity mode requires
-- @readCapacityUnits@ and @writeCapacityUnits@ as input.
--
-- The default is @throughput_mode:PAY_PER_REQUEST@.
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html Read\/write capacity modes>
-- in the /Amazon Keyspaces Developer Guide/.
--
-- 'encryptionSpecificationOverride', 'restoreTable_encryptionSpecificationOverride' - Specifies the encryption settings for the target table. You can choose
-- one of the following KMS key (KMS key):
--
-- • @type:AWS_OWNED_KMS_KEY@ - This key is owned by Amazon Keyspaces.
--
-- • @type:CUSTOMER_MANAGED_KMS_KEY@ - This key is stored in your account
-- and is created, owned, and managed by you. This option requires the
-- @kms_key_identifier@ of the KMS key in Amazon Resource Name (ARN) format
-- as input.
--
-- The default is @type:AWS_OWNED_KMS_KEY@.
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html Encryption at rest>
-- in the /Amazon Keyspaces Developer Guide/.
--
-- 'pointInTimeRecoveryOverride', 'restoreTable_pointInTimeRecoveryOverride' - Specifies the @pointInTimeRecovery@ settings for the target table. The
-- options are:
--
-- • @ENABLED@
--
-- • @DISABLED@
--
-- If it\'s not specified, the default is @DISABLED@.
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery.html Point-in-time recovery>
-- in the /Amazon Keyspaces Developer Guide/.
--
-- 'restoreTimestamp', 'restoreTable_restoreTimestamp' - The restore timestamp in ISO 8601 format.
--
-- 'tagsOverride', 'restoreTable_tagsOverride' - A list of key-value pair tags to be attached to the restored table.
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/tagging-keyspaces.html Adding tags and labels to Amazon Keyspaces resources>
-- in the /Amazon Keyspaces Developer Guide/.
--
-- 'sourceKeyspaceName', 'restoreTable_sourceKeyspaceName' - The keyspace name of the source table.
--
-- 'sourceTableName', 'restoreTable_sourceTableName' - The name of the source table.
--
-- 'targetKeyspaceName', 'restoreTable_targetKeyspaceName' - The name of the target keyspace.
--
-- 'targetTableName', 'restoreTable_targetTableName' - The name of the target table.
newRestoreTable ::
  -- | 'sourceKeyspaceName'
  Prelude.Text ->
  -- | 'sourceTableName'
  Prelude.Text ->
  -- | 'targetKeyspaceName'
  Prelude.Text ->
  -- | 'targetTableName'
  Prelude.Text ->
  RestoreTable
newRestoreTable :: Text -> Text -> Text -> Text -> RestoreTable
newRestoreTable
  Text
pSourceKeyspaceName_
  Text
pSourceTableName_
  Text
pTargetKeyspaceName_
  Text
pTargetTableName_ =
    RestoreTable'
      { $sel:capacitySpecificationOverride:RestoreTable' :: Maybe CapacitySpecification
capacitySpecificationOverride =
          forall a. Maybe a
Prelude.Nothing,
        $sel:encryptionSpecificationOverride:RestoreTable' :: Maybe EncryptionSpecification
encryptionSpecificationOverride = forall a. Maybe a
Prelude.Nothing,
        $sel:pointInTimeRecoveryOverride:RestoreTable' :: Maybe PointInTimeRecovery
pointInTimeRecoveryOverride = forall a. Maybe a
Prelude.Nothing,
        $sel:restoreTimestamp:RestoreTable' :: Maybe POSIX
restoreTimestamp = forall a. Maybe a
Prelude.Nothing,
        $sel:tagsOverride:RestoreTable' :: Maybe (NonEmpty Tag)
tagsOverride = forall a. Maybe a
Prelude.Nothing,
        $sel:sourceKeyspaceName:RestoreTable' :: Text
sourceKeyspaceName = Text
pSourceKeyspaceName_,
        $sel:sourceTableName:RestoreTable' :: Text
sourceTableName = Text
pSourceTableName_,
        $sel:targetKeyspaceName:RestoreTable' :: Text
targetKeyspaceName = Text
pTargetKeyspaceName_,
        $sel:targetTableName:RestoreTable' :: Text
targetTableName = Text
pTargetTableName_
      }

-- | Specifies the read\/write throughput capacity mode for the target table.
-- The options are:
--
-- • @throughputMode:PAY_PER_REQUEST@
--
-- • @throughputMode:PROVISIONED@ - Provisioned capacity mode requires
-- @readCapacityUnits@ and @writeCapacityUnits@ as input.
--
-- The default is @throughput_mode:PAY_PER_REQUEST@.
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html Read\/write capacity modes>
-- in the /Amazon Keyspaces Developer Guide/.
restoreTable_capacitySpecificationOverride :: Lens.Lens' RestoreTable (Prelude.Maybe CapacitySpecification)
restoreTable_capacitySpecificationOverride :: Lens' RestoreTable (Maybe CapacitySpecification)
restoreTable_capacitySpecificationOverride = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Maybe CapacitySpecification
capacitySpecificationOverride :: Maybe CapacitySpecification
$sel:capacitySpecificationOverride:RestoreTable' :: RestoreTable -> Maybe CapacitySpecification
capacitySpecificationOverride} -> Maybe CapacitySpecification
capacitySpecificationOverride) (\s :: RestoreTable
s@RestoreTable' {} Maybe CapacitySpecification
a -> RestoreTable
s {$sel:capacitySpecificationOverride:RestoreTable' :: Maybe CapacitySpecification
capacitySpecificationOverride = Maybe CapacitySpecification
a} :: RestoreTable)

-- | Specifies the encryption settings for the target table. You can choose
-- one of the following KMS key (KMS key):
--
-- • @type:AWS_OWNED_KMS_KEY@ - This key is owned by Amazon Keyspaces.
--
-- • @type:CUSTOMER_MANAGED_KMS_KEY@ - This key is stored in your account
-- and is created, owned, and managed by you. This option requires the
-- @kms_key_identifier@ of the KMS key in Amazon Resource Name (ARN) format
-- as input.
--
-- The default is @type:AWS_OWNED_KMS_KEY@.
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html Encryption at rest>
-- in the /Amazon Keyspaces Developer Guide/.
restoreTable_encryptionSpecificationOverride :: Lens.Lens' RestoreTable (Prelude.Maybe EncryptionSpecification)
restoreTable_encryptionSpecificationOverride :: Lens' RestoreTable (Maybe EncryptionSpecification)
restoreTable_encryptionSpecificationOverride = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Maybe EncryptionSpecification
encryptionSpecificationOverride :: Maybe EncryptionSpecification
$sel:encryptionSpecificationOverride:RestoreTable' :: RestoreTable -> Maybe EncryptionSpecification
encryptionSpecificationOverride} -> Maybe EncryptionSpecification
encryptionSpecificationOverride) (\s :: RestoreTable
s@RestoreTable' {} Maybe EncryptionSpecification
a -> RestoreTable
s {$sel:encryptionSpecificationOverride:RestoreTable' :: Maybe EncryptionSpecification
encryptionSpecificationOverride = Maybe EncryptionSpecification
a} :: RestoreTable)

-- | Specifies the @pointInTimeRecovery@ settings for the target table. The
-- options are:
--
-- • @ENABLED@
--
-- • @DISABLED@
--
-- If it\'s not specified, the default is @DISABLED@.
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery.html Point-in-time recovery>
-- in the /Amazon Keyspaces Developer Guide/.
restoreTable_pointInTimeRecoveryOverride :: Lens.Lens' RestoreTable (Prelude.Maybe PointInTimeRecovery)
restoreTable_pointInTimeRecoveryOverride :: Lens' RestoreTable (Maybe PointInTimeRecovery)
restoreTable_pointInTimeRecoveryOverride = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Maybe PointInTimeRecovery
pointInTimeRecoveryOverride :: Maybe PointInTimeRecovery
$sel:pointInTimeRecoveryOverride:RestoreTable' :: RestoreTable -> Maybe PointInTimeRecovery
pointInTimeRecoveryOverride} -> Maybe PointInTimeRecovery
pointInTimeRecoveryOverride) (\s :: RestoreTable
s@RestoreTable' {} Maybe PointInTimeRecovery
a -> RestoreTable
s {$sel:pointInTimeRecoveryOverride:RestoreTable' :: Maybe PointInTimeRecovery
pointInTimeRecoveryOverride = Maybe PointInTimeRecovery
a} :: RestoreTable)

-- | The restore timestamp in ISO 8601 format.
restoreTable_restoreTimestamp :: Lens.Lens' RestoreTable (Prelude.Maybe Prelude.UTCTime)
restoreTable_restoreTimestamp :: Lens' RestoreTable (Maybe UTCTime)
restoreTable_restoreTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Maybe POSIX
restoreTimestamp :: Maybe POSIX
$sel:restoreTimestamp:RestoreTable' :: RestoreTable -> Maybe POSIX
restoreTimestamp} -> Maybe POSIX
restoreTimestamp) (\s :: RestoreTable
s@RestoreTable' {} Maybe POSIX
a -> RestoreTable
s {$sel:restoreTimestamp:RestoreTable' :: Maybe POSIX
restoreTimestamp = Maybe POSIX
a} :: RestoreTable) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | A list of key-value pair tags to be attached to the restored table.
--
-- For more information, see
-- <https://docs.aws.amazon.com/keyspaces/latest/devguide/tagging-keyspaces.html Adding tags and labels to Amazon Keyspaces resources>
-- in the /Amazon Keyspaces Developer Guide/.
restoreTable_tagsOverride :: Lens.Lens' RestoreTable (Prelude.Maybe (Prelude.NonEmpty Tag))
restoreTable_tagsOverride :: Lens' RestoreTable (Maybe (NonEmpty Tag))
restoreTable_tagsOverride = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Maybe (NonEmpty Tag)
tagsOverride :: Maybe (NonEmpty Tag)
$sel:tagsOverride:RestoreTable' :: RestoreTable -> Maybe (NonEmpty Tag)
tagsOverride} -> Maybe (NonEmpty Tag)
tagsOverride) (\s :: RestoreTable
s@RestoreTable' {} Maybe (NonEmpty Tag)
a -> RestoreTable
s {$sel:tagsOverride:RestoreTable' :: Maybe (NonEmpty Tag)
tagsOverride = Maybe (NonEmpty Tag)
a} :: RestoreTable) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The keyspace name of the source table.
restoreTable_sourceKeyspaceName :: Lens.Lens' RestoreTable Prelude.Text
restoreTable_sourceKeyspaceName :: Lens' RestoreTable Text
restoreTable_sourceKeyspaceName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Text
sourceKeyspaceName :: Text
$sel:sourceKeyspaceName:RestoreTable' :: RestoreTable -> Text
sourceKeyspaceName} -> Text
sourceKeyspaceName) (\s :: RestoreTable
s@RestoreTable' {} Text
a -> RestoreTable
s {$sel:sourceKeyspaceName:RestoreTable' :: Text
sourceKeyspaceName = Text
a} :: RestoreTable)

-- | The name of the source table.
restoreTable_sourceTableName :: Lens.Lens' RestoreTable Prelude.Text
restoreTable_sourceTableName :: Lens' RestoreTable Text
restoreTable_sourceTableName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Text
sourceTableName :: Text
$sel:sourceTableName:RestoreTable' :: RestoreTable -> Text
sourceTableName} -> Text
sourceTableName) (\s :: RestoreTable
s@RestoreTable' {} Text
a -> RestoreTable
s {$sel:sourceTableName:RestoreTable' :: Text
sourceTableName = Text
a} :: RestoreTable)

-- | The name of the target keyspace.
restoreTable_targetKeyspaceName :: Lens.Lens' RestoreTable Prelude.Text
restoreTable_targetKeyspaceName :: Lens' RestoreTable Text
restoreTable_targetKeyspaceName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Text
targetKeyspaceName :: Text
$sel:targetKeyspaceName:RestoreTable' :: RestoreTable -> Text
targetKeyspaceName} -> Text
targetKeyspaceName) (\s :: RestoreTable
s@RestoreTable' {} Text
a -> RestoreTable
s {$sel:targetKeyspaceName:RestoreTable' :: Text
targetKeyspaceName = Text
a} :: RestoreTable)

-- | The name of the target table.
restoreTable_targetTableName :: Lens.Lens' RestoreTable Prelude.Text
restoreTable_targetTableName :: Lens' RestoreTable Text
restoreTable_targetTableName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTable' {Text
targetTableName :: Text
$sel:targetTableName:RestoreTable' :: RestoreTable -> Text
targetTableName} -> Text
targetTableName) (\s :: RestoreTable
s@RestoreTable' {} Text
a -> RestoreTable
s {$sel:targetTableName:RestoreTable' :: Text
targetTableName = Text
a} :: RestoreTable)

instance Core.AWSRequest RestoreTable where
  type AWSResponse RestoreTable = RestoreTableResponse
  request :: (Service -> Service) -> RestoreTable -> Request RestoreTable
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 RestoreTable
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse RestoreTable)))
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 ->
          Int -> Text -> RestoreTableResponse
RestoreTableResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"restoredTableARN")
      )

instance Prelude.Hashable RestoreTable where
  hashWithSalt :: Int -> RestoreTable -> Int
hashWithSalt Int
_salt RestoreTable' {Maybe (NonEmpty Tag)
Maybe POSIX
Maybe EncryptionSpecification
Maybe PointInTimeRecovery
Maybe CapacitySpecification
Text
targetTableName :: Text
targetKeyspaceName :: Text
sourceTableName :: Text
sourceKeyspaceName :: Text
tagsOverride :: Maybe (NonEmpty Tag)
restoreTimestamp :: Maybe POSIX
pointInTimeRecoveryOverride :: Maybe PointInTimeRecovery
encryptionSpecificationOverride :: Maybe EncryptionSpecification
capacitySpecificationOverride :: Maybe CapacitySpecification
$sel:targetTableName:RestoreTable' :: RestoreTable -> Text
$sel:targetKeyspaceName:RestoreTable' :: RestoreTable -> Text
$sel:sourceTableName:RestoreTable' :: RestoreTable -> Text
$sel:sourceKeyspaceName:RestoreTable' :: RestoreTable -> Text
$sel:tagsOverride:RestoreTable' :: RestoreTable -> Maybe (NonEmpty Tag)
$sel:restoreTimestamp:RestoreTable' :: RestoreTable -> Maybe POSIX
$sel:pointInTimeRecoveryOverride:RestoreTable' :: RestoreTable -> Maybe PointInTimeRecovery
$sel:encryptionSpecificationOverride:RestoreTable' :: RestoreTable -> Maybe EncryptionSpecification
$sel:capacitySpecificationOverride:RestoreTable' :: RestoreTable -> Maybe CapacitySpecification
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CapacitySpecification
capacitySpecificationOverride
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EncryptionSpecification
encryptionSpecificationOverride
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PointInTimeRecovery
pointInTimeRecoveryOverride
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
restoreTimestamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Tag)
tagsOverride
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sourceKeyspaceName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sourceTableName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
targetKeyspaceName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
targetTableName

instance Prelude.NFData RestoreTable where
  rnf :: RestoreTable -> ()
rnf RestoreTable' {Maybe (NonEmpty Tag)
Maybe POSIX
Maybe EncryptionSpecification
Maybe PointInTimeRecovery
Maybe CapacitySpecification
Text
targetTableName :: Text
targetKeyspaceName :: Text
sourceTableName :: Text
sourceKeyspaceName :: Text
tagsOverride :: Maybe (NonEmpty Tag)
restoreTimestamp :: Maybe POSIX
pointInTimeRecoveryOverride :: Maybe PointInTimeRecovery
encryptionSpecificationOverride :: Maybe EncryptionSpecification
capacitySpecificationOverride :: Maybe CapacitySpecification
$sel:targetTableName:RestoreTable' :: RestoreTable -> Text
$sel:targetKeyspaceName:RestoreTable' :: RestoreTable -> Text
$sel:sourceTableName:RestoreTable' :: RestoreTable -> Text
$sel:sourceKeyspaceName:RestoreTable' :: RestoreTable -> Text
$sel:tagsOverride:RestoreTable' :: RestoreTable -> Maybe (NonEmpty Tag)
$sel:restoreTimestamp:RestoreTable' :: RestoreTable -> Maybe POSIX
$sel:pointInTimeRecoveryOverride:RestoreTable' :: RestoreTable -> Maybe PointInTimeRecovery
$sel:encryptionSpecificationOverride:RestoreTable' :: RestoreTable -> Maybe EncryptionSpecification
$sel:capacitySpecificationOverride:RestoreTable' :: RestoreTable -> Maybe CapacitySpecification
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe CapacitySpecification
capacitySpecificationOverride
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EncryptionSpecification
encryptionSpecificationOverride
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PointInTimeRecovery
pointInTimeRecoveryOverride
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
restoreTimestamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Tag)
tagsOverride
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
sourceKeyspaceName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
sourceTableName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
targetKeyspaceName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
targetTableName

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

instance Data.ToJSON RestoreTable where
  toJSON :: RestoreTable -> Value
toJSON RestoreTable' {Maybe (NonEmpty Tag)
Maybe POSIX
Maybe EncryptionSpecification
Maybe PointInTimeRecovery
Maybe CapacitySpecification
Text
targetTableName :: Text
targetKeyspaceName :: Text
sourceTableName :: Text
sourceKeyspaceName :: Text
tagsOverride :: Maybe (NonEmpty Tag)
restoreTimestamp :: Maybe POSIX
pointInTimeRecoveryOverride :: Maybe PointInTimeRecovery
encryptionSpecificationOverride :: Maybe EncryptionSpecification
capacitySpecificationOverride :: Maybe CapacitySpecification
$sel:targetTableName:RestoreTable' :: RestoreTable -> Text
$sel:targetKeyspaceName:RestoreTable' :: RestoreTable -> Text
$sel:sourceTableName:RestoreTable' :: RestoreTable -> Text
$sel:sourceKeyspaceName:RestoreTable' :: RestoreTable -> Text
$sel:tagsOverride:RestoreTable' :: RestoreTable -> Maybe (NonEmpty Tag)
$sel:restoreTimestamp:RestoreTable' :: RestoreTable -> Maybe POSIX
$sel:pointInTimeRecoveryOverride:RestoreTable' :: RestoreTable -> Maybe PointInTimeRecovery
$sel:encryptionSpecificationOverride:RestoreTable' :: RestoreTable -> Maybe EncryptionSpecification
$sel:capacitySpecificationOverride:RestoreTable' :: RestoreTable -> Maybe CapacitySpecification
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"capacitySpecificationOverride" 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 CapacitySpecification
capacitySpecificationOverride,
            (Key
"encryptionSpecificationOverride" 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 EncryptionSpecification
encryptionSpecificationOverride,
            (Key
"pointInTimeRecoveryOverride" 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 PointInTimeRecovery
pointInTimeRecoveryOverride,
            (Key
"restoreTimestamp" 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 POSIX
restoreTimestamp,
            (Key
"tagsOverride" 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 (NonEmpty Tag)
tagsOverride,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"sourceKeyspaceName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
sourceKeyspaceName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"sourceTableName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
sourceTableName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"targetKeyspaceName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
targetKeyspaceName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"targetTableName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
targetTableName)
          ]
      )

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

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

-- | /See:/ 'newRestoreTableResponse' smart constructor.
data RestoreTableResponse = RestoreTableResponse'
  { -- | The response's http status code.
    RestoreTableResponse -> Int
httpStatus :: Prelude.Int,
    -- | The Amazon Resource Name (ARN) of the restored table.
    RestoreTableResponse -> Text
restoredTableARN :: Prelude.Text
  }
  deriving (RestoreTableResponse -> RestoreTableResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RestoreTableResponse -> RestoreTableResponse -> Bool
$c/= :: RestoreTableResponse -> RestoreTableResponse -> Bool
== :: RestoreTableResponse -> RestoreTableResponse -> Bool
$c== :: RestoreTableResponse -> RestoreTableResponse -> Bool
Prelude.Eq, ReadPrec [RestoreTableResponse]
ReadPrec RestoreTableResponse
Int -> ReadS RestoreTableResponse
ReadS [RestoreTableResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RestoreTableResponse]
$creadListPrec :: ReadPrec [RestoreTableResponse]
readPrec :: ReadPrec RestoreTableResponse
$creadPrec :: ReadPrec RestoreTableResponse
readList :: ReadS [RestoreTableResponse]
$creadList :: ReadS [RestoreTableResponse]
readsPrec :: Int -> ReadS RestoreTableResponse
$creadsPrec :: Int -> ReadS RestoreTableResponse
Prelude.Read, Int -> RestoreTableResponse -> ShowS
[RestoreTableResponse] -> ShowS
RestoreTableResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RestoreTableResponse] -> ShowS
$cshowList :: [RestoreTableResponse] -> ShowS
show :: RestoreTableResponse -> String
$cshow :: RestoreTableResponse -> String
showsPrec :: Int -> RestoreTableResponse -> ShowS
$cshowsPrec :: Int -> RestoreTableResponse -> ShowS
Prelude.Show, forall x. Rep RestoreTableResponse x -> RestoreTableResponse
forall x. RestoreTableResponse -> Rep RestoreTableResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RestoreTableResponse x -> RestoreTableResponse
$cfrom :: forall x. RestoreTableResponse -> Rep RestoreTableResponse x
Prelude.Generic)

-- |
-- Create a value of 'RestoreTableResponse' 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:
--
-- 'httpStatus', 'restoreTableResponse_httpStatus' - The response's http status code.
--
-- 'restoredTableARN', 'restoreTableResponse_restoredTableARN' - The Amazon Resource Name (ARN) of the restored table.
newRestoreTableResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'restoredTableARN'
  Prelude.Text ->
  RestoreTableResponse
newRestoreTableResponse :: Int -> Text -> RestoreTableResponse
newRestoreTableResponse
  Int
pHttpStatus_
  Text
pRestoredTableARN_ =
    RestoreTableResponse'
      { $sel:httpStatus:RestoreTableResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:restoredTableARN:RestoreTableResponse' :: Text
restoredTableARN = Text
pRestoredTableARN_
      }

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

-- | The Amazon Resource Name (ARN) of the restored table.
restoreTableResponse_restoredTableARN :: Lens.Lens' RestoreTableResponse Prelude.Text
restoreTableResponse_restoredTableARN :: Lens' RestoreTableResponse Text
restoreTableResponse_restoredTableARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableResponse' {Text
restoredTableARN :: Text
$sel:restoredTableARN:RestoreTableResponse' :: RestoreTableResponse -> Text
restoredTableARN} -> Text
restoredTableARN) (\s :: RestoreTableResponse
s@RestoreTableResponse' {} Text
a -> RestoreTableResponse
s {$sel:restoredTableARN:RestoreTableResponse' :: Text
restoredTableARN = Text
a} :: RestoreTableResponse)

instance Prelude.NFData RestoreTableResponse where
  rnf :: RestoreTableResponse -> ()
rnf RestoreTableResponse' {Int
Text
restoredTableARN :: Text
httpStatus :: Int
$sel:restoredTableARN:RestoreTableResponse' :: RestoreTableResponse -> Text
$sel:httpStatus:RestoreTableResponse' :: RestoreTableResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
restoredTableARN