patrol-0.1.0.1: source/library/Patrol/Client.hs
module Patrol.Client where
import qualified Control.Monad.Catch as Catch
import qualified Control.Monad.IO.Class as IO
import qualified Data.Aeson as Aeson
import qualified Network.HTTP.Client as Client
import qualified Patrol.Exception.Problem as Problem
import qualified Patrol.Type.Dsn as Dsn
import qualified Patrol.Type.Event as Event
import qualified Patrol.Type.Response as Response
store ::
(IO.MonadIO io, Catch.MonadThrow io) =>
Client.Manager ->
Dsn.Dsn ->
Event.Event ->
io Response.Response
store manager dsn event = do
request <- Event.intoRequest dsn event
response <- IO.liftIO $ Client.httpLbs request manager
either (Catch.throwM . Problem.Problem . mappend "invalid response body: ") pure
. Aeson.eitherDecode
$ Client.responseBody response