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
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)
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) <$>