7 -- |Manipulation of HTTP version string.
8 module Network.HTTP.Lucu.HttpVersion
14 import qualified Blaze.Text.Int as BT
15 import Control.Applicative
16 import Control.Applicative.Unicode
17 import Data.Ascii (AsciiBuilder)
18 import qualified Data.Ascii as A
19 import Data.Attoparsec.Char8
20 import Data.Monoid.Unicode
21 import Prelude hiding (min)
23 -- |@'HttpVersion' major minor@ represents \"HTTP\/major.minor\".
25 = HttpVersion !Int !Int
28 instance Ord HttpVersion where
29 (HttpVersion majA minA) `compare` (HttpVersion majB minB)
36 httpVersionP ∷ Parser HttpVersion
37 httpVersionP = string "HTTP/"
39 choice [ string "1.1" *> pure (HttpVersion 1 1)
40 , string "1.0" *> pure (HttpVersion 1 0)
41 , HttpVersion <$> decimal ⊛ (char '.' *> decimal)
44 -- |Convert an 'HttpVersion' to 'AsciiBuilder'.
45 printHttpVersion ∷ HttpVersion → AsciiBuilder
49 HttpVersion 1 0 → A.toAsciiBuilder "HTTP/1.0"
50 HttpVersion 1 1 → A.toAsciiBuilder "HTTP/1.1"
53 → A.toAsciiBuilder "HTTP/" ⊕
54 A.unsafeFromBuilder (BT.integral maj) ⊕
55 A.toAsciiBuilder "." ⊕
56 A.unsafeFromBuilder (BT.integral min)