{-# LANGUAGE TemplateHaskell #-} module Network.API.Mandrill.Inbound where import Control.Lens import Data.Aeson (FromJSON, ToJSON, parseJSON, toJSON) import Data.Aeson.TH (defaultOptions, deriveJSON) import Data.Aeson.Types (fieldLabelModifier) import Data.Text (Text) import Network.API.Mandrill.HTTP (toMandrillResponse) import Network.API.Mandrill.Settings import Network.API.Mandrill.Types import Network.HTTP.Client (Manager) data DomainAddRq = DomainAddRq { _darq_key :: MandrillKey , _darq_domain :: Text } deriving Show makeLenses ''DomainAddRq deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''DomainAddRq data DomainAddResponse = DomainAddResponse { _dares_domain :: Text , _dares_created_at :: MandrillDate , _dares_valid_mx :: Bool } deriving Show makeLenses ''DomainAddResponse deriveJSON defaultOptions { fieldLabelModifier = drop 7 } ''DomainAddResponse data RouteAddResponse = RouteAddResponse { _rares_id :: Text , _rares_pattern :: Text , _rares_url :: Text } deriving Show makeLenses ''RouteAddResponse deriveJSON defaultOptions { fieldLabelModifier = drop 7 } ''RouteAddResponse data RouteAddRq = RouteAddRq { _rarq_key :: Text , _rarq_domain :: Text , _rarq_pattern :: Text , _rarq_url :: Text } deriving Show makeLenses ''RouteAddRq deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''RouteAddRq addDomain :: MandrillKey -- ^ The API key -> Text -- ^ The domain to add -> Maybe Manager -> IO (MandrillResponse DomainAddResponse) addDomain k dom = toMandrillResponse DomainsAdd (DomainAddRq k dom) addRoute :: MandrillKey -- ^ The API key -> Text -- ^ The domain to add -> Text -- ^ the pattern including wildcards -> Text -- ^ URL to forward to -> Maybe Manager -> IO (MandrillResponse RouteAddResponse) addRoute k dom pattern forward = toMandrillResponse RoutesAdd (RouteAddRq k dom pattern forward)