5 -- |Manipulation of HTTP version string.
6 module Network.HTTP.Lucu.HttpVersion
12 import qualified Blaze.Text.Int as BT
13 import Control.Applicative
14 import Control.Applicative.Unicode
15 import Data.Ascii (AsciiBuilder)
16 import qualified Data.Ascii as A
17 import Data.Attoparsec.Char8
18 import Data.Monoid.Unicode
19 import Prelude hiding (min)
21 -- |@'HttpVersion' major minor@ represents \"HTTP\/major.minor\".
23 = HttpVersion !Int !Int
26 instance Ord HttpVersion where
27 (HttpVersion majA minA) `compare` (HttpVersion majB minB)
34 httpVersionP ∷ Parser HttpVersion
35 httpVersionP = string "HTTP/"
37 choice [ string "1.1" *> pure (HttpVersion 1 1)
38 , string "1.0" *> pure (HttpVersion 1 0)
39 , HttpVersion <$> decimal ⊛ (char '.' *> decimal)
42 -- |Convert an 'HttpVersion' to 'AsciiBuilder'.
43 printHttpVersion ∷ HttpVersion → AsciiBuilder
47 HttpVersion 1 0 → A.toAsciiBuilder "HTTP/1.0"
48 HttpVersion 1 1 → A.toAsciiBuilder "HTTP/1.1"
51 → A.toAsciiBuilder "HTTP/" ⊕
52 A.unsafeFromBuilder (BT.integral maj) ⊕
53 A.toAsciiBuilder "." ⊕
54 A.unsafeFromBuilder (BT.integral min)