{-# 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.CognitoIdentityProvider.Types.EmailConfigurationType
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.CognitoIdentityProvider.Types.EmailConfigurationType where

import Amazonka.CognitoIdentityProvider.Types.EmailSendingAccountType
import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude

-- | The email configuration type.
--
-- Amazon Cognito has specific regions for use with Amazon SES. For more
-- information on the supported regions, see
-- <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-email.html Email Settings for Amazon Cognito User Pools>.
--
-- /See:/ 'newEmailConfigurationType' smart constructor.
data EmailConfigurationType = EmailConfigurationType'
  { -- | The Amazon Resource Name (ARN) of a verified email address in Amazon
    -- SES. This email address is used in one of the following ways, depending
    -- on the value that you specify for the @EmailSendingAccount@ parameter:
    --
    -- -   If you specify @COGNITO_DEFAULT@, Amazon Cognito uses this address
    --     as the custom FROM address when it emails your users by using its
    --     built-in email account.
    --
    -- -   If you specify @DEVELOPER@, Amazon Cognito emails your users with
    --     this address by calling Amazon SES on your behalf.
    EmailConfigurationType -> Maybe Text
sourceArn :: Prelude.Maybe Prelude.Text,
    -- | Identifies either the sender’s email address or the sender’s name with
    -- their email address. For example, @testuser\@example.com@ or
    -- @Test User \<testuser\@example.com>@. This address will appear before
    -- the body of the email.
    EmailConfigurationType -> Maybe Text
from :: Prelude.Maybe Prelude.Text,
    -- | The set of configuration rules that can be applied to emails sent using
    -- Amazon SES. A configuration set is applied to an email by including a
    -- reference to the configuration set in the headers of the email. Once
    -- applied, all of the rules in that configuration set are applied to the
    -- email. Configuration sets can be used to apply the following types of
    -- rules to emails:
    --
    -- -   Event publishing – Amazon SES can track the number of send,
    --     delivery, open, click, bounce, and complaint events for each email
    --     sent. Use event publishing to send information about these events to
    --     other Amazon Web Services services such as SNS and CloudWatch.
    --
    -- -   IP pool management – When leasing dedicated IP addresses with Amazon
    --     SES, you can create groups of IP addresses, called dedicated IP
    --     pools. You can then associate the dedicated IP pools with
    --     configuration sets.
    EmailConfigurationType -> Maybe Text
configurationSet :: Prelude.Maybe Prelude.Text,
    -- | The destination to which the receiver of the email should reply to.
    EmailConfigurationType -> Maybe Text
replyToEmailAddress :: Prelude.Maybe Prelude.Text,
    -- | Specifies whether Amazon Cognito emails your users by using its built-in
    -- email functionality or your Amazon SES email configuration. Specify one
    -- of the following values:
    --
    -- [COGNITO_DEFAULT]
    --     When Amazon Cognito emails your users, it uses its built-in email
    --     functionality. When you use the default option, Amazon Cognito
    --     allows only a limited number of emails each day for your user pool.
    --     For typical production environments, the default email limit is
    --     below the required delivery volume. To achieve a higher delivery
    --     volume, specify DEVELOPER to use your Amazon SES email
    --     configuration.
    --
    --     To look up the email delivery limit for the default option, see
    --     <https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html Limits in Amazon Cognito>
    --     in the /Amazon Cognito Developer Guide/.
    --
    --     The default FROM address is no-reply\@verificationemail.com. To
    --     customize the FROM address, provide the ARN of an Amazon SES
    --     verified email address for the @SourceArn@ parameter.
    --
    --     If EmailSendingAccount is COGNITO_DEFAULT, the following parameters
    --     aren\'t allowed:
    --
    --     -   EmailVerificationMessage
    --
    --     -   EmailVerificationSubject
    --
    --     -   InviteMessageTemplate.EmailMessage
    --
    --     -   InviteMessageTemplate.EmailSubject
    --
    --     -   VerificationMessageTemplate.EmailMessage
    --
    --     -   VerificationMessageTemplate.EmailMessageByLink
    --
    --     -   VerificationMessageTemplate.EmailSubject,
    --
    --     -   VerificationMessageTemplate.EmailSubjectByLink
    --
    --     DEVELOPER EmailSendingAccount is required.
    --
    -- [DEVELOPER]
    --     When Amazon Cognito emails your users, it uses your Amazon SES
    --     configuration. Amazon Cognito calls Amazon SES on your behalf to
    --     send email from your verified email address. When you use this
    --     option, the email delivery limits are the same limits that apply to
    --     your Amazon SES verified email address in your account.
    --
    --     If you use this option, you must provide the ARN of an Amazon SES
    --     verified email address for the @SourceArn@ parameter.
    --
    --     Before Amazon Cognito can email your users, it requires additional
    --     permissions to call Amazon SES on your behalf. When you update your
    --     user pool with this option, Amazon Cognito creates a /service-linked
    --     role/, which is a type of IAM role, in your account. This role
    --     contains the permissions that allow Amazon Cognito to access Amazon
    --     SES and send email messages with your address. For more information
    --     about the service-linked role that Amazon Cognito creates, see
    --     <https://docs.aws.amazon.com/cognito/latest/developerguide/using-service-linked-roles.html Using Service-Linked Roles for Amazon Cognito>
    --     in the /Amazon Cognito Developer Guide/.
    EmailConfigurationType -> Maybe EmailSendingAccountType
emailSendingAccount :: Prelude.Maybe EmailSendingAccountType
  }
  deriving (EmailConfigurationType -> EmailConfigurationType -> Bool
(EmailConfigurationType -> EmailConfigurationType -> Bool)
-> (EmailConfigurationType -> EmailConfigurationType -> Bool)
-> Eq EmailConfigurationType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EmailConfigurationType -> EmailConfigurationType -> Bool
$c/= :: EmailConfigurationType -> EmailConfigurationType -> Bool
== :: EmailConfigurationType -> EmailConfigurationType -> Bool
$c== :: EmailConfigurationType -> EmailConfigurationType -> Bool
Prelude.Eq, ReadPrec [EmailConfigurationType]
ReadPrec EmailConfigurationType
Int -> ReadS EmailConfigurationType
ReadS [EmailConfigurationType]
(Int -> ReadS EmailConfigurationType)
-> ReadS [EmailConfigurationType]
-> ReadPrec EmailConfigurationType
-> ReadPrec [EmailConfigurationType]
-> Read EmailConfigurationType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EmailConfigurationType]
$creadListPrec :: ReadPrec [EmailConfigurationType]
readPrec :: ReadPrec EmailConfigurationType
$creadPrec :: ReadPrec EmailConfigurationType
readList :: ReadS [EmailConfigurationType]
$creadList :: ReadS [EmailConfigurationType]
readsPrec :: Int -> ReadS EmailConfigurationType
$creadsPrec :: Int -> ReadS EmailConfigurationType
Prelude.Read, Int -> EmailConfigurationType -> ShowS
[EmailConfigurationType] -> ShowS
EmailConfigurationType -> String
(Int -> EmailConfigurationType -> ShowS)
-> (EmailConfigurationType -> String)
-> ([EmailConfigurationType] -> ShowS)
-> Show EmailConfigurationType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EmailConfigurationType] -> ShowS
$cshowList :: [EmailConfigurationType] -> ShowS
show :: EmailConfigurationType -> String
$cshow :: EmailConfigurationType -> String
showsPrec :: Int -> EmailConfigurationType -> ShowS
$cshowsPrec :: Int -> EmailConfigurationType -> ShowS
Prelude.Show, (forall x. EmailConfigurationType -> Rep EmailConfigurationType x)
-> (forall x.
    Rep EmailConfigurationType x -> EmailConfigurationType)
-> Generic EmailConfigurationType
forall x. Rep EmailConfigurationType x -> EmailConfigurationType
forall x. EmailConfigurationType -> Rep EmailConfigurationType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EmailConfigurationType x -> EmailConfigurationType
$cfrom :: forall x. EmailConfigurationType -> Rep EmailConfigurationType x
Prelude.Generic)

-- |
-- Create a value of 'EmailConfigurationType' 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:
--
-- 'sourceArn', 'emailConfigurationType_sourceArn' - The Amazon Resource Name (ARN) of a verified email address in Amazon
-- SES. This email address is used in one of the following ways, depending
-- on the value that you specify for the @EmailSendingAccount@ parameter:
--
-- -   If you specify @COGNITO_DEFAULT@, Amazon Cognito uses this address
--     as the custom FROM address when it emails your users by using its
--     built-in email account.
--
-- -   If you specify @DEVELOPER@, Amazon Cognito emails your users with
--     this address by calling Amazon SES on your behalf.
--
-- 'from', 'emailConfigurationType_from' - Identifies either the sender’s email address or the sender’s name with
-- their email address. For example, @testuser\@example.com@ or
-- @Test User \<testuser\@example.com>@. This address will appear before
-- the body of the email.
--
-- 'configurationSet', 'emailConfigurationType_configurationSet' - The set of configuration rules that can be applied to emails sent using
-- Amazon SES. A configuration set is applied to an email by including a
-- reference to the configuration set in the headers of the email. Once
-- applied, all of the rules in that configuration set are applied to the
-- email. Configuration sets can be used to apply the following types of
-- rules to emails:
--
-- -   Event publishing – Amazon SES can track the number of send,
--     delivery, open, click, bounce, and complaint events for each email
--     sent. Use event publishing to send information about these events to
--     other Amazon Web Services services such as SNS and CloudWatch.
--
-- -   IP pool management – When leasing dedicated IP addresses with Amazon
--     SES, you can create groups of IP addresses, called dedicated IP
--     pools. You can then associate the dedicated IP pools with
--     configuration sets.
--
-- 'replyToEmailAddress', 'emailConfigurationType_replyToEmailAddress' - The destination to which the receiver of the email should reply to.
--
-- 'emailSendingAccount', 'emailConfigurationType_emailSendingAccount' - Specifies whether Amazon Cognito emails your users by using its built-in
-- email functionality or your Amazon SES email configuration. Specify one
-- of the following values:
--
-- [COGNITO_DEFAULT]
--     When Amazon Cognito emails your users, it uses its built-in email
--     functionality. When you use the default option, Amazon Cognito
--     allows only a limited number of emails each day for your user pool.
--     For typical production environments, the default email limit is
--     below the required delivery volume. To achieve a higher delivery
--     volume, specify DEVELOPER to use your Amazon SES email
--     configuration.
--
--     To look up the email delivery limit for the default option, see
--     <https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html Limits in Amazon Cognito>
--     in the /Amazon Cognito Developer Guide/.
--
--     The default FROM address is no-reply\@verificationemail.com. To
--     customize the FROM address, provide the ARN of an Amazon SES
--     verified email address for the @SourceArn@ parameter.
--
--     If EmailSendingAccount is COGNITO_DEFAULT, the following parameters
--     aren\'t allowed:
--
--     -   EmailVerificationMessage
--
--     -   EmailVerificationSubject
--
--     -   InviteMessageTemplate.EmailMessage
--
--     -   InviteMessageTemplate.EmailSubject
--
--     -   VerificationMessageTemplate.EmailMessage
--
--     -   VerificationMessageTemplate.EmailMessageByLink
--
--     -   VerificationMessageTemplate.EmailSubject,
--
--     -   VerificationMessageTemplate.EmailSubjectByLink
--
--     DEVELOPER EmailSendingAccount is required.
--
-- [DEVELOPER]
--     When Amazon Cognito emails your users, it uses your Amazon SES
--     configuration. Amazon Cognito calls Amazon SES on your behalf to
--     send email from your verified email address. When you use this
--     option, the email delivery limits are the same limits that apply to
--     your Amazon SES verified email address in your account.
--
--     If you use this option, you must provide the ARN of an Amazon SES
--     verified email address for the @SourceArn@ parameter.
--
--     Before Amazon Cognito can email your users, it requires additional
--     permissions to call Amazon SES on your behalf. When you update your
--     user pool with this option, Amazon Cognito creates a /service-linked
--     role/, which is a type of IAM role, in your account. This role
--     contains the permissions that allow Amazon Cognito to access Amazon
--     SES and send email messages with your address. For more information
--     about the service-linked role that Amazon Cognito creates, see
--     <https://docs.aws.amazon.com/cognito/latest/developerguide/using-service-linked-roles.html Using Service-Linked Roles for Amazon Cognito>
--     in the /Amazon Cognito Developer Guide/.
newEmailConfigurationType ::
  EmailConfigurationType
newEmailConfigurationType :: EmailConfigurationType
newEmailConfigurationType =
  EmailConfigurationType' :: Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe EmailSendingAccountType
-> EmailConfigurationType
EmailConfigurationType'
    { $sel:sourceArn:EmailConfigurationType' :: Maybe Text
sourceArn =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:from:EmailConfigurationType' :: Maybe Text
from = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:configurationSet:EmailConfigurationType' :: Maybe Text
configurationSet = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:replyToEmailAddress:EmailConfigurationType' :: Maybe Text
replyToEmailAddress = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:emailSendingAccount:EmailConfigurationType' :: Maybe EmailSendingAccountType
emailSendingAccount = Maybe EmailSendingAccountType
forall a. Maybe a
Prelude.Nothing
    }

-- | The Amazon Resource Name (ARN) of a verified email address in Amazon
-- SES. This email address is used in one of the following ways, depending
-- on the value that you specify for the @EmailSendingAccount@ parameter:
--
-- -   If you specify @COGNITO_DEFAULT@, Amazon Cognito uses this address
--     as the custom FROM address when it emails your users by using its
--     built-in email account.
--
-- -   If you specify @DEVELOPER@, Amazon Cognito emails your users with
--     this address by calling Amazon SES on your behalf.
emailConfigurationType_sourceArn :: Lens.Lens' EmailConfigurationType (Prelude.Maybe Prelude.Text)
emailConfigurationType_sourceArn :: (Maybe Text -> f (Maybe Text))
-> EmailConfigurationType -> f EmailConfigurationType
emailConfigurationType_sourceArn = (EmailConfigurationType -> Maybe Text)
-> (EmailConfigurationType -> Maybe Text -> EmailConfigurationType)
-> Lens
     EmailConfigurationType
     EmailConfigurationType
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EmailConfigurationType' {Maybe Text
sourceArn :: Maybe Text
$sel:sourceArn:EmailConfigurationType' :: EmailConfigurationType -> Maybe Text
sourceArn} -> Maybe Text
sourceArn) (\s :: EmailConfigurationType
s@EmailConfigurationType' {} Maybe Text
a -> EmailConfigurationType
s {$sel:sourceArn:EmailConfigurationType' :: Maybe Text
sourceArn = Maybe Text
a} :: EmailConfigurationType)

-- | Identifies either the sender’s email address or the sender’s name with
-- their email address. For example, @testuser\@example.com@ or
-- @Test User \<testuser\@example.com>@. This address will appear before
-- the body of the email.
emailConfigurationType_from :: Lens.Lens' EmailConfigurationType (Prelude.Maybe Prelude.Text)
emailConfigurationType_from :: (Maybe Text -> f (Maybe Text))
-> EmailConfigurationType -> f EmailConfigurationType
emailConfigurationType_from = (EmailConfigurationType -> Maybe Text)
-> (EmailConfigurationType -> Maybe Text -> EmailConfigurationType)
-> Lens
     EmailConfigurationType
     EmailConfigurationType
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EmailConfigurationType' {Maybe Text
from :: Maybe Text
$sel:from:EmailConfigurationType' :: EmailConfigurationType -> Maybe Text
from} -> Maybe Text
from) (\s :: EmailConfigurationType
s@EmailConfigurationType' {} Maybe Text
a -> EmailConfigurationType
s {$sel:from:EmailConfigurationType' :: Maybe Text
from = Maybe Text
a} :: EmailConfigurationType)

-- | The set of configuration rules that can be applied to emails sent using
-- Amazon SES. A configuration set is applied to an email by including a
-- reference to the configuration set in the headers of the email. Once
-- applied, all of the rules in that configuration set are applied to the
-- email. Configuration sets can be used to apply the following types of
-- rules to emails:
--
-- -   Event publishing – Amazon SES can track the number of send,
--     delivery, open, click, bounce, and complaint events for each email
--     sent. Use event publishing to send information about these events to
--     other Amazon Web Services services such as SNS and CloudWatch.
--
-- -   IP pool management – When leasing dedicated IP addresses with Amazon
--     SES, you can create groups of IP addresses, called dedicated IP
--     pools. You can then associate the dedicated IP pools with
--     configuration sets.
emailConfigurationType_configurationSet :: Lens.Lens' EmailConfigurationType (Prelude.Maybe Prelude.Text)
emailConfigurationType_configurationSet :: (Maybe Text -> f (Maybe Text))
-> EmailConfigurationType -> f EmailConfigurationType
emailConfigurationType_configurationSet = (EmailConfigurationType -> Maybe Text)
-> (EmailConfigurationType -> Maybe Text -> EmailConfigurationType)
-> Lens
     EmailConfigurationType
     EmailConfigurationType
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EmailConfigurationType' {Maybe Text
configurationSet :: Maybe Text
$sel:configurationSet:EmailConfigurationType' :: EmailConfigurationType -> Maybe Text
configurationSet} -> Maybe Text
configurationSet) (\s :: EmailConfigurationType
s@EmailConfigurationType' {} Maybe Text
a -> EmailConfigurationType
s {$sel:configurationSet:EmailConfigurationType' :: Maybe Text
configurationSet = Maybe Text
a} :: EmailConfigurationType)

-- | The destination to which the receiver of the email should reply to.
emailConfigurationType_replyToEmailAddress :: Lens.Lens' EmailConfigurationType (Prelude.Maybe Prelude.Text)
emailConfigurationType_replyToEmailAddress :: (Maybe Text -> f (Maybe Text))
-> EmailConfigurationType -> f EmailConfigurationType
emailConfigurationType_replyToEmailAddress = (EmailConfigurationType -> Maybe Text)
-> (EmailConfigurationType -> Maybe Text -> EmailConfigurationType)
-> Lens
     EmailConfigurationType
     EmailConfigurationType
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EmailConfigurationType' {Maybe Text
replyToEmailAddress :: Maybe Text
$sel:replyToEmailAddress:EmailConfigurationType' :: EmailConfigurationType -> Maybe Text
replyToEmailAddress} -> Maybe Text
replyToEmailAddress) (\s :: EmailConfigurationType
s@EmailConfigurationType' {} Maybe Text
a -> EmailConfigurationType
s {$sel:replyToEmailAddress:EmailConfigurationType' :: Maybe Text
replyToEmailAddress = Maybe Text
a} :: EmailConfigurationType)

-- | Specifies whether Amazon Cognito emails your users by using its built-in
-- email functionality or your Amazon SES email configuration. Specify one
-- of the following values:
--
-- [COGNITO_DEFAULT]
--     When Amazon Cognito emails your users, it uses its built-in email
--     functionality. When you use the default option, Amazon Cognito
--     allows only a limited number of emails each day for your user pool.
--     For typical production environments, the default email limit is
--     below the required delivery volume. To achieve a higher delivery
--     volume, specify DEVELOPER to use your Amazon SES email
--     configuration.
--
--     To look up the email delivery limit for the default option, see
--     <https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html Limits in Amazon Cognito>
--     in the /Amazon Cognito Developer Guide/.
--
--     The default FROM address is no-reply\@verificationemail.com. To
--     customize the FROM address, provide the ARN of an Amazon SES
--     verified email address for the @SourceArn@ parameter.
--
--     If EmailSendingAccount is COGNITO_DEFAULT, the following parameters
--     aren\'t allowed:
--
--     -   EmailVerificationMessage
--
--     -   EmailVerificationSubject
--
--     -   InviteMessageTemplate.EmailMessage
--
--     -   InviteMessageTemplate.EmailSubject
--
--     -   VerificationMessageTemplate.EmailMessage
--
--     -   VerificationMessageTemplate.EmailMessageByLink
--
--     -   VerificationMessageTemplate.EmailSubject,
--
--     -   VerificationMessageTemplate.EmailSubjectByLink
--
--     DEVELOPER EmailSendingAccount is required.
--
-- [DEVELOPER]
--     When Amazon Cognito emails your users, it uses your Amazon SES
--     configuration. Amazon Cognito calls Amazon SES on your behalf to
--     send email from your verified email address. When you use this
--     option, the email delivery limits are the same limits that apply to
--     your Amazon SES verified email address in your account.
--
--     If you use this option, you must provide the ARN of an Amazon SES
--     verified email address for the @SourceArn@ parameter.
--
--     Before Amazon Cognito can email your users, it requires additional
--     permissions to call Amazon SES on your behalf. When you update your
--     user pool with this option, Amazon Cognito creates a /service-linked
--     role/, which is a type of IAM role, in your account. This role
--     contains the permissions that allow Amazon Cognito to access Amazon
--     SES and send email messages with your address. For more information
--     about the service-linked role that Amazon Cognito creates, see
--     <https://docs.aws.amazon.com/cognito/latest/developerguide/using-service-linked-roles.html Using Service-Linked Roles for Amazon Cognito>
--     in the /Amazon Cognito Developer Guide/.
emailConfigurationType_emailSendingAccount :: Lens.Lens' EmailConfigurationType (Prelude.Maybe EmailSendingAccountType)
emailConfigurationType_emailSendingAccount :: (Maybe EmailSendingAccountType
 -> f (Maybe EmailSendingAccountType))
-> EmailConfigurationType -> f EmailConfigurationType
emailConfigurationType_emailSendingAccount = (EmailConfigurationType -> Maybe EmailSendingAccountType)
-> (EmailConfigurationType
    -> Maybe EmailSendingAccountType -> EmailConfigurationType)
-> Lens
     EmailConfigurationType
     EmailConfigurationType
     (Maybe EmailSendingAccountType)
     (Maybe EmailSendingAccountType)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EmailConfigurationType' {Maybe EmailSendingAccountType
emailSendingAccount :: Maybe EmailSendingAccountType
$sel:emailSendingAccount:EmailConfigurationType' :: EmailConfigurationType -> Maybe EmailSendingAccountType
emailSendingAccount} -> Maybe EmailSendingAccountType
emailSendingAccount) (\s :: EmailConfigurationType
s@EmailConfigurationType' {} Maybe EmailSendingAccountType
a -> EmailConfigurationType
s {$sel:emailSendingAccount:EmailConfigurationType' :: Maybe EmailSendingAccountType
emailSendingAccount = Maybe EmailSendingAccountType
a} :: EmailConfigurationType)

instance Core.FromJSON EmailConfigurationType where
  parseJSON :: Value -> Parser EmailConfigurationType
parseJSON =
    String
-> (Object -> Parser EmailConfigurationType)
-> Value
-> Parser EmailConfigurationType
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Core.withObject
      String
"EmailConfigurationType"
      ( \Object
x ->
          Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe EmailSendingAccountType
-> EmailConfigurationType
EmailConfigurationType'
            (Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe EmailSendingAccountType
 -> EmailConfigurationType)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe EmailSendingAccountType
      -> EmailConfigurationType)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"SourceArn")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe EmailSendingAccountType
   -> EmailConfigurationType)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe EmailSendingAccountType
      -> EmailConfigurationType)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"From")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe EmailSendingAccountType
   -> EmailConfigurationType)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe EmailSendingAccountType -> EmailConfigurationType)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"ConfigurationSet")
            Parser
  (Maybe Text
   -> Maybe EmailSendingAccountType -> EmailConfigurationType)
-> Parser (Maybe Text)
-> Parser (Maybe EmailSendingAccountType -> EmailConfigurationType)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"ReplyToEmailAddress")
            Parser (Maybe EmailSendingAccountType -> EmailConfigurationType)
-> Parser (Maybe EmailSendingAccountType)
-> Parser EmailConfigurationType
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe EmailSendingAccountType)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EmailSendingAccount")
      )

instance Prelude.Hashable EmailConfigurationType

instance Prelude.NFData EmailConfigurationType

instance Core.ToJSON EmailConfigurationType where
  toJSON :: EmailConfigurationType -> Value
toJSON EmailConfigurationType' {Maybe Text
Maybe EmailSendingAccountType
emailSendingAccount :: Maybe EmailSendingAccountType
replyToEmailAddress :: Maybe Text
configurationSet :: Maybe Text
from :: Maybe Text
sourceArn :: Maybe Text
$sel:emailSendingAccount:EmailConfigurationType' :: EmailConfigurationType -> Maybe EmailSendingAccountType
$sel:replyToEmailAddress:EmailConfigurationType' :: EmailConfigurationType -> Maybe Text
$sel:configurationSet:EmailConfigurationType' :: EmailConfigurationType -> Maybe Text
$sel:from:EmailConfigurationType' :: EmailConfigurationType -> Maybe Text
$sel:sourceArn:EmailConfigurationType' :: EmailConfigurationType -> Maybe Text
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"SourceArn" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
sourceArn,
            (Text
"From" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
from,
            (Text
"ConfigurationSet" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
configurationSet,
            (Text
"ReplyToEmailAddress" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
replyToEmailAddress,
            (Text
"EmailSendingAccount" Text -> EmailSendingAccountType -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (EmailSendingAccountType -> Pair)
-> Maybe EmailSendingAccountType -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe EmailSendingAccountType
emailSendingAccount
          ]
      )