@@ -14,12 +14,14 @@ import Data.Aeson.Parser
14import Data.Aeson.Types
14import Data.Aeson.Types
15import Data.Attoparsec.ByteString
15import Data.Attoparsec.ByteString
16import Data.ByteString.Lazy hiding (pack)
16import Data.ByteString.Lazy hiding (pack)
17+import qualified Data.ByteString.Char8 as BS
17import Data.String
18import Data.String
18import Data.String.Conversions
19import Data.String.Conversions
19import Data.Text
20import Data.Text
20import Data.Text.Encoding
21import Data.Text.Encoding
21import Network.HTTP.Client
22import Network.HTTP.Client
22import Network.HTTP.Client.TLS
23import Network.HTTP.Client.TLS
24+import Network.HTTP.Media
23import Network.HTTP.Types
25import Network.HTTP.Types
24import Network.URI
26import Network.URI
25import Servant.Common.BaseUrl
27import Servant.Common.BaseUrl
@@ -31,12 +33,12 @@ import qualified Network.HTTP.Client as Client
31data Req = Req
33data Req = Req
32 { reqPath :: String
34 { reqPath :: String
33 , qs :: QueryText
35 , qs :: QueryText
34− , reqBody :: ByteString
36+ , reqBody :: Maybe (ByteString, MediaType)
35 , headers :: [(String, Text)]
37 , headers :: [(String, Text)]
38defReq :: Req
40defReq :: Req
39−defReq = Req "" [] "" []
41+defReq = Req "" [] Nothing []
41appendToPath :: String -> Req -> Req
43appendToPath :: String -> Req -> Req
42appendToPath p req =
44appendToPath p req =
@@ -62,8 +64,8 @@ addHeader name val req = req { headers = headers req
62 ++ [(name, toText val)]
64 ++ [(name, toText val)]
65−setRQBody :: ByteString -> Req -> Req
67+setRQBody :: ByteString -> MediaType -> Req -> Req
66−setRQBody b req = req { reqBody = b }
68+setRQBody b t req = req { reqBody = Just (b, t) }
68reqToRequest :: (Functor m, MonadThrow m) => Req -> BaseUrl -> m Request
70reqToRequest :: (Functor m, MonadThrow m) => Req -> BaseUrl -> m Request
69reqToRequest req (BaseUrl reqScheme reqHost reqPort) =
71reqToRequest req (BaseUrl reqScheme reqHost reqPort) =
@@ -80,9 +82,13 @@ reqToRequest req (BaseUrl reqScheme reqHost reqPort) =
80 , uriPath = reqPath req
82 , uriPath = reqPath req
85+ setrqb r = case (reqBody req) of
83− setrqb r = r { requestBody = RequestBodyLBS (reqBody req) }
87+ Just (b,t) -> r { requestBody = RequestBodyLBS b
88+ , requestHeaders = [(hContentType, BS.pack . show $ t)] }
84 setQS = setQueryString $ queryTextToQuery (qs req)
89 setQS = setQueryString $ queryTextToQuery (qs req)
90+ setheaders r = r { requestHeaders = requestHeaders r
85− setheaders r = r { requestHeaders = Prelude.map toProperHeader (headers req) }
91+ ++ Prelude.map toProperHeader (headers req) }
87 toProperHeader (name, val) =
93 toProperHeader (name, val) =
88 (fromString name, encodeUtf8 val)
94 (fromString name, encodeUtf8 val)