{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.SendUsersMessageRequest
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Pinpoint.Types.SendUsersMessageRequest 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.DirectMessageConfiguration
import Amazonka.Pinpoint.Types.EndpointSendConfiguration
import Amazonka.Pinpoint.Types.TemplateConfiguration
import qualified Amazonka.Prelude as Prelude

-- | Specifies the configuration and other settings for a message to send to
-- all the endpoints that are associated with a list of users.
--
-- /See:/ 'newSendUsersMessageRequest' smart constructor.
data SendUsersMessageRequest = SendUsersMessageRequest'
  { -- | A map of custom attribute-value pairs. For a push notification, Amazon
    -- Pinpoint adds these attributes to the data.pinpoint object in the body
    -- of the notification payload. Amazon Pinpoint also provides these
    -- attributes in the events that it generates for users-messages
    -- deliveries.
    SendUsersMessageRequest -> Maybe (HashMap Text Text)
context :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The message template to use for the message.
    SendUsersMessageRequest -> Maybe TemplateConfiguration
templateConfiguration :: Prelude.Maybe TemplateConfiguration,
    -- | The unique identifier for tracing the message. This identifier is
    -- visible to message recipients.
    SendUsersMessageRequest -> Maybe Text
traceId :: Prelude.Maybe Prelude.Text,
    -- | The settings and content for the default message and any default
    -- messages that you defined for specific channels.
    SendUsersMessageRequest -> DirectMessageConfiguration
messageConfiguration :: DirectMessageConfiguration,
    -- | A map that associates user IDs with
    -- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
    -- objects. You can use an
    -- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
    -- object to tailor the message for a user by specifying settings such as
    -- content overrides and message variables.
    SendUsersMessageRequest -> HashMap Text EndpointSendConfiguration
users :: Prelude.HashMap Prelude.Text EndpointSendConfiguration
  }
  deriving (SendUsersMessageRequest -> SendUsersMessageRequest -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SendUsersMessageRequest -> SendUsersMessageRequest -> Bool
$c/= :: SendUsersMessageRequest -> SendUsersMessageRequest -> Bool
== :: SendUsersMessageRequest -> SendUsersMessageRequest -> Bool
$c== :: SendUsersMessageRequest -> SendUsersMessageRequest -> Bool
Prelude.Eq, ReadPrec [SendUsersMessageRequest]
ReadPrec SendUsersMessageRequest
Int -> ReadS SendUsersMessageRequest
ReadS [SendUsersMessageRequest]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SendUsersMessageRequest]
$creadListPrec :: ReadPrec [SendUsersMessageRequest]
readPrec :: ReadPrec SendUsersMessageRequest
$creadPrec :: ReadPrec SendUsersMessageRequest
readList :: ReadS [SendUsersMessageRequest]
$creadList :: ReadS [SendUsersMessageRequest]
readsPrec :: Int -> ReadS SendUsersMessageRequest
$creadsPrec :: Int -> ReadS SendUsersMessageRequest
Prelude.Read, Int -> SendUsersMessageRequest -> ShowS
[SendUsersMessageRequest] -> ShowS
SendUsersMessageRequest -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SendUsersMessageRequest] -> ShowS
$cshowList :: [SendUsersMessageRequest] -> ShowS
show :: SendUsersMessageRequest -> String
$cshow :: SendUsersMessageRequest -> String
showsPrec :: Int -> SendUsersMessageRequest -> ShowS
$cshowsPrec :: Int -> SendUsersMessageRequest -> ShowS
Prelude.Show, forall x. Rep SendUsersMessageRequest x -> SendUsersMessageRequest
forall x. SendUsersMessageRequest -> Rep SendUsersMessageRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SendUsersMessageRequest x -> SendUsersMessageRequest
$cfrom :: forall x. SendUsersMessageRequest -> Rep SendUsersMessageRequest x
Prelude.Generic)

-- |
-- Create a value of 'SendUsersMessageRequest' 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:
--
-- 'context', 'sendUsersMessageRequest_context' - A map of custom attribute-value pairs. For a push notification, Amazon
-- Pinpoint adds these attributes to the data.pinpoint object in the body
-- of the notification payload. Amazon Pinpoint also provides these
-- attributes in the events that it generates for users-messages
-- deliveries.
--
-- 'templateConfiguration', 'sendUsersMessageRequest_templateConfiguration' - The message template to use for the message.
--
-- 'traceId', 'sendUsersMessageRequest_traceId' - The unique identifier for tracing the message. This identifier is
-- visible to message recipients.
--
-- 'messageConfiguration', 'sendUsersMessageRequest_messageConfiguration' - The settings and content for the default message and any default
-- messages that you defined for specific channels.
--
-- 'users', 'sendUsersMessageRequest_users' - A map that associates user IDs with
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
-- objects. You can use an
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
-- object to tailor the message for a user by specifying settings such as
-- content overrides and message variables.
newSendUsersMessageRequest ::
  -- | 'messageConfiguration'
  DirectMessageConfiguration ->
  SendUsersMessageRequest
newSendUsersMessageRequest :: DirectMessageConfiguration -> SendUsersMessageRequest
newSendUsersMessageRequest DirectMessageConfiguration
pMessageConfiguration_ =
  SendUsersMessageRequest'
    { $sel:context:SendUsersMessageRequest' :: Maybe (HashMap Text Text)
context = forall a. Maybe a
Prelude.Nothing,
      $sel:templateConfiguration:SendUsersMessageRequest' :: Maybe TemplateConfiguration
templateConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:traceId:SendUsersMessageRequest' :: Maybe Text
traceId = forall a. Maybe a
Prelude.Nothing,
      $sel:messageConfiguration:SendUsersMessageRequest' :: DirectMessageConfiguration
messageConfiguration = DirectMessageConfiguration
pMessageConfiguration_,
      $sel:users:SendUsersMessageRequest' :: HashMap Text EndpointSendConfiguration
users = forall a. Monoid a => a
Prelude.mempty
    }

-- | A map of custom attribute-value pairs. For a push notification, Amazon
-- Pinpoint adds these attributes to the data.pinpoint object in the body
-- of the notification payload. Amazon Pinpoint also provides these
-- attributes in the events that it generates for users-messages
-- deliveries.
sendUsersMessageRequest_context :: Lens.Lens' SendUsersMessageRequest (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
sendUsersMessageRequest_context :: Lens' SendUsersMessageRequest (Maybe (HashMap Text Text))
sendUsersMessageRequest_context = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendUsersMessageRequest' {Maybe (HashMap Text Text)
context :: Maybe (HashMap Text Text)
$sel:context:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe (HashMap Text Text)
context} -> Maybe (HashMap Text Text)
context) (\s :: SendUsersMessageRequest
s@SendUsersMessageRequest' {} Maybe (HashMap Text Text)
a -> SendUsersMessageRequest
s {$sel:context:SendUsersMessageRequest' :: Maybe (HashMap Text Text)
context = Maybe (HashMap Text Text)
a} :: SendUsersMessageRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The message template to use for the message.
sendUsersMessageRequest_templateConfiguration :: Lens.Lens' SendUsersMessageRequest (Prelude.Maybe TemplateConfiguration)
sendUsersMessageRequest_templateConfiguration :: Lens' SendUsersMessageRequest (Maybe TemplateConfiguration)
sendUsersMessageRequest_templateConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendUsersMessageRequest' {Maybe TemplateConfiguration
templateConfiguration :: Maybe TemplateConfiguration
$sel:templateConfiguration:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe TemplateConfiguration
templateConfiguration} -> Maybe TemplateConfiguration
templateConfiguration) (\s :: SendUsersMessageRequest
s@SendUsersMessageRequest' {} Maybe TemplateConfiguration
a -> SendUsersMessageRequest
s {$sel:templateConfiguration:SendUsersMessageRequest' :: Maybe TemplateConfiguration
templateConfiguration = Maybe TemplateConfiguration
a} :: SendUsersMessageRequest)

-- | The unique identifier for tracing the message. This identifier is
-- visible to message recipients.
sendUsersMessageRequest_traceId :: Lens.Lens' SendUsersMessageRequest (Prelude.Maybe Prelude.Text)
sendUsersMessageRequest_traceId :: Lens' SendUsersMessageRequest (Maybe Text)
sendUsersMessageRequest_traceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendUsersMessageRequest' {Maybe Text
traceId :: Maybe Text
$sel:traceId:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe Text
traceId} -> Maybe Text
traceId) (\s :: SendUsersMessageRequest
s@SendUsersMessageRequest' {} Maybe Text
a -> SendUsersMessageRequest
s {$sel:traceId:SendUsersMessageRequest' :: Maybe Text
traceId = Maybe Text
a} :: SendUsersMessageRequest)

-- | The settings and content for the default message and any default
-- messages that you defined for specific channels.
sendUsersMessageRequest_messageConfiguration :: Lens.Lens' SendUsersMessageRequest DirectMessageConfiguration
sendUsersMessageRequest_messageConfiguration :: Lens' SendUsersMessageRequest DirectMessageConfiguration
sendUsersMessageRequest_messageConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendUsersMessageRequest' {DirectMessageConfiguration
messageConfiguration :: DirectMessageConfiguration
$sel:messageConfiguration:SendUsersMessageRequest' :: SendUsersMessageRequest -> DirectMessageConfiguration
messageConfiguration} -> DirectMessageConfiguration
messageConfiguration) (\s :: SendUsersMessageRequest
s@SendUsersMessageRequest' {} DirectMessageConfiguration
a -> SendUsersMessageRequest
s {$sel:messageConfiguration:SendUsersMessageRequest' :: DirectMessageConfiguration
messageConfiguration = DirectMessageConfiguration
a} :: SendUsersMessageRequest)

-- | A map that associates user IDs with
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
-- objects. You can use an
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
-- object to tailor the message for a user by specifying settings such as
-- content overrides and message variables.
sendUsersMessageRequest_users :: Lens.Lens' SendUsersMessageRequest (Prelude.HashMap Prelude.Text EndpointSendConfiguration)
sendUsersMessageRequest_users :: Lens'
  SendUsersMessageRequest (HashMap Text EndpointSendConfiguration)
sendUsersMessageRequest_users = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendUsersMessageRequest' {HashMap Text EndpointSendConfiguration
users :: HashMap Text EndpointSendConfiguration
$sel:users:SendUsersMessageRequest' :: SendUsersMessageRequest -> HashMap Text EndpointSendConfiguration
users} -> HashMap Text EndpointSendConfiguration
users) (\s :: SendUsersMessageRequest
s@SendUsersMessageRequest' {} HashMap Text EndpointSendConfiguration
a -> SendUsersMessageRequest
s {$sel:users:SendUsersMessageRequest' :: HashMap Text EndpointSendConfiguration
users = HashMap Text EndpointSendConfiguration
a} :: SendUsersMessageRequest) 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 Prelude.Hashable SendUsersMessageRequest where
  hashWithSalt :: Int -> SendUsersMessageRequest -> Int
hashWithSalt Int
_salt SendUsersMessageRequest' {Maybe Text
Maybe (HashMap Text Text)
Maybe TemplateConfiguration
HashMap Text EndpointSendConfiguration
DirectMessageConfiguration
users :: HashMap Text EndpointSendConfiguration
messageConfiguration :: DirectMessageConfiguration
traceId :: Maybe Text
templateConfiguration :: Maybe TemplateConfiguration
context :: Maybe (HashMap Text Text)
$sel:users:SendUsersMessageRequest' :: SendUsersMessageRequest -> HashMap Text EndpointSendConfiguration
$sel:messageConfiguration:SendUsersMessageRequest' :: SendUsersMessageRequest -> DirectMessageConfiguration
$sel:traceId:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe Text
$sel:templateConfiguration:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe TemplateConfiguration
$sel:context:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe (HashMap Text Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
context
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TemplateConfiguration
templateConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
traceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DirectMessageConfiguration
messageConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` HashMap Text EndpointSendConfiguration
users

instance Prelude.NFData SendUsersMessageRequest where
  rnf :: SendUsersMessageRequest -> ()
rnf SendUsersMessageRequest' {Maybe Text
Maybe (HashMap Text Text)
Maybe TemplateConfiguration
HashMap Text EndpointSendConfiguration
DirectMessageConfiguration
users :: HashMap Text EndpointSendConfiguration
messageConfiguration :: DirectMessageConfiguration
traceId :: Maybe Text
templateConfiguration :: Maybe TemplateConfiguration
context :: Maybe (HashMap Text Text)
$sel:users:SendUsersMessageRequest' :: SendUsersMessageRequest -> HashMap Text EndpointSendConfiguration
$sel:messageConfiguration:SendUsersMessageRequest' :: SendUsersMessageRequest -> DirectMessageConfiguration
$sel:traceId:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe Text
$sel:templateConfiguration:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe TemplateConfiguration
$sel:context:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe (HashMap Text Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
context
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TemplateConfiguration
templateConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
traceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DirectMessageConfiguration
messageConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf HashMap Text EndpointSendConfiguration
users

instance Data.ToJSON SendUsersMessageRequest where
  toJSON :: SendUsersMessageRequest -> Value
toJSON SendUsersMessageRequest' {Maybe Text
Maybe (HashMap Text Text)
Maybe TemplateConfiguration
HashMap Text EndpointSendConfiguration
DirectMessageConfiguration
users :: HashMap Text EndpointSendConfiguration
messageConfiguration :: DirectMessageConfiguration
traceId :: Maybe Text
templateConfiguration :: Maybe TemplateConfiguration
context :: Maybe (HashMap Text Text)
$sel:users:SendUsersMessageRequest' :: SendUsersMessageRequest -> HashMap Text EndpointSendConfiguration
$sel:messageConfiguration:SendUsersMessageRequest' :: SendUsersMessageRequest -> DirectMessageConfiguration
$sel:traceId:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe Text
$sel:templateConfiguration:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe TemplateConfiguration
$sel:context:SendUsersMessageRequest' :: SendUsersMessageRequest -> Maybe (HashMap Text Text)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Context" 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 (HashMap Text Text)
context,
            (Key
"TemplateConfiguration" 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 TemplateConfiguration
templateConfiguration,
            (Key
"TraceId" 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
traceId,
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"MessageConfiguration"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DirectMessageConfiguration
messageConfiguration
              ),
            forall a. a -> Maybe a
Prelude.Just (Key
"Users" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= HashMap Text EndpointSendConfiguration
users)
          ]
      )