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