@@ -17,36 +17,34 @@ type IndexedHeader = Array Int (Maybe HeaderValue)
1717indexRequestHeader :: RequestHeaders -> IndexedHeader
1818indexRequestHeader hdr = traverseHeader hdr requestMaxIndex requestKeyIndex
1919
20−idxContentLength,idxTransferEncoding,idxExpect :: Int
21−idxConnection,idxRange,idxHost :: Int
22−idxIfModifiedSince,idxIfUnmodifiedSince,idxIfRange :: Int
23−idxContentLength = 0
24−idxTransferEncoding = 1
25−idxExpect = 2
26−idxConnection = 3
27−idxRange = 4
28−idxHost = 5
29−idxIfModifiedSince = 6
30−idxIfUnmodifiedSince = 7
31−idxIfRange = 8
20+data RequestHeaderIndex = ReqContentLength
21+ | ReqTransferEncoding
22+ | ReqExpect
23+ | ReqConnection
24+ | ReqRange
25+ | ReqHost
26+ | ReqIfModifiedSince
27+ | ReqIfUnmodifiedSince
28+ | ReqIfRange
29+ deriving (Enum,Bounded)
3230
3331-- | The size for 'IndexedHeader' for HTTP Request.
3432-- From 0 to this corresponds to \"Content-Length\", \"Transfer-Encoding\",
3533-- \"Expect\", \"Connection\", \"Range\", \"Host\",
3634-- \"If-Modified-Since\", \"If-Unmodified-Since\" and \"If-Range\".
3735requestMaxIndex :: Int
38−requestMaxIndex = 8
36+requestMaxIndex = fromEnum (maxBound :: RequestHeaderIndex)
3937
4038requestKeyIndex :: HeaderName -> Int
41−requestKeyIndex "content-length" = idxContentLength
42−requestKeyIndex "transfer-encoding" = idxTransferEncoding
43−requestKeyIndex "expect" = idxExpect
44−requestKeyIndex "connection" = idxConnection
45−requestKeyIndex "range" = idxRange
46−requestKeyIndex "host" = idxHost
47−requestKeyIndex "if-modified-since" = idxIfModifiedSince
48−requestKeyIndex "if-unmodified-since" = idxIfUnmodifiedSince
49−requestKeyIndex "if-range" = idxIfRange
39+requestKeyIndex "content-length" = fromEnum ReqContentLength
40+requestKeyIndex "transfer-encoding" = fromEnum ReqTransferEncoding
41+requestKeyIndex "expect" = fromEnum ReqExpect
42+requestKeyIndex "connection" = fromEnum ReqConnection
43+requestKeyIndex "range" = fromEnum ReqRange
44+requestKeyIndex "host" = fromEnum ReqHost
45+requestKeyIndex "if-modified-since" = fromEnum ReqIfModifiedSince
46+requestKeyIndex "if-unmodified-since" = fromEnum ReqIfUnmodifiedSince
47+requestKeyIndex "if-range" = fromEnum ReqIfRange
5048requestKeyIndex _ = -1
5149
5250defaultIndexRequestHeader :: IndexedHeader
@@ -57,19 +55,19 @@ defaultIndexRequestHeader = array (0,requestMaxIndex) [(i,Nothing)|i<-[0..reques
5755indexResponseHeader :: ResponseHeaders -> IndexedHeader
5856indexResponseHeader hdr = traverseHeader hdr responseMaxIndex responseKeyIndex
5957
60−idxServer, idxDate :: Int
61−--idxContentLength = 0
62−idxServer = 1
63−idxDate = 2
58+data ResponseHeaderIndex = ResContentLength
59+ | ResServer
60+ | ResDate
61+ deriving (Enum,Bounded)
6462
6563-- | The size for 'IndexedHeader' for HTTP Response.
6664responseMaxIndex :: Int
67−responseMaxIndex = 2
65+responseMaxIndex = fromEnum (maxBound :: ResponseHeaderIndex)
6866
6967responseKeyIndex :: HeaderName -> Int
70−responseKeyIndex "content-length" = idxContentLength
71−responseKeyIndex "server" = idxServer
72−responseKeyIndex "date" = idxDate
68+responseKeyIndex "content-length" = fromEnum ResContentLength
69+responseKeyIndex "server" = fromEnum ResServer
70+responseKeyIndex "date" = fromEnum ResDate
7371responseKeyIndex _ = -1
7472
7573----------------------------------------------------------------