1 {-# OPTIONS_HADDOCK prune #-}
3 -- |Manipulation of HTTP version string.
4 module Network.HTTP.Lucu.HttpVersion
11 import qualified Data.ByteString.Char8 as C8
12 import Network.HTTP.Lucu.HandleLike
13 import Network.HTTP.Lucu.Parser
14 import Prelude hiding (min)
16 -- |@'HttpVersion' major minor@ represents \"HTTP\/major.minor\".
17 data HttpVersion = HttpVersion !Int !Int
20 instance Show HttpVersion where
21 show (HttpVersion maj min) = "HTTP/" ++ show maj ++ "." ++ show min
23 instance Ord HttpVersion where
24 (HttpVersion majA minA) `compare` (HttpVersion majB minB)
32 httpVersionP :: Parser HttpVersion
33 httpVersionP = string "HTTP/"
36 choice [ do string "1.0"
37 return $ HttpVersion 1 0
39 return $ HttpVersion 1 1
41 , do major <- many1 digit
44 return $ HttpVersion (read major) (read minor)
48 hPutHttpVersion :: HandleLike h => h -> HttpVersion -> IO ()
52 HttpVersion 1 0 -> hPutBS h (C8.pack "HTTP/1.0")
53 HttpVersion 1 1 -> hPutBS h (C8.pack "HTTP/1.1")
56 -> do hPutBS h (C8.pack "HTTP/")