]> gitweb @ CieloNegro.org - Lucu.git/blob - Network/HTTP/Lucu/HttpVersion.hs
Many improvements: still in early development
[Lucu.git] / Network / HTTP / Lucu / HttpVersion.hs
1 module Network.HTTP.Lucu.HttpVersion
2     ( HttpVersion(..)
3     , httpVersionP    -- Parser HttpVersion
4     , hPutHttpVersion -- Handle -> HttpVersion -> IO ()
5     )
6     where
7
8 import qualified Data.ByteString.Lazy.Char8 as B
9 import           Data.ByteString.Lazy.Char8 (ByteString)
10 import           Network.HTTP.Lucu.Parser
11 import           System.IO
12
13 data HttpVersion = HttpVersion Int Int
14                    deriving (Eq)
15
16 instance Show HttpVersion where
17     show (HttpVersion maj min) = "HTTP/" ++ show maj ++ "." ++ show min
18
19 instance Ord HttpVersion where
20     (HttpVersion majA minA) `compare` (HttpVersion majB minB)
21         | majA > majB = GT
22         | majA < majB = LT
23         | minA > minB = GT
24         | minA < minB = LT
25         | otherwise   = EQ
26
27
28 httpVersionP :: Parser HttpVersion
29 httpVersionP = do string "HTTP/"
30                   major <- many1 digit
31                   char '.'
32                   minor <- many1 digit
33                   return $ HttpVersion (read major) (read minor)
34
35
36 hPutHttpVersion :: Handle -> HttpVersion -> IO ()
37 hPutHttpVersion h (HttpVersion maj min)
38     = do hPutStr  h "HTTP/"
39          hPutStr  h (show maj)
40          hPutChar h '.'
41          hPutStr  h (show min)