rollbar-client-0.1.0: src/Rollbar/Client/Internal.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Rollbar.Client.Internal
( DataResponse(..)
, ResultResponse(..)
, rollbar
, baseUrl
) where
import Data.Aeson
import Data.Proxy (Proxy)
import Network.HTTP.Req
import Rollbar.Client.Settings
newtype DataResponse a = DataResponse { unDataResponse :: a }
deriving (Eq, Show)
instance FromJSON a => FromJSON (DataResponse a) where
parseJSON = withObject "DataResponse" $ \o ->
DataResponse <$> o .: "data"
data ResultResponse a = ResultResponse
{ resultResponseErr :: Integer
, resultResponseResult :: a
} deriving (Eq, Show)
instance FromJSON a => FromJSON (ResultResponse a) where
parseJSON = withObject "ResultResponse" $ \o ->
ResultResponse <$> o .: "err"
<*> o .: "result"
rollbar
:: ( HasSettings m
, HttpBody body
, HttpBodyAllowed (AllowsBody method) (ProvidesBody body)
, HttpMethod method
, HttpResponse response
, MonadHttp m
)
=> method
-> Url 'Https
-> body
-> Proxy response
-> m response
rollbar method url body response = do
Token token <- settingsToken <$> getSettings
req method url body response $ header "X-Rollbar-Access-Token" token
baseUrl :: Url 'Https
baseUrl = https "api.rollbar.com" /: "api" /: "1"