]> gitweb @ CieloNegro.org - Lucu.git/blob - Network/HTTP/Lucu/HttpVersion.hs
Fixed breakage on GHC 6.10.1
[Lucu.git] / Network / HTTP / Lucu / HttpVersion.hs
1 {-# OPTIONS_HADDOCK prune #-}
2
3 -- |Manipulation of HTTP version string.
4 module Network.HTTP.Lucu.HttpVersion
5     ( HttpVersion(..)
6     , httpVersionP
7     , hPutHttpVersion
8     )
9     where
10
11 import qualified Data.ByteString.Char8 as C8
12 import           Network.HTTP.Lucu.Parser
13 import           Prelude hiding (min)
14 import           System.IO
15
16 -- |@'HttpVersion' major minor@ represents \"HTTP\/major.minor\".
17 data HttpVersion = HttpVersion !Int !Int
18                    deriving (Eq)
19
20 instance Show HttpVersion where
21     show (HttpVersion maj min) = "HTTP/" ++ show maj ++ "." ++ show min
22
23 instance Ord HttpVersion where
24     (HttpVersion majA minA) `compare` (HttpVersion majB minB)
25         | majA > majB = GT
26         | majA < majB = LT
27         | minA > minB = GT
28         | minA < minB = LT
29         | otherwise   = EQ
30
31
32 httpVersionP :: Parser HttpVersion
33 httpVersionP = string "HTTP/"
34                >>
35                -- 頻出するので高速化
36                choice [ do string "1.0"
37                            return $ HttpVersion 1 0
38                       , do string "1.1"
39                            return $ HttpVersion 1 1
40                         -- 一般の場合
41                       , do major <- many1 digit
42                            char '.'
43                            minor <- many1 digit
44                            return $ HttpVersion (read major) (read minor)
45                       ]
46
47
48 hPutHttpVersion :: Handle -> HttpVersion -> IO ()
49 hPutHttpVersion !h !v
50     = case v of
51         -- 頻出するので高速化
52         HttpVersion 1 0 -> C8.hPut h (C8.pack "HTTP/1.0")
53         HttpVersion 1 1 -> C8.hPut h (C8.pack "HTTP/1.1")
54         -- 一般の場合
55         HttpVersion !maj !min
56             -> do C8.hPut  h (C8.pack "HTTP/")
57                   hPutStr  h (show maj)
58                   hPutChar h '.'
59                   hPutStr  h (show min)