{-# 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.DynamoDB.ExportTableToPointInTime
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Exports table data to an S3 bucket. The table must have point in time
-- recovery enabled, and you can export data from any time within the point
-- in time recovery window.
module Amazonka.DynamoDB.ExportTableToPointInTime
  ( -- * Creating a Request
    ExportTableToPointInTime (..),
    newExportTableToPointInTime,

    -- * Request Lenses
    exportTableToPointInTime_clientToken,
    exportTableToPointInTime_exportFormat,
    exportTableToPointInTime_exportTime,
    exportTableToPointInTime_s3BucketOwner,
    exportTableToPointInTime_s3Prefix,
    exportTableToPointInTime_s3SseAlgorithm,
    exportTableToPointInTime_s3SseKmsKeyId,
    exportTableToPointInTime_tableArn,
    exportTableToPointInTime_s3Bucket,

    -- * Destructuring the Response
    ExportTableToPointInTimeResponse (..),
    newExportTableToPointInTimeResponse,

    -- * Response Lenses
    exportTableToPointInTimeResponse_exportDescription,
    exportTableToPointInTimeResponse_httpStatus,
  )
where

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

-- | /See:/ 'newExportTableToPointInTime' smart constructor.
data ExportTableToPointInTime = ExportTableToPointInTime'
  { -- | Providing a @ClientToken@ makes the call to
    -- @ExportTableToPointInTimeInput@ idempotent, meaning that multiple
    -- identical calls have the same effect as one single call.
    --
    -- A client token is valid for 8 hours after the first request that uses it
    -- is completed. After 8 hours, any request with the same client token is
    -- treated as a new request. Do not resubmit the same request with the same
    -- client token for more than 8 hours, or the result might not be
    -- idempotent.
    --
    -- If you submit a request with the same client token but a change in other
    -- parameters within the 8-hour idempotency window, DynamoDB returns an
    -- @ImportConflictException@.
    ExportTableToPointInTime -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The format for the exported data. Valid values for @ExportFormat@ are
    -- @DYNAMODB_JSON@ or @ION@.
    ExportTableToPointInTime -> Maybe ExportFormat
exportFormat :: Prelude.Maybe ExportFormat,
    -- | Time in the past from which to export table data, counted in seconds
    -- from the start of the Unix epoch. The table export will be a snapshot of
    -- the table\'s state at this point in time.
    ExportTableToPointInTime -> Maybe POSIX
exportTime :: Prelude.Maybe Data.POSIX,
    -- | The ID of the Amazon Web Services account that owns the bucket the
    -- export will be stored in.
    ExportTableToPointInTime -> Maybe Text
s3BucketOwner :: Prelude.Maybe Prelude.Text,
    -- | The Amazon S3 bucket prefix to use as the file name and path of the
    -- exported snapshot.
    ExportTableToPointInTime -> Maybe Text
s3Prefix :: Prelude.Maybe Prelude.Text,
    -- | Type of encryption used on the bucket where export data will be stored.
    -- Valid values for @S3SseAlgorithm@ are:
    --
    -- -   @AES256@ - server-side encryption with Amazon S3 managed keys
    --
    -- -   @KMS@ - server-side encryption with KMS managed keys
    ExportTableToPointInTime -> Maybe S3SseAlgorithm
s3SseAlgorithm :: Prelude.Maybe S3SseAlgorithm,
    -- | The ID of the KMS managed key used to encrypt the S3 bucket where export
    -- data will be stored (if applicable).
    ExportTableToPointInTime -> Maybe Text
s3SseKmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) associated with the table to export.
    ExportTableToPointInTime -> Text
tableArn :: Prelude.Text,
    -- | The name of the Amazon S3 bucket to export the snapshot to.
    ExportTableToPointInTime -> Text
s3Bucket :: Prelude.Text
  }
  deriving (ExportTableToPointInTime -> ExportTableToPointInTime -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExportTableToPointInTime -> ExportTableToPointInTime -> Bool
$c/= :: ExportTableToPointInTime -> ExportTableToPointInTime -> Bool
== :: ExportTableToPointInTime -> ExportTableToPointInTime -> Bool
$c== :: ExportTableToPointInTime -> ExportTableToPointInTime -> Bool
Prelude.Eq, ReadPrec [ExportTableToPointInTime]
ReadPrec ExportTableToPointInTime
Int -> ReadS ExportTableToPointInTime
ReadS [ExportTableToPointInTime]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ExportTableToPointInTime]
$creadListPrec :: ReadPrec [ExportTableToPointInTime]
readPrec :: ReadPrec ExportTableToPointInTime
$creadPrec :: ReadPrec ExportTableToPointInTime
readList :: ReadS [ExportTableToPointInTime]
$creadList :: ReadS [ExportTableToPointInTime]
readsPrec :: Int -> ReadS ExportTableToPointInTime
$creadsPrec :: Int -> ReadS ExportTableToPointInTime
Prelude.Read, Int -> ExportTableToPointInTime -> ShowS
[ExportTableToPointInTime] -> ShowS
ExportTableToPointInTime -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExportTableToPointInTime] -> ShowS
$cshowList :: [ExportTableToPointInTime] -> ShowS
show :: ExportTableToPointInTime -> String
$cshow :: ExportTableToPointInTime -> String
showsPrec :: Int -> ExportTableToPointInTime -> ShowS
$cshowsPrec :: Int -> ExportTableToPointInTime -> ShowS
Prelude.Show, forall x.
Rep ExportTableToPointInTime x -> ExportTableToPointInTime
forall x.
ExportTableToPointInTime -> Rep ExportTableToPointInTime x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ExportTableToPointInTime x -> ExportTableToPointInTime
$cfrom :: forall x.
ExportTableToPointInTime -> Rep ExportTableToPointInTime x
Prelude.Generic)

-- |
-- Create a value of 'ExportTableToPointInTime' 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:
--
-- 'clientToken', 'exportTableToPointInTime_clientToken' - Providing a @ClientToken@ makes the call to
-- @ExportTableToPointInTimeInput@ idempotent, meaning that multiple
-- identical calls have the same effect as one single call.
--
-- A client token is valid for 8 hours after the first request that uses it
-- is completed. After 8 hours, any request with the same client token is
-- treated as a new request. Do not resubmit the same request with the same
-- client token for more than 8 hours, or the result might not be
-- idempotent.
--
-- If you submit a request with the same client token but a change in other
-- parameters within the 8-hour idempotency window, DynamoDB returns an
-- @ImportConflictException@.
--
-- 'exportFormat', 'exportTableToPointInTime_exportFormat' - The format for the exported data. Valid values for @ExportFormat@ are
-- @DYNAMODB_JSON@ or @ION@.
--
-- 'exportTime', 'exportTableToPointInTime_exportTime' - Time in the past from which to export table data, counted in seconds
-- from the start of the Unix epoch. The table export will be a snapshot of
-- the table\'s state at this point in time.
--
-- 's3BucketOwner', 'exportTableToPointInTime_s3BucketOwner' - The ID of the Amazon Web Services account that owns the bucket the
-- export will be stored in.
--
-- 's3Prefix', 'exportTableToPointInTime_s3Prefix' - The Amazon S3 bucket prefix to use as the file name and path of the
-- exported snapshot.
--
-- 's3SseAlgorithm', 'exportTableToPointInTime_s3SseAlgorithm' - Type of encryption used on the bucket where export data will be stored.
-- Valid values for @S3SseAlgorithm@ are:
--
-- -   @AES256@ - server-side encryption with Amazon S3 managed keys
--
-- -   @KMS@ - server-side encryption with KMS managed keys
--
-- 's3SseKmsKeyId', 'exportTableToPointInTime_s3SseKmsKeyId' - The ID of the KMS managed key used to encrypt the S3 bucket where export
-- data will be stored (if applicable).
--
-- 'tableArn', 'exportTableToPointInTime_tableArn' - The Amazon Resource Name (ARN) associated with the table to export.
--
-- 's3Bucket', 'exportTableToPointInTime_s3Bucket' - The name of the Amazon S3 bucket to export the snapshot to.
newExportTableToPointInTime ::
  -- | 'tableArn'
  Prelude.Text ->
  -- | 's3Bucket'
  Prelude.Text ->
  ExportTableToPointInTime
newExportTableToPointInTime :: Text -> Text -> ExportTableToPointInTime
newExportTableToPointInTime Text
pTableArn_ Text
pS3Bucket_ =
  ExportTableToPointInTime'
    { $sel:clientToken:ExportTableToPointInTime' :: Maybe Text
clientToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:exportFormat:ExportTableToPointInTime' :: Maybe ExportFormat
exportFormat = forall a. Maybe a
Prelude.Nothing,
      $sel:exportTime:ExportTableToPointInTime' :: Maybe POSIX
exportTime = forall a. Maybe a
Prelude.Nothing,
      $sel:s3BucketOwner:ExportTableToPointInTime' :: Maybe Text
s3BucketOwner = forall a. Maybe a
Prelude.Nothing,
      $sel:s3Prefix:ExportTableToPointInTime' :: Maybe Text
s3Prefix = forall a. Maybe a
Prelude.Nothing,
      $sel:s3SseAlgorithm:ExportTableToPointInTime' :: Maybe S3SseAlgorithm
s3SseAlgorithm = forall a. Maybe a
Prelude.Nothing,
      $sel:s3SseKmsKeyId:ExportTableToPointInTime' :: Maybe Text
s3SseKmsKeyId = forall a. Maybe a
Prelude.Nothing,
      $sel:tableArn:ExportTableToPointInTime' :: Text
tableArn = Text
pTableArn_,
      $sel:s3Bucket:ExportTableToPointInTime' :: Text
s3Bucket = Text
pS3Bucket_
    }

-- | Providing a @ClientToken@ makes the call to
-- @ExportTableToPointInTimeInput@ idempotent, meaning that multiple
-- identical calls have the same effect as one single call.
--
-- A client token is valid for 8 hours after the first request that uses it
-- is completed. After 8 hours, any request with the same client token is
-- treated as a new request. Do not resubmit the same request with the same
-- client token for more than 8 hours, or the result might not be
-- idempotent.
--
-- If you submit a request with the same client token but a change in other
-- parameters within the 8-hour idempotency window, DynamoDB returns an
-- @ImportConflictException@.
exportTableToPointInTime_clientToken :: Lens.Lens' ExportTableToPointInTime (Prelude.Maybe Prelude.Text)
exportTableToPointInTime_clientToken :: Lens' ExportTableToPointInTime (Maybe Text)
exportTableToPointInTime_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Maybe Text
a -> ExportTableToPointInTime
s {$sel:clientToken:ExportTableToPointInTime' :: Maybe Text
clientToken = Maybe Text
a} :: ExportTableToPointInTime)

-- | The format for the exported data. Valid values for @ExportFormat@ are
-- @DYNAMODB_JSON@ or @ION@.
exportTableToPointInTime_exportFormat :: Lens.Lens' ExportTableToPointInTime (Prelude.Maybe ExportFormat)
exportTableToPointInTime_exportFormat :: Lens' ExportTableToPointInTime (Maybe ExportFormat)
exportTableToPointInTime_exportFormat = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Maybe ExportFormat
exportFormat :: Maybe ExportFormat
$sel:exportFormat:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe ExportFormat
exportFormat} -> Maybe ExportFormat
exportFormat) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Maybe ExportFormat
a -> ExportTableToPointInTime
s {$sel:exportFormat:ExportTableToPointInTime' :: Maybe ExportFormat
exportFormat = Maybe ExportFormat
a} :: ExportTableToPointInTime)

-- | Time in the past from which to export table data, counted in seconds
-- from the start of the Unix epoch. The table export will be a snapshot of
-- the table\'s state at this point in time.
exportTableToPointInTime_exportTime :: Lens.Lens' ExportTableToPointInTime (Prelude.Maybe Prelude.UTCTime)
exportTableToPointInTime_exportTime :: Lens' ExportTableToPointInTime (Maybe UTCTime)
exportTableToPointInTime_exportTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Maybe POSIX
exportTime :: Maybe POSIX
$sel:exportTime:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe POSIX
exportTime} -> Maybe POSIX
exportTime) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Maybe POSIX
a -> ExportTableToPointInTime
s {$sel:exportTime:ExportTableToPointInTime' :: Maybe POSIX
exportTime = Maybe POSIX
a} :: ExportTableToPointInTime) 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

-- | The ID of the Amazon Web Services account that owns the bucket the
-- export will be stored in.
exportTableToPointInTime_s3BucketOwner :: Lens.Lens' ExportTableToPointInTime (Prelude.Maybe Prelude.Text)
exportTableToPointInTime_s3BucketOwner :: Lens' ExportTableToPointInTime (Maybe Text)
exportTableToPointInTime_s3BucketOwner = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Maybe Text
s3BucketOwner :: Maybe Text
$sel:s3BucketOwner:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
s3BucketOwner} -> Maybe Text
s3BucketOwner) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Maybe Text
a -> ExportTableToPointInTime
s {$sel:s3BucketOwner:ExportTableToPointInTime' :: Maybe Text
s3BucketOwner = Maybe Text
a} :: ExportTableToPointInTime)

-- | The Amazon S3 bucket prefix to use as the file name and path of the
-- exported snapshot.
exportTableToPointInTime_s3Prefix :: Lens.Lens' ExportTableToPointInTime (Prelude.Maybe Prelude.Text)
exportTableToPointInTime_s3Prefix :: Lens' ExportTableToPointInTime (Maybe Text)
exportTableToPointInTime_s3Prefix = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Maybe Text
s3Prefix :: Maybe Text
$sel:s3Prefix:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
s3Prefix} -> Maybe Text
s3Prefix) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Maybe Text
a -> ExportTableToPointInTime
s {$sel:s3Prefix:ExportTableToPointInTime' :: Maybe Text
s3Prefix = Maybe Text
a} :: ExportTableToPointInTime)

-- | Type of encryption used on the bucket where export data will be stored.
-- Valid values for @S3SseAlgorithm@ are:
--
-- -   @AES256@ - server-side encryption with Amazon S3 managed keys
--
-- -   @KMS@ - server-side encryption with KMS managed keys
exportTableToPointInTime_s3SseAlgorithm :: Lens.Lens' ExportTableToPointInTime (Prelude.Maybe S3SseAlgorithm)
exportTableToPointInTime_s3SseAlgorithm :: Lens' ExportTableToPointInTime (Maybe S3SseAlgorithm)
exportTableToPointInTime_s3SseAlgorithm = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Maybe S3SseAlgorithm
s3SseAlgorithm :: Maybe S3SseAlgorithm
$sel:s3SseAlgorithm:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe S3SseAlgorithm
s3SseAlgorithm} -> Maybe S3SseAlgorithm
s3SseAlgorithm) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Maybe S3SseAlgorithm
a -> ExportTableToPointInTime
s {$sel:s3SseAlgorithm:ExportTableToPointInTime' :: Maybe S3SseAlgorithm
s3SseAlgorithm = Maybe S3SseAlgorithm
a} :: ExportTableToPointInTime)

-- | The ID of the KMS managed key used to encrypt the S3 bucket where export
-- data will be stored (if applicable).
exportTableToPointInTime_s3SseKmsKeyId :: Lens.Lens' ExportTableToPointInTime (Prelude.Maybe Prelude.Text)
exportTableToPointInTime_s3SseKmsKeyId :: Lens' ExportTableToPointInTime (Maybe Text)
exportTableToPointInTime_s3SseKmsKeyId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Maybe Text
s3SseKmsKeyId :: Maybe Text
$sel:s3SseKmsKeyId:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
s3SseKmsKeyId} -> Maybe Text
s3SseKmsKeyId) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Maybe Text
a -> ExportTableToPointInTime
s {$sel:s3SseKmsKeyId:ExportTableToPointInTime' :: Maybe Text
s3SseKmsKeyId = Maybe Text
a} :: ExportTableToPointInTime)

-- | The Amazon Resource Name (ARN) associated with the table to export.
exportTableToPointInTime_tableArn :: Lens.Lens' ExportTableToPointInTime Prelude.Text
exportTableToPointInTime_tableArn :: Lens' ExportTableToPointInTime Text
exportTableToPointInTime_tableArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Text
tableArn :: Text
$sel:tableArn:ExportTableToPointInTime' :: ExportTableToPointInTime -> Text
tableArn} -> Text
tableArn) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Text
a -> ExportTableToPointInTime
s {$sel:tableArn:ExportTableToPointInTime' :: Text
tableArn = Text
a} :: ExportTableToPointInTime)

-- | The name of the Amazon S3 bucket to export the snapshot to.
exportTableToPointInTime_s3Bucket :: Lens.Lens' ExportTableToPointInTime Prelude.Text
exportTableToPointInTime_s3Bucket :: Lens' ExportTableToPointInTime Text
exportTableToPointInTime_s3Bucket = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTime' {Text
s3Bucket :: Text
$sel:s3Bucket:ExportTableToPointInTime' :: ExportTableToPointInTime -> Text
s3Bucket} -> Text
s3Bucket) (\s :: ExportTableToPointInTime
s@ExportTableToPointInTime' {} Text
a -> ExportTableToPointInTime
s {$sel:s3Bucket:ExportTableToPointInTime' :: Text
s3Bucket = Text
a} :: ExportTableToPointInTime)

instance Core.AWSRequest ExportTableToPointInTime where
  type
    AWSResponse ExportTableToPointInTime =
      ExportTableToPointInTimeResponse
  request :: (Service -> Service)
-> ExportTableToPointInTime -> Request ExportTableToPointInTime
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 ExportTableToPointInTime
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse ExportTableToPointInTime)))
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 ExportDescription -> Int -> ExportTableToPointInTimeResponse
ExportTableToPointInTimeResponse'
            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
"ExportDescription")
            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 ExportTableToPointInTime where
  hashWithSalt :: Int -> ExportTableToPointInTime -> Int
hashWithSalt Int
_salt ExportTableToPointInTime' {Maybe Text
Maybe POSIX
Maybe S3SseAlgorithm
Maybe ExportFormat
Text
s3Bucket :: Text
tableArn :: Text
s3SseKmsKeyId :: Maybe Text
s3SseAlgorithm :: Maybe S3SseAlgorithm
s3Prefix :: Maybe Text
s3BucketOwner :: Maybe Text
exportTime :: Maybe POSIX
exportFormat :: Maybe ExportFormat
clientToken :: Maybe Text
$sel:s3Bucket:ExportTableToPointInTime' :: ExportTableToPointInTime -> Text
$sel:tableArn:ExportTableToPointInTime' :: ExportTableToPointInTime -> Text
$sel:s3SseKmsKeyId:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:s3SseAlgorithm:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe S3SseAlgorithm
$sel:s3Prefix:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:s3BucketOwner:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:exportTime:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe POSIX
$sel:exportFormat:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe ExportFormat
$sel:clientToken:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ExportFormat
exportFormat
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
exportTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
s3BucketOwner
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
s3Prefix
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe S3SseAlgorithm
s3SseAlgorithm
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
s3SseKmsKeyId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
tableArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
s3Bucket

instance Prelude.NFData ExportTableToPointInTime where
  rnf :: ExportTableToPointInTime -> ()
rnf ExportTableToPointInTime' {Maybe Text
Maybe POSIX
Maybe S3SseAlgorithm
Maybe ExportFormat
Text
s3Bucket :: Text
tableArn :: Text
s3SseKmsKeyId :: Maybe Text
s3SseAlgorithm :: Maybe S3SseAlgorithm
s3Prefix :: Maybe Text
s3BucketOwner :: Maybe Text
exportTime :: Maybe POSIX
exportFormat :: Maybe ExportFormat
clientToken :: Maybe Text
$sel:s3Bucket:ExportTableToPointInTime' :: ExportTableToPointInTime -> Text
$sel:tableArn:ExportTableToPointInTime' :: ExportTableToPointInTime -> Text
$sel:s3SseKmsKeyId:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:s3SseAlgorithm:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe S3SseAlgorithm
$sel:s3Prefix:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:s3BucketOwner:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:exportTime:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe POSIX
$sel:exportFormat:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe ExportFormat
$sel:clientToken:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ExportFormat
exportFormat
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
exportTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
s3BucketOwner
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
s3Prefix
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe S3SseAlgorithm
s3SseAlgorithm
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
s3SseKmsKeyId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
tableArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
s3Bucket

instance Data.ToHeaders ExportTableToPointInTime where
  toHeaders :: ExportTableToPointInTime -> 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
"DynamoDB_20120810.ExportTableToPointInTime" ::
                          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 ExportTableToPointInTime where
  toJSON :: ExportTableToPointInTime -> Value
toJSON ExportTableToPointInTime' {Maybe Text
Maybe POSIX
Maybe S3SseAlgorithm
Maybe ExportFormat
Text
s3Bucket :: Text
tableArn :: Text
s3SseKmsKeyId :: Maybe Text
s3SseAlgorithm :: Maybe S3SseAlgorithm
s3Prefix :: Maybe Text
s3BucketOwner :: Maybe Text
exportTime :: Maybe POSIX
exportFormat :: Maybe ExportFormat
clientToken :: Maybe Text
$sel:s3Bucket:ExportTableToPointInTime' :: ExportTableToPointInTime -> Text
$sel:tableArn:ExportTableToPointInTime' :: ExportTableToPointInTime -> Text
$sel:s3SseKmsKeyId:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:s3SseAlgorithm:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe S3SseAlgorithm
$sel:s3Prefix:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:s3BucketOwner:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
$sel:exportTime:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe POSIX
$sel:exportFormat:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe ExportFormat
$sel:clientToken:ExportTableToPointInTime' :: ExportTableToPointInTime -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ClientToken" 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
clientToken,
            (Key
"ExportFormat" 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 ExportFormat
exportFormat,
            (Key
"ExportTime" 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
exportTime,
            (Key
"S3BucketOwner" 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
s3BucketOwner,
            (Key
"S3Prefix" 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
s3Prefix,
            (Key
"S3SseAlgorithm" 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 S3SseAlgorithm
s3SseAlgorithm,
            (Key
"S3SseKmsKeyId" 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
s3SseKmsKeyId,
            forall a. a -> Maybe a
Prelude.Just (Key
"TableArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
tableArn),
            forall a. a -> Maybe a
Prelude.Just (Key
"S3Bucket" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
s3Bucket)
          ]
      )

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

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

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

-- |
-- Create a value of 'ExportTableToPointInTimeResponse' 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:
--
-- 'exportDescription', 'exportTableToPointInTimeResponse_exportDescription' - Contains a description of the table export.
--
-- 'httpStatus', 'exportTableToPointInTimeResponse_httpStatus' - The response's http status code.
newExportTableToPointInTimeResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ExportTableToPointInTimeResponse
newExportTableToPointInTimeResponse :: Int -> ExportTableToPointInTimeResponse
newExportTableToPointInTimeResponse Int
pHttpStatus_ =
  ExportTableToPointInTimeResponse'
    { $sel:exportDescription:ExportTableToPointInTimeResponse' :: Maybe ExportDescription
exportDescription =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:ExportTableToPointInTimeResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Contains a description of the table export.
exportTableToPointInTimeResponse_exportDescription :: Lens.Lens' ExportTableToPointInTimeResponse (Prelude.Maybe ExportDescription)
exportTableToPointInTimeResponse_exportDescription :: Lens' ExportTableToPointInTimeResponse (Maybe ExportDescription)
exportTableToPointInTimeResponse_exportDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTableToPointInTimeResponse' {Maybe ExportDescription
exportDescription :: Maybe ExportDescription
$sel:exportDescription:ExportTableToPointInTimeResponse' :: ExportTableToPointInTimeResponse -> Maybe ExportDescription
exportDescription} -> Maybe ExportDescription
exportDescription) (\s :: ExportTableToPointInTimeResponse
s@ExportTableToPointInTimeResponse' {} Maybe ExportDescription
a -> ExportTableToPointInTimeResponse
s {$sel:exportDescription:ExportTableToPointInTimeResponse' :: Maybe ExportDescription
exportDescription = Maybe ExportDescription
a} :: ExportTableToPointInTimeResponse)

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

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