{-# 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.Route53Domains.DeleteTagsForDomain
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- This operation deletes the specified tags for a domain.
--
-- All tag operations are eventually consistent; subsequent operations
-- might not immediately represent all issued operations.
module Amazonka.Route53Domains.DeleteTagsForDomain
  ( -- * Creating a Request
    DeleteTagsForDomain (..),
    newDeleteTagsForDomain,

    -- * Request Lenses
    deleteTagsForDomain_domainName,
    deleteTagsForDomain_tagsToDelete,

    -- * Destructuring the Response
    DeleteTagsForDomainResponse (..),
    newDeleteTagsForDomainResponse,

    -- * Response Lenses
    deleteTagsForDomainResponse_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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.Route53Domains.Types

-- | The DeleteTagsForDomainRequest includes the following elements.
--
-- /See:/ 'newDeleteTagsForDomain' smart constructor.
data DeleteTagsForDomain = DeleteTagsForDomain'
  { -- | The domain for which you want to delete one or more tags.
    DeleteTagsForDomain -> Text
domainName :: Prelude.Text,
    -- | A list of tag keys to delete.
    DeleteTagsForDomain -> [Text]
tagsToDelete :: [Prelude.Text]
  }
  deriving (DeleteTagsForDomain -> DeleteTagsForDomain -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteTagsForDomain -> DeleteTagsForDomain -> Bool
$c/= :: DeleteTagsForDomain -> DeleteTagsForDomain -> Bool
== :: DeleteTagsForDomain -> DeleteTagsForDomain -> Bool
$c== :: DeleteTagsForDomain -> DeleteTagsForDomain -> Bool
Prelude.Eq, ReadPrec [DeleteTagsForDomain]
ReadPrec DeleteTagsForDomain
Int -> ReadS DeleteTagsForDomain
ReadS [DeleteTagsForDomain]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteTagsForDomain]
$creadListPrec :: ReadPrec [DeleteTagsForDomain]
readPrec :: ReadPrec DeleteTagsForDomain
$creadPrec :: ReadPrec DeleteTagsForDomain
readList :: ReadS [DeleteTagsForDomain]
$creadList :: ReadS [DeleteTagsForDomain]
readsPrec :: Int -> ReadS DeleteTagsForDomain
$creadsPrec :: Int -> ReadS DeleteTagsForDomain
Prelude.Read, Int -> DeleteTagsForDomain -> ShowS
[DeleteTagsForDomain] -> ShowS
DeleteTagsForDomain -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteTagsForDomain] -> ShowS
$cshowList :: [DeleteTagsForDomain] -> ShowS
show :: DeleteTagsForDomain -> String
$cshow :: DeleteTagsForDomain -> String
showsPrec :: Int -> DeleteTagsForDomain -> ShowS
$cshowsPrec :: Int -> DeleteTagsForDomain -> ShowS
Prelude.Show, forall x. Rep DeleteTagsForDomain x -> DeleteTagsForDomain
forall x. DeleteTagsForDomain -> Rep DeleteTagsForDomain x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteTagsForDomain x -> DeleteTagsForDomain
$cfrom :: forall x. DeleteTagsForDomain -> Rep DeleteTagsForDomain x
Prelude.Generic)

-- |
-- Create a value of 'DeleteTagsForDomain' 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:
--
-- 'domainName', 'deleteTagsForDomain_domainName' - The domain for which you want to delete one or more tags.
--
-- 'tagsToDelete', 'deleteTagsForDomain_tagsToDelete' - A list of tag keys to delete.
newDeleteTagsForDomain ::
  -- | 'domainName'
  Prelude.Text ->
  DeleteTagsForDomain
newDeleteTagsForDomain :: Text -> DeleteTagsForDomain
newDeleteTagsForDomain Text
pDomainName_ =
  DeleteTagsForDomain'
    { $sel:domainName:DeleteTagsForDomain' :: Text
domainName = Text
pDomainName_,
      $sel:tagsToDelete:DeleteTagsForDomain' :: [Text]
tagsToDelete = forall a. Monoid a => a
Prelude.mempty
    }

-- | The domain for which you want to delete one or more tags.
deleteTagsForDomain_domainName :: Lens.Lens' DeleteTagsForDomain Prelude.Text
deleteTagsForDomain_domainName :: Lens' DeleteTagsForDomain Text
deleteTagsForDomain_domainName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteTagsForDomain' {Text
domainName :: Text
$sel:domainName:DeleteTagsForDomain' :: DeleteTagsForDomain -> Text
domainName} -> Text
domainName) (\s :: DeleteTagsForDomain
s@DeleteTagsForDomain' {} Text
a -> DeleteTagsForDomain
s {$sel:domainName:DeleteTagsForDomain' :: Text
domainName = Text
a} :: DeleteTagsForDomain)

-- | A list of tag keys to delete.
deleteTagsForDomain_tagsToDelete :: Lens.Lens' DeleteTagsForDomain [Prelude.Text]
deleteTagsForDomain_tagsToDelete :: Lens' DeleteTagsForDomain [Text]
deleteTagsForDomain_tagsToDelete = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteTagsForDomain' {[Text]
tagsToDelete :: [Text]
$sel:tagsToDelete:DeleteTagsForDomain' :: DeleteTagsForDomain -> [Text]
tagsToDelete} -> [Text]
tagsToDelete) (\s :: DeleteTagsForDomain
s@DeleteTagsForDomain' {} [Text]
a -> DeleteTagsForDomain
s {$sel:tagsToDelete:DeleteTagsForDomain' :: [Text]
tagsToDelete = [Text]
a} :: DeleteTagsForDomain) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest DeleteTagsForDomain where
  type
    AWSResponse DeleteTagsForDomain =
      DeleteTagsForDomainResponse
  request :: (Service -> Service)
-> DeleteTagsForDomain -> Request DeleteTagsForDomain
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 DeleteTagsForDomain
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteTagsForDomain)))
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 -> DeleteTagsForDomainResponse
DeleteTagsForDomainResponse'
            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 DeleteTagsForDomain where
  hashWithSalt :: Int -> DeleteTagsForDomain -> Int
hashWithSalt Int
_salt DeleteTagsForDomain' {[Text]
Text
tagsToDelete :: [Text]
domainName :: Text
$sel:tagsToDelete:DeleteTagsForDomain' :: DeleteTagsForDomain -> [Text]
$sel:domainName:DeleteTagsForDomain' :: DeleteTagsForDomain -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
domainName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [Text]
tagsToDelete

instance Prelude.NFData DeleteTagsForDomain where
  rnf :: DeleteTagsForDomain -> ()
rnf DeleteTagsForDomain' {[Text]
Text
tagsToDelete :: [Text]
domainName :: Text
$sel:tagsToDelete:DeleteTagsForDomain' :: DeleteTagsForDomain -> [Text]
$sel:domainName:DeleteTagsForDomain' :: DeleteTagsForDomain -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
domainName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [Text]
tagsToDelete

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

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

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

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

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

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

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

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