{-# LANGUAGE TemplateHaskell #-}
module Network.API.Mandrill.Senders where
import Data.Aeson (FromJSON, ToJSON, parseJSON,
toJSON)
import Data.Aeson.TH (defaultOptions, deriveJSON)
import Data.Aeson.Types (Value (..), fieldLabelModifier)
import Data.Text (Text)
import Data.Text.Encoding (decodeUtf8, encodeUtf8)
import Lens.Micro.TH (makeLenses)
import Network.API.Mandrill.HTTP (toMandrillResponse)
import Network.API.Mandrill.Settings
import Network.API.Mandrill.Types
import Network.HTTP.Client (Manager)
import qualified Text.Email.Validate as TEV
data VerifyDomainRq =
VerifyDomainRq
{ VerifyDomainRq -> MandrillKey
_vdrq_key :: MandrillKey
, VerifyDomainRq -> MandrillKey
_vdrq_domain :: Text
, VerifyDomainRq -> MandrillKey
_vdrq_mailbox :: Text
} deriving Int -> VerifyDomainRq -> ShowS
[VerifyDomainRq] -> ShowS
VerifyDomainRq -> String
(Int -> VerifyDomainRq -> ShowS)
-> (VerifyDomainRq -> String)
-> ([VerifyDomainRq] -> ShowS)
-> Show VerifyDomainRq
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VerifyDomainRq] -> ShowS
$cshowList :: [VerifyDomainRq] -> ShowS
show :: VerifyDomainRq -> String
$cshow :: VerifyDomainRq -> String
showsPrec :: Int -> VerifyDomainRq -> ShowS
$cshowsPrec :: Int -> VerifyDomainRq -> ShowS
Show
makeLenses ''VerifyDomainRq
deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''VerifyDomainRq
data VerifyDomainResponse =
VerifyDomainResponse
{ VerifyDomainResponse -> MandrillKey
_vdres_status :: Text
, VerifyDomainResponse -> MandrillKey
_vdres_domain :: Text
, VerifyDomainResponse -> MandrillEmail
_vdres_email :: MandrillEmail
} deriving Int -> VerifyDomainResponse -> ShowS
[VerifyDomainResponse] -> ShowS
VerifyDomainResponse -> String
(Int -> VerifyDomainResponse -> ShowS)
-> (VerifyDomainResponse -> String)
-> ([VerifyDomainResponse] -> ShowS)
-> Show VerifyDomainResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VerifyDomainResponse] -> ShowS
$cshowList :: [VerifyDomainResponse] -> ShowS
show :: VerifyDomainResponse -> String
$cshow :: VerifyDomainResponse -> String
showsPrec :: Int -> VerifyDomainResponse -> ShowS
$cshowsPrec :: Int -> VerifyDomainResponse -> ShowS
Show
makeLenses ''VerifyDomainResponse
deriveJSON defaultOptions { fieldLabelModifier = drop 7 } ''VerifyDomainResponse
verifyDomain :: MandrillKey
-> TEV.EmailAddress
-> Maybe Manager
-> IO (MandrillResponse VerifyDomainResponse)
verifyDomain :: MandrillKey
-> EmailAddress
-> Maybe Manager
-> IO (MandrillResponse VerifyDomainResponse)
verifyDomain MandrillKey
k EmailAddress
email =
MandrillCalls
-> VerifyDomainRq
-> Maybe Manager
-> IO (MandrillResponse VerifyDomainResponse)
forall ep a rq.
(MandrillEndpoint ep, FromJSON a, ToJSON rq) =>
ep -> rq -> Maybe Manager -> IO (MandrillResponse a)
toMandrillResponse MandrillCalls
VerifyDomain
(MandrillKey -> MandrillKey -> MandrillKey -> VerifyDomainRq
VerifyDomainRq MandrillKey
k (ByteString -> MandrillKey
decodeUtf8 (ByteString -> MandrillKey) -> ByteString -> MandrillKey
forall a b. (a -> b) -> a -> b
$ EmailAddress -> ByteString
TEV.domainPart EmailAddress
email) (ByteString -> MandrillKey
decodeUtf8 (ByteString -> MandrillKey) -> ByteString -> MandrillKey
forall a b. (a -> b) -> a -> b
$ EmailAddress -> ByteString
TEV.localPart EmailAddress
email))