wai 0.0.1 → 0.1.0
raw patch · 2 files changed
+50/−12 lines, 2 files
Files
- Network/Wai.hs +49/−11
- wai.cabal +1/−1
Network/Wai.hs view
@@ -46,12 +46,16 @@ , httpVersionToBS -- ** Request header names , RequestHeader (..)+ , requestHeader , requestHeaderFromBS , requestHeaderToBS+ , requestHeaderToLower -- ** Response header names , ResponseHeader (..)+ , responseHeader , responseHeaderFromBS , responseHeaderToBS+ , responseHeaderToLower -- ** Response status code , Status (..) , statusCode@@ -69,6 +73,7 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as B8+import Data.Char (toLower) -- $show_read --@@ -165,8 +170,8 @@ -- The naming rules are simple: removing any hyphens from the actual name, and -- if there is a naming conflict with a 'ResponseHeader', prefix with Req. ----- Equality determined by conversion via 'requestHeaderToBS'. Remember, headers--- are case sensitive.+-- Equality determined by conversion via 'requestHeaderToLower'. Request+-- headers are *not* case sensitive (a change from version 0.0 of WAI). data RequestHeader = Accept | AcceptCharset@@ -178,11 +183,17 @@ | ReqContentType | Host | Referer- | RequestHeader B.ByteString+ | RequestHeader B.ByteString B.ByteString deriving (Show, Read) +lowerBS :: B.ByteString -> B.ByteString+lowerBS = B8.map toLower++requestHeader :: B.ByteString -> RequestHeader+requestHeader x = RequestHeader x $ lowerBS x+ instance Eq RequestHeader where- x == y = requestHeaderToBS x == requestHeaderToBS y+ x == y = requestHeaderToLower x == requestHeaderToLower y requestHeaderFromBS :: B.ByteString -> RequestHeader requestHeaderFromBS bs = case B8.unpack bs of@@ -196,7 +207,7 @@ "Content-Type" -> ReqContentType "Host" -> Host "Referer" -> Referer- _ -> RequestHeader bs+ _ -> requestHeader bs requestHeaderToBS :: RequestHeader -> B.ByteString requestHeaderToBS Accept = B8.pack "Accept"@@ -209,8 +220,20 @@ requestHeaderToBS ReqContentType = B8.pack "Content-Type" requestHeaderToBS Host = B8.pack "Host" requestHeaderToBS Referer = B8.pack "Referer"-requestHeaderToBS (RequestHeader bs) = bs+requestHeaderToBS (RequestHeader bs _) = bs +requestHeaderToLower :: RequestHeader -> B.ByteString+requestHeaderToLower Accept = B8.pack "accept"+requestHeaderToLower AcceptCharset = B8.pack "accept-charset"+requestHeaderToLower AcceptEncoding = B8.pack "accept-encoding"+requestHeaderToLower AcceptLanguage = B8.pack "accept-language"+requestHeaderToLower Authorization = B8.pack "authorization"+requestHeaderToLower Cookie = B8.pack "cookie"+requestHeaderToLower ReqContentLength = B8.pack "content-Length"+requestHeaderToLower ReqContentType = B8.pack "content-Type"+requestHeaderToLower Host = B8.pack "host"+requestHeaderToLower Referer = B8.pack "referer"+requestHeaderToLower (RequestHeader _ bs) = bs -- | Headers sent from the server to the client. Clearly, this is not a -- complete list of all possible headers, but rather a selection of common@@ -219,8 +242,8 @@ -- -- if there is a naming conflict with a 'ResponseHeader', prefix with Req. ----- Equality determined by conversion via 'responseHeaderToBS'. Remember,--- headers are case sensitive.+-- Equality determined by conversion via 'responseHeaderToLower'. Response+-- headers are *not* case sensitive (a change from version 0.0 of WAI). data ResponseHeader = ContentEncoding | ContentLanguage@@ -231,12 +254,15 @@ | Location | Server | SetCookie- | ResponseHeader B.ByteString+ | ResponseHeader B.ByteString B.ByteString deriving (Show) instance Eq ResponseHeader where x == y = responseHeaderToBS x == responseHeaderToBS y +responseHeader :: B.ByteString -> ResponseHeader+responseHeader x = ResponseHeader x $ lowerBS x+ responseHeaderFromBS :: B.ByteString -> ResponseHeader responseHeaderFromBS bs = case B8.unpack bs of "Content-Encoding" -> ContentEncoding@@ -248,7 +274,7 @@ "Location" -> Location "Server" -> Server "Set-Cookie" -> SetCookie- _ -> ResponseHeader bs+ _ -> responseHeader bs responseHeaderToBS :: ResponseHeader -> B.ByteString responseHeaderToBS ContentEncoding = B8.pack "Content-Encoding"@@ -260,7 +286,19 @@ responseHeaderToBS Location = B8.pack "Location" responseHeaderToBS Server = B8.pack "Server" responseHeaderToBS SetCookie = B8.pack "Set-Cookie"-responseHeaderToBS (ResponseHeader bs) = bs+responseHeaderToBS (ResponseHeader bs _) = bs++responseHeaderToLower :: ResponseHeader -> B.ByteString+responseHeaderToLower ContentEncoding = B8.pack "content-encoding"+responseHeaderToLower ContentLanguage = B8.pack "content-language"+responseHeaderToLower ContentLength = B8.pack "content-length"+responseHeaderToLower ContentDisposition = B8.pack "content-disposition"+responseHeaderToLower ContentType = B8.pack "content-type"+responseHeaderToLower Expires = B8.pack "expires"+responseHeaderToLower Location = B8.pack "location"+responseHeaderToLower Server = B8.pack "server"+responseHeaderToLower SetCookie = B8.pack "set-cookie"+responseHeaderToLower (ResponseHeader _ bs) = bs -- | This attempts to provide the most common HTTP status codes, not all of -- them. Use the Status constructor when you want to create a status code not
wai.cabal view
@@ -1,5 +1,5 @@ Name: wai-Version: 0.0.1+Version: 0.1.0 Synopsis: Web Application Interface. Description: Provides a common protocol for communication between web aplications and web servers. License: BSD3