{-# 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.Activity
-- 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.Activity 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.ConditionalSplitActivity
import Amazonka.Pinpoint.Types.ContactCenterActivity
import Amazonka.Pinpoint.Types.CustomMessageActivity
import Amazonka.Pinpoint.Types.EmailMessageActivity
import Amazonka.Pinpoint.Types.HoldoutActivity
import Amazonka.Pinpoint.Types.MultiConditionalSplitActivity
import Amazonka.Pinpoint.Types.PushMessageActivity
import Amazonka.Pinpoint.Types.RandomSplitActivity
import Amazonka.Pinpoint.Types.SMSMessageActivity
import Amazonka.Pinpoint.Types.WaitActivity
import qualified Amazonka.Prelude as Prelude

-- | Specifies the configuration and other settings for an activity in a
-- journey.
--
-- /See:/ 'newActivity' smart constructor.
data Activity = Activity'
  { -- | The settings for a custom message activity. This type of activity calls
    -- an AWS Lambda function or web hook that sends messages to participants.
    Activity -> Maybe CustomMessageActivity
custom :: Prelude.Maybe CustomMessageActivity,
    -- | The settings for a yes\/no split activity. This type of activity sends
    -- participants down one of two paths in a journey, based on conditions
    -- that you specify.
    Activity -> Maybe ConditionalSplitActivity
conditionalSplit :: Prelude.Maybe ConditionalSplitActivity,
    -- | The settings for a connect activity. This type of activity initiates a
    -- contact center call to participants.
    Activity -> Maybe ContactCenterActivity
contactCenter :: Prelude.Maybe ContactCenterActivity,
    -- | The custom description of the activity.
    Activity -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The settings for an email activity. This type of activity sends an email
    -- message to participants.
    Activity -> Maybe EmailMessageActivity
email :: Prelude.Maybe EmailMessageActivity,
    -- | The settings for a holdout activity. This type of activity stops a
    -- journey for a specified percentage of participants.
    Activity -> Maybe HoldoutActivity
holdout :: Prelude.Maybe HoldoutActivity,
    -- | The settings for a multivariate split activity. This type of activity
    -- sends participants down one of as many as five paths (including a
    -- default /Else/ path) in a journey, based on conditions that you specify.
    Activity -> Maybe MultiConditionalSplitActivity
multiCondition :: Prelude.Maybe MultiConditionalSplitActivity,
    -- | The settings for a push notification activity. This type of activity
    -- sends a push notification to participants.
    Activity -> Maybe PushMessageActivity
push :: Prelude.Maybe PushMessageActivity,
    -- | The settings for a random split activity. This type of activity randomly
    -- sends specified percentages of participants down one of as many as five
    -- paths in a journey, based on conditions that you specify.
    Activity -> Maybe RandomSplitActivity
randomSplit :: Prelude.Maybe RandomSplitActivity,
    -- | The settings for an SMS activity. This type of activity sends a text
    -- message to participants.
    Activity -> Maybe SMSMessageActivity
sms :: Prelude.Maybe SMSMessageActivity,
    -- | The settings for a wait activity. This type of activity waits for a
    -- certain amount of time or until a specific date and time before moving
    -- participants to the next activity in a journey.
    Activity -> Maybe WaitActivity
wait :: Prelude.Maybe WaitActivity
  }
  deriving (Activity -> Activity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Activity -> Activity -> Bool
$c/= :: Activity -> Activity -> Bool
== :: Activity -> Activity -> Bool
$c== :: Activity -> Activity -> Bool
Prelude.Eq, ReadPrec [Activity]
ReadPrec Activity
Int -> ReadS Activity
ReadS [Activity]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Activity]
$creadListPrec :: ReadPrec [Activity]
readPrec :: ReadPrec Activity
$creadPrec :: ReadPrec Activity
readList :: ReadS [Activity]
$creadList :: ReadS [Activity]
readsPrec :: Int -> ReadS Activity
$creadsPrec :: Int -> ReadS Activity
Prelude.Read, Int -> Activity -> ShowS
[Activity] -> ShowS
Activity -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Activity] -> ShowS
$cshowList :: [Activity] -> ShowS
show :: Activity -> String
$cshow :: Activity -> String
showsPrec :: Int -> Activity -> ShowS
$cshowsPrec :: Int -> Activity -> ShowS
Prelude.Show, forall x. Rep Activity x -> Activity
forall x. Activity -> Rep Activity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Activity x -> Activity
$cfrom :: forall x. Activity -> Rep Activity x
Prelude.Generic)

-- |
-- Create a value of 'Activity' 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:
--
-- 'custom', 'activity_custom' - The settings for a custom message activity. This type of activity calls
-- an AWS Lambda function or web hook that sends messages to participants.
--
-- 'conditionalSplit', 'activity_conditionalSplit' - The settings for a yes\/no split activity. This type of activity sends
-- participants down one of two paths in a journey, based on conditions
-- that you specify.
--
-- 'contactCenter', 'activity_contactCenter' - The settings for a connect activity. This type of activity initiates a
-- contact center call to participants.
--
-- 'description', 'activity_description' - The custom description of the activity.
--
-- 'email', 'activity_email' - The settings for an email activity. This type of activity sends an email
-- message to participants.
--
-- 'holdout', 'activity_holdout' - The settings for a holdout activity. This type of activity stops a
-- journey for a specified percentage of participants.
--
-- 'multiCondition', 'activity_multiCondition' - The settings for a multivariate split activity. This type of activity
-- sends participants down one of as many as five paths (including a
-- default /Else/ path) in a journey, based on conditions that you specify.
--
-- 'push', 'activity_push' - The settings for a push notification activity. This type of activity
-- sends a push notification to participants.
--
-- 'randomSplit', 'activity_randomSplit' - The settings for a random split activity. This type of activity randomly
-- sends specified percentages of participants down one of as many as five
-- paths in a journey, based on conditions that you specify.
--
-- 'sms', 'activity_sms' - The settings for an SMS activity. This type of activity sends a text
-- message to participants.
--
-- 'wait', 'activity_wait' - The settings for a wait activity. This type of activity waits for a
-- certain amount of time or until a specific date and time before moving
-- participants to the next activity in a journey.
newActivity ::
  Activity
newActivity :: Activity
newActivity =
  Activity'
    { $sel:custom:Activity' :: Maybe CustomMessageActivity
custom = forall a. Maybe a
Prelude.Nothing,
      $sel:conditionalSplit:Activity' :: Maybe ConditionalSplitActivity
conditionalSplit = forall a. Maybe a
Prelude.Nothing,
      $sel:contactCenter:Activity' :: Maybe ContactCenterActivity
contactCenter = forall a. Maybe a
Prelude.Nothing,
      $sel:description:Activity' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:email:Activity' :: Maybe EmailMessageActivity
email = forall a. Maybe a
Prelude.Nothing,
      $sel:holdout:Activity' :: Maybe HoldoutActivity
holdout = forall a. Maybe a
Prelude.Nothing,
      $sel:multiCondition:Activity' :: Maybe MultiConditionalSplitActivity
multiCondition = forall a. Maybe a
Prelude.Nothing,
      $sel:push:Activity' :: Maybe PushMessageActivity
push = forall a. Maybe a
Prelude.Nothing,
      $sel:randomSplit:Activity' :: Maybe RandomSplitActivity
randomSplit = forall a. Maybe a
Prelude.Nothing,
      $sel:sms:Activity' :: Maybe SMSMessageActivity
sms = forall a. Maybe a
Prelude.Nothing,
      $sel:wait:Activity' :: Maybe WaitActivity
wait = forall a. Maybe a
Prelude.Nothing
    }

-- | The settings for a custom message activity. This type of activity calls
-- an AWS Lambda function or web hook that sends messages to participants.
activity_custom :: Lens.Lens' Activity (Prelude.Maybe CustomMessageActivity)
activity_custom :: Lens' Activity (Maybe CustomMessageActivity)
activity_custom = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe CustomMessageActivity
custom :: Maybe CustomMessageActivity
$sel:custom:Activity' :: Activity -> Maybe CustomMessageActivity
custom} -> Maybe CustomMessageActivity
custom) (\s :: Activity
s@Activity' {} Maybe CustomMessageActivity
a -> Activity
s {$sel:custom:Activity' :: Maybe CustomMessageActivity
custom = Maybe CustomMessageActivity
a} :: Activity)

-- | The settings for a yes\/no split activity. This type of activity sends
-- participants down one of two paths in a journey, based on conditions
-- that you specify.
activity_conditionalSplit :: Lens.Lens' Activity (Prelude.Maybe ConditionalSplitActivity)
activity_conditionalSplit :: Lens' Activity (Maybe ConditionalSplitActivity)
activity_conditionalSplit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe ConditionalSplitActivity
conditionalSplit :: Maybe ConditionalSplitActivity
$sel:conditionalSplit:Activity' :: Activity -> Maybe ConditionalSplitActivity
conditionalSplit} -> Maybe ConditionalSplitActivity
conditionalSplit) (\s :: Activity
s@Activity' {} Maybe ConditionalSplitActivity
a -> Activity
s {$sel:conditionalSplit:Activity' :: Maybe ConditionalSplitActivity
conditionalSplit = Maybe ConditionalSplitActivity
a} :: Activity)

-- | The settings for a connect activity. This type of activity initiates a
-- contact center call to participants.
activity_contactCenter :: Lens.Lens' Activity (Prelude.Maybe ContactCenterActivity)
activity_contactCenter :: Lens' Activity (Maybe ContactCenterActivity)
activity_contactCenter = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe ContactCenterActivity
contactCenter :: Maybe ContactCenterActivity
$sel:contactCenter:Activity' :: Activity -> Maybe ContactCenterActivity
contactCenter} -> Maybe ContactCenterActivity
contactCenter) (\s :: Activity
s@Activity' {} Maybe ContactCenterActivity
a -> Activity
s {$sel:contactCenter:Activity' :: Maybe ContactCenterActivity
contactCenter = Maybe ContactCenterActivity
a} :: Activity)

-- | The custom description of the activity.
activity_description :: Lens.Lens' Activity (Prelude.Maybe Prelude.Text)
activity_description :: Lens' Activity (Maybe Text)
activity_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe Text
description :: Maybe Text
$sel:description:Activity' :: Activity -> Maybe Text
description} -> Maybe Text
description) (\s :: Activity
s@Activity' {} Maybe Text
a -> Activity
s {$sel:description:Activity' :: Maybe Text
description = Maybe Text
a} :: Activity)

-- | The settings for an email activity. This type of activity sends an email
-- message to participants.
activity_email :: Lens.Lens' Activity (Prelude.Maybe EmailMessageActivity)
activity_email :: Lens' Activity (Maybe EmailMessageActivity)
activity_email = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe EmailMessageActivity
email :: Maybe EmailMessageActivity
$sel:email:Activity' :: Activity -> Maybe EmailMessageActivity
email} -> Maybe EmailMessageActivity
email) (\s :: Activity
s@Activity' {} Maybe EmailMessageActivity
a -> Activity
s {$sel:email:Activity' :: Maybe EmailMessageActivity
email = Maybe EmailMessageActivity
a} :: Activity)

-- | The settings for a holdout activity. This type of activity stops a
-- journey for a specified percentage of participants.
activity_holdout :: Lens.Lens' Activity (Prelude.Maybe HoldoutActivity)
activity_holdout :: Lens' Activity (Maybe HoldoutActivity)
activity_holdout = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe HoldoutActivity
holdout :: Maybe HoldoutActivity
$sel:holdout:Activity' :: Activity -> Maybe HoldoutActivity
holdout} -> Maybe HoldoutActivity
holdout) (\s :: Activity
s@Activity' {} Maybe HoldoutActivity
a -> Activity
s {$sel:holdout:Activity' :: Maybe HoldoutActivity
holdout = Maybe HoldoutActivity
a} :: Activity)

-- | The settings for a multivariate split activity. This type of activity
-- sends participants down one of as many as five paths (including a
-- default /Else/ path) in a journey, based on conditions that you specify.
activity_multiCondition :: Lens.Lens' Activity (Prelude.Maybe MultiConditionalSplitActivity)
activity_multiCondition :: Lens' Activity (Maybe MultiConditionalSplitActivity)
activity_multiCondition = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe MultiConditionalSplitActivity
multiCondition :: Maybe MultiConditionalSplitActivity
$sel:multiCondition:Activity' :: Activity -> Maybe MultiConditionalSplitActivity
multiCondition} -> Maybe MultiConditionalSplitActivity
multiCondition) (\s :: Activity
s@Activity' {} Maybe MultiConditionalSplitActivity
a -> Activity
s {$sel:multiCondition:Activity' :: Maybe MultiConditionalSplitActivity
multiCondition = Maybe MultiConditionalSplitActivity
a} :: Activity)

-- | The settings for a push notification activity. This type of activity
-- sends a push notification to participants.
activity_push :: Lens.Lens' Activity (Prelude.Maybe PushMessageActivity)
activity_push :: Lens' Activity (Maybe PushMessageActivity)
activity_push = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe PushMessageActivity
push :: Maybe PushMessageActivity
$sel:push:Activity' :: Activity -> Maybe PushMessageActivity
push} -> Maybe PushMessageActivity
push) (\s :: Activity
s@Activity' {} Maybe PushMessageActivity
a -> Activity
s {$sel:push:Activity' :: Maybe PushMessageActivity
push = Maybe PushMessageActivity
a} :: Activity)

-- | The settings for a random split activity. This type of activity randomly
-- sends specified percentages of participants down one of as many as five
-- paths in a journey, based on conditions that you specify.
activity_randomSplit :: Lens.Lens' Activity (Prelude.Maybe RandomSplitActivity)
activity_randomSplit :: Lens' Activity (Maybe RandomSplitActivity)
activity_randomSplit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe RandomSplitActivity
randomSplit :: Maybe RandomSplitActivity
$sel:randomSplit:Activity' :: Activity -> Maybe RandomSplitActivity
randomSplit} -> Maybe RandomSplitActivity
randomSplit) (\s :: Activity
s@Activity' {} Maybe RandomSplitActivity
a -> Activity
s {$sel:randomSplit:Activity' :: Maybe RandomSplitActivity
randomSplit = Maybe RandomSplitActivity
a} :: Activity)

-- | The settings for an SMS activity. This type of activity sends a text
-- message to participants.
activity_sms :: Lens.Lens' Activity (Prelude.Maybe SMSMessageActivity)
activity_sms :: Lens' Activity (Maybe SMSMessageActivity)
activity_sms = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe SMSMessageActivity
sms :: Maybe SMSMessageActivity
$sel:sms:Activity' :: Activity -> Maybe SMSMessageActivity
sms} -> Maybe SMSMessageActivity
sms) (\s :: Activity
s@Activity' {} Maybe SMSMessageActivity
a -> Activity
s {$sel:sms:Activity' :: Maybe SMSMessageActivity
sms = Maybe SMSMessageActivity
a} :: Activity)

-- | The settings for a wait activity. This type of activity waits for a
-- certain amount of time or until a specific date and time before moving
-- participants to the next activity in a journey.
activity_wait :: Lens.Lens' Activity (Prelude.Maybe WaitActivity)
activity_wait :: Lens' Activity (Maybe WaitActivity)
activity_wait = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe WaitActivity
wait :: Maybe WaitActivity
$sel:wait:Activity' :: Activity -> Maybe WaitActivity
wait} -> Maybe WaitActivity
wait) (\s :: Activity
s@Activity' {} Maybe WaitActivity
a -> Activity
s {$sel:wait:Activity' :: Maybe WaitActivity
wait = Maybe WaitActivity
a} :: Activity)

instance Data.FromJSON Activity where
  parseJSON :: Value -> Parser Activity
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Activity"
      ( \Object
x ->
          Maybe CustomMessageActivity
-> Maybe ConditionalSplitActivity
-> Maybe ContactCenterActivity
-> Maybe Text
-> Maybe EmailMessageActivity
-> Maybe HoldoutActivity
-> Maybe MultiConditionalSplitActivity
-> Maybe PushMessageActivity
-> Maybe RandomSplitActivity
-> Maybe SMSMessageActivity
-> Maybe WaitActivity
-> Activity
Activity'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CUSTOM")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ConditionalSplit")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ContactCenter")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Description")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"EMAIL")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Holdout")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MultiCondition")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"PUSH")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"RandomSplit")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"SMS")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Wait")
      )

instance Prelude.Hashable Activity where
  hashWithSalt :: Int -> Activity -> Int
hashWithSalt Int
_salt Activity' {Maybe Text
Maybe ContactCenterActivity
Maybe HoldoutActivity
Maybe CustomMessageActivity
Maybe EmailMessageActivity
Maybe PushMessageActivity
Maybe RandomSplitActivity
Maybe SMSMessageActivity
Maybe WaitActivity
Maybe MultiConditionalSplitActivity
Maybe ConditionalSplitActivity
wait :: Maybe WaitActivity
sms :: Maybe SMSMessageActivity
randomSplit :: Maybe RandomSplitActivity
push :: Maybe PushMessageActivity
multiCondition :: Maybe MultiConditionalSplitActivity
holdout :: Maybe HoldoutActivity
email :: Maybe EmailMessageActivity
description :: Maybe Text
contactCenter :: Maybe ContactCenterActivity
conditionalSplit :: Maybe ConditionalSplitActivity
custom :: Maybe CustomMessageActivity
$sel:wait:Activity' :: Activity -> Maybe WaitActivity
$sel:sms:Activity' :: Activity -> Maybe SMSMessageActivity
$sel:randomSplit:Activity' :: Activity -> Maybe RandomSplitActivity
$sel:push:Activity' :: Activity -> Maybe PushMessageActivity
$sel:multiCondition:Activity' :: Activity -> Maybe MultiConditionalSplitActivity
$sel:holdout:Activity' :: Activity -> Maybe HoldoutActivity
$sel:email:Activity' :: Activity -> Maybe EmailMessageActivity
$sel:description:Activity' :: Activity -> Maybe Text
$sel:contactCenter:Activity' :: Activity -> Maybe ContactCenterActivity
$sel:conditionalSplit:Activity' :: Activity -> Maybe ConditionalSplitActivity
$sel:custom:Activity' :: Activity -> Maybe CustomMessageActivity
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CustomMessageActivity
custom
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ConditionalSplitActivity
conditionalSplit
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ContactCenterActivity
contactCenter
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EmailMessageActivity
email
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe HoldoutActivity
holdout
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MultiConditionalSplitActivity
multiCondition
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PushMessageActivity
push
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RandomSplitActivity
randomSplit
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SMSMessageActivity
sms
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe WaitActivity
wait

instance Prelude.NFData Activity where
  rnf :: Activity -> ()
rnf Activity' {Maybe Text
Maybe ContactCenterActivity
Maybe HoldoutActivity
Maybe CustomMessageActivity
Maybe EmailMessageActivity
Maybe PushMessageActivity
Maybe RandomSplitActivity
Maybe SMSMessageActivity
Maybe WaitActivity
Maybe MultiConditionalSplitActivity
Maybe ConditionalSplitActivity
wait :: Maybe WaitActivity
sms :: Maybe SMSMessageActivity
randomSplit :: Maybe RandomSplitActivity
push :: Maybe PushMessageActivity
multiCondition :: Maybe MultiConditionalSplitActivity
holdout :: Maybe HoldoutActivity
email :: Maybe EmailMessageActivity
description :: Maybe Text
contactCenter :: Maybe ContactCenterActivity
conditionalSplit :: Maybe ConditionalSplitActivity
custom :: Maybe CustomMessageActivity
$sel:wait:Activity' :: Activity -> Maybe WaitActivity
$sel:sms:Activity' :: Activity -> Maybe SMSMessageActivity
$sel:randomSplit:Activity' :: Activity -> Maybe RandomSplitActivity
$sel:push:Activity' :: Activity -> Maybe PushMessageActivity
$sel:multiCondition:Activity' :: Activity -> Maybe MultiConditionalSplitActivity
$sel:holdout:Activity' :: Activity -> Maybe HoldoutActivity
$sel:email:Activity' :: Activity -> Maybe EmailMessageActivity
$sel:description:Activity' :: Activity -> Maybe Text
$sel:contactCenter:Activity' :: Activity -> Maybe ContactCenterActivity
$sel:conditionalSplit:Activity' :: Activity -> Maybe ConditionalSplitActivity
$sel:custom:Activity' :: Activity -> Maybe CustomMessageActivity
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe CustomMessageActivity
custom
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ConditionalSplitActivity
conditionalSplit
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ContactCenterActivity
contactCenter
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EmailMessageActivity
email
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe HoldoutActivity
holdout
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MultiConditionalSplitActivity
multiCondition
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PushMessageActivity
push
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RandomSplitActivity
randomSplit
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SMSMessageActivity
sms
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe WaitActivity
wait

instance Data.ToJSON Activity where
  toJSON :: Activity -> Value
toJSON Activity' {Maybe Text
Maybe ContactCenterActivity
Maybe HoldoutActivity
Maybe CustomMessageActivity
Maybe EmailMessageActivity
Maybe PushMessageActivity
Maybe RandomSplitActivity
Maybe SMSMessageActivity
Maybe WaitActivity
Maybe MultiConditionalSplitActivity
Maybe ConditionalSplitActivity
wait :: Maybe WaitActivity
sms :: Maybe SMSMessageActivity
randomSplit :: Maybe RandomSplitActivity
push :: Maybe PushMessageActivity
multiCondition :: Maybe MultiConditionalSplitActivity
holdout :: Maybe HoldoutActivity
email :: Maybe EmailMessageActivity
description :: Maybe Text
contactCenter :: Maybe ContactCenterActivity
conditionalSplit :: Maybe ConditionalSplitActivity
custom :: Maybe CustomMessageActivity
$sel:wait:Activity' :: Activity -> Maybe WaitActivity
$sel:sms:Activity' :: Activity -> Maybe SMSMessageActivity
$sel:randomSplit:Activity' :: Activity -> Maybe RandomSplitActivity
$sel:push:Activity' :: Activity -> Maybe PushMessageActivity
$sel:multiCondition:Activity' :: Activity -> Maybe MultiConditionalSplitActivity
$sel:holdout:Activity' :: Activity -> Maybe HoldoutActivity
$sel:email:Activity' :: Activity -> Maybe EmailMessageActivity
$sel:description:Activity' :: Activity -> Maybe Text
$sel:contactCenter:Activity' :: Activity -> Maybe ContactCenterActivity
$sel:conditionalSplit:Activity' :: Activity -> Maybe ConditionalSplitActivity
$sel:custom:Activity' :: Activity -> Maybe CustomMessageActivity
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"CUSTOM" 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 CustomMessageActivity
custom,
            (Key
"ConditionalSplit" 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 ConditionalSplitActivity
conditionalSplit,
            (Key
"ContactCenter" 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 ContactCenterActivity
contactCenter,
            (Key
"Description" 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
description,
            (Key
"EMAIL" 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 EmailMessageActivity
email,
            (Key
"Holdout" 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 HoldoutActivity
holdout,
            (Key
"MultiCondition" 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 MultiConditionalSplitActivity
multiCondition,
            (Key
"PUSH" 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 PushMessageActivity
push,
            (Key
"RandomSplit" 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 RandomSplitActivity
randomSplit,
            (Key
"SMS" 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 SMSMessageActivity
sms,
            (Key
"Wait" 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 WaitActivity
wait
          ]
      )