data Part = Part Headers L8.ByteString
--- |This data type represents a form entry name, form value and
--- possibly an uploaded file name.
+-- |This data type represents a form value and possibly an uploaded
+-- file name.
data FormData
= FormData {
- fdName :: String
- , fdFileName :: Maybe String
+ fdFileName :: Maybe String
, fdContent :: L8.ByteString
}
value
-multipartFormP :: String -> Parser [FormData]
+multipartFormP :: String -> Parser [(String, FormData)]
multipartFormP boundary
= do parts <- many (partP boundary)
_ <- string "--"
_ <- string "--"
_ <- crlf
eof
- return $ map partToFormData parts
+ return $ map partToFormPair parts
partP :: String -> Parser Part
return body
-partToFormData :: Part -> FormData
-partToFormData part@(Part _ body)
+partToFormPair :: Part -> (String, FormData)
+partToFormPair part@(Part _ body)
= let name = partName part
- fName = partFileName part
- in
- FormData {
- fdName = name
- , fdFileName = fName
- , fdContent = body
- }
-
+ fname = partFileName part
+ fd = FormData {
+ fdFileName = fname
+ , fdContent = body
+ }
+ in (name, fd)
partName :: Part -> String
partName = getName' . getContDispoFormData