{-# 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 Eq EventHook -> (EventHook -> EventHook -> Ordering) -> (EventHook -> EventHook -> Bool) -> (EventHook -> EventHook -> Bool) -> (EventHook -> EventHook -> Bool) -> (EventHook -> EventHook -> Bool) -> (EventHook -> EventHook -> EventHook) -> (EventHook -> EventHook -> EventHook) -> Ord 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 $cp1Ord :: Eq EventHook Ord,EventHook -> EventHook -> Bool (EventHook -> EventHook -> Bool) -> (EventHook -> EventHook -> Bool) -> Eq EventHook 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" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventSent Text "deferral" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventDeferred Text "soft_bounce" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventSoftBounced Text "hard_bounce" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventHardBounced Text "open" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventOpened Text "click" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventClicked Text "spam" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventMarkedAsSpam Text "reject" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventRejected Text "unsub" -> EventHook -> Parser EventHook forall (f :: * -> *) a. Applicative f => a -> f a pure EventHook EventUnsubscribed Text x -> String -> Parser EventHook forall (m :: * -> *) a. MonadFail m => String -> m a fail (String "can't parse " String -> ShowS forall a. [a] -> [a] -> [a] ++ Text -> String 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 (String -> Text) -> String -> Text forall a b. (a -> b) -> a -> b $ EventHook -> String 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 (Int -> WebhookAddRq -> ShowS) -> (WebhookAddRq -> String) -> ([WebhookAddRq] -> ShowS) -> Show WebhookAddRq 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