X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FContentCoding.hs;fp=Network%2FHTTP%2FLucu%2FContentCoding.hs;h=033b48b4d941b6d462cfa4ebac231d0f3f1869d2;hp=a5f02b13ecf69ac28f15e747016f4af124eb2191;hb=db4a546d0d462cb94639b1f273bf0b78bccc960c;hpb=2dfd3e662204585dd64f2ddbe3b3eed0c708c68f diff --git a/Network/HTTP/Lucu/ContentCoding.hs b/Network/HTTP/Lucu/ContentCoding.hs index a5f02b1..033b48b 100644 --- a/Network/HTTP/Lucu/ContentCoding.hs +++ b/Network/HTTP/Lucu/ContentCoding.hs @@ -1,11 +1,11 @@ {-# LANGUAGE - OverloadedStrings + FlexibleInstances + , MultiParamTypeClasses + , OverloadedStrings , UnicodeSyntax #-} module Network.HTTP.Lucu.ContentCoding ( AcceptEncoding(..) - - , acceptEncodingList , normalizeCoding , unnormalizeCoding ) @@ -13,6 +13,8 @@ module Network.HTTP.Lucu.ContentCoding import Control.Applicative import Data.Ascii (CIAscii, toCIAscii) import Data.Attoparsec.Char8 +import Data.Attoparsec.Parsable +import Data.ByteString (ByteString) import Data.Ord import Data.Maybe import Network.HTTP.Lucu.Parser.Http @@ -34,24 +36,28 @@ instance Ord AcceptEncoding where q1' = fromMaybe 0 q1 q2' = fromMaybe 0 q2 -acceptEncodingList ∷ Parser [AcceptEncoding] -acceptEncodingList = listOf accEnc +instance Parsable ByteString [AcceptEncoding] where + {-# INLINE parser #-} + parser = listOf parser -accEnc ∷ Parser AcceptEncoding -accEnc = do coding ← toCIAscii <$> token - qVal ← option Nothing - $ do _ ← string ";q=" - q ← qvalue - return $ Just q - return $ AcceptEncoding (normalizeCoding coding) qVal +instance Parsable ByteString AcceptEncoding where + {-# INLINE parser #-} + parser = do coding ← toCIAscii <$> token + qVal ← option Nothing + $ do _ ← string ";q=" + q ← qvalue + return $ Just q + return $ AcceptEncoding (normalizeCoding coding) qVal normalizeCoding ∷ CIAscii → CIAscii +{-# INLINEABLE normalizeCoding #-} normalizeCoding coding | coding ≡ "x-gzip" = "gzip" | coding ≡ "x-compress" = "compress" | otherwise = coding unnormalizeCoding ∷ CIAscii → CIAscii +{-# INLINEABLE unnormalizeCoding #-} unnormalizeCoding coding | coding ≡ "gzip" = "x-gzip" | coding ≡ "compress" = "x-compress"