{-# LANGUAGE OverloadedStrings #-}
module Network.API.Mandrill.HTTP where

import Network.API.Mandrill.Settings
import Network.API.Mandrill.Types
import qualified Data.Text as T
import Data.Monoid
import Data.Aeson
import Network.Wreq
import Control.Lens

toMandrillResponse :: (MandrillEndpoint ep, FromJSON a, ToJSON rq)
                   => ep
                   -> rq
                   -> IO (MandrillResponse a)
toMandrillResponse ep rq = do
  let fullUrl = mandrillUrl <> toUrl ep
  res <- asJSON =<< post (T.unpack fullUrl) (toJSON rq)
  return $ res ^. responseBody