@@ -0,0 +1,70 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+{-# LANGUAGE TemplateHaskell #-}
3+module Network.API.Mandrill.Webhooks where
4+import Control.Applicative (pure)
6+import Control.Monad (mzero)
7+import Data.Aeson (FromJSON, ToJSON, parseJSON,
9+import Data.Aeson (Value (String))
10+import Data.Aeson.TH (defaultOptions, deriveJSON)
11+import Data.Aeson.Types (fieldLabelModifier)
13+import Data.Text (Text)
14+import qualified Data.Text as T
15+import Network.API.Mandrill.HTTP (toMandrillResponse)
16+import Network.API.Mandrill.Settings
17+import Network.API.Mandrill.Types
18+import Network.HTTP.Client (Manager)
32+instance Show EventHook where
35+ EventDeferred -> "deferral"
36+ EventSoftBounced -> "soft_bounce"
37+ EventHardBounced -> "hard_bounce"
38+ EventOpened -> "open"
39+ EventClicked -> "click"
40+ EventMarkedAsSpam -> "spam"
41+ EventUnsubscribed -> "unsub"
42+ EventRejected -> "reject"
43+instance FromJSON EventHook where
44+ parseJSON (String s) =
46+ "send" -> pure EventSent
47+ "deferral" -> pure EventDeferred
48+ "soft_bounce" -> pure EventSoftBounced
49+ "hard_bounce" -> pure EventHardBounced
50+ "open" -> pure EventOpened
51+ "click" -> pure EventClicked
52+ "spam" -> pure EventMarkedAsSpam
53+ "reject" -> pure EventRejected
54+ "unsub" -> pure EventUnsubscribed
55+ x -> fail ("can't parse " ++ show x)
58+instance ToJSON EventHook where
59+ toJSON e = String (T.pack $ show e)
63+ { _warq_key :: MandrillKey
65+ , _warq_description :: Text
66+ , _warq_events :: Set EventHook
69+makeLenses ''WebhookAddRq
70+deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''WebhookAddRq