{-# LANGUAGE OverloadedStrings #-}
module Network.HTTP.Dispatch.Core
       ( HTTPRequest(..)
       , HTTPResponse(..)
       , HTTPRequestMethod(..)
       , runRequest
       , get
       , getWithHeaders
       , post
       , postWithHeaders
       , put
       , putWithHeaders
       , patch
       , patchWithHeaders
       , delete
       , deleteWithHeaders
       ) where

import qualified Data.ByteString.Lazy          as LBS
import           Network.HTTP.Dispatch.Request
import           Network.HTTP.Dispatch.Types

-----------------------------------------------------------------------------------
-- Request API
-----------------------------------------------------------------------------------

type Url = String
type Headers = [Header]
type Body = LBS.ByteString

get :: Url -> HTTPRequest
get url = HTTPRequest GET url [] Nothing

getWithHeaders :: String -> [Header] -> HTTPRequest
getWithHeaders url headers = HTTPRequest GET url headers Nothing

post :: Url -> Body -> HTTPRequest
post url body = postWithHeaders url [] body

postWithHeaders :: Url -> Headers -> Body -> HTTPRequest
postWithHeaders url headers body = HTTPRequest POST url headers (Just body)

put :: Url -> Body -> HTTPRequest
put url body = putWithHeaders url [] body

putWithHeaders :: Url -> Headers -> Body -> HTTPRequest
putWithHeaders url headers body = HTTPRequest PUT url headers (Just body)

patch :: Url -> Body -> HTTPRequest
patch url body = patchWithHeaders url [] body

patchWithHeaders :: Url -> Headers -> Body -> HTTPRequest
patchWithHeaders url headers body = HTTPRequest PATCH url headers (Just body)

delete :: Url -> HTTPRequest
delete url = deleteWithHeaders url []

deleteWithHeaders :: Url -> Headers -> HTTPRequest
deleteWithHeaders url headers = HTTPRequest DELETE url headers Nothing