5 {-# OPTIONS_HADDOCK prune #-}
7 -- |Manipulation of HTTP version string.
8 module Network.HTTP.Lucu.HttpVersion
15 import qualified Data.ByteString.Char8 as C8
16 import Network.HTTP.Lucu.HandleLike
17 import Network.HTTP.Lucu.Parser
18 import Prelude hiding (min)
20 -- |@'HttpVersion' major minor@ represents \"HTTP\/major.minor\".
21 data HttpVersion = HttpVersion !Int !Int
24 instance Show HttpVersion where
25 show (HttpVersion maj min) = "HTTP/" ++ show maj ++ "." ++ show min
27 instance Ord HttpVersion where
28 (HttpVersion majA minA) `compare` (HttpVersion majB minB)
36 httpVersionP :: Parser HttpVersion
37 httpVersionP = string "HTTP/"
40 choice [ string "1.0" >> return (HttpVersion 1 0)
41 , string "1.1" >> return (HttpVersion 1 1)
43 , do major <- many1 digit
46 return $ HttpVersion (read major) (read minor)
50 hPutHttpVersion :: HandleLike h => h -> HttpVersion -> IO ()
54 HttpVersion 1 0 -> hPutBS h (C8.pack "HTTP/1.0")
55 HttpVersion 1 1 -> hPutBS h (C8.pack "HTTP/1.1")
58 -> do hPutBS h (C8.pack "HTTP/")