]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/MultipartForm.hs
The attoparsec branch. It doesn't even compile for now.
[Lucu.git] / Network / HTTP / Lucu / MultipartForm.hs
index c9684b18892e3e2259e1818a13385f91cfa98b8c..741427f271636e48eb3d1cf060b4fbf794c6c662 100644 (file)
@@ -1,29 +1,29 @@
+{-# LANGUAGE
+    UnboxedTuples
+  , UnicodeSyntax
+  #-}
 module Network.HTTP.Lucu.MultipartForm
     ( FormData(..)
     , multipartFormP
     )
     where
-
 import qualified Data.ByteString.Char8 as C8
 import qualified Data.ByteString.Lazy.Char8 as L8
 import           Data.Char
 import           Data.List
 import           Network.HTTP.Lucu.Abortion
 import           Network.HTTP.Lucu.Headers
-import           Network.HTTP.Lucu.Parser
 import           Network.HTTP.Lucu.Parser.Http
 import           Network.HTTP.Lucu.Response
 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 +50,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 +58,7 @@ multipartFormP boundary
          _     <- string "--"
          _     <- crlf
          eof
-         return $ map partToFormData parts
+         return $ map partToFormPair parts
 
 
 partP :: String -> Parser Part
@@ -82,17 +82,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