X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FRequest.hs;h=66511e24c1f869490469ea637e0ea763ffd1ec34;hb=72a3e24;hp=8b516cca432b6cc5b67aa6298059c2e220806f91;hpb=9bb89434103e9a22f100d6ecb7e65a5d461e0454;p=Lucu.git diff --git a/Network/HTTP/Lucu/Request.hs b/Network/HTTP/Lucu/Request.hs index 8b516cc..66511e2 100644 --- a/Network/HTTP/Lucu/Request.hs +++ b/Network/HTTP/Lucu/Request.hs @@ -1,15 +1,15 @@ {-# LANGUAGE OverloadedStrings , UnicodeSyntax + , ViewPatterns #-} -{-# 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(..) + , reqMustHaveBody , requestP ) where @@ -48,9 +48,19 @@ data Request deriving (Eq, Show) instance HasHeaders Request where + {-# INLINE getHeaders #-} getHeaders = reqHeaders + {-# INLINE setHeaders #-} setHeaders req hdr = req { reqHeaders = hdr } +-- |Returns 'True' iff the 'Request' must have an entity body. +reqMustHaveBody ∷ Request → Bool +{-# INLINEABLE reqMustHaveBody #-} +reqMustHaveBody (reqMethod → m) + | m ≡ POST = True + | m ≡ PUT = True + | otherwise = False + requestP ∷ Parser Request requestP = do skipMany crlf (method, uri, version) ← requestLineP @@ -85,8 +95,7 @@ methodP = choice ] uriP ∷ Parser URI -uriP = try $ - do bs ← takeWhile1 (\c → (¬) (isCtl c ∨ c ≡ '\x20')) +uriP = do bs ← takeWhile1 (\c → (¬) (isCtl c ∨ c ≡ '\x20')) let str = C8.unpack bs case parseURIReference str of Nothing -> fail ("Unparsable URI: " ⧺ str)