module Network.HTTP.Lucu.Request
( Method(..)
- , Request
+ , Request(..)
, requestP -- Parser Request
)
where
data Method = OPTIONS
| GET
| HEAD
+ | POST
| PUT
| DELETE
| TRACE
, reqURI :: URI
, reqVersion :: HttpVersion
, reqHeaders :: Headers
- , reqBody :: Maybe ByteString
}
- deriving (Show)
+ deriving (Show, Eq)
instance HasHeaders Request where
getHeaders = reqHeaders
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)
methodP = (let methods = [ ("OPTIONS", OPTIONS)
, ("GET" , GET )
, ("HEAD" , HEAD )
+ , ("POST" , POST )
, ("PUT" , PUT )
, ("DELETE" , DELETE )
, ("TRACE" , TRACE )
in foldl (<|>) (fail "") $ map (\ (str, mth)
-> string str >> return mth) methods)
<|>
- many1 token >>= return . ExtensionMethod
+ token >>= return . ExtensionMethod
uriP :: Parser URI