{-# 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.SES.Types.ReceiptAction
-- 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.SES.Types.ReceiptAction where

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 Amazonka.SES.Types.AddHeaderAction
import Amazonka.SES.Types.BounceAction
import Amazonka.SES.Types.LambdaAction
import Amazonka.SES.Types.S3Action
import Amazonka.SES.Types.SNSAction
import Amazonka.SES.Types.StopAction
import Amazonka.SES.Types.WorkmailAction

-- | An action that Amazon SES can take when it receives an email on behalf
-- of one or more email addresses or domains that you own. An instance of
-- this data type can represent only one action.
--
-- For information about setting up receipt rules, see the
-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-receipt-rules.html Amazon SES Developer Guide>.
--
-- /See:/ 'newReceiptAction' smart constructor.
data ReceiptAction = ReceiptAction'
  { -- | Adds a header to the received email.
    ReceiptAction -> Maybe AddHeaderAction
addHeaderAction :: Prelude.Maybe AddHeaderAction,
    -- | Rejects the received email by returning a bounce response to the sender
    -- and, optionally, publishes a notification to Amazon Simple Notification
    -- Service (Amazon SNS).
    ReceiptAction -> Maybe BounceAction
bounceAction :: Prelude.Maybe BounceAction,
    -- | Calls an AWS Lambda function, and optionally, publishes a notification
    -- to Amazon SNS.
    ReceiptAction -> Maybe LambdaAction
lambdaAction :: Prelude.Maybe LambdaAction,
    -- | Saves the received message to an Amazon Simple Storage Service (Amazon
    -- S3) bucket and, optionally, publishes a notification to Amazon SNS.
    ReceiptAction -> Maybe S3Action
s3Action :: Prelude.Maybe S3Action,
    -- | Publishes the email content within a notification to Amazon SNS.
    ReceiptAction -> Maybe SNSAction
sNSAction :: Prelude.Maybe SNSAction,
    -- | Terminates the evaluation of the receipt rule set and optionally
    -- publishes a notification to Amazon SNS.
    ReceiptAction -> Maybe StopAction
stopAction :: Prelude.Maybe StopAction,
    -- | Calls Amazon WorkMail and, optionally, publishes a notification to
    -- Amazon Amazon SNS.
    ReceiptAction -> Maybe WorkmailAction
workmailAction :: Prelude.Maybe WorkmailAction
  }
  deriving (ReceiptAction -> ReceiptAction -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReceiptAction -> ReceiptAction -> Bool
$c/= :: ReceiptAction -> ReceiptAction -> Bool
== :: ReceiptAction -> ReceiptAction -> Bool
$c== :: ReceiptAction -> ReceiptAction -> Bool
Prelude.Eq, ReadPrec [ReceiptAction]
ReadPrec ReceiptAction
Int -> ReadS ReceiptAction
ReadS [ReceiptAction]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ReceiptAction]
$creadListPrec :: ReadPrec [ReceiptAction]
readPrec :: ReadPrec ReceiptAction
$creadPrec :: ReadPrec ReceiptAction
readList :: ReadS [ReceiptAction]
$creadList :: ReadS [ReceiptAction]
readsPrec :: Int -> ReadS ReceiptAction
$creadsPrec :: Int -> ReadS ReceiptAction
Prelude.Read, Int -> ReceiptAction -> ShowS
[ReceiptAction] -> ShowS
ReceiptAction -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReceiptAction] -> ShowS
$cshowList :: [ReceiptAction] -> ShowS
show :: ReceiptAction -> String
$cshow :: ReceiptAction -> String
showsPrec :: Int -> ReceiptAction -> ShowS
$cshowsPrec :: Int -> ReceiptAction -> ShowS
Prelude.Show, forall x. Rep ReceiptAction x -> ReceiptAction
forall x. ReceiptAction -> Rep ReceiptAction x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ReceiptAction x -> ReceiptAction
$cfrom :: forall x. ReceiptAction -> Rep ReceiptAction x
Prelude.Generic)

-- |
-- Create a value of 'ReceiptAction' 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:
--
-- 'addHeaderAction', 'receiptAction_addHeaderAction' - Adds a header to the received email.
--
-- 'bounceAction', 'receiptAction_bounceAction' - Rejects the received email by returning a bounce response to the sender
-- and, optionally, publishes a notification to Amazon Simple Notification
-- Service (Amazon SNS).
--
-- 'lambdaAction', 'receiptAction_lambdaAction' - Calls an AWS Lambda function, and optionally, publishes a notification
-- to Amazon SNS.
--
-- 's3Action', 'receiptAction_s3Action' - Saves the received message to an Amazon Simple Storage Service (Amazon
-- S3) bucket and, optionally, publishes a notification to Amazon SNS.
--
-- 'sNSAction', 'receiptAction_sNSAction' - Publishes the email content within a notification to Amazon SNS.
--
-- 'stopAction', 'receiptAction_stopAction' - Terminates the evaluation of the receipt rule set and optionally
-- publishes a notification to Amazon SNS.
--
-- 'workmailAction', 'receiptAction_workmailAction' - Calls Amazon WorkMail and, optionally, publishes a notification to
-- Amazon Amazon SNS.
newReceiptAction ::
  ReceiptAction
newReceiptAction :: ReceiptAction
newReceiptAction =
  ReceiptAction'
    { $sel:addHeaderAction:ReceiptAction' :: Maybe AddHeaderAction
addHeaderAction = forall a. Maybe a
Prelude.Nothing,
      $sel:bounceAction:ReceiptAction' :: Maybe BounceAction
bounceAction = forall a. Maybe a
Prelude.Nothing,
      $sel:lambdaAction:ReceiptAction' :: Maybe LambdaAction
lambdaAction = forall a. Maybe a
Prelude.Nothing,
      $sel:s3Action:ReceiptAction' :: Maybe S3Action
s3Action = forall a. Maybe a
Prelude.Nothing,
      $sel:sNSAction:ReceiptAction' :: Maybe SNSAction
sNSAction = forall a. Maybe a
Prelude.Nothing,
      $sel:stopAction:ReceiptAction' :: Maybe StopAction
stopAction = forall a. Maybe a
Prelude.Nothing,
      $sel:workmailAction:ReceiptAction' :: Maybe WorkmailAction
workmailAction = forall a. Maybe a
Prelude.Nothing
    }

-- | Adds a header to the received email.
receiptAction_addHeaderAction :: Lens.Lens' ReceiptAction (Prelude.Maybe AddHeaderAction)
receiptAction_addHeaderAction :: Lens' ReceiptAction (Maybe AddHeaderAction)
receiptAction_addHeaderAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReceiptAction' {Maybe AddHeaderAction
addHeaderAction :: Maybe AddHeaderAction
$sel:addHeaderAction:ReceiptAction' :: ReceiptAction -> Maybe AddHeaderAction
addHeaderAction} -> Maybe AddHeaderAction
addHeaderAction) (\s :: ReceiptAction
s@ReceiptAction' {} Maybe AddHeaderAction
a -> ReceiptAction
s {$sel:addHeaderAction:ReceiptAction' :: Maybe AddHeaderAction
addHeaderAction = Maybe AddHeaderAction
a} :: ReceiptAction)

-- | Rejects the received email by returning a bounce response to the sender
-- and, optionally, publishes a notification to Amazon Simple Notification
-- Service (Amazon SNS).
receiptAction_bounceAction :: Lens.Lens' ReceiptAction (Prelude.Maybe BounceAction)
receiptAction_bounceAction :: Lens' ReceiptAction (Maybe BounceAction)
receiptAction_bounceAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReceiptAction' {Maybe BounceAction
bounceAction :: Maybe BounceAction
$sel:bounceAction:ReceiptAction' :: ReceiptAction -> Maybe BounceAction
bounceAction} -> Maybe BounceAction
bounceAction) (\s :: ReceiptAction
s@ReceiptAction' {} Maybe BounceAction
a -> ReceiptAction
s {$sel:bounceAction:ReceiptAction' :: Maybe BounceAction
bounceAction = Maybe BounceAction
a} :: ReceiptAction)

-- | Calls an AWS Lambda function, and optionally, publishes a notification
-- to Amazon SNS.
receiptAction_lambdaAction :: Lens.Lens' ReceiptAction (Prelude.Maybe LambdaAction)
receiptAction_lambdaAction :: Lens' ReceiptAction (Maybe LambdaAction)
receiptAction_lambdaAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReceiptAction' {Maybe LambdaAction
lambdaAction :: Maybe LambdaAction
$sel:lambdaAction:ReceiptAction' :: ReceiptAction -> Maybe LambdaAction
lambdaAction} -> Maybe LambdaAction
lambdaAction) (\s :: ReceiptAction
s@ReceiptAction' {} Maybe LambdaAction
a -> ReceiptAction
s {$sel:lambdaAction:ReceiptAction' :: Maybe LambdaAction
lambdaAction = Maybe LambdaAction
a} :: ReceiptAction)

-- | Saves the received message to an Amazon Simple Storage Service (Amazon
-- S3) bucket and, optionally, publishes a notification to Amazon SNS.
receiptAction_s3Action :: Lens.Lens' ReceiptAction (Prelude.Maybe S3Action)
receiptAction_s3Action :: Lens' ReceiptAction (Maybe S3Action)
receiptAction_s3Action = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReceiptAction' {Maybe S3Action
s3Action :: Maybe S3Action
$sel:s3Action:ReceiptAction' :: ReceiptAction -> Maybe S3Action
s3Action} -> Maybe S3Action
s3Action) (\s :: ReceiptAction
s@ReceiptAction' {} Maybe S3Action
a -> ReceiptAction
s {$sel:s3Action:ReceiptAction' :: Maybe S3Action
s3Action = Maybe S3Action
a} :: ReceiptAction)

-- | Publishes the email content within a notification to Amazon SNS.
receiptAction_sNSAction :: Lens.Lens' ReceiptAction (Prelude.Maybe SNSAction)
receiptAction_sNSAction :: Lens' ReceiptAction (Maybe SNSAction)
receiptAction_sNSAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReceiptAction' {Maybe SNSAction
sNSAction :: Maybe SNSAction
$sel:sNSAction:ReceiptAction' :: ReceiptAction -> Maybe SNSAction
sNSAction} -> Maybe SNSAction
sNSAction) (\s :: ReceiptAction
s@ReceiptAction' {} Maybe SNSAction
a -> ReceiptAction
s {$sel:sNSAction:ReceiptAction' :: Maybe SNSAction
sNSAction = Maybe SNSAction
a} :: ReceiptAction)

-- | Terminates the evaluation of the receipt rule set and optionally
-- publishes a notification to Amazon SNS.
receiptAction_stopAction :: Lens.Lens' ReceiptAction (Prelude.Maybe StopAction)
receiptAction_stopAction :: Lens' ReceiptAction (Maybe StopAction)
receiptAction_stopAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReceiptAction' {Maybe StopAction
stopAction :: Maybe StopAction
$sel:stopAction:ReceiptAction' :: ReceiptAction -> Maybe StopAction
stopAction} -> Maybe StopAction
stopAction) (\s :: ReceiptAction
s@ReceiptAction' {} Maybe StopAction
a -> ReceiptAction
s {$sel:stopAction:ReceiptAction' :: Maybe StopAction
stopAction = Maybe StopAction
a} :: ReceiptAction)

-- | Calls Amazon WorkMail and, optionally, publishes a notification to
-- Amazon Amazon SNS.
receiptAction_workmailAction :: Lens.Lens' ReceiptAction (Prelude.Maybe WorkmailAction)
receiptAction_workmailAction :: Lens' ReceiptAction (Maybe WorkmailAction)
receiptAction_workmailAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReceiptAction' {Maybe WorkmailAction
workmailAction :: Maybe WorkmailAction
$sel:workmailAction:ReceiptAction' :: ReceiptAction -> Maybe WorkmailAction
workmailAction} -> Maybe WorkmailAction
workmailAction) (\s :: ReceiptAction
s@ReceiptAction' {} Maybe WorkmailAction
a -> ReceiptAction
s {$sel:workmailAction:ReceiptAction' :: Maybe WorkmailAction
workmailAction = Maybe WorkmailAction
a} :: ReceiptAction)

instance Data.FromXML ReceiptAction where
  parseXML :: [Node] -> Either String ReceiptAction
parseXML [Node]
x =
    Maybe AddHeaderAction
-> Maybe BounceAction
-> Maybe LambdaAction
-> Maybe S3Action
-> Maybe SNSAction
-> Maybe StopAction
-> Maybe WorkmailAction
-> ReceiptAction
ReceiptAction'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AddHeaderAction")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"BounceAction")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"LambdaAction")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"S3Action")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"SNSAction")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"StopAction")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"WorkmailAction")

instance Prelude.Hashable ReceiptAction where
  hashWithSalt :: Int -> ReceiptAction -> Int
hashWithSalt Int
_salt ReceiptAction' {Maybe AddHeaderAction
Maybe BounceAction
Maybe LambdaAction
Maybe S3Action
Maybe SNSAction
Maybe StopAction
Maybe WorkmailAction
workmailAction :: Maybe WorkmailAction
stopAction :: Maybe StopAction
sNSAction :: Maybe SNSAction
s3Action :: Maybe S3Action
lambdaAction :: Maybe LambdaAction
bounceAction :: Maybe BounceAction
addHeaderAction :: Maybe AddHeaderAction
$sel:workmailAction:ReceiptAction' :: ReceiptAction -> Maybe WorkmailAction
$sel:stopAction:ReceiptAction' :: ReceiptAction -> Maybe StopAction
$sel:sNSAction:ReceiptAction' :: ReceiptAction -> Maybe SNSAction
$sel:s3Action:ReceiptAction' :: ReceiptAction -> Maybe S3Action
$sel:lambdaAction:ReceiptAction' :: ReceiptAction -> Maybe LambdaAction
$sel:bounceAction:ReceiptAction' :: ReceiptAction -> Maybe BounceAction
$sel:addHeaderAction:ReceiptAction' :: ReceiptAction -> Maybe AddHeaderAction
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AddHeaderAction
addHeaderAction
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BounceAction
bounceAction
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LambdaAction
lambdaAction
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe S3Action
s3Action
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SNSAction
sNSAction
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe StopAction
stopAction
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe WorkmailAction
workmailAction

instance Prelude.NFData ReceiptAction where
  rnf :: ReceiptAction -> ()
rnf ReceiptAction' {Maybe AddHeaderAction
Maybe BounceAction
Maybe LambdaAction
Maybe S3Action
Maybe SNSAction
Maybe StopAction
Maybe WorkmailAction
workmailAction :: Maybe WorkmailAction
stopAction :: Maybe StopAction
sNSAction :: Maybe SNSAction
s3Action :: Maybe S3Action
lambdaAction :: Maybe LambdaAction
bounceAction :: Maybe BounceAction
addHeaderAction :: Maybe AddHeaderAction
$sel:workmailAction:ReceiptAction' :: ReceiptAction -> Maybe WorkmailAction
$sel:stopAction:ReceiptAction' :: ReceiptAction -> Maybe StopAction
$sel:sNSAction:ReceiptAction' :: ReceiptAction -> Maybe SNSAction
$sel:s3Action:ReceiptAction' :: ReceiptAction -> Maybe S3Action
$sel:lambdaAction:ReceiptAction' :: ReceiptAction -> Maybe LambdaAction
$sel:bounceAction:ReceiptAction' :: ReceiptAction -> Maybe BounceAction
$sel:addHeaderAction:ReceiptAction' :: ReceiptAction -> Maybe AddHeaderAction
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AddHeaderAction
addHeaderAction
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe BounceAction
bounceAction
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LambdaAction
lambdaAction
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe S3Action
s3Action
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SNSAction
sNSAction
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe StopAction
stopAction
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe WorkmailAction
workmailAction

instance Data.ToQuery ReceiptAction where
  toQuery :: ReceiptAction -> QueryString
toQuery ReceiptAction' {Maybe AddHeaderAction
Maybe BounceAction
Maybe LambdaAction
Maybe S3Action
Maybe SNSAction
Maybe StopAction
Maybe WorkmailAction
workmailAction :: Maybe WorkmailAction
stopAction :: Maybe StopAction
sNSAction :: Maybe SNSAction
s3Action :: Maybe S3Action
lambdaAction :: Maybe LambdaAction
bounceAction :: Maybe BounceAction
addHeaderAction :: Maybe AddHeaderAction
$sel:workmailAction:ReceiptAction' :: ReceiptAction -> Maybe WorkmailAction
$sel:stopAction:ReceiptAction' :: ReceiptAction -> Maybe StopAction
$sel:sNSAction:ReceiptAction' :: ReceiptAction -> Maybe SNSAction
$sel:s3Action:ReceiptAction' :: ReceiptAction -> Maybe S3Action
$sel:lambdaAction:ReceiptAction' :: ReceiptAction -> Maybe LambdaAction
$sel:bounceAction:ReceiptAction' :: ReceiptAction -> Maybe BounceAction
$sel:addHeaderAction:ReceiptAction' :: ReceiptAction -> Maybe AddHeaderAction
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"AddHeaderAction" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe AddHeaderAction
addHeaderAction,
        ByteString
"BounceAction" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe BounceAction
bounceAction,
        ByteString
"LambdaAction" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe LambdaAction
lambdaAction,
        ByteString
"S3Action" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe S3Action
s3Action,
        ByteString
"SNSAction" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe SNSAction
sNSAction,
        ByteString
"StopAction" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe StopAction
stopAction,
        ByteString
"WorkmailAction" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe WorkmailAction
workmailAction
      ]