{-# 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.KinesisVideo.DeleteSignalingChannel
-- 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 specified signaling channel. @DeleteSignalingChannel@ is an
-- asynchronous operation. If you don\'t specify the channel\'s current
-- version, the most recent version is deleted.
module Amazonka.KinesisVideo.DeleteSignalingChannel
  ( -- * Creating a Request
    DeleteSignalingChannel (..),
    newDeleteSignalingChannel,

    -- * Request Lenses
    deleteSignalingChannel_currentVersion,
    deleteSignalingChannel_channelARN,

    -- * Destructuring the Response
    DeleteSignalingChannelResponse (..),
    newDeleteSignalingChannelResponse,

    -- * Response Lenses
    deleteSignalingChannelResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDeleteSignalingChannel' smart constructor.
data DeleteSignalingChannel = DeleteSignalingChannel'
  { -- | The current version of the signaling channel that you want to delete.
    -- You can obtain the current version by invoking the
    -- @DescribeSignalingChannel@ or @ListSignalingChannels@ API operations.
    DeleteSignalingChannel -> Maybe Text
currentVersion :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the signaling channel that you want to
    -- delete.
    DeleteSignalingChannel -> Text
channelARN :: Prelude.Text
  }
  deriving (DeleteSignalingChannel -> DeleteSignalingChannel -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteSignalingChannel -> DeleteSignalingChannel -> Bool
$c/= :: DeleteSignalingChannel -> DeleteSignalingChannel -> Bool
== :: DeleteSignalingChannel -> DeleteSignalingChannel -> Bool
$c== :: DeleteSignalingChannel -> DeleteSignalingChannel -> Bool
Prelude.Eq, ReadPrec [DeleteSignalingChannel]
ReadPrec DeleteSignalingChannel
Int -> ReadS DeleteSignalingChannel
ReadS [DeleteSignalingChannel]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteSignalingChannel]
$creadListPrec :: ReadPrec [DeleteSignalingChannel]
readPrec :: ReadPrec DeleteSignalingChannel
$creadPrec :: ReadPrec DeleteSignalingChannel
readList :: ReadS [DeleteSignalingChannel]
$creadList :: ReadS [DeleteSignalingChannel]
readsPrec :: Int -> ReadS DeleteSignalingChannel
$creadsPrec :: Int -> ReadS DeleteSignalingChannel
Prelude.Read, Int -> DeleteSignalingChannel -> ShowS
[DeleteSignalingChannel] -> ShowS
DeleteSignalingChannel -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteSignalingChannel] -> ShowS
$cshowList :: [DeleteSignalingChannel] -> ShowS
show :: DeleteSignalingChannel -> String
$cshow :: DeleteSignalingChannel -> String
showsPrec :: Int -> DeleteSignalingChannel -> ShowS
$cshowsPrec :: Int -> DeleteSignalingChannel -> ShowS
Prelude.Show, forall x. Rep DeleteSignalingChannel x -> DeleteSignalingChannel
forall x. DeleteSignalingChannel -> Rep DeleteSignalingChannel x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteSignalingChannel x -> DeleteSignalingChannel
$cfrom :: forall x. DeleteSignalingChannel -> Rep DeleteSignalingChannel x
Prelude.Generic)

-- |
-- Create a value of 'DeleteSignalingChannel' 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:
--
-- 'currentVersion', 'deleteSignalingChannel_currentVersion' - The current version of the signaling channel that you want to delete.
-- You can obtain the current version by invoking the
-- @DescribeSignalingChannel@ or @ListSignalingChannels@ API operations.
--
-- 'channelARN', 'deleteSignalingChannel_channelARN' - The Amazon Resource Name (ARN) of the signaling channel that you want to
-- delete.
newDeleteSignalingChannel ::
  -- | 'channelARN'
  Prelude.Text ->
  DeleteSignalingChannel
newDeleteSignalingChannel :: Text -> DeleteSignalingChannel
newDeleteSignalingChannel Text
pChannelARN_ =
  DeleteSignalingChannel'
    { $sel:currentVersion:DeleteSignalingChannel' :: Maybe Text
currentVersion =
        forall a. Maybe a
Prelude.Nothing,
      $sel:channelARN:DeleteSignalingChannel' :: Text
channelARN = Text
pChannelARN_
    }

-- | The current version of the signaling channel that you want to delete.
-- You can obtain the current version by invoking the
-- @DescribeSignalingChannel@ or @ListSignalingChannels@ API operations.
deleteSignalingChannel_currentVersion :: Lens.Lens' DeleteSignalingChannel (Prelude.Maybe Prelude.Text)
deleteSignalingChannel_currentVersion :: Lens' DeleteSignalingChannel (Maybe Text)
deleteSignalingChannel_currentVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteSignalingChannel' {Maybe Text
currentVersion :: Maybe Text
$sel:currentVersion:DeleteSignalingChannel' :: DeleteSignalingChannel -> Maybe Text
currentVersion} -> Maybe Text
currentVersion) (\s :: DeleteSignalingChannel
s@DeleteSignalingChannel' {} Maybe Text
a -> DeleteSignalingChannel
s {$sel:currentVersion:DeleteSignalingChannel' :: Maybe Text
currentVersion = Maybe Text
a} :: DeleteSignalingChannel)

-- | The Amazon Resource Name (ARN) of the signaling channel that you want to
-- delete.
deleteSignalingChannel_channelARN :: Lens.Lens' DeleteSignalingChannel Prelude.Text
deleteSignalingChannel_channelARN :: Lens' DeleteSignalingChannel Text
deleteSignalingChannel_channelARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteSignalingChannel' {Text
channelARN :: Text
$sel:channelARN:DeleteSignalingChannel' :: DeleteSignalingChannel -> Text
channelARN} -> Text
channelARN) (\s :: DeleteSignalingChannel
s@DeleteSignalingChannel' {} Text
a -> DeleteSignalingChannel
s {$sel:channelARN:DeleteSignalingChannel' :: Text
channelARN = Text
a} :: DeleteSignalingChannel)

instance Core.AWSRequest DeleteSignalingChannel where
  type
    AWSResponse DeleteSignalingChannel =
      DeleteSignalingChannelResponse
  request :: (Service -> Service)
-> DeleteSignalingChannel -> Request DeleteSignalingChannel
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 DeleteSignalingChannel
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteSignalingChannel)))
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 -> DeleteSignalingChannelResponse
DeleteSignalingChannelResponse'
            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 DeleteSignalingChannel where
  hashWithSalt :: Int -> DeleteSignalingChannel -> Int
hashWithSalt Int
_salt DeleteSignalingChannel' {Maybe Text
Text
channelARN :: Text
currentVersion :: Maybe Text
$sel:channelARN:DeleteSignalingChannel' :: DeleteSignalingChannel -> Text
$sel:currentVersion:DeleteSignalingChannel' :: DeleteSignalingChannel -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
currentVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
channelARN

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

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

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

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

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

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

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

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

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