]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/MultipartForm.hs
Lucu 0.7
[Lucu.git] / Network / HTTP / Lucu / MultipartForm.hs
index c9684b18892e3e2259e1818a13385f91cfa98b8c..a2ee492bbb401c1268b74be37dbf5a7d90220046 100644 (file)
@@ -18,12 +18,11 @@ import           Network.HTTP.Lucu.Utils
 
 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
       }
 
@@ -50,7 +49,7 @@ instance Show ContDispo where
                                    value
 
 
-multipartFormP :: String -> Parser [FormData]
+multipartFormP :: String -> Parser [(String, FormData)]
 multipartFormP boundary
     = do parts <- many (partP boundary)
          _     <- string "--"
@@ -58,7 +57,7 @@ multipartFormP boundary
          _     <- string "--"
          _     <- crlf
          eof
-         return $ map partToFormData parts
+         return $ map partToFormPair parts
 
 
 partP :: String -> Parser Part
@@ -82,17 +81,15 @@ bodyP boundary
          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