{-# 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.Pinpoint.SendMessages
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates and sends a direct message.
module Amazonka.Pinpoint.SendMessages
  ( -- * Creating a Request
    SendMessages (..),
    newSendMessages,

    -- * Request Lenses
    sendMessages_applicationId,
    sendMessages_messageRequest,

    -- * Destructuring the Response
    SendMessagesResponse (..),
    newSendMessagesResponse,

    -- * Response Lenses
    sendMessagesResponse_httpStatus,
    sendMessagesResponse_messageResponse,
  )
where

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

-- | /See:/ 'newSendMessages' smart constructor.
data SendMessages = SendMessages'
  { -- | The unique identifier for the application. This identifier is displayed
    -- as the __Project ID__ on the Amazon Pinpoint console.
    SendMessages -> Text
applicationId :: Prelude.Text,
    SendMessages -> MessageRequest
messageRequest :: MessageRequest
  }
  deriving (SendMessages -> SendMessages -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SendMessages -> SendMessages -> Bool
$c/= :: SendMessages -> SendMessages -> Bool
== :: SendMessages -> SendMessages -> Bool
$c== :: SendMessages -> SendMessages -> Bool
Prelude.Eq, ReadPrec [SendMessages]
ReadPrec SendMessages
Int -> ReadS SendMessages
ReadS [SendMessages]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SendMessages]
$creadListPrec :: ReadPrec [SendMessages]
readPrec :: ReadPrec SendMessages
$creadPrec :: ReadPrec SendMessages
readList :: ReadS [SendMessages]
$creadList :: ReadS [SendMessages]
readsPrec :: Int -> ReadS SendMessages
$creadsPrec :: Int -> ReadS SendMessages
Prelude.Read, Int -> SendMessages -> ShowS
[SendMessages] -> ShowS
SendMessages -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SendMessages] -> ShowS
$cshowList :: [SendMessages] -> ShowS
show :: SendMessages -> String
$cshow :: SendMessages -> String
showsPrec :: Int -> SendMessages -> ShowS
$cshowsPrec :: Int -> SendMessages -> ShowS
Prelude.Show, forall x. Rep SendMessages x -> SendMessages
forall x. SendMessages -> Rep SendMessages x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SendMessages x -> SendMessages
$cfrom :: forall x. SendMessages -> Rep SendMessages x
Prelude.Generic)

-- |
-- Create a value of 'SendMessages' 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:
--
-- 'applicationId', 'sendMessages_applicationId' - The unique identifier for the application. This identifier is displayed
-- as the __Project ID__ on the Amazon Pinpoint console.
--
-- 'messageRequest', 'sendMessages_messageRequest' - Undocumented member.
newSendMessages ::
  -- | 'applicationId'
  Prelude.Text ->
  -- | 'messageRequest'
  MessageRequest ->
  SendMessages
newSendMessages :: Text -> MessageRequest -> SendMessages
newSendMessages Text
pApplicationId_ MessageRequest
pMessageRequest_ =
  SendMessages'
    { $sel:applicationId:SendMessages' :: Text
applicationId = Text
pApplicationId_,
      $sel:messageRequest:SendMessages' :: MessageRequest
messageRequest = MessageRequest
pMessageRequest_
    }

-- | The unique identifier for the application. This identifier is displayed
-- as the __Project ID__ on the Amazon Pinpoint console.
sendMessages_applicationId :: Lens.Lens' SendMessages Prelude.Text
sendMessages_applicationId :: Lens' SendMessages Text
sendMessages_applicationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendMessages' {Text
applicationId :: Text
$sel:applicationId:SendMessages' :: SendMessages -> Text
applicationId} -> Text
applicationId) (\s :: SendMessages
s@SendMessages' {} Text
a -> SendMessages
s {$sel:applicationId:SendMessages' :: Text
applicationId = Text
a} :: SendMessages)

-- | Undocumented member.
sendMessages_messageRequest :: Lens.Lens' SendMessages MessageRequest
sendMessages_messageRequest :: Lens' SendMessages MessageRequest
sendMessages_messageRequest = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendMessages' {MessageRequest
messageRequest :: MessageRequest
$sel:messageRequest:SendMessages' :: SendMessages -> MessageRequest
messageRequest} -> MessageRequest
messageRequest) (\s :: SendMessages
s@SendMessages' {} MessageRequest
a -> SendMessages
s {$sel:messageRequest:SendMessages' :: MessageRequest
messageRequest = MessageRequest
a} :: SendMessages)

instance Core.AWSRequest SendMessages where
  type AWSResponse SendMessages = SendMessagesResponse
  request :: (Service -> Service) -> SendMessages -> Request SendMessages
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 SendMessages
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse SendMessages)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Int -> MessageResponse -> SendMessagesResponse
SendMessagesResponse'
            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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)
      )

instance Prelude.Hashable SendMessages where
  hashWithSalt :: Int -> SendMessages -> Int
hashWithSalt Int
_salt SendMessages' {Text
MessageRequest
messageRequest :: MessageRequest
applicationId :: Text
$sel:messageRequest:SendMessages' :: SendMessages -> MessageRequest
$sel:applicationId:SendMessages' :: SendMessages -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
applicationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` MessageRequest
messageRequest

instance Prelude.NFData SendMessages where
  rnf :: SendMessages -> ()
rnf SendMessages' {Text
MessageRequest
messageRequest :: MessageRequest
applicationId :: Text
$sel:messageRequest:SendMessages' :: SendMessages -> MessageRequest
$sel:applicationId:SendMessages' :: SendMessages -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
applicationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MessageRequest
messageRequest

instance Data.ToHeaders SendMessages where
  toHeaders :: SendMessages -> 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 SendMessages where
  toJSON :: SendMessages -> Value
toJSON SendMessages' {Text
MessageRequest
messageRequest :: MessageRequest
applicationId :: Text
$sel:messageRequest:SendMessages' :: SendMessages -> MessageRequest
$sel:applicationId:SendMessages' :: SendMessages -> Text
..} = forall a. ToJSON a => a -> Value
Data.toJSON MessageRequest
messageRequest

instance Data.ToPath SendMessages where
  toPath :: SendMessages -> ByteString
toPath SendMessages' {Text
MessageRequest
messageRequest :: MessageRequest
applicationId :: Text
$sel:messageRequest:SendMessages' :: SendMessages -> MessageRequest
$sel:applicationId:SendMessages' :: SendMessages -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/v1/apps/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
applicationId, ByteString
"/messages"]

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

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

-- |
-- Create a value of 'SendMessagesResponse' 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', 'sendMessagesResponse_httpStatus' - The response's http status code.
--
-- 'messageResponse', 'sendMessagesResponse_messageResponse' - Undocumented member.
newSendMessagesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'messageResponse'
  MessageResponse ->
  SendMessagesResponse
newSendMessagesResponse :: Int -> MessageResponse -> SendMessagesResponse
newSendMessagesResponse
  Int
pHttpStatus_
  MessageResponse
pMessageResponse_ =
    SendMessagesResponse'
      { $sel:httpStatus:SendMessagesResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:messageResponse:SendMessagesResponse' :: MessageResponse
messageResponse = MessageResponse
pMessageResponse_
      }

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

-- | Undocumented member.
sendMessagesResponse_messageResponse :: Lens.Lens' SendMessagesResponse MessageResponse
sendMessagesResponse_messageResponse :: Lens' SendMessagesResponse MessageResponse
sendMessagesResponse_messageResponse = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendMessagesResponse' {MessageResponse
messageResponse :: MessageResponse
$sel:messageResponse:SendMessagesResponse' :: SendMessagesResponse -> MessageResponse
messageResponse} -> MessageResponse
messageResponse) (\s :: SendMessagesResponse
s@SendMessagesResponse' {} MessageResponse
a -> SendMessagesResponse
s {$sel:messageResponse:SendMessagesResponse' :: MessageResponse
messageResponse = MessageResponse
a} :: SendMessagesResponse)

instance Prelude.NFData SendMessagesResponse where
  rnf :: SendMessagesResponse -> ()
rnf SendMessagesResponse' {Int
MessageResponse
messageResponse :: MessageResponse
httpStatus :: Int
$sel:messageResponse:SendMessagesResponse' :: SendMessagesResponse -> MessageResponse
$sel:httpStatus:SendMessagesResponse' :: SendMessagesResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MessageResponse
messageResponse