X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FRequest.hs;h=044ba2241dbd039dc373710ef473adc23eccf6d8;hb=f62b6f07bbf1eefcf552163d8f7daa6e0862ed5d;hp=f8b1c93504bd34cacba81fb6b9c100547fd36025;hpb=3c7a58ab749a55a30466a033b170536bcdf18b98;p=Lucu.git diff --git a/Network/HTTP/Lucu/Request.hs b/Network/HTTP/Lucu/Request.hs index f8b1c93..044ba22 100644 --- a/Network/HTTP/Lucu/Request.hs +++ b/Network/HTTP/Lucu/Request.hs @@ -1,18 +1,23 @@ +{-# OPTIONS_HADDOCK 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 + , 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 @@ -21,16 +26,16 @@ data Method = OPTIONS | 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 + reqMethod :: !Method + , reqURI :: !URI + , reqVersion :: !HttpVersion + , reqHeaders :: !Headers } deriving (Show, Eq) @@ -62,23 +67,23 @@ requestLineP = do method <- methodP methodP :: Parser Method -methodP = (let methods = [ ("OPTIONS", OPTIONS) - , ("GET" , GET ) - , ("HEAD" , HEAD ) - , ("POST" , POST ) - , ("PUT" , PUT ) - , ("DELETE" , DELETE ) - , ("TRACE" , TRACE ) - , ("CONNECT", CONNECT) - ] - in foldl (<|>) (fail "") $ map (\ (str, mth) - -> string str >> return mth) methods) +methodP = ( let methods = [ ("OPTIONS", OPTIONS) + , ("GET" , GET ) + , ("HEAD" , HEAD ) + , ("POST" , POST ) + , ("PUT" , PUT ) + , ("DELETE" , DELETE ) + , ("TRACE" , TRACE ) + , ("CONNECT", CONNECT) + ] + in choice $ map (\ (str, mth) + -> string str >> return mth) methods ) <|> - token >>= return . ExtensionMethod + fmap ExtensionMethod token uriP :: Parser URI uriP = do str <- many1 $ satisfy (\ c -> not (isCtl c || c == ' ')) case parseURIReference str of - Nothing -> fail "" + Nothing -> failP Just uri -> return uri \ No newline at end of file