{-# 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.LakeFormation.DeleteLFTag
-- 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 the specified LF-tag given a key name. If the input parameter
-- tag key was not found, then the operation will throw an exception. When
-- you delete an LF-tag, the @LFTagPolicy@ attached to the LF-tag becomes
-- invalid. If the deleted LF-tag was still assigned to any resource, the
-- tag policy attach to the deleted LF-tag will no longer be applied to the
-- resource.
module Amazonka.LakeFormation.DeleteLFTag
  ( -- * Creating a Request
    DeleteLFTag (..),
    newDeleteLFTag,

    -- * Request Lenses
    deleteLFTag_catalogId,
    deleteLFTag_tagKey,

    -- * Destructuring the Response
    DeleteLFTagResponse (..),
    newDeleteLFTagResponse,

    -- * Response Lenses
    deleteLFTagResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDeleteLFTag' smart constructor.
data DeleteLFTag = DeleteLFTag'
  { -- | The identifier for the Data Catalog. By default, the account ID. The
    -- Data Catalog is the persistent metadata store. It contains database
    -- definitions, table definitions, and other control information to manage
    -- your Lake Formation environment.
    DeleteLFTag -> Maybe Text
catalogId :: Prelude.Maybe Prelude.Text,
    -- | The key-name for the LF-tag to delete.
    DeleteLFTag -> Text
tagKey :: Prelude.Text
  }
  deriving (DeleteLFTag -> DeleteLFTag -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteLFTag -> DeleteLFTag -> Bool
$c/= :: DeleteLFTag -> DeleteLFTag -> Bool
== :: DeleteLFTag -> DeleteLFTag -> Bool
$c== :: DeleteLFTag -> DeleteLFTag -> Bool
Prelude.Eq, ReadPrec [DeleteLFTag]
ReadPrec DeleteLFTag
Int -> ReadS DeleteLFTag
ReadS [DeleteLFTag]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteLFTag]
$creadListPrec :: ReadPrec [DeleteLFTag]
readPrec :: ReadPrec DeleteLFTag
$creadPrec :: ReadPrec DeleteLFTag
readList :: ReadS [DeleteLFTag]
$creadList :: ReadS [DeleteLFTag]
readsPrec :: Int -> ReadS DeleteLFTag
$creadsPrec :: Int -> ReadS DeleteLFTag
Prelude.Read, Int -> DeleteLFTag -> ShowS
[DeleteLFTag] -> ShowS
DeleteLFTag -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteLFTag] -> ShowS
$cshowList :: [DeleteLFTag] -> ShowS
show :: DeleteLFTag -> String
$cshow :: DeleteLFTag -> String
showsPrec :: Int -> DeleteLFTag -> ShowS
$cshowsPrec :: Int -> DeleteLFTag -> ShowS
Prelude.Show, forall x. Rep DeleteLFTag x -> DeleteLFTag
forall x. DeleteLFTag -> Rep DeleteLFTag x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteLFTag x -> DeleteLFTag
$cfrom :: forall x. DeleteLFTag -> Rep DeleteLFTag x
Prelude.Generic)

-- |
-- Create a value of 'DeleteLFTag' 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:
--
-- 'catalogId', 'deleteLFTag_catalogId' - The identifier for the Data Catalog. By default, the account ID. The
-- Data Catalog is the persistent metadata store. It contains database
-- definitions, table definitions, and other control information to manage
-- your Lake Formation environment.
--
-- 'tagKey', 'deleteLFTag_tagKey' - The key-name for the LF-tag to delete.
newDeleteLFTag ::
  -- | 'tagKey'
  Prelude.Text ->
  DeleteLFTag
newDeleteLFTag :: Text -> DeleteLFTag
newDeleteLFTag Text
pTagKey_ =
  DeleteLFTag'
    { $sel:catalogId:DeleteLFTag' :: Maybe Text
catalogId = forall a. Maybe a
Prelude.Nothing,
      $sel:tagKey:DeleteLFTag' :: Text
tagKey = Text
pTagKey_
    }

-- | The identifier for the Data Catalog. By default, the account ID. The
-- Data Catalog is the persistent metadata store. It contains database
-- definitions, table definitions, and other control information to manage
-- your Lake Formation environment.
deleteLFTag_catalogId :: Lens.Lens' DeleteLFTag (Prelude.Maybe Prelude.Text)
deleteLFTag_catalogId :: Lens' DeleteLFTag (Maybe Text)
deleteLFTag_catalogId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteLFTag' {Maybe Text
catalogId :: Maybe Text
$sel:catalogId:DeleteLFTag' :: DeleteLFTag -> Maybe Text
catalogId} -> Maybe Text
catalogId) (\s :: DeleteLFTag
s@DeleteLFTag' {} Maybe Text
a -> DeleteLFTag
s {$sel:catalogId:DeleteLFTag' :: Maybe Text
catalogId = Maybe Text
a} :: DeleteLFTag)

-- | The key-name for the LF-tag to delete.
deleteLFTag_tagKey :: Lens.Lens' DeleteLFTag Prelude.Text
deleteLFTag_tagKey :: Lens' DeleteLFTag Text
deleteLFTag_tagKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteLFTag' {Text
tagKey :: Text
$sel:tagKey:DeleteLFTag' :: DeleteLFTag -> Text
tagKey} -> Text
tagKey) (\s :: DeleteLFTag
s@DeleteLFTag' {} Text
a -> DeleteLFTag
s {$sel:tagKey:DeleteLFTag' :: Text
tagKey = Text
a} :: DeleteLFTag)

instance Core.AWSRequest DeleteLFTag where
  type AWSResponse DeleteLFTag = DeleteLFTagResponse
  request :: (Service -> Service) -> DeleteLFTag -> Request DeleteLFTag
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 DeleteLFTag
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteLFTag)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> DeleteLFTagResponse
DeleteLFTagResponse'
            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))
      )

instance Prelude.Hashable DeleteLFTag where
  hashWithSalt :: Int -> DeleteLFTag -> Int
hashWithSalt Int
_salt DeleteLFTag' {Maybe Text
Text
tagKey :: Text
catalogId :: Maybe Text
$sel:tagKey:DeleteLFTag' :: DeleteLFTag -> Text
$sel:catalogId:DeleteLFTag' :: DeleteLFTag -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
catalogId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
tagKey

instance Prelude.NFData DeleteLFTag where
  rnf :: DeleteLFTag -> ()
rnf DeleteLFTag' {Maybe Text
Text
tagKey :: Text
catalogId :: Maybe Text
$sel:tagKey:DeleteLFTag' :: DeleteLFTag -> Text
$sel:catalogId:DeleteLFTag' :: DeleteLFTag -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
catalogId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
tagKey

instance Data.ToHeaders DeleteLFTag where
  toHeaders :: DeleteLFTag -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DeleteLFTag where
  toJSON :: DeleteLFTag -> Value
toJSON DeleteLFTag' {Maybe Text
Text
tagKey :: Text
catalogId :: Maybe Text
$sel:tagKey:DeleteLFTag' :: DeleteLFTag -> Text
$sel:catalogId:DeleteLFTag' :: DeleteLFTag -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"CatalogId" 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
catalogId,
            forall a. a -> Maybe a
Prelude.Just (Key
"TagKey" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
tagKey)
          ]
      )

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

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

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

-- |
-- Create a value of 'DeleteLFTagResponse' 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', 'deleteLFTagResponse_httpStatus' - The response's http status code.
newDeleteLFTagResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteLFTagResponse
newDeleteLFTagResponse :: Int -> DeleteLFTagResponse
newDeleteLFTagResponse Int
pHttpStatus_ =
  DeleteLFTagResponse' {$sel:httpStatus:DeleteLFTagResponse' :: Int
httpStatus = Int
pHttpStatus_}

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

instance Prelude.NFData DeleteLFTagResponse where
  rnf :: DeleteLFTagResponse -> ()
rnf DeleteLFTagResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteLFTagResponse' :: DeleteLFTagResponse -> Int
..} = forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus