@@ -1,4 +1,7 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DeriveFoldable #-}
3+{-# LANGUAGE DeriveFunctor #-}
4+{-# LANGUAGE DeriveTraversable #-}
2{-# LANGUAGE OverloadedStrings #-}
5{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE RankNTypes #-}
6{-# LANGUAGE RankNTypes #-}
4{-# LANGUAGE ScopedTypeVariables #-}
7{-# LANGUAGE ScopedTypeVariables #-}
@@ -6,9 +9,11 @@
6module Network.API.Mandrill.Types where
9module Network.API.Mandrill.Types where
8import Control.Applicative
11import Control.Applicative
12+import Control.Monad (mzero)
9import Data.Char
13import Data.Char
10import Data.Maybe
14import Data.Maybe
11import Data.Time
15import Data.Time
16+import Lens.Micro.TH (makeLenses)
12import Network.API.Mandrill.Utils
17import Network.API.Mandrill.Utils
13import Test.QuickCheck
18import Test.QuickCheck
14import Text.Email.Validate
19import Text.Email.Validate
@@ -17,12 +22,15 @@ import Data.Time.Format (TimeLocale, defaultTimeLocale)
18import System.Locale (TimeLocale, defaultTimeLocale)
23import System.Locale (TimeLocale, defaultTimeLocale)
21import Data.Aeson
25import Data.Aeson
22import Data.Aeson.TH
26import Data.Aeson.TH
23import Data.Aeson.Types
27import Data.Aeson.Types
24import qualified Data.ByteString as B
28import qualified Data.ByteString as B
25import qualified Data.ByteString.Base64 as Base64
29import qualified Data.ByteString.Base64 as Base64
30+#if !MIN_VERSION_base(4,8,0)
32+import Data.Traversable
26import qualified Data.HashMap.Strict as H
34import qualified Data.HashMap.Strict as H
27import Data.Monoid
35import Data.Monoid
28import qualified Data.Text as T
36import qualified Data.Text as T
@@ -30,7 +38,7 @@ import qualified Data.Text.Encoding as TL
30import qualified Data.Text.Lazy as TL
38import qualified Data.Text.Lazy as TL
31import qualified Text.Blaze.Html as Blaze
39import qualified Text.Blaze.Html as Blaze
32import qualified Text.Blaze.Html.Renderer.Text as Blaze
40import qualified Text.Blaze.Html.Renderer.Text as Blaze
33−
41+import qualified Text.Email.Validate as TEV
35timeParse :: ParseTime t => TimeLocale -> String -> String -> Maybe t
43timeParse :: ParseTime t => TimeLocale -> String -> String -> Maybe t
36#if MIN_VERSION_time(1,5,0)
44#if MIN_VERSION_time(1,5,0)
@@ -45,7 +53,7 @@ data MandrillError = MandrillError {
45 , _merr_code :: !Int
53 , _merr_code :: !Int
46 , _merr_name :: !T.Text
54 , _merr_name :: !T.Text
47 , _merr_message :: !T.Text
55 , _merr_message :: !T.Text
48− } deriving Show
56+ } deriving (Show, Eq)
50makeLenses ''MandrillError
58makeLenses ''MandrillError
51deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillError
59deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillError
@@ -83,7 +91,7 @@ deriveJSON defaultOptions {
83-- which can be either a success or a failure.
91-- which can be either a success or a failure.
84data MandrillResponse k =
92data MandrillResponse k =
85 MandrillSuccess k
93 MandrillSuccess k
86− | MandrillFailure MandrillError deriving Show
94+ | MandrillFailure MandrillError deriving (Show, Eq, Functor, Foldable, Traversable)
88instance FromJSON k => FromJSON (MandrillResponse k) where
96instance FromJSON k => FromJSON (MandrillResponse k) where
89 parseJSON v = case (parseMaybe parseJSON v) :: Maybe k of
97 parseJSON v = case (parseMaybe parseJSON v) :: Maybe k of
@@ -150,6 +158,11 @@ unsafeMkMandrillHtml = MandrillHtml . Blaze.preEscapedToHtml
150mkMandrillHtml :: Blaze.Html -> MandrillHtml
158mkMandrillHtml :: Blaze.Html -> MandrillHtml
151mkMandrillHtml = MandrillHtml
159mkMandrillHtml = MandrillHtml
161+#if MIN_VERSION_base(4,11,0)
162+instance Semigroup MandrillHtml where
163+ MandrillHtml m1 <> MandrillHtml m2 = MandrillHtml (m1 <> m2)
153instance Monoid MandrillHtml where
166instance Monoid MandrillHtml where
154 mempty = MandrillHtml mempty
167 mempty = MandrillHtml mempty
155 mappend (MandrillHtml m1) (MandrillHtml m2) = MandrillHtml (m1 <> m2)
168 mappend (MandrillHtml m1) (MandrillHtml m2) = MandrillHtml (m1 <> m2)