import Network.HTTP.Lucu.Utils
-data Part = Part Headers String
+data Part = Part Headers L8.ByteString
-- |This data type represents a form entry name, form value and
-- possibly an uploaded file name.
= FormData {
fdName :: String
, fdFileName :: Maybe String
- , fdContent :: String
+ , fdContent :: L8.ByteString
}
instance HasHeaders Part where
multipartFormP :: String -> Parser [FormData]
multipartFormP boundary
= do parts <- many (partP boundary)
- string "--"
- string boundary
- string "--"
- crlf
+ _ <- string "--"
+ _ <- string boundary
+ _ <- string "--"
+ _ <- crlf
eof
return $ map partToFormData 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
-bodyP :: String -> Parser String
+bodyP :: String -> Parser L8.ByteString
bodyP boundary
- = do body <- many $
- do notFollowedBy $ do crlf
- string "--"
- string boundary
+ = do body <- manyChar $
+ do notFollowedBy $ ( crlf >>
+ string "--" >>
+ string boundary )
anyChar
- crlf
+ _ <- crlf
return body
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)