X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FMIMEParams.hs;fp=Network%2FHTTP%2FLucu%2FMIMEParams.hs;h=e4e4271a6fcdd405b25804c113778f4158ae344a;hp=37410330bd25fee7c589f5a1c3b7a234cbce0e18;hb=90fca0675b1694e69b8e431c989343855cbd125d;hpb=742b0cae221f12eafbf1379b91c473b059efa7d8 diff --git a/Network/HTTP/Lucu/MIMEParams.hs b/Network/HTTP/Lucu/MIMEParams.hs index 3741033..e4e4271 100644 --- a/Network/HTTP/Lucu/MIMEParams.hs +++ b/Network/HTTP/Lucu/MIMEParams.hs @@ -24,9 +24,7 @@ import Control.Monad.Unicode import Data.Ascii (Ascii, CIAscii, AsciiBuilder) import qualified Data.Ascii as A import Data.Attoparsec.Char8 -import Data.Attoparsec.Parsable import Data.Bits -import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as BS import Data.Char import Data.Collections @@ -35,6 +33,7 @@ import qualified Data.Collections.Newtype.TH as C import Data.Convertible.Base import Data.Convertible.Instances.Ascii () import Data.Convertible.Utils +import Data.Default import qualified Data.Map as M (Map) import Data.Monoid.Unicode import Data.Sequence (Seq) @@ -146,26 +145,26 @@ section ∷ ExtendedParam → Integer section (InitialEncodedParam {..}) = 0 section ep = epSection ep -instance Parsable ByteString MIMEParams where - {-# INLINEABLE parser #-} - parser = decodeParams =≪ many (try parser) +instance Default (Parser MIMEParams) where + {-# INLINE def #-} + def = decodeParams =≪ many (try def) -instance Parsable ByteString ExtendedParam where - parser = do skipMany lws - void $ char ';' - skipMany lws - epm ← name - void $ char '=' - case epm of - (nm, 0, True) - → do (charset, payload) ← initialEncodedValue - return $ InitialEncodedParam nm charset payload - (nm, sect, True) - → do payload ← encodedPayload - return $ ContinuedEncodedParam nm sect payload - (nm, sect, False) - → do payload ← token <|> quotedStr - return $ AsciiParam nm sect payload +instance Default (Parser ExtendedParam) where + def = do skipMany lws + void $ char ';' + skipMany lws + epm ← name + void $ char '=' + case epm of + (nm, 0, True) + → do (charset, payload) ← initialEncodedValue + return $ InitialEncodedParam nm charset payload + (nm, sect, True) + → do payload ← encodedPayload + return $ ContinuedEncodedParam nm sect payload + (nm, sect, False) + → do payload ← token <|> quotedStr + return $ AsciiParam nm sect payload name ∷ Parser (CIAscii, Integer, Bool) name = do nm ← (cs ∘ A.unsafeFromByteString) <$>