X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FRequest.hs;h=b316730d1112174b26e8aec564b20dd4c38c2ea0;hb=8e78bc83bfe67a376293c346ae0b30f1a684c787;hp=3c235eb6e6888e55d088312cedcc3f25a6e59b98;hpb=9961a721f98b101825ef154a2122c1fc2fa6d1ac;p=Lucu.git diff --git a/Network/HTTP/Lucu/Request.hs b/Network/HTTP/Lucu/Request.hs index 3c235eb..b316730 100644 --- a/Network/HTTP/Lucu/Request.hs +++ b/Network/HTTP/Lucu/Request.hs @@ -1,38 +1,43 @@ +-- #prune + +-- |Definition of things related on HTTP request. +-- +-- In general you don't have to use this module directly. module Network.HTTP.Lucu.Request ( Method(..) - , Request - , requestP -- Parser Request + , Request(..) + , requestP ) where -import qualified Data.ByteString.Lazy.Char8 as B -import Data.ByteString.Lazy.Char8 (ByteString) import Network.HTTP.Lucu.Headers import Network.HTTP.Lucu.HttpVersion import Network.HTTP.Lucu.Parser import Network.HTTP.Lucu.Parser.Http import Network.URI +-- |This is the definition of HTTP request methods, which shouldn't +-- require any description. data Method = OPTIONS | GET | HEAD + | POST | PUT | DELETE | TRACE | CONNECT - | ExtensionMethod String + | ExtensionMethod !String deriving (Eq, Show) - +-- |This is the definition of HTTP reqest. data Request = Request { - reqMethod :: Method - , reqURI :: URI - , reqVersion :: HttpVersion - , reqHeaders :: Headers - , reqBody :: Maybe ByteString + reqMethod :: !Method + , reqURI :: !URI + , reqVersion :: !HttpVersion + , reqHeaders :: !Headers } - deriving (Show) + deriving (Show, Eq) instance HasHeaders Request where getHeaders = reqHeaders @@ -42,14 +47,13 @@ instance HasHeaders Request where requestP :: Parser Request requestP = do many crlf (method, uri, version) <- requestLineP - let req = Request { - reqMethod = method - , reqURI = uri - , reqVersion = version - , reqHeaders = emptyHeaders -- FIXME - , reqBody = Nothing -- FIXME - } - return req + headers <- headersP + return Request { + reqMethod = method + , reqURI = uri + , reqVersion = version + , reqHeaders = headers + } requestLineP :: Parser (Method, URI, HttpVersion) @@ -66,6 +70,7 @@ methodP :: Parser Method methodP = (let methods = [ ("OPTIONS", OPTIONS) , ("GET" , GET ) , ("HEAD" , HEAD ) + , ("POST" , POST ) , ("PUT" , PUT ) , ("DELETE" , DELETE ) , ("TRACE" , TRACE ) @@ -74,7 +79,7 @@ methodP = (let methods = [ ("OPTIONS", OPTIONS) in foldl (<|>) (fail "") $ map (\ (str, mth) -> string str >> return mth) methods) <|> - many1 token >>= return . ExtensionMethod + token >>= return . ExtensionMethod uriP :: Parser URI