{-# 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.Chime.DeleteChannelMessage
-- 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 channel message. Only admins can perform this action. Deletion
-- makes messages inaccessible immediately. A background process deletes
-- any revisions created by @UpdateChannelMessage@.
--
-- The @x-amz-chime-bearer@ request header is mandatory. Use the
-- @AppInstanceUserArn@ of the user that makes the API call as the value in
-- the header.
module Amazonka.Chime.DeleteChannelMessage
  ( -- * Creating a Request
    DeleteChannelMessage (..),
    newDeleteChannelMessage,

    -- * Request Lenses
    deleteChannelMessage_chimeBearer,
    deleteChannelMessage_channelArn,
    deleteChannelMessage_messageId,

    -- * Destructuring the Response
    DeleteChannelMessageResponse (..),
    newDeleteChannelMessageResponse,
  )
where

import Amazonka.Chime.Types
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

-- | /See:/ 'newDeleteChannelMessage' smart constructor.
data DeleteChannelMessage = DeleteChannelMessage'
  { -- | The @AppInstanceUserArn@ of the user that makes the API call.
    DeleteChannelMessage -> Maybe Text
chimeBearer :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the channel.
    DeleteChannelMessage -> Text
channelArn :: Prelude.Text,
    -- | The ID of the message being deleted.
    DeleteChannelMessage -> Text
messageId :: Prelude.Text
  }
  deriving (DeleteChannelMessage -> DeleteChannelMessage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteChannelMessage -> DeleteChannelMessage -> Bool
$c/= :: DeleteChannelMessage -> DeleteChannelMessage -> Bool
== :: DeleteChannelMessage -> DeleteChannelMessage -> Bool
$c== :: DeleteChannelMessage -> DeleteChannelMessage -> Bool
Prelude.Eq, ReadPrec [DeleteChannelMessage]
ReadPrec DeleteChannelMessage
Int -> ReadS DeleteChannelMessage
ReadS [DeleteChannelMessage]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteChannelMessage]
$creadListPrec :: ReadPrec [DeleteChannelMessage]
readPrec :: ReadPrec DeleteChannelMessage
$creadPrec :: ReadPrec DeleteChannelMessage
readList :: ReadS [DeleteChannelMessage]
$creadList :: ReadS [DeleteChannelMessage]
readsPrec :: Int -> ReadS DeleteChannelMessage
$creadsPrec :: Int -> ReadS DeleteChannelMessage
Prelude.Read, Int -> DeleteChannelMessage -> ShowS
[DeleteChannelMessage] -> ShowS
DeleteChannelMessage -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteChannelMessage] -> ShowS
$cshowList :: [DeleteChannelMessage] -> ShowS
show :: DeleteChannelMessage -> String
$cshow :: DeleteChannelMessage -> String
showsPrec :: Int -> DeleteChannelMessage -> ShowS
$cshowsPrec :: Int -> DeleteChannelMessage -> ShowS
Prelude.Show, forall x. Rep DeleteChannelMessage x -> DeleteChannelMessage
forall x. DeleteChannelMessage -> Rep DeleteChannelMessage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteChannelMessage x -> DeleteChannelMessage
$cfrom :: forall x. DeleteChannelMessage -> Rep DeleteChannelMessage x
Prelude.Generic)

-- |
-- Create a value of 'DeleteChannelMessage' 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:
--
-- 'chimeBearer', 'deleteChannelMessage_chimeBearer' - The @AppInstanceUserArn@ of the user that makes the API call.
--
-- 'channelArn', 'deleteChannelMessage_channelArn' - The ARN of the channel.
--
-- 'messageId', 'deleteChannelMessage_messageId' - The ID of the message being deleted.
newDeleteChannelMessage ::
  -- | 'channelArn'
  Prelude.Text ->
  -- | 'messageId'
  Prelude.Text ->
  DeleteChannelMessage
newDeleteChannelMessage :: Text -> Text -> DeleteChannelMessage
newDeleteChannelMessage Text
pChannelArn_ Text
pMessageId_ =
  DeleteChannelMessage'
    { $sel:chimeBearer:DeleteChannelMessage' :: Maybe Text
chimeBearer =
        forall a. Maybe a
Prelude.Nothing,
      $sel:channelArn:DeleteChannelMessage' :: Text
channelArn = Text
pChannelArn_,
      $sel:messageId:DeleteChannelMessage' :: Text
messageId = Text
pMessageId_
    }

-- | The @AppInstanceUserArn@ of the user that makes the API call.
deleteChannelMessage_chimeBearer :: Lens.Lens' DeleteChannelMessage (Prelude.Maybe Prelude.Text)
deleteChannelMessage_chimeBearer :: Lens' DeleteChannelMessage (Maybe Text)
deleteChannelMessage_chimeBearer = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteChannelMessage' {Maybe Text
chimeBearer :: Maybe Text
$sel:chimeBearer:DeleteChannelMessage' :: DeleteChannelMessage -> Maybe Text
chimeBearer} -> Maybe Text
chimeBearer) (\s :: DeleteChannelMessage
s@DeleteChannelMessage' {} Maybe Text
a -> DeleteChannelMessage
s {$sel:chimeBearer:DeleteChannelMessage' :: Maybe Text
chimeBearer = Maybe Text
a} :: DeleteChannelMessage)

-- | The ARN of the channel.
deleteChannelMessage_channelArn :: Lens.Lens' DeleteChannelMessage Prelude.Text
deleteChannelMessage_channelArn :: Lens' DeleteChannelMessage Text
deleteChannelMessage_channelArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteChannelMessage' {Text
channelArn :: Text
$sel:channelArn:DeleteChannelMessage' :: DeleteChannelMessage -> Text
channelArn} -> Text
channelArn) (\s :: DeleteChannelMessage
s@DeleteChannelMessage' {} Text
a -> DeleteChannelMessage
s {$sel:channelArn:DeleteChannelMessage' :: Text
channelArn = Text
a} :: DeleteChannelMessage)

-- | The ID of the message being deleted.
deleteChannelMessage_messageId :: Lens.Lens' DeleteChannelMessage Prelude.Text
deleteChannelMessage_messageId :: Lens' DeleteChannelMessage Text
deleteChannelMessage_messageId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteChannelMessage' {Text
messageId :: Text
$sel:messageId:DeleteChannelMessage' :: DeleteChannelMessage -> Text
messageId} -> Text
messageId) (\s :: DeleteChannelMessage
s@DeleteChannelMessage' {} Text
a -> DeleteChannelMessage
s {$sel:messageId:DeleteChannelMessage' :: Text
messageId = Text
a} :: DeleteChannelMessage)

instance Core.AWSRequest DeleteChannelMessage where
  type
    AWSResponse DeleteChannelMessage =
      DeleteChannelMessageResponse
  request :: (Service -> Service)
-> DeleteChannelMessage -> Request DeleteChannelMessage
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.delete (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DeleteChannelMessage
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteChannelMessage)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull DeleteChannelMessageResponse
DeleteChannelMessageResponse'

instance Prelude.Hashable DeleteChannelMessage where
  hashWithSalt :: Int -> DeleteChannelMessage -> Int
hashWithSalt Int
_salt DeleteChannelMessage' {Maybe Text
Text
messageId :: Text
channelArn :: Text
chimeBearer :: Maybe Text
$sel:messageId:DeleteChannelMessage' :: DeleteChannelMessage -> Text
$sel:channelArn:DeleteChannelMessage' :: DeleteChannelMessage -> Text
$sel:chimeBearer:DeleteChannelMessage' :: DeleteChannelMessage -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
chimeBearer
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
channelArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
messageId

instance Prelude.NFData DeleteChannelMessage where
  rnf :: DeleteChannelMessage -> ()
rnf DeleteChannelMessage' {Maybe Text
Text
messageId :: Text
channelArn :: Text
chimeBearer :: Maybe Text
$sel:messageId:DeleteChannelMessage' :: DeleteChannelMessage -> Text
$sel:channelArn:DeleteChannelMessage' :: DeleteChannelMessage -> Text
$sel:chimeBearer:DeleteChannelMessage' :: DeleteChannelMessage -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
chimeBearer
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
channelArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
messageId

instance Data.ToHeaders DeleteChannelMessage where
  toHeaders :: DeleteChannelMessage -> [Header]
toHeaders DeleteChannelMessage' {Maybe Text
Text
messageId :: Text
channelArn :: Text
chimeBearer :: Maybe Text
$sel:messageId:DeleteChannelMessage' :: DeleteChannelMessage -> Text
$sel:channelArn:DeleteChannelMessage' :: DeleteChannelMessage -> Text
$sel:chimeBearer:DeleteChannelMessage' :: DeleteChannelMessage -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [HeaderName
"x-amz-chime-bearer" forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# Maybe Text
chimeBearer]

instance Data.ToPath DeleteChannelMessage where
  toPath :: DeleteChannelMessage -> ByteString
toPath DeleteChannelMessage' {Maybe Text
Text
messageId :: Text
channelArn :: Text
chimeBearer :: Maybe Text
$sel:messageId:DeleteChannelMessage' :: DeleteChannelMessage -> Text
$sel:channelArn:DeleteChannelMessage' :: DeleteChannelMessage -> Text
$sel:chimeBearer:DeleteChannelMessage' :: DeleteChannelMessage -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/channels/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
channelArn,
        ByteString
"/messages/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
messageId
      ]

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

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

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

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