http-dispatch-0.1.0.0: src/Network/HTTP/Dispatch/Core.hs
{-# LANGUAGE OverloadedStrings #-}
module Network.HTTP.Dispatch.Core
( HTTPRequest(..)
, HTTPResponse(..)
, runRequest
, get
, post
, patch
, delete
, put
, simpleGet
, postString
, postAeson
) where
import qualified Data.Aeson as Aeson (ToJSON, encode)
import qualified Data.ByteString.Lazy as LBS
import qualified Data.ByteString.Lazy.Char8 as LBSC
import Network.HTTP.Dispatch.Request
import Network.HTTP.Dispatch.Types
type Url = String
-- Request API
get :: Url -> [Header] -> HTTPRequest
get url headers = HTTPRequest GET url headers Nothing
simpleGet :: Url -> HTTPRequest
simpleGet url = HTTPRequest GET url [] Nothing
-- Post request with a lazy bytestring payload
post :: Url -> [Header] -> LBS.ByteString -> HTTPRequest
post url headers body = HTTPRequest POST url headers (pure body)
-- Post request with a string payload
postString :: String -> [Header] -> String -> HTTPRequest
postString url headers body = HTTPRequest POST url headers (pure . LBSC.pack $ body)
-- Post request where the payload is some type that has a ToJSON instance defined
postAeson :: Aeson.ToJSON a => Url -> [Header] -> a -> HTTPRequest
postAeson url headers body = HTTPRequest POST url headers (pure $ Aeson.encode body)
put :: String -> [Header] -> LBS.ByteString -> HTTPRequest
put url headers body = HTTPRequest PUT url headers (pure body)
delete :: String -> [Header] -> Maybe LBS.ByteString -> HTTPRequest
delete url headers = HTTPRequest DELETE url headers
patch :: String -> [Header] -> LBS.ByteString -> HTTPRequest
patch url headers body = HTTPRequest PATCH url headers (pure body)