X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FHttpVersion.hs;h=4466f1ecda8959aa102e76e6137cd57c8b53e420;hb=cc074d0ce3f7df2544bc2baddca4e7730ecdf0a0;hp=a5db1e29193a10aaeec1b4c67ca57092f906a477;hpb=3fe5ca3bca04e0124a5f2440e893dc5375e0bb51;p=Lucu.git diff --git a/Network/HTTP/Lucu/HttpVersion.hs b/Network/HTTP/Lucu/HttpVersion.hs index a5db1e2..4466f1e 100644 --- a/Network/HTTP/Lucu/HttpVersion.hs +++ b/Network/HTTP/Lucu/HttpVersion.hs @@ -1,17 +1,14 @@ {-# LANGUAGE - BangPatterns - , OverloadedStrings + OverloadedStrings , UnicodeSyntax #-} - --- |Manipulation of HTTP version string. +-- |An internal module for HTTP version numbers. module Network.HTTP.Lucu.HttpVersion ( HttpVersion(..) - , httpVersionP , printHttpVersion + , httpVersion ) where -import qualified Blaze.Text.Int as BT import Control.Applicative import Control.Applicative.Unicode import Data.Ascii (AsciiBuilder) @@ -20,7 +17,7 @@ import Data.Attoparsec.Char8 import Data.Monoid.Unicode import Prelude hiding (min) --- |@'HttpVersion' major minor@ represents \"HTTP\/major.minor\". +-- |An HTTP version consists of major and minor versions. data HttpVersion = HttpVersion !Int !Int deriving (Eq, Show) @@ -33,24 +30,22 @@ instance Ord HttpVersion where | minA < minB = LT | otherwise = EQ -httpVersionP ∷ Parser HttpVersion -httpVersionP = string "HTTP/" - *> - choice [ string "1.1" *> pure (HttpVersion 1 1) - , string "1.0" *> pure (HttpVersion 1 0) - , HttpVersion <$> decimal ⊛ (char '.' *> decimal) - ] - -- |Convert an 'HttpVersion' to 'AsciiBuilder'. printHttpVersion ∷ HttpVersion → AsciiBuilder printHttpVersion v = case v of - -- 頻出するので高速化 + -- Optimisation for special cases. HttpVersion 1 0 → A.toAsciiBuilder "HTTP/1.0" HttpVersion 1 1 → A.toAsciiBuilder "HTTP/1.1" - -- 一般の場合 + -- General (but almost never stumbling) cases. HttpVersion maj min - → A.toAsciiBuilder "HTTP/" ⊕ - A.unsafeFromBuilder (BT.integral maj) ⊕ - A.toAsciiBuilder "." ⊕ - A.unsafeFromBuilder (BT.integral min) + → A.toAsciiBuilder "HTTP/" ⊕ + A.toAsciiBuilder (A.unsafeFromString $ show maj) ⊕ + A.toAsciiBuilder "." ⊕ + A.toAsciiBuilder (A.unsafeFromString $ show min) + +-- |'Parser' for an 'HttpVersion'. +httpVersion ∷ Parser HttpVersion +httpVersion = string "HTTP/" + *> + (HttpVersion <$> decimal ⊛ (char '.' *> decimal))