{-# 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.Redshift.RestoreTableFromClusterSnapshot
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a new table from a table in an Amazon Redshift cluster snapshot.
-- You must create the new table within the Amazon Redshift cluster that
-- the snapshot was taken from.
--
-- You cannot use @RestoreTableFromClusterSnapshot@ to restore a table with
-- the same name as an existing table in an Amazon Redshift cluster. That
-- is, you cannot overwrite an existing table in a cluster with a restored
-- table. If you want to replace your original table with a new, restored
-- table, then rename or drop your original table before you call
-- @RestoreTableFromClusterSnapshot@. When you have renamed your original
-- table, then you can pass the original name of the table as the
-- @NewTableName@ parameter value in the call to
-- @RestoreTableFromClusterSnapshot@. This way, you can replace the
-- original table with the table created from the snapshot.
module Amazonka.Redshift.RestoreTableFromClusterSnapshot
  ( -- * Creating a Request
    RestoreTableFromClusterSnapshot (..),
    newRestoreTableFromClusterSnapshot,

    -- * Request Lenses
    restoreTableFromClusterSnapshot_enableCaseSensitiveIdentifier,
    restoreTableFromClusterSnapshot_sourceSchemaName,
    restoreTableFromClusterSnapshot_targetDatabaseName,
    restoreTableFromClusterSnapshot_targetSchemaName,
    restoreTableFromClusterSnapshot_clusterIdentifier,
    restoreTableFromClusterSnapshot_snapshotIdentifier,
    restoreTableFromClusterSnapshot_sourceDatabaseName,
    restoreTableFromClusterSnapshot_sourceTableName,
    restoreTableFromClusterSnapshot_newTableName,

    -- * Destructuring the Response
    RestoreTableFromClusterSnapshotResponse (..),
    newRestoreTableFromClusterSnapshotResponse,

    -- * Response Lenses
    restoreTableFromClusterSnapshotResponse_tableRestoreStatus,
    restoreTableFromClusterSnapshotResponse_httpStatus,
  )
where

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

-- |
--
-- /See:/ 'newRestoreTableFromClusterSnapshot' smart constructor.
data RestoreTableFromClusterSnapshot = RestoreTableFromClusterSnapshot'
  { -- | Indicates whether name identifiers for database, schema, and table are
    -- case sensitive. If @true@, the names are case sensitive. If @false@
    -- (default), the names are not case sensitive.
    RestoreTableFromClusterSnapshot -> Maybe Bool
enableCaseSensitiveIdentifier :: Prelude.Maybe Prelude.Bool,
    -- | The name of the source schema that contains the table to restore from.
    -- If you do not specify a @SourceSchemaName@ value, the default is
    -- @public@.
    RestoreTableFromClusterSnapshot -> Maybe Text
sourceSchemaName :: Prelude.Maybe Prelude.Text,
    -- | The name of the database to restore the table to.
    RestoreTableFromClusterSnapshot -> Maybe Text
targetDatabaseName :: Prelude.Maybe Prelude.Text,
    -- | The name of the schema to restore the table to.
    RestoreTableFromClusterSnapshot -> Maybe Text
targetSchemaName :: Prelude.Maybe Prelude.Text,
    -- | The identifier of the Amazon Redshift cluster to restore the table to.
    RestoreTableFromClusterSnapshot -> Text
clusterIdentifier :: Prelude.Text,
    -- | The identifier of the snapshot to restore the table from. This snapshot
    -- must have been created from the Amazon Redshift cluster specified by the
    -- @ClusterIdentifier@ parameter.
    RestoreTableFromClusterSnapshot -> Text
snapshotIdentifier :: Prelude.Text,
    -- | The name of the source database that contains the table to restore from.
    RestoreTableFromClusterSnapshot -> Text
sourceDatabaseName :: Prelude.Text,
    -- | The name of the source table to restore from.
    RestoreTableFromClusterSnapshot -> Text
sourceTableName :: Prelude.Text,
    -- | The name of the table to create as a result of the current request.
    RestoreTableFromClusterSnapshot -> Text
newTableName' :: Prelude.Text
  }
  deriving (RestoreTableFromClusterSnapshot
-> RestoreTableFromClusterSnapshot -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RestoreTableFromClusterSnapshot
-> RestoreTableFromClusterSnapshot -> Bool
$c/= :: RestoreTableFromClusterSnapshot
-> RestoreTableFromClusterSnapshot -> Bool
== :: RestoreTableFromClusterSnapshot
-> RestoreTableFromClusterSnapshot -> Bool
$c== :: RestoreTableFromClusterSnapshot
-> RestoreTableFromClusterSnapshot -> Bool
Prelude.Eq, ReadPrec [RestoreTableFromClusterSnapshot]
ReadPrec RestoreTableFromClusterSnapshot
Int -> ReadS RestoreTableFromClusterSnapshot
ReadS [RestoreTableFromClusterSnapshot]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RestoreTableFromClusterSnapshot]
$creadListPrec :: ReadPrec [RestoreTableFromClusterSnapshot]
readPrec :: ReadPrec RestoreTableFromClusterSnapshot
$creadPrec :: ReadPrec RestoreTableFromClusterSnapshot
readList :: ReadS [RestoreTableFromClusterSnapshot]
$creadList :: ReadS [RestoreTableFromClusterSnapshot]
readsPrec :: Int -> ReadS RestoreTableFromClusterSnapshot
$creadsPrec :: Int -> ReadS RestoreTableFromClusterSnapshot
Prelude.Read, Int -> RestoreTableFromClusterSnapshot -> ShowS
[RestoreTableFromClusterSnapshot] -> ShowS
RestoreTableFromClusterSnapshot -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RestoreTableFromClusterSnapshot] -> ShowS
$cshowList :: [RestoreTableFromClusterSnapshot] -> ShowS
show :: RestoreTableFromClusterSnapshot -> String
$cshow :: RestoreTableFromClusterSnapshot -> String
showsPrec :: Int -> RestoreTableFromClusterSnapshot -> ShowS
$cshowsPrec :: Int -> RestoreTableFromClusterSnapshot -> ShowS
Prelude.Show, forall x.
Rep RestoreTableFromClusterSnapshot x
-> RestoreTableFromClusterSnapshot
forall x.
RestoreTableFromClusterSnapshot
-> Rep RestoreTableFromClusterSnapshot x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RestoreTableFromClusterSnapshot x
-> RestoreTableFromClusterSnapshot
$cfrom :: forall x.
RestoreTableFromClusterSnapshot
-> Rep RestoreTableFromClusterSnapshot x
Prelude.Generic)

-- |
-- Create a value of 'RestoreTableFromClusterSnapshot' 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:
--
-- 'enableCaseSensitiveIdentifier', 'restoreTableFromClusterSnapshot_enableCaseSensitiveIdentifier' - Indicates whether name identifiers for database, schema, and table are
-- case sensitive. If @true@, the names are case sensitive. If @false@
-- (default), the names are not case sensitive.
--
-- 'sourceSchemaName', 'restoreTableFromClusterSnapshot_sourceSchemaName' - The name of the source schema that contains the table to restore from.
-- If you do not specify a @SourceSchemaName@ value, the default is
-- @public@.
--
-- 'targetDatabaseName', 'restoreTableFromClusterSnapshot_targetDatabaseName' - The name of the database to restore the table to.
--
-- 'targetSchemaName', 'restoreTableFromClusterSnapshot_targetSchemaName' - The name of the schema to restore the table to.
--
-- 'clusterIdentifier', 'restoreTableFromClusterSnapshot_clusterIdentifier' - The identifier of the Amazon Redshift cluster to restore the table to.
--
-- 'snapshotIdentifier', 'restoreTableFromClusterSnapshot_snapshotIdentifier' - The identifier of the snapshot to restore the table from. This snapshot
-- must have been created from the Amazon Redshift cluster specified by the
-- @ClusterIdentifier@ parameter.
--
-- 'sourceDatabaseName', 'restoreTableFromClusterSnapshot_sourceDatabaseName' - The name of the source database that contains the table to restore from.
--
-- 'sourceTableName', 'restoreTableFromClusterSnapshot_sourceTableName' - The name of the source table to restore from.
--
-- 'newTableName'', 'restoreTableFromClusterSnapshot_newTableName' - The name of the table to create as a result of the current request.
newRestoreTableFromClusterSnapshot ::
  -- | 'clusterIdentifier'
  Prelude.Text ->
  -- | 'snapshotIdentifier'
  Prelude.Text ->
  -- | 'sourceDatabaseName'
  Prelude.Text ->
  -- | 'sourceTableName'
  Prelude.Text ->
  -- | 'newTableName''
  Prelude.Text ->
  RestoreTableFromClusterSnapshot
newRestoreTableFromClusterSnapshot :: Text
-> Text -> Text -> Text -> Text -> RestoreTableFromClusterSnapshot
newRestoreTableFromClusterSnapshot
  Text
pClusterIdentifier_
  Text
pSnapshotIdentifier_
  Text
pSourceDatabaseName_
  Text
pSourceTableName_
  Text
pNewTableName_ =
    RestoreTableFromClusterSnapshot'
      { $sel:enableCaseSensitiveIdentifier:RestoreTableFromClusterSnapshot' :: Maybe Bool
enableCaseSensitiveIdentifier =
          forall a. Maybe a
Prelude.Nothing,
        $sel:sourceSchemaName:RestoreTableFromClusterSnapshot' :: Maybe Text
sourceSchemaName = forall a. Maybe a
Prelude.Nothing,
        $sel:targetDatabaseName:RestoreTableFromClusterSnapshot' :: Maybe Text
targetDatabaseName = forall a. Maybe a
Prelude.Nothing,
        $sel:targetSchemaName:RestoreTableFromClusterSnapshot' :: Maybe Text
targetSchemaName = forall a. Maybe a
Prelude.Nothing,
        $sel:clusterIdentifier:RestoreTableFromClusterSnapshot' :: Text
clusterIdentifier = Text
pClusterIdentifier_,
        $sel:snapshotIdentifier:RestoreTableFromClusterSnapshot' :: Text
snapshotIdentifier = Text
pSnapshotIdentifier_,
        $sel:sourceDatabaseName:RestoreTableFromClusterSnapshot' :: Text
sourceDatabaseName = Text
pSourceDatabaseName_,
        $sel:sourceTableName:RestoreTableFromClusterSnapshot' :: Text
sourceTableName = Text
pSourceTableName_,
        $sel:newTableName':RestoreTableFromClusterSnapshot' :: Text
newTableName' = Text
pNewTableName_
      }

-- | Indicates whether name identifiers for database, schema, and table are
-- case sensitive. If @true@, the names are case sensitive. If @false@
-- (default), the names are not case sensitive.
restoreTableFromClusterSnapshot_enableCaseSensitiveIdentifier :: Lens.Lens' RestoreTableFromClusterSnapshot (Prelude.Maybe Prelude.Bool)
restoreTableFromClusterSnapshot_enableCaseSensitiveIdentifier :: Lens' RestoreTableFromClusterSnapshot (Maybe Bool)
restoreTableFromClusterSnapshot_enableCaseSensitiveIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshot' {Maybe Bool
enableCaseSensitiveIdentifier :: Maybe Bool
$sel:enableCaseSensitiveIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Bool
enableCaseSensitiveIdentifier} -> Maybe Bool
enableCaseSensitiveIdentifier) (\s :: RestoreTableFromClusterSnapshot
s@RestoreTableFromClusterSnapshot' {} Maybe Bool
a -> RestoreTableFromClusterSnapshot
s {$sel:enableCaseSensitiveIdentifier:RestoreTableFromClusterSnapshot' :: Maybe Bool
enableCaseSensitiveIdentifier = Maybe Bool
a} :: RestoreTableFromClusterSnapshot)

-- | The name of the source schema that contains the table to restore from.
-- If you do not specify a @SourceSchemaName@ value, the default is
-- @public@.
restoreTableFromClusterSnapshot_sourceSchemaName :: Lens.Lens' RestoreTableFromClusterSnapshot (Prelude.Maybe Prelude.Text)
restoreTableFromClusterSnapshot_sourceSchemaName :: Lens' RestoreTableFromClusterSnapshot (Maybe Text)
restoreTableFromClusterSnapshot_sourceSchemaName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshot' {Maybe Text
sourceSchemaName :: Maybe Text
$sel:sourceSchemaName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
sourceSchemaName} -> Maybe Text
sourceSchemaName) (\s :: RestoreTableFromClusterSnapshot
s@RestoreTableFromClusterSnapshot' {} Maybe Text
a -> RestoreTableFromClusterSnapshot
s {$sel:sourceSchemaName:RestoreTableFromClusterSnapshot' :: Maybe Text
sourceSchemaName = Maybe Text
a} :: RestoreTableFromClusterSnapshot)

-- | The name of the database to restore the table to.
restoreTableFromClusterSnapshot_targetDatabaseName :: Lens.Lens' RestoreTableFromClusterSnapshot (Prelude.Maybe Prelude.Text)
restoreTableFromClusterSnapshot_targetDatabaseName :: Lens' RestoreTableFromClusterSnapshot (Maybe Text)
restoreTableFromClusterSnapshot_targetDatabaseName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshot' {Maybe Text
targetDatabaseName :: Maybe Text
$sel:targetDatabaseName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
targetDatabaseName} -> Maybe Text
targetDatabaseName) (\s :: RestoreTableFromClusterSnapshot
s@RestoreTableFromClusterSnapshot' {} Maybe Text
a -> RestoreTableFromClusterSnapshot
s {$sel:targetDatabaseName:RestoreTableFromClusterSnapshot' :: Maybe Text
targetDatabaseName = Maybe Text
a} :: RestoreTableFromClusterSnapshot)

-- | The name of the schema to restore the table to.
restoreTableFromClusterSnapshot_targetSchemaName :: Lens.Lens' RestoreTableFromClusterSnapshot (Prelude.Maybe Prelude.Text)
restoreTableFromClusterSnapshot_targetSchemaName :: Lens' RestoreTableFromClusterSnapshot (Maybe Text)
restoreTableFromClusterSnapshot_targetSchemaName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshot' {Maybe Text
targetSchemaName :: Maybe Text
$sel:targetSchemaName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
targetSchemaName} -> Maybe Text
targetSchemaName) (\s :: RestoreTableFromClusterSnapshot
s@RestoreTableFromClusterSnapshot' {} Maybe Text
a -> RestoreTableFromClusterSnapshot
s {$sel:targetSchemaName:RestoreTableFromClusterSnapshot' :: Maybe Text
targetSchemaName = Maybe Text
a} :: RestoreTableFromClusterSnapshot)

-- | The identifier of the Amazon Redshift cluster to restore the table to.
restoreTableFromClusterSnapshot_clusterIdentifier :: Lens.Lens' RestoreTableFromClusterSnapshot Prelude.Text
restoreTableFromClusterSnapshot_clusterIdentifier :: Lens' RestoreTableFromClusterSnapshot Text
restoreTableFromClusterSnapshot_clusterIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshot' {Text
clusterIdentifier :: Text
$sel:clusterIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
clusterIdentifier} -> Text
clusterIdentifier) (\s :: RestoreTableFromClusterSnapshot
s@RestoreTableFromClusterSnapshot' {} Text
a -> RestoreTableFromClusterSnapshot
s {$sel:clusterIdentifier:RestoreTableFromClusterSnapshot' :: Text
clusterIdentifier = Text
a} :: RestoreTableFromClusterSnapshot)

-- | The identifier of the snapshot to restore the table from. This snapshot
-- must have been created from the Amazon Redshift cluster specified by the
-- @ClusterIdentifier@ parameter.
restoreTableFromClusterSnapshot_snapshotIdentifier :: Lens.Lens' RestoreTableFromClusterSnapshot Prelude.Text
restoreTableFromClusterSnapshot_snapshotIdentifier :: Lens' RestoreTableFromClusterSnapshot Text
restoreTableFromClusterSnapshot_snapshotIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshot' {Text
snapshotIdentifier :: Text
$sel:snapshotIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
snapshotIdentifier} -> Text
snapshotIdentifier) (\s :: RestoreTableFromClusterSnapshot
s@RestoreTableFromClusterSnapshot' {} Text
a -> RestoreTableFromClusterSnapshot
s {$sel:snapshotIdentifier:RestoreTableFromClusterSnapshot' :: Text
snapshotIdentifier = Text
a} :: RestoreTableFromClusterSnapshot)

-- | The name of the source database that contains the table to restore from.
restoreTableFromClusterSnapshot_sourceDatabaseName :: Lens.Lens' RestoreTableFromClusterSnapshot Prelude.Text
restoreTableFromClusterSnapshot_sourceDatabaseName :: Lens' RestoreTableFromClusterSnapshot Text
restoreTableFromClusterSnapshot_sourceDatabaseName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshot' {Text
sourceDatabaseName :: Text
$sel:sourceDatabaseName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
sourceDatabaseName} -> Text
sourceDatabaseName) (\s :: RestoreTableFromClusterSnapshot
s@RestoreTableFromClusterSnapshot' {} Text
a -> RestoreTableFromClusterSnapshot
s {$sel:sourceDatabaseName:RestoreTableFromClusterSnapshot' :: Text
sourceDatabaseName = Text
a} :: RestoreTableFromClusterSnapshot)

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

-- | The name of the table to create as a result of the current request.
restoreTableFromClusterSnapshot_newTableName :: Lens.Lens' RestoreTableFromClusterSnapshot Prelude.Text
restoreTableFromClusterSnapshot_newTableName :: Lens' RestoreTableFromClusterSnapshot Text
restoreTableFromClusterSnapshot_newTableName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshot' {Text
newTableName' :: Text
$sel:newTableName':RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
newTableName'} -> Text
newTableName') (\s :: RestoreTableFromClusterSnapshot
s@RestoreTableFromClusterSnapshot' {} Text
a -> RestoreTableFromClusterSnapshot
s {$sel:newTableName':RestoreTableFromClusterSnapshot' :: Text
newTableName' = Text
a} :: RestoreTableFromClusterSnapshot)

instance
  Core.AWSRequest
    RestoreTableFromClusterSnapshot
  where
  type
    AWSResponse RestoreTableFromClusterSnapshot =
      RestoreTableFromClusterSnapshotResponse
  request :: (Service -> Service)
-> RestoreTableFromClusterSnapshot
-> Request RestoreTableFromClusterSnapshot
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy RestoreTableFromClusterSnapshot
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse RestoreTableFromClusterSnapshot)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"RestoreTableFromClusterSnapshotResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe TableRestoreStatus
-> Int -> RestoreTableFromClusterSnapshotResponse
RestoreTableFromClusterSnapshotResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"TableRestoreStatus")
            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
    RestoreTableFromClusterSnapshot
  where
  hashWithSalt :: Int -> RestoreTableFromClusterSnapshot -> Int
hashWithSalt
    Int
_salt
    RestoreTableFromClusterSnapshot' {Maybe Bool
Maybe Text
Text
newTableName' :: Text
sourceTableName :: Text
sourceDatabaseName :: Text
snapshotIdentifier :: Text
clusterIdentifier :: Text
targetSchemaName :: Maybe Text
targetDatabaseName :: Maybe Text
sourceSchemaName :: Maybe Text
enableCaseSensitiveIdentifier :: Maybe Bool
$sel:newTableName':RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:sourceTableName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:sourceDatabaseName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:snapshotIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:clusterIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:targetSchemaName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:targetDatabaseName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:sourceSchemaName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:enableCaseSensitiveIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Bool
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
enableCaseSensitiveIdentifier
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
sourceSchemaName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
targetDatabaseName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
targetSchemaName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
clusterIdentifier
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
snapshotIdentifier
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sourceDatabaseName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sourceTableName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
newTableName'

instance
  Prelude.NFData
    RestoreTableFromClusterSnapshot
  where
  rnf :: RestoreTableFromClusterSnapshot -> ()
rnf RestoreTableFromClusterSnapshot' {Maybe Bool
Maybe Text
Text
newTableName' :: Text
sourceTableName :: Text
sourceDatabaseName :: Text
snapshotIdentifier :: Text
clusterIdentifier :: Text
targetSchemaName :: Maybe Text
targetDatabaseName :: Maybe Text
sourceSchemaName :: Maybe Text
enableCaseSensitiveIdentifier :: Maybe Bool
$sel:newTableName':RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:sourceTableName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:sourceDatabaseName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:snapshotIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:clusterIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:targetSchemaName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:targetDatabaseName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:sourceSchemaName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:enableCaseSensitiveIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
enableCaseSensitiveIdentifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
sourceSchemaName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
targetDatabaseName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
targetSchemaName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
clusterIdentifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
snapshotIdentifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
sourceDatabaseName
      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
newTableName'

instance
  Data.ToHeaders
    RestoreTableFromClusterSnapshot
  where
  toHeaders :: RestoreTableFromClusterSnapshot -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery RestoreTableFromClusterSnapshot where
  toQuery :: RestoreTableFromClusterSnapshot -> QueryString
toQuery RestoreTableFromClusterSnapshot' {Maybe Bool
Maybe Text
Text
newTableName' :: Text
sourceTableName :: Text
sourceDatabaseName :: Text
snapshotIdentifier :: Text
clusterIdentifier :: Text
targetSchemaName :: Maybe Text
targetDatabaseName :: Maybe Text
sourceSchemaName :: Maybe Text
enableCaseSensitiveIdentifier :: Maybe Bool
$sel:newTableName':RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:sourceTableName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:sourceDatabaseName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:snapshotIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:clusterIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Text
$sel:targetSchemaName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:targetDatabaseName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:sourceSchemaName:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Text
$sel:enableCaseSensitiveIdentifier:RestoreTableFromClusterSnapshot' :: RestoreTableFromClusterSnapshot -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"RestoreTableFromClusterSnapshot" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2012-12-01" :: Prelude.ByteString),
        ByteString
"EnableCaseSensitiveIdentifier"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
enableCaseSensitiveIdentifier,
        ByteString
"SourceSchemaName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
sourceSchemaName,
        ByteString
"TargetDatabaseName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
targetDatabaseName,
        ByteString
"TargetSchemaName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
targetSchemaName,
        ByteString
"ClusterIdentifier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
clusterIdentifier,
        ByteString
"SnapshotIdentifier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
snapshotIdentifier,
        ByteString
"SourceDatabaseName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
sourceDatabaseName,
        ByteString
"SourceTableName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
sourceTableName,
        ByteString
"NewTableName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
newTableName'
      ]

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

-- |
-- Create a value of 'RestoreTableFromClusterSnapshotResponse' 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:
--
-- 'tableRestoreStatus', 'restoreTableFromClusterSnapshotResponse_tableRestoreStatus' - Undocumented member.
--
-- 'httpStatus', 'restoreTableFromClusterSnapshotResponse_httpStatus' - The response's http status code.
newRestoreTableFromClusterSnapshotResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  RestoreTableFromClusterSnapshotResponse
newRestoreTableFromClusterSnapshotResponse :: Int -> RestoreTableFromClusterSnapshotResponse
newRestoreTableFromClusterSnapshotResponse
  Int
pHttpStatus_ =
    RestoreTableFromClusterSnapshotResponse'
      { $sel:tableRestoreStatus:RestoreTableFromClusterSnapshotResponse' :: Maybe TableRestoreStatus
tableRestoreStatus =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:RestoreTableFromClusterSnapshotResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | Undocumented member.
restoreTableFromClusterSnapshotResponse_tableRestoreStatus :: Lens.Lens' RestoreTableFromClusterSnapshotResponse (Prelude.Maybe TableRestoreStatus)
restoreTableFromClusterSnapshotResponse_tableRestoreStatus :: Lens'
  RestoreTableFromClusterSnapshotResponse (Maybe TableRestoreStatus)
restoreTableFromClusterSnapshotResponse_tableRestoreStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RestoreTableFromClusterSnapshotResponse' {Maybe TableRestoreStatus
tableRestoreStatus :: Maybe TableRestoreStatus
$sel:tableRestoreStatus:RestoreTableFromClusterSnapshotResponse' :: RestoreTableFromClusterSnapshotResponse -> Maybe TableRestoreStatus
tableRestoreStatus} -> Maybe TableRestoreStatus
tableRestoreStatus) (\s :: RestoreTableFromClusterSnapshotResponse
s@RestoreTableFromClusterSnapshotResponse' {} Maybe TableRestoreStatus
a -> RestoreTableFromClusterSnapshotResponse
s {$sel:tableRestoreStatus:RestoreTableFromClusterSnapshotResponse' :: Maybe TableRestoreStatus
tableRestoreStatus = Maybe TableRestoreStatus
a} :: RestoreTableFromClusterSnapshotResponse)

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

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