X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FHttpVersion.hs;h=a5db1e29193a10aaeec1b4c67ca57092f906a477;hp=4531c837782ef9b6eda9edd4849e3771f2b0b0a1;hb=3fe5ca3;hpb=db4b61223e0d8b34079d3b190fb3e3644b0b4866 diff --git a/Network/HTTP/Lucu/HttpVersion.hs b/Network/HTTP/Lucu/HttpVersion.hs index 4531c83..a5db1e2 100644 --- a/Network/HTTP/Lucu/HttpVersion.hs +++ b/Network/HTTP/Lucu/HttpVersion.hs @@ -3,18 +3,21 @@ , OverloadedStrings , UnicodeSyntax #-} -{-# OPTIONS_HADDOCK prune #-} -- |Manipulation of HTTP version string. module Network.HTTP.Lucu.HttpVersion ( HttpVersion(..) , httpVersionP - , hPutHttpVersion + , printHttpVersion ) where -import Control.Monad.Unicode +import qualified Blaze.Text.Int as BT +import Control.Applicative +import Control.Applicative.Unicode +import Data.Ascii (AsciiBuilder) +import qualified Data.Ascii as A import Data.Attoparsec.Char8 -import Network.HTTP.Lucu.HandleLike +import Data.Monoid.Unicode import Prelude hiding (min) -- |@'HttpVersion' major minor@ represents \"HTTP\/major.minor\". @@ -32,24 +35,22 @@ instance Ord HttpVersion where httpVersionP ∷ Parser HttpVersion httpVersionP = string "HTTP/" - ≫ - choice [ string "1.1" ≫ return (HttpVersion 1 1) - , string "1.0" ≫ return (HttpVersion 1 0) - , do major ← decimal - _ ← char '.' - minor ← decimal - return $ HttpVersion major minor + *> + choice [ string "1.1" *> pure (HttpVersion 1 1) + , string "1.0" *> pure (HttpVersion 1 0) + , HttpVersion <$> decimal ⊛ (char '.' *> decimal) ] -hPutHttpVersion ∷ HandleLike h ⇒ h → HttpVersion → IO () -hPutHttpVersion !h !v +-- |Convert an 'HttpVersion' to 'AsciiBuilder'. +printHttpVersion ∷ HttpVersion → AsciiBuilder +printHttpVersion v = case v of -- 頻出するので高速化 - HttpVersion 1 0 → hPutBS h "HTTP/1.0" - HttpVersion 1 1 → hPutBS h "HTTP/1.1" + HttpVersion 1 0 → A.toAsciiBuilder "HTTP/1.0" + HttpVersion 1 1 → A.toAsciiBuilder "HTTP/1.1" -- 一般の場合 - HttpVersion !maj !min - → do hPutBS h "HTTP/" - hPutStr h (show maj) - hPutChar h '.' - hPutStr h (show min) + HttpVersion maj min + → A.toAsciiBuilder "HTTP/" ⊕ + A.unsafeFromBuilder (BT.integral maj) ⊕ + A.toAsciiBuilder "." ⊕ + A.unsafeFromBuilder (BT.integral min)