on master help sign in
add Http.jsonPart for uploading JSON that's kept in memory
4101a0bEvan Czaplicki
builder/src/Http.hs+13
@@ -16,6 +16,7 @@ module Http
16 -- upload
16 -- upload
17 , upload
17 , upload
18 , filePart
18 , filePart
19+ , jsonPart
19 , stringPart
20 , stringPart
20 )
21 )
21 where
22 where
@@ -26,6 +27,7 @@ import qualified Codec.Archive.Zip as Zip
26import Control.Exception (SomeException, handle)
27import Control.Exception (SomeException, handle)
27import qualified Data.Binary as Binary
28import qualified Data.Binary as Binary
28import qualified Data.Binary.Get as Binary
29import qualified Data.Binary.Get as Binary
30+import qualified Data.ByteString.Builder as B
29import qualified Data.ByteString.Char8 as BS
31import qualified Data.ByteString.Char8 as BS
30import qualified Data.Digest.Pure.SHA as SHA
32import qualified Data.Digest.Pure.SHA as SHA
31import qualified Data.String as String
33import qualified Data.String as String
@@ -34,8 +36,10 @@ import Network.HTTP.Client
34import Network.HTTP.Client.TLS (tlsManagerSettings)
36import Network.HTTP.Client.TLS (tlsManagerSettings)
35import Network.HTTP.Types.Header (Header, hAccept, hAcceptEncoding, hUserAgent)
37import Network.HTTP.Types.Header (Header, hAccept, hAcceptEncoding, hUserAgent)
36import Network.HTTP.Types.Method (Method, methodGet, methodPost)
38import Network.HTTP.Types.Method (Method, methodGet, methodPost)
39+import qualified Network.HTTP.Client as Multi (RequestBody(RequestBodyLBS))
37import qualified Network.HTTP.Client.MultipartFormData as Multi
40import qualified Network.HTTP.Client.MultipartFormData as Multi
38
41
42+import qualified Json.Encode as Encode
39import qualified Elm.Version as V
43import qualified Elm.Version as V
40
44
41
45
@@ -226,6 +230,15 @@ filePart name filePath =
226 Multi.partFileSource (String.fromString name) filePath
230 Multi.partFileSource (String.fromString name) filePath
227
231
228
232
233+jsonPart :: String -> FilePath -> Encode.Value -> Multi.Part
234+jsonPart name filePath value =
235+ let
236+ body =
237+ Multi.RequestBodyLBS $ B.toLazyByteString $ Encode.encodeUgly value
238+ in
239+ Multi.partFileRequestBody (String.fromString name) filePath body
240+
241+
229stringPart :: String -> String -> Multi.Part
242stringPart :: String -> String -> Multi.Part
230stringPart name string =
243stringPart name string =
231 Multi.partBS (String.fromString name) (BS.pack string)
244 Multi.partBS (String.fromString name) (BS.pack string)