@@ -14,12 +14,14 @@ import Data.Aeson.Parser
1414import Data.Aeson.Types
1515import Data.Attoparsec.ByteString
1616import Data.ByteString.Lazy hiding (pack)
17+import qualified Data.ByteString.Char8 as BS
1718import Data.String
1819import Data.String.Conversions
1920import Data.Text
2021import Data.Text.Encoding
2122import Network.HTTP.Client
2223import Network.HTTP.Client.TLS
24+import Network.HTTP.Media
2325import Network.HTTP.Types
2426import Network.URI
2527import Servant.Common.BaseUrl
@@ -31,12 +33,12 @@ import qualified Network.HTTP.Client as Client
3133data Req = Req
3234 { reqPath :: String
3335 , qs :: QueryText
34− , reqBody :: ByteString
36+ , reqBody :: Maybe (ByteString, MediaType)
3537 , headers :: [(String, Text)]
3638 }
3739
3840defReq :: Req
39−defReq = Req "" [] "" []
41+defReq = Req "" [] Nothing []
4042
4143appendToPath :: String -> Req -> Req
4244appendToPath p req =
@@ -62,8 +64,8 @@ addHeader name val req = req { headers = headers req
6264 ++ [(name, toText val)]
6365 }
6466
65−setRQBody :: ByteString -> Req -> Req
66−setRQBody b req = req { reqBody = b }
67+setRQBody :: ByteString -> MediaType -> Req -> Req
68+setRQBody b t req = req { reqBody = Just (b, t) }
6769
6870reqToRequest :: (Functor m, MonadThrow m) => Req -> BaseUrl -> m Request
6971reqToRequest req (BaseUrl reqScheme reqHost reqPort) =
@@ -80,9 +82,13 @@ reqToRequest req (BaseUrl reqScheme reqHost reqPort) =
8082 , uriPath = reqPath req
8183 }
8284
83− setrqb r = r { requestBody = RequestBodyLBS (reqBody req) }
85+ setrqb r = case (reqBody req) of
86+ Nothing -> r
87+ Just (b,t) -> r { requestBody = RequestBodyLBS b
88+ , requestHeaders = [(hContentType, BS.pack . show $ t)] }
8489 setQS = setQueryString $ queryTextToQuery (qs req)
85− setheaders r = r { requestHeaders = Prelude.map toProperHeader (headers req) }
90+ setheaders r = r { requestHeaders = requestHeaders r
91+ ++ Prelude.map toProperHeader (headers req) }
8692
8793 toProperHeader (name, val) =
8894 (fromString name, encodeUtf8 val)