{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} module Network.API.Mandrill.Webhooks where import Control.Applicative (pure) import Control.Monad (mzero) import Data.Aeson (FromJSON, ToJSON, parseJSON, toJSON) import Data.Aeson (Value (String)) import Data.Aeson.TH (defaultOptions, deriveJSON) import Data.Aeson.Types (fieldLabelModifier) import Data.Set (Set) import Data.Text (Text) import qualified Data.Text as T 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) data EventHook = EventSent | EventDeferred | EventHardBounced | EventSoftBounced | EventOpened | EventClicked | EventMarkedAsSpam | EventUnsubscribed | EventRejected deriving (Eq EventHook EventHook -> EventHook -> Bool EventHook -> EventHook -> Ordering EventHook -> EventHook -> EventHook forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: EventHook -> EventHook -> EventHook $cmin :: EventHook -> EventHook -> EventHook max :: EventHook -> EventHook -> EventHook $cmax :: EventHook -> EventHook -> EventHook >= :: EventHook -> EventHook -> Bool $c>= :: EventHook -> EventHook -> Bool > :: EventHook -> EventHook -> Bool $c> :: EventHook -> EventHook -> Bool <= :: EventHook -> EventHook -> Bool $c<= :: EventHook -> EventHook -> Bool < :: EventHook -> EventHook -> Bool $c< :: EventHook -> EventHook -> Bool compare :: EventHook -> EventHook -> Ordering $ccompare :: EventHook -> EventHook -> Ordering Ord,EventHook -> EventHook -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: EventHook -> EventHook -> Bool $c/= :: EventHook -> EventHook -> Bool == :: EventHook -> EventHook -> Bool $c== :: EventHook -> EventHook -> Bool Eq) instance Show EventHook where show :: EventHook -> String show EventHook e = case EventHook e of EventHook EventSent -> String "send" EventHook EventDeferred -> String "deferral" EventHook EventSoftBounced -> String "soft_bounce" EventHook EventHardBounced -> String "hard_bounce" EventHook EventOpened -> String "open" EventHook EventClicked -> String "click" EventHook EventMarkedAsSpam -> String "spam" EventHook EventUnsubscribed -> String "unsub" EventHook EventRejected -> String "reject" instance FromJSON EventHook where parseJSON :: Value -> Parser EventHook parseJSON (String Text s) = case Text s of Text "send" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventSent Text "deferral" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventDeferred Text "soft_bounce" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventSoftBounced Text "hard_bounce" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventHardBounced Text "open" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventOpened Text "click" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventClicked Text "spam" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventMarkedAsSpam Text "reject" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventRejected Text "unsub" -> forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventUnsubscribed Text x -> forall (m :: * -> *) a. MonadFail m => String -> m a fail (String "can't parse " forall a. [a] -> [a] -> [a] ++ forall a. Show a => a -> String show Text x) instance ToJSON EventHook where toJSON :: EventHook -> Value toJSON EventHook e = Text -> Value String (String -> Text T.pack forall a b. (a -> b) -> a -> b $ forall a. Show a => a -> String show EventHook e) data WebhookAddRq = WebhookAddRq { WebhookAddRq -> Text _warq_key :: MandrillKey , WebhookAddRq -> Text _warq_url :: Text , WebhookAddRq -> Text _warq_description :: Text , WebhookAddRq -> Set EventHook _warq_events :: Set EventHook } deriving Int -> WebhookAddRq -> ShowS [WebhookAddRq] -> ShowS WebhookAddRq -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [WebhookAddRq] -> ShowS $cshowList :: [WebhookAddRq] -> ShowS show :: WebhookAddRq -> String $cshow :: WebhookAddRq -> String showsPrec :: Int -> WebhookAddRq -> ShowS $cshowsPrec :: Int -> WebhookAddRq -> ShowS Show makeLenses ''WebhookAddRq deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''WebhookAddRq