@@ -11,6 +11,10 @@ module Network.Wai
11 , HttpVersion (..)
11 , HttpVersion (..)
12 , httpVersionFromBS
12 , httpVersionFromBS
13 , httpVersionToBS
13 , httpVersionToBS
14+ -- ** Response status code
14 -- * WAI interface
18 -- * WAI interface
15 , Request (..)
19 , Request (..)
16 , Response (..)
20 , Response (..)
@@ -85,6 +89,55 @@ httpVersionToBS Http10 = B8.pack "1.0"
85httpVersionToBS Http11 = B8.pack "1.1"
89httpVersionToBS Http11 = B8.pack "1.1"
86httpVersionToBS (HttpVersion bs) = bs
90httpVersionToBS (HttpVersion bs) = bs
92+-- | This attempts to provide the most common HTTP status codes, not all of
93+-- them. Use the 'Status' constructor when you want to create a status code not
96+-- The 'Eq' instance tests equality based only on the numeric status code
97+-- value. See 'statusCode'.
109+ | Status Int B.ByteString
112+instance Eq Status where
113+ x == y = statusCode x == statusCode y
115+statusCode :: Status -> Int
116+statusCode Status200 = 200
117+statusCode Status301 = 301
118+statusCode Status302 = 302
119+statusCode Status303 = 303
120+statusCode Status400 = 400
121+statusCode Status401 = 401
122+statusCode Status403 = 403
123+statusCode Status404 = 404
124+statusCode Status405 = 405
125+statusCode Status500 = 500
126+statusCode (Status i _) = i
128+statusMessage :: Status -> B.ByteString
129+statusMessage Status200 = B8.pack "OK"
130+statusMessage Status301 = B8.pack "Moved Permanently"
131+statusMessage Status302 = B8.pack "Found"
132+statusMessage Status303 = B8.pack "See Other"
133+statusMessage Status400 = B8.pack "Bad Request"
134+statusMessage Status401 = B8.pack "Unauthorized"
135+statusMessage Status403 = B8.pack "Forbidden"
136+statusMessage Status404 = B8.pack "Not Found"
137+statusMessage Status405 = B8.pack "Method Not Allowed"
138+statusMessage Status500 = B8.pack "Internal Server Error"
139+statusMessage (Status _ m) = m
88data Request = Request
141data Request = Request
89 { requestMethod :: Method
142 { requestMethod :: Method
90 , httpVersion :: HttpVersion
143 , httpVersion :: HttpVersion
@@ -100,8 +153,7 @@ data Request = Request
102data Response = Response
155data Response = Response
103− { status :: Int
156+ { status :: Status
104− , statusMessage :: B.ByteString
105 , headers :: [(B.ByteString, B.ByteString)]
157 , headers :: [(B.ByteString, B.ByteString)]
106 , body :: Either FilePath ((B.ByteString -> IO ()) -> IO ())
158 , body :: Either FilePath ((B.ByteString -> IO ()) -> IO ())