{-# 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.MessageRequest
-- 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.MessageRequest 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.AddressConfiguration
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.
--
-- /See:/ 'newMessageRequest' smart constructor.
data MessageRequest = MessageRequest'
  { -- | A map of key-value pairs, where each key is an address and each value is
    -- an
    -- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-addressconfiguration AddressConfiguration>
    -- object. An address can be a push notification token, a phone number, or
    -- an email address. You can use an
    -- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-addressconfiguration AddressConfiguration>
    -- object to tailor the message for an address by specifying settings such
    -- as content overrides and message variables.
    MessageRequest -> Maybe (HashMap Text AddressConfiguration)
addresses :: Prelude.Maybe (Prelude.HashMap Prelude.Text AddressConfiguration),
    -- | A map of custom attributes to attach to the message. For a push
    -- notification, this payload is added to the data.pinpoint object. For an
    -- email or text message, this payload is added to email\/SMS delivery
    -- receipt event attributes.
    MessageRequest -> Maybe (HashMap Text Text)
context :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | A map of key-value pairs, where each key is an endpoint ID and each
    -- value is an
    -- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
    -- object. 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 an endpoint by specifying settings such
    -- as content overrides and message variables.
    MessageRequest -> Maybe (HashMap Text EndpointSendConfiguration)
endpoints :: Prelude.Maybe (Prelude.HashMap Prelude.Text EndpointSendConfiguration),
    -- | The message template to use for the message.
    MessageRequest -> Maybe TemplateConfiguration
templateConfiguration :: Prelude.Maybe TemplateConfiguration,
    -- | The unique identifier for tracing the message. This identifier is
    -- visible to message recipients.
    MessageRequest -> 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.
    MessageRequest -> DirectMessageConfiguration
messageConfiguration :: DirectMessageConfiguration
  }
  deriving (MessageRequest -> MessageRequest -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MessageRequest -> MessageRequest -> Bool
$c/= :: MessageRequest -> MessageRequest -> Bool
== :: MessageRequest -> MessageRequest -> Bool
$c== :: MessageRequest -> MessageRequest -> Bool
Prelude.Eq, ReadPrec [MessageRequest]
ReadPrec MessageRequest
Int -> ReadS MessageRequest
ReadS [MessageRequest]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MessageRequest]
$creadListPrec :: ReadPrec [MessageRequest]
readPrec :: ReadPrec MessageRequest
$creadPrec :: ReadPrec MessageRequest
readList :: ReadS [MessageRequest]
$creadList :: ReadS [MessageRequest]
readsPrec :: Int -> ReadS MessageRequest
$creadsPrec :: Int -> ReadS MessageRequest
Prelude.Read, Int -> MessageRequest -> ShowS
[MessageRequest] -> ShowS
MessageRequest -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessageRequest] -> ShowS
$cshowList :: [MessageRequest] -> ShowS
show :: MessageRequest -> String
$cshow :: MessageRequest -> String
showsPrec :: Int -> MessageRequest -> ShowS
$cshowsPrec :: Int -> MessageRequest -> ShowS
Prelude.Show, forall x. Rep MessageRequest x -> MessageRequest
forall x. MessageRequest -> Rep MessageRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MessageRequest x -> MessageRequest
$cfrom :: forall x. MessageRequest -> Rep MessageRequest x
Prelude.Generic)

-- |
-- Create a value of 'MessageRequest' 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:
--
-- 'addresses', 'messageRequest_addresses' - A map of key-value pairs, where each key is an address and each value is
-- an
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-addressconfiguration AddressConfiguration>
-- object. An address can be a push notification token, a phone number, or
-- an email address. You can use an
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-addressconfiguration AddressConfiguration>
-- object to tailor the message for an address by specifying settings such
-- as content overrides and message variables.
--
-- 'context', 'messageRequest_context' - A map of custom attributes to attach to the message. For a push
-- notification, this payload is added to the data.pinpoint object. For an
-- email or text message, this payload is added to email\/SMS delivery
-- receipt event attributes.
--
-- 'endpoints', 'messageRequest_endpoints' - A map of key-value pairs, where each key is an endpoint ID and each
-- value is an
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
-- object. 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 an endpoint by specifying settings such
-- as content overrides and message variables.
--
-- 'templateConfiguration', 'messageRequest_templateConfiguration' - The message template to use for the message.
--
-- 'traceId', 'messageRequest_traceId' - The unique identifier for tracing the message. This identifier is
-- visible to message recipients.
--
-- 'messageConfiguration', 'messageRequest_messageConfiguration' - The settings and content for the default message and any default
-- messages that you defined for specific channels.
newMessageRequest ::
  -- | 'messageConfiguration'
  DirectMessageConfiguration ->
  MessageRequest
newMessageRequest :: DirectMessageConfiguration -> MessageRequest
newMessageRequest DirectMessageConfiguration
pMessageConfiguration_ =
  MessageRequest'
    { $sel:addresses:MessageRequest' :: Maybe (HashMap Text AddressConfiguration)
addresses = forall a. Maybe a
Prelude.Nothing,
      $sel:context:MessageRequest' :: Maybe (HashMap Text Text)
context = forall a. Maybe a
Prelude.Nothing,
      $sel:endpoints:MessageRequest' :: Maybe (HashMap Text EndpointSendConfiguration)
endpoints = forall a. Maybe a
Prelude.Nothing,
      $sel:templateConfiguration:MessageRequest' :: Maybe TemplateConfiguration
templateConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:traceId:MessageRequest' :: Maybe Text
traceId = forall a. Maybe a
Prelude.Nothing,
      $sel:messageConfiguration:MessageRequest' :: DirectMessageConfiguration
messageConfiguration = DirectMessageConfiguration
pMessageConfiguration_
    }

-- | A map of key-value pairs, where each key is an address and each value is
-- an
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-addressconfiguration AddressConfiguration>
-- object. An address can be a push notification token, a phone number, or
-- an email address. You can use an
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-addressconfiguration AddressConfiguration>
-- object to tailor the message for an address by specifying settings such
-- as content overrides and message variables.
messageRequest_addresses :: Lens.Lens' MessageRequest (Prelude.Maybe (Prelude.HashMap Prelude.Text AddressConfiguration))
messageRequest_addresses :: Lens' MessageRequest (Maybe (HashMap Text AddressConfiguration))
messageRequest_addresses = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MessageRequest' {Maybe (HashMap Text AddressConfiguration)
addresses :: Maybe (HashMap Text AddressConfiguration)
$sel:addresses:MessageRequest' :: MessageRequest -> Maybe (HashMap Text AddressConfiguration)
addresses} -> Maybe (HashMap Text AddressConfiguration)
addresses) (\s :: MessageRequest
s@MessageRequest' {} Maybe (HashMap Text AddressConfiguration)
a -> MessageRequest
s {$sel:addresses:MessageRequest' :: Maybe (HashMap Text AddressConfiguration)
addresses = Maybe (HashMap Text AddressConfiguration)
a} :: MessageRequest) 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

-- | A map of custom attributes to attach to the message. For a push
-- notification, this payload is added to the data.pinpoint object. For an
-- email or text message, this payload is added to email\/SMS delivery
-- receipt event attributes.
messageRequest_context :: Lens.Lens' MessageRequest (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
messageRequest_context :: Lens' MessageRequest (Maybe (HashMap Text Text))
messageRequest_context = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MessageRequest' {Maybe (HashMap Text Text)
context :: Maybe (HashMap Text Text)
$sel:context:MessageRequest' :: MessageRequest -> Maybe (HashMap Text Text)
context} -> Maybe (HashMap Text Text)
context) (\s :: MessageRequest
s@MessageRequest' {} Maybe (HashMap Text Text)
a -> MessageRequest
s {$sel:context:MessageRequest' :: Maybe (HashMap Text Text)
context = Maybe (HashMap Text Text)
a} :: MessageRequest) 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

-- | A map of key-value pairs, where each key is an endpoint ID and each
-- value is an
-- <https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#apps-application-id-messages-model-endpointsendconfiguration EndpointSendConfiguration>
-- object. 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 an endpoint by specifying settings such
-- as content overrides and message variables.
messageRequest_endpoints :: Lens.Lens' MessageRequest (Prelude.Maybe (Prelude.HashMap Prelude.Text EndpointSendConfiguration))
messageRequest_endpoints :: Lens'
  MessageRequest (Maybe (HashMap Text EndpointSendConfiguration))
messageRequest_endpoints = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MessageRequest' {Maybe (HashMap Text EndpointSendConfiguration)
endpoints :: Maybe (HashMap Text EndpointSendConfiguration)
$sel:endpoints:MessageRequest' :: MessageRequest -> Maybe (HashMap Text EndpointSendConfiguration)
endpoints} -> Maybe (HashMap Text EndpointSendConfiguration)
endpoints) (\s :: MessageRequest
s@MessageRequest' {} Maybe (HashMap Text EndpointSendConfiguration)
a -> MessageRequest
s {$sel:endpoints:MessageRequest' :: Maybe (HashMap Text EndpointSendConfiguration)
endpoints = Maybe (HashMap Text EndpointSendConfiguration)
a} :: MessageRequest) 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.
messageRequest_templateConfiguration :: Lens.Lens' MessageRequest (Prelude.Maybe TemplateConfiguration)
messageRequest_templateConfiguration :: Lens' MessageRequest (Maybe TemplateConfiguration)
messageRequest_templateConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MessageRequest' {Maybe TemplateConfiguration
templateConfiguration :: Maybe TemplateConfiguration
$sel:templateConfiguration:MessageRequest' :: MessageRequest -> Maybe TemplateConfiguration
templateConfiguration} -> Maybe TemplateConfiguration
templateConfiguration) (\s :: MessageRequest
s@MessageRequest' {} Maybe TemplateConfiguration
a -> MessageRequest
s {$sel:templateConfiguration:MessageRequest' :: Maybe TemplateConfiguration
templateConfiguration = Maybe TemplateConfiguration
a} :: MessageRequest)

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

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

instance Prelude.Hashable MessageRequest where
  hashWithSalt :: Int -> MessageRequest -> Int
hashWithSalt Int
_salt MessageRequest' {Maybe Text
Maybe (HashMap Text Text)
Maybe (HashMap Text AddressConfiguration)
Maybe (HashMap Text EndpointSendConfiguration)
Maybe TemplateConfiguration
DirectMessageConfiguration
messageConfiguration :: DirectMessageConfiguration
traceId :: Maybe Text
templateConfiguration :: Maybe TemplateConfiguration
endpoints :: Maybe (HashMap Text EndpointSendConfiguration)
context :: Maybe (HashMap Text Text)
addresses :: Maybe (HashMap Text AddressConfiguration)
$sel:messageConfiguration:MessageRequest' :: MessageRequest -> DirectMessageConfiguration
$sel:traceId:MessageRequest' :: MessageRequest -> Maybe Text
$sel:templateConfiguration:MessageRequest' :: MessageRequest -> Maybe TemplateConfiguration
$sel:endpoints:MessageRequest' :: MessageRequest -> Maybe (HashMap Text EndpointSendConfiguration)
$sel:context:MessageRequest' :: MessageRequest -> Maybe (HashMap Text Text)
$sel:addresses:MessageRequest' :: MessageRequest -> Maybe (HashMap Text AddressConfiguration)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text AddressConfiguration)
addresses
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
context
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text EndpointSendConfiguration)
endpoints
      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

instance Prelude.NFData MessageRequest where
  rnf :: MessageRequest -> ()
rnf MessageRequest' {Maybe Text
Maybe (HashMap Text Text)
Maybe (HashMap Text AddressConfiguration)
Maybe (HashMap Text EndpointSendConfiguration)
Maybe TemplateConfiguration
DirectMessageConfiguration
messageConfiguration :: DirectMessageConfiguration
traceId :: Maybe Text
templateConfiguration :: Maybe TemplateConfiguration
endpoints :: Maybe (HashMap Text EndpointSendConfiguration)
context :: Maybe (HashMap Text Text)
addresses :: Maybe (HashMap Text AddressConfiguration)
$sel:messageConfiguration:MessageRequest' :: MessageRequest -> DirectMessageConfiguration
$sel:traceId:MessageRequest' :: MessageRequest -> Maybe Text
$sel:templateConfiguration:MessageRequest' :: MessageRequest -> Maybe TemplateConfiguration
$sel:endpoints:MessageRequest' :: MessageRequest -> Maybe (HashMap Text EndpointSendConfiguration)
$sel:context:MessageRequest' :: MessageRequest -> Maybe (HashMap Text Text)
$sel:addresses:MessageRequest' :: MessageRequest -> Maybe (HashMap Text AddressConfiguration)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text AddressConfiguration)
addresses
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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 (HashMap Text EndpointSendConfiguration)
endpoints
      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

instance Data.ToJSON MessageRequest where
  toJSON :: MessageRequest -> Value
toJSON MessageRequest' {Maybe Text
Maybe (HashMap Text Text)
Maybe (HashMap Text AddressConfiguration)
Maybe (HashMap Text EndpointSendConfiguration)
Maybe TemplateConfiguration
DirectMessageConfiguration
messageConfiguration :: DirectMessageConfiguration
traceId :: Maybe Text
templateConfiguration :: Maybe TemplateConfiguration
endpoints :: Maybe (HashMap Text EndpointSendConfiguration)
context :: Maybe (HashMap Text Text)
addresses :: Maybe (HashMap Text AddressConfiguration)
$sel:messageConfiguration:MessageRequest' :: MessageRequest -> DirectMessageConfiguration
$sel:traceId:MessageRequest' :: MessageRequest -> Maybe Text
$sel:templateConfiguration:MessageRequest' :: MessageRequest -> Maybe TemplateConfiguration
$sel:endpoints:MessageRequest' :: MessageRequest -> Maybe (HashMap Text EndpointSendConfiguration)
$sel:context:MessageRequest' :: MessageRequest -> Maybe (HashMap Text Text)
$sel:addresses:MessageRequest' :: MessageRequest -> Maybe (HashMap Text AddressConfiguration)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Addresses" 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 AddressConfiguration)
addresses,
            (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
"Endpoints" 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 EndpointSendConfiguration)
endpoints,
            (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
              )
          ]
      )