X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FMultipartForm.hs;h=a2ee492bbb401c1268b74be37dbf5a7d90220046;hb=1c692e4261ccc65d89a0aeaa8c9971d9a91c276f;hp=e73b74d19b814f3830106828170b883d617bee23;hpb=b0efa668bb881d1c9db4b852b1b9063a2db12b3d;p=Lucu.git diff --git a/Network/HTTP/Lucu/MultipartForm.hs b/Network/HTTP/Lucu/MultipartForm.hs index e73b74d..a2ee492 100644 --- a/Network/HTTP/Lucu/MultipartForm.hs +++ b/Network/HTTP/Lucu/MultipartForm.hs @@ -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,22 +49,22 @@ instance Show ContDispo where value -multipartFormP :: String -> Parser [FormData] +multipartFormP :: String -> Parser [(String, FormData)] multipartFormP boundary = do parts <- many (partP boundary) - string "--" - string boundary - string "--" - crlf + _ <- string "--" + _ <- string boundary + _ <- string "--" + _ <- crlf eof - return $ map partToFormData parts + return $ map partToFormPair parts partP :: String -> Parser Part partP boundary - = do string "--" - string boundary - crlf -- バウンダリの末尾に -- が付いてゐたらここで fail する。 + = do _ <- string "--" + _ <- string boundary + _ <- crlf -- バウンダリの末尾に -- が付いてゐたらここで fail する。 hs <- headersP body <- bodyP boundary return $ Part hs body @@ -74,25 +73,23 @@ partP boundary bodyP :: String -> Parser L8.ByteString bodyP boundary = do body <- manyChar $ - do notFollowedBy $ do crlf - string "--" - string boundary + do notFollowedBy $ ( crlf >> + string "--" >> + string boundary ) anyChar - crlf + _ <- crlf 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 @@ -146,10 +143,10 @@ contDispoP = do dispoType <- token return $ ContDispo dispoType params where paramP :: Parser (String, String) - paramP = do many lws - char ';' - many lws - name <- token - char '=' + paramP = do _ <- many lws + _ <- char ';' + _ <- many lws + name <- token + _ <- char '=' value <- token <|> quotedStr return (name, value)