{-# 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.TimeStreamWrite.DeleteDatabase
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes a given Timestream database. /This is an irreversible operation.
-- After a database is deleted, the time series data from its tables cannot
-- be recovered./
--
-- All tables in the database must be deleted first, or a
-- ValidationException error will be thrown.
--
-- Due to the nature of distributed retries, the operation can return
-- either success or a ResourceNotFoundException. Clients should consider
-- them equivalent.
--
-- See
-- <https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.delete-db.html code sample>
-- for details.
module Amazonka.TimeStreamWrite.DeleteDatabase
  ( -- * Creating a Request
    DeleteDatabase (..),
    newDeleteDatabase,

    -- * Request Lenses
    deleteDatabase_databaseName,

    -- * Destructuring the Response
    DeleteDatabaseResponse (..),
    newDeleteDatabaseResponse,
  )
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.TimeStreamWrite.Types

-- | /See:/ 'newDeleteDatabase' smart constructor.
data DeleteDatabase = DeleteDatabase'
  { -- | The name of the Timestream database to be deleted.
    DeleteDatabase -> Text
databaseName :: Prelude.Text
  }
  deriving (DeleteDatabase -> DeleteDatabase -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteDatabase -> DeleteDatabase -> Bool
$c/= :: DeleteDatabase -> DeleteDatabase -> Bool
== :: DeleteDatabase -> DeleteDatabase -> Bool
$c== :: DeleteDatabase -> DeleteDatabase -> Bool
Prelude.Eq, ReadPrec [DeleteDatabase]
ReadPrec DeleteDatabase
Int -> ReadS DeleteDatabase
ReadS [DeleteDatabase]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteDatabase]
$creadListPrec :: ReadPrec [DeleteDatabase]
readPrec :: ReadPrec DeleteDatabase
$creadPrec :: ReadPrec DeleteDatabase
readList :: ReadS [DeleteDatabase]
$creadList :: ReadS [DeleteDatabase]
readsPrec :: Int -> ReadS DeleteDatabase
$creadsPrec :: Int -> ReadS DeleteDatabase
Prelude.Read, Int -> DeleteDatabase -> ShowS
[DeleteDatabase] -> ShowS
DeleteDatabase -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteDatabase] -> ShowS
$cshowList :: [DeleteDatabase] -> ShowS
show :: DeleteDatabase -> String
$cshow :: DeleteDatabase -> String
showsPrec :: Int -> DeleteDatabase -> ShowS
$cshowsPrec :: Int -> DeleteDatabase -> ShowS
Prelude.Show, forall x. Rep DeleteDatabase x -> DeleteDatabase
forall x. DeleteDatabase -> Rep DeleteDatabase x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteDatabase x -> DeleteDatabase
$cfrom :: forall x. DeleteDatabase -> Rep DeleteDatabase x
Prelude.Generic)

-- |
-- Create a value of 'DeleteDatabase' 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:
--
-- 'databaseName', 'deleteDatabase_databaseName' - The name of the Timestream database to be deleted.
newDeleteDatabase ::
  -- | 'databaseName'
  Prelude.Text ->
  DeleteDatabase
newDeleteDatabase :: Text -> DeleteDatabase
newDeleteDatabase Text
pDatabaseName_ =
  DeleteDatabase' {$sel:databaseName:DeleteDatabase' :: Text
databaseName = Text
pDatabaseName_}

-- | The name of the Timestream database to be deleted.
deleteDatabase_databaseName :: Lens.Lens' DeleteDatabase Prelude.Text
deleteDatabase_databaseName :: Lens' DeleteDatabase Text
deleteDatabase_databaseName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteDatabase' {Text
databaseName :: Text
$sel:databaseName:DeleteDatabase' :: DeleteDatabase -> Text
databaseName} -> Text
databaseName) (\s :: DeleteDatabase
s@DeleteDatabase' {} Text
a -> DeleteDatabase
s {$sel:databaseName:DeleteDatabase' :: Text
databaseName = Text
a} :: DeleteDatabase)

instance Core.AWSRequest DeleteDatabase where
  type
    AWSResponse DeleteDatabase =
      DeleteDatabaseResponse
  request :: (Service -> Service) -> DeleteDatabase -> Request DeleteDatabase
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 DeleteDatabase
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteDatabase)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull DeleteDatabaseResponse
DeleteDatabaseResponse'

instance Prelude.Hashable DeleteDatabase where
  hashWithSalt :: Int -> DeleteDatabase -> Int
hashWithSalt Int
_salt DeleteDatabase' {Text
databaseName :: Text
$sel:databaseName:DeleteDatabase' :: DeleteDatabase -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
databaseName

instance Prelude.NFData DeleteDatabase where
  rnf :: DeleteDatabase -> ()
rnf DeleteDatabase' {Text
databaseName :: Text
$sel:databaseName:DeleteDatabase' :: DeleteDatabase -> Text
..} = forall a. NFData a => a -> ()
Prelude.rnf Text
databaseName

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

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

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

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

-- | /See:/ 'newDeleteDatabaseResponse' smart constructor.
data DeleteDatabaseResponse = DeleteDatabaseResponse'
  {
  }
  deriving (DeleteDatabaseResponse -> DeleteDatabaseResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteDatabaseResponse -> DeleteDatabaseResponse -> Bool
$c/= :: DeleteDatabaseResponse -> DeleteDatabaseResponse -> Bool
== :: DeleteDatabaseResponse -> DeleteDatabaseResponse -> Bool
$c== :: DeleteDatabaseResponse -> DeleteDatabaseResponse -> Bool
Prelude.Eq, ReadPrec [DeleteDatabaseResponse]
ReadPrec DeleteDatabaseResponse
Int -> ReadS DeleteDatabaseResponse
ReadS [DeleteDatabaseResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteDatabaseResponse]
$creadListPrec :: ReadPrec [DeleteDatabaseResponse]
readPrec :: ReadPrec DeleteDatabaseResponse
$creadPrec :: ReadPrec DeleteDatabaseResponse
readList :: ReadS [DeleteDatabaseResponse]
$creadList :: ReadS [DeleteDatabaseResponse]
readsPrec :: Int -> ReadS DeleteDatabaseResponse
$creadsPrec :: Int -> ReadS DeleteDatabaseResponse
Prelude.Read, Int -> DeleteDatabaseResponse -> ShowS
[DeleteDatabaseResponse] -> ShowS
DeleteDatabaseResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteDatabaseResponse] -> ShowS
$cshowList :: [DeleteDatabaseResponse] -> ShowS
show :: DeleteDatabaseResponse -> String
$cshow :: DeleteDatabaseResponse -> String
showsPrec :: Int -> DeleteDatabaseResponse -> ShowS
$cshowsPrec :: Int -> DeleteDatabaseResponse -> ShowS
Prelude.Show, forall x. Rep DeleteDatabaseResponse x -> DeleteDatabaseResponse
forall x. DeleteDatabaseResponse -> Rep DeleteDatabaseResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteDatabaseResponse x -> DeleteDatabaseResponse
$cfrom :: forall x. DeleteDatabaseResponse -> Rep DeleteDatabaseResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteDatabaseResponse' 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.
newDeleteDatabaseResponse ::
  DeleteDatabaseResponse
newDeleteDatabaseResponse :: DeleteDatabaseResponse
newDeleteDatabaseResponse = DeleteDatabaseResponse
DeleteDatabaseResponse'

instance Prelude.NFData DeleteDatabaseResponse where
  rnf :: DeleteDatabaseResponse -> ()
rnf DeleteDatabaseResponse
_ = ()