{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Network.API.Mandrill.Messages.Types where

import           Data.Char
import           Data.Time
import qualified Data.Text as T
import           Control.Monad
import           Data.Monoid
import           Data.Aeson
import           Data.Aeson.Types
import           Data.Aeson.TH
import           Lens.Micro.TH (makeLenses)

import           Network.API.Mandrill.Types


--------------------------------------------------------------------------------
data MessagesSendRq = MessagesSendRq {
    MessagesSendRq -> MandrillKey
_msrq_key :: MandrillKey
  , MessagesSendRq -> MandrillMessage
_msrq_message :: MandrillMessage
  , MessagesSendRq -> Maybe Bool
_msrq_async :: Maybe Bool
  , MessagesSendRq -> Maybe MandrillKey
_msrq_ip_pool :: Maybe T.Text
  , MessagesSendRq -> Maybe UTCTime
_msrq_send_at :: Maybe UTCTime
  } deriving Int -> MessagesSendRq -> ShowS
[MessagesSendRq] -> ShowS
MessagesSendRq -> String
(Int -> MessagesSendRq -> ShowS)
-> (MessagesSendRq -> String)
-> ([MessagesSendRq] -> ShowS)
-> Show MessagesSendRq
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessagesSendRq] -> ShowS
$cshowList :: [MessagesSendRq] -> ShowS
show :: MessagesSendRq -> String
$cshow :: MessagesSendRq -> String
showsPrec :: Int -> MessagesSendRq -> ShowS
$cshowsPrec :: Int -> MessagesSendRq -> ShowS
Show

makeLenses ''MessagesSendRq
deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MessagesSendRq

--------------------------------------------------------------------------------
data MessagesSendTemplateRq = MessagesSendTemplateRq {
    MessagesSendTemplateRq -> MandrillKey
_mstrq_key              :: MandrillKey
  , MessagesSendTemplateRq -> MandrillKey
_mstrq_template_name    :: T.Text
  , MessagesSendTemplateRq -> [MandrillTemplateContent]
_mstrq_template_content :: [MandrillTemplateContent]
  , MessagesSendTemplateRq -> MandrillMessage
_mstrq_message          :: MandrillMessage
  , MessagesSendTemplateRq -> Maybe Bool
_mstrq_async            :: Maybe Bool
  , MessagesSendTemplateRq -> Maybe MandrillKey
_mstrq_ip_pool          :: Maybe T.Text
  , MessagesSendTemplateRq -> Maybe UTCTime
_mstrq_send_at          :: Maybe UTCTime
  } deriving Int -> MessagesSendTemplateRq -> ShowS
[MessagesSendTemplateRq] -> ShowS
MessagesSendTemplateRq -> String
(Int -> MessagesSendTemplateRq -> ShowS)
-> (MessagesSendTemplateRq -> String)
-> ([MessagesSendTemplateRq] -> ShowS)
-> Show MessagesSendTemplateRq
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessagesSendTemplateRq] -> ShowS
$cshowList :: [MessagesSendTemplateRq] -> ShowS
show :: MessagesSendTemplateRq -> String
$cshow :: MessagesSendTemplateRq -> String
showsPrec :: Int -> MessagesSendTemplateRq -> ShowS
$cshowsPrec :: Int -> MessagesSendTemplateRq -> ShowS
Show

makeLenses ''MessagesSendTemplateRq
deriveJSON defaultOptions { fieldLabelModifier = drop 7 } ''MessagesSendTemplateRq

--------------------------------------------------------------------------------
data MessagesResponse = MessagesResponse {
    MessagesResponse -> MandrillKey
_mres_email :: !T.Text
    -- ^ The email address of the recipient
  , MessagesResponse -> MandrillEmailStatus
_mres_status :: MandrillEmailStatus
    -- ^ The sending status of the recipient
  , MessagesResponse -> Maybe MandrillRejectReason
_mres_reject_reason :: Maybe MandrillRejectReason
    -- ^ The reason for the rejection if the recipient status is "rejected"
  , MessagesResponse -> MandrillKey
_mres__id    :: !T.Text
    -- ^ The message's unique id
  } deriving Int -> MessagesResponse -> ShowS
[MessagesResponse] -> ShowS
MessagesResponse -> String
(Int -> MessagesResponse -> ShowS)
-> (MessagesResponse -> String)
-> ([MessagesResponse] -> ShowS)
-> Show MessagesResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessagesResponse] -> ShowS
$cshowList :: [MessagesResponse] -> ShowS
show :: MessagesResponse -> String
$cshow :: MessagesResponse -> String
showsPrec :: Int -> MessagesResponse -> ShowS
$cshowsPrec :: Int -> MessagesResponse -> ShowS
Show

makeLenses ''MessagesResponse
deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MessagesResponse