3 , MultiParamTypeClasses
7 module Network.HTTP.Lucu.ContentCoding
13 import Control.Applicative
14 import Data.Ascii (CIAscii, toCIAscii)
15 import Data.Attoparsec.Char8
16 import Data.Attoparsec.Parsable
17 import Data.ByteString (ByteString)
20 import Network.HTTP.Lucu.Parser.Http
21 import Prelude.Unicode
26 , aeQValue ∷ !(Maybe Double)
30 instance Ord AcceptEncoding where
31 (AcceptEncoding c1 q1) `compare` (AcceptEncoding c2 q2)
34 | otherwise = compare c1 c2
39 instance Parsable ByteString [AcceptEncoding] where
41 parser = listOf parser
43 instance Parsable ByteString AcceptEncoding where
45 parser = do coding ← toCIAscii <$> token
50 return $ AcceptEncoding (normalizeCoding coding) qVal
52 normalizeCoding ∷ CIAscii → CIAscii
53 {-# INLINEABLE normalizeCoding #-}
54 normalizeCoding coding
55 | coding ≡ "x-gzip" = "gzip"
56 | coding ≡ "x-compress" = "compress"
59 unnormalizeCoding ∷ CIAscii → CIAscii
60 {-# INLINEABLE unnormalizeCoding #-}
61 unnormalizeCoding coding
62 | coding ≡ "gzip" = "x-gzip"
63 | coding ≡ "compress" = "x-compress"