@@ -1,6 +1,6 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2−{-# LANGUAGE DeriveFunctor #-}
3{-# LANGUAGE DeriveFoldable #-}
2{-# LANGUAGE DeriveFoldable #-}
3+{-# LANGUAGE DeriveFunctor #-}
4{-# LANGUAGE DeriveTraversable #-}
4{-# LANGUAGE DeriveTraversable #-}
5{-# LANGUAGE OverloadedStrings #-}
5{-# LANGUAGE OverloadedStrings #-}
6{-# LANGUAGE RankNTypes #-}
6{-# LANGUAGE RankNTypes #-}
@@ -9,6 +9,7 @@
9module Network.API.Mandrill.Types where
9module Network.API.Mandrill.Types where
11import Control.Applicative
11import Control.Applicative
12+import Control.Monad (mzero)
12import Data.Char
13import Data.Char
13import Data.Maybe
14import Data.Maybe
14import Data.Time
15import Data.Time
@@ -37,7 +38,7 @@ import qualified Data.Text.Encoding as TL
37import qualified Data.Text.Lazy as TL
38import qualified Data.Text.Lazy as TL
38import qualified Text.Blaze.Html as Blaze
39import qualified Text.Blaze.Html as Blaze
39import qualified Text.Blaze.Html.Renderer.Text as Blaze
40import qualified Text.Blaze.Html.Renderer.Text as Blaze
40−
41+import qualified Text.Email.Validate as TEV
42timeParse :: ParseTime t => TimeLocale -> String -> String -> Maybe t
43timeParse :: ParseTime t => TimeLocale -> String -> String -> Maybe t
43#if MIN_VERSION_time(1,5,0)
44#if MIN_VERSION_time(1,5,0)
@@ -386,3 +387,13 @@ instance FromJSON MandrillDate where
386 case timeParse defaultTimeLocale "%Y-%m-%d %I:%M:%S%Q" (T.unpack t) of
387 case timeParse defaultTimeLocale "%Y-%m-%d %I:%M:%S%Q" (T.unpack t) of
387 Just d -> pure $ MandrillDate d
388 Just d -> pure $ MandrillDate d
388 _ -> fail "could not parse Mandrill date"
389 _ -> fail "could not parse Mandrill date"
392+instance ToJSON TEV.EmailAddress where
393+ toJSON = String . TL.decodeUtf8 . TEV.toByteString
395+instance FromJSON TEV.EmailAddress where
396+ parseJSON (String s) = case TEV.emailAddress (TL.encodeUtf8 s) of