X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FMultipartForm.hs;h=c4631300e9efae3b3d14ac57917597ef685032fd;hb=70bf5bd248aa426ca4e410b3fb9a0529354aedaf;hp=c9684b18892e3e2259e1818a13385f91cfa98b8c;hpb=9ac730212cb361eb10e5fe4ad0eec6758e2b200a;p=Lucu.git diff --git a/Network/HTTP/Lucu/MultipartForm.hs b/Network/HTTP/Lucu/MultipartForm.hs index c9684b1..c463130 100644 --- a/Network/HTTP/Lucu/MultipartForm.hs +++ b/Network/HTTP/Lucu/MultipartForm.hs @@ -1,3 +1,7 @@ +{-# LANGUAGE + UnboxedTuples + , UnicodeSyntax + #-} module Network.HTTP.Lucu.MultipartForm ( FormData(..) , multipartFormP @@ -18,12 +22,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 +53,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 +61,7 @@ multipartFormP boundary _ <- string "--" _ <- crlf eof - return $ map partToFormData parts + return $ map partToFormPair parts partP :: String -> Parser Part @@ -82,17 +85,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