{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TupleSections #-}

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pinpoint-campaign-campaignemailmessage.html

module Stratosphere.ResourceProperties.PinpointCampaignCampaignEmailMessage where

import Stratosphere.ResourceImports


-- | Full data type definition for PinpointCampaignCampaignEmailMessage. See
-- 'pinpointCampaignCampaignEmailMessage' for a more convenient constructor.
data PinpointCampaignCampaignEmailMessage =
  PinpointCampaignCampaignEmailMessage
  { _pinpointCampaignCampaignEmailMessageBody :: Maybe (Val Text)
  , _pinpointCampaignCampaignEmailMessageFromAddress :: Maybe (Val Text)
  , _pinpointCampaignCampaignEmailMessageHtmlBody :: Maybe (Val Text)
  , _pinpointCampaignCampaignEmailMessageTitle :: Maybe (Val Text)
  } deriving (Show, Eq)

instance ToJSON PinpointCampaignCampaignEmailMessage where
  toJSON PinpointCampaignCampaignEmailMessage{..} =
    object $
    catMaybes
    [ fmap (("Body",) . toJSON) _pinpointCampaignCampaignEmailMessageBody
    , fmap (("FromAddress",) . toJSON) _pinpointCampaignCampaignEmailMessageFromAddress
    , fmap (("HtmlBody",) . toJSON) _pinpointCampaignCampaignEmailMessageHtmlBody
    , fmap (("Title",) . toJSON) _pinpointCampaignCampaignEmailMessageTitle
    ]

-- | Constructor for 'PinpointCampaignCampaignEmailMessage' containing
-- required fields as arguments.
pinpointCampaignCampaignEmailMessage
  :: PinpointCampaignCampaignEmailMessage
pinpointCampaignCampaignEmailMessage  =
  PinpointCampaignCampaignEmailMessage
  { _pinpointCampaignCampaignEmailMessageBody = Nothing
  , _pinpointCampaignCampaignEmailMessageFromAddress = Nothing
  , _pinpointCampaignCampaignEmailMessageHtmlBody = Nothing
  , _pinpointCampaignCampaignEmailMessageTitle = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pinpoint-campaign-campaignemailmessage.html#cfn-pinpoint-campaign-campaignemailmessage-body
pccemBody :: Lens' PinpointCampaignCampaignEmailMessage (Maybe (Val Text))
pccemBody = lens _pinpointCampaignCampaignEmailMessageBody (\s a -> s { _pinpointCampaignCampaignEmailMessageBody = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pinpoint-campaign-campaignemailmessage.html#cfn-pinpoint-campaign-campaignemailmessage-fromaddress
pccemFromAddress :: Lens' PinpointCampaignCampaignEmailMessage (Maybe (Val Text))
pccemFromAddress = lens _pinpointCampaignCampaignEmailMessageFromAddress (\s a -> s { _pinpointCampaignCampaignEmailMessageFromAddress = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pinpoint-campaign-campaignemailmessage.html#cfn-pinpoint-campaign-campaignemailmessage-htmlbody
pccemHtmlBody :: Lens' PinpointCampaignCampaignEmailMessage (Maybe (Val Text))
pccemHtmlBody = lens _pinpointCampaignCampaignEmailMessageHtmlBody (\s a -> s { _pinpointCampaignCampaignEmailMessageHtmlBody = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pinpoint-campaign-campaignemailmessage.html#cfn-pinpoint-campaign-campaignemailmessage-title
pccemTitle :: Lens' PinpointCampaignCampaignEmailMessage (Maybe (Val Text))
pccemTitle = lens _pinpointCampaignCampaignEmailMessageTitle (\s a -> s { _pinpointCampaignCampaignEmailMessageTitle = a })