{-# 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.Firehose.UntagDeliveryStream
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Removes tags from the specified delivery stream. Removed tags are
-- deleted, and you can\'t recover them after this operation successfully
-- completes.
--
-- If you specify a tag that doesn\'t exist, the operation ignores it.
--
-- This operation has a limit of five transactions per second per account.
module Amazonka.Firehose.UntagDeliveryStream
  ( -- * Creating a Request
    UntagDeliveryStream (..),
    newUntagDeliveryStream,

    -- * Request Lenses
    untagDeliveryStream_deliveryStreamName,
    untagDeliveryStream_tagKeys,

    -- * Destructuring the Response
    UntagDeliveryStreamResponse (..),
    newUntagDeliveryStreamResponse,

    -- * Response Lenses
    untagDeliveryStreamResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUntagDeliveryStream' smart constructor.
data UntagDeliveryStream = UntagDeliveryStream'
  { -- | The name of the delivery stream.
    UntagDeliveryStream -> Text
deliveryStreamName :: Prelude.Text,
    -- | A list of tag keys. Each corresponding tag is removed from the delivery
    -- stream.
    UntagDeliveryStream -> NonEmpty Text
tagKeys :: Prelude.NonEmpty Prelude.Text
  }
  deriving (UntagDeliveryStream -> UntagDeliveryStream -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UntagDeliveryStream -> UntagDeliveryStream -> Bool
$c/= :: UntagDeliveryStream -> UntagDeliveryStream -> Bool
== :: UntagDeliveryStream -> UntagDeliveryStream -> Bool
$c== :: UntagDeliveryStream -> UntagDeliveryStream -> Bool
Prelude.Eq, ReadPrec [UntagDeliveryStream]
ReadPrec UntagDeliveryStream
Int -> ReadS UntagDeliveryStream
ReadS [UntagDeliveryStream]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UntagDeliveryStream]
$creadListPrec :: ReadPrec [UntagDeliveryStream]
readPrec :: ReadPrec UntagDeliveryStream
$creadPrec :: ReadPrec UntagDeliveryStream
readList :: ReadS [UntagDeliveryStream]
$creadList :: ReadS [UntagDeliveryStream]
readsPrec :: Int -> ReadS UntagDeliveryStream
$creadsPrec :: Int -> ReadS UntagDeliveryStream
Prelude.Read, Int -> UntagDeliveryStream -> ShowS
[UntagDeliveryStream] -> ShowS
UntagDeliveryStream -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UntagDeliveryStream] -> ShowS
$cshowList :: [UntagDeliveryStream] -> ShowS
show :: UntagDeliveryStream -> String
$cshow :: UntagDeliveryStream -> String
showsPrec :: Int -> UntagDeliveryStream -> ShowS
$cshowsPrec :: Int -> UntagDeliveryStream -> ShowS
Prelude.Show, forall x. Rep UntagDeliveryStream x -> UntagDeliveryStream
forall x. UntagDeliveryStream -> Rep UntagDeliveryStream x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UntagDeliveryStream x -> UntagDeliveryStream
$cfrom :: forall x. UntagDeliveryStream -> Rep UntagDeliveryStream x
Prelude.Generic)

-- |
-- Create a value of 'UntagDeliveryStream' 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:
--
-- 'deliveryStreamName', 'untagDeliveryStream_deliveryStreamName' - The name of the delivery stream.
--
-- 'tagKeys', 'untagDeliveryStream_tagKeys' - A list of tag keys. Each corresponding tag is removed from the delivery
-- stream.
newUntagDeliveryStream ::
  -- | 'deliveryStreamName'
  Prelude.Text ->
  -- | 'tagKeys'
  Prelude.NonEmpty Prelude.Text ->
  UntagDeliveryStream
newUntagDeliveryStream :: Text -> NonEmpty Text -> UntagDeliveryStream
newUntagDeliveryStream Text
pDeliveryStreamName_ NonEmpty Text
pTagKeys_ =
  UntagDeliveryStream'
    { $sel:deliveryStreamName:UntagDeliveryStream' :: Text
deliveryStreamName =
        Text
pDeliveryStreamName_,
      $sel:tagKeys:UntagDeliveryStream' :: NonEmpty Text
tagKeys = forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty Text
pTagKeys_
    }

-- | The name of the delivery stream.
untagDeliveryStream_deliveryStreamName :: Lens.Lens' UntagDeliveryStream Prelude.Text
untagDeliveryStream_deliveryStreamName :: Lens' UntagDeliveryStream Text
untagDeliveryStream_deliveryStreamName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UntagDeliveryStream' {Text
deliveryStreamName :: Text
$sel:deliveryStreamName:UntagDeliveryStream' :: UntagDeliveryStream -> Text
deliveryStreamName} -> Text
deliveryStreamName) (\s :: UntagDeliveryStream
s@UntagDeliveryStream' {} Text
a -> UntagDeliveryStream
s {$sel:deliveryStreamName:UntagDeliveryStream' :: Text
deliveryStreamName = Text
a} :: UntagDeliveryStream)

-- | A list of tag keys. Each corresponding tag is removed from the delivery
-- stream.
untagDeliveryStream_tagKeys :: Lens.Lens' UntagDeliveryStream (Prelude.NonEmpty Prelude.Text)
untagDeliveryStream_tagKeys :: Lens' UntagDeliveryStream (NonEmpty Text)
untagDeliveryStream_tagKeys = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UntagDeliveryStream' {NonEmpty Text
tagKeys :: NonEmpty Text
$sel:tagKeys:UntagDeliveryStream' :: UntagDeliveryStream -> NonEmpty Text
tagKeys} -> NonEmpty Text
tagKeys) (\s :: UntagDeliveryStream
s@UntagDeliveryStream' {} NonEmpty Text
a -> UntagDeliveryStream
s {$sel:tagKeys:UntagDeliveryStream' :: NonEmpty Text
tagKeys = NonEmpty Text
a} :: UntagDeliveryStream) 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 UntagDeliveryStream where
  type
    AWSResponse UntagDeliveryStream =
      UntagDeliveryStreamResponse
  request :: (Service -> Service)
-> UntagDeliveryStream -> Request UntagDeliveryStream
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 UntagDeliveryStream
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UntagDeliveryStream)))
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 -> UntagDeliveryStreamResponse
UntagDeliveryStreamResponse'
            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 UntagDeliveryStream where
  hashWithSalt :: Int -> UntagDeliveryStream -> Int
hashWithSalt Int
_salt UntagDeliveryStream' {NonEmpty Text
Text
tagKeys :: NonEmpty Text
deliveryStreamName :: Text
$sel:tagKeys:UntagDeliveryStream' :: UntagDeliveryStream -> NonEmpty Text
$sel:deliveryStreamName:UntagDeliveryStream' :: UntagDeliveryStream -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
deliveryStreamName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Text
tagKeys

instance Prelude.NFData UntagDeliveryStream where
  rnf :: UntagDeliveryStream -> ()
rnf UntagDeliveryStream' {NonEmpty Text
Text
tagKeys :: NonEmpty Text
deliveryStreamName :: Text
$sel:tagKeys:UntagDeliveryStream' :: UntagDeliveryStream -> NonEmpty Text
$sel:deliveryStreamName:UntagDeliveryStream' :: UntagDeliveryStream -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
deliveryStreamName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty Text
tagKeys

instance Data.ToHeaders UntagDeliveryStream where
  toHeaders :: UntagDeliveryStream -> 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
"Firehose_20150804.UntagDeliveryStream" ::
                          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 UntagDeliveryStream where
  toJSON :: UntagDeliveryStream -> Value
toJSON UntagDeliveryStream' {NonEmpty Text
Text
tagKeys :: NonEmpty Text
deliveryStreamName :: Text
$sel:tagKeys:UntagDeliveryStream' :: UntagDeliveryStream -> NonEmpty Text
$sel:deliveryStreamName:UntagDeliveryStream' :: UntagDeliveryStream -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"DeliveryStreamName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
deliveryStreamName),
            forall a. a -> Maybe a
Prelude.Just (Key
"TagKeys" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty Text
tagKeys)
          ]
      )

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

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

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

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

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

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