]> gitweb @ CieloNegro.org - Lucu.git/blob - Network/HTTP/Lucu/HttpVersion.hs
Optimized as possible as I can.
[Lucu.git] / Network / HTTP / Lucu / HttpVersion.hs
1 -- #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.Lazy.Char8 as B
12 import           Data.ByteString.Lazy.Char8 (ByteString)
13 import           Network.HTTP.Lucu.Parser
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 = do string "HTTP/"
34                   major <- many1 digit
35                   char '.'
36                   minor <- many1 digit
37                   return $ HttpVersion (read major) (read minor)
38
39
40 hPutHttpVersion :: Handle -> HttpVersion -> IO ()
41 hPutHttpVersion h (HttpVersion maj min)
42     = h `seq`
43       do hPutStr  h "HTTP/"
44          hPutStr  h (show maj)
45          hPutChar h '.'
46          hPutStr  h (show min)