, parseMIMEType
, printMIMEType
- , mimeTypeP
- , mimeTypeListP
+ , mimeType
+ , mimeTypeList
)
where
import Control.Applicative
import Data.Map (Map)
import Data.Monoid.Unicode
import Data.Text (Text)
+import Network.HTTP.Lucu.Parser
import Network.HTTP.Lucu.Parser.Http
import Network.HTTP.Lucu.RFC2231
import Prelude hiding (min)
= A.toAsciiBuilder (A.fromCIAscii maj) ⊕
A.toAsciiBuilder "/" ⊕
A.toAsciiBuilder (A.fromCIAscii min) ⊕
- printParams params
+ printMIMEParams params
-- |Parse 'MIMEType' from an 'Ascii'. This function throws an
-- exception for parse error.
parseMIMEType ∷ Ascii → MIMEType
{-# INLINEABLE parseMIMEType #-}
parseMIMEType str
- = case parseOnly p $ A.toByteString str of
+ = case parseOnly (finishOff mimeType) $ A.toByteString str of
Right t → t
Left err → error ("unparsable MIME Type: " ⧺ A.toString str ⧺ ": " ⧺ err)
- where
- p ∷ Parser MIMEType
- {-# INLINE p #-}
- p = do t ← mimeTypeP
- endOfInput
- return t
-- |'Parser' for an 'MIMEType'.
-mimeTypeP ∷ Parser MIMEType
-{-# INLINEABLE mimeTypeP #-}
-mimeTypeP = do maj ← A.toCIAscii <$> token
- _ ← char '/'
- min ← A.toCIAscii <$> token
- params ← paramsP
- return $ MIMEType maj min params
+mimeType ∷ Parser MIMEType
+{-# INLINEABLE mimeType #-}
+mimeType = do maj ← A.toCIAscii <$> token
+ _ ← char '/'
+ min ← A.toCIAscii <$> token
+ params ← mimeParams
+ return $ MIMEType maj min params
-- |'Parser' for a list of 'MIMEType's.
-mimeTypeListP ∷ Parser [MIMEType]
-{-# INLINE mimeTypeListP #-}
-mimeTypeListP = listOf mimeTypeP
+mimeTypeList ∷ Parser [MIMEType]
+{-# INLINE mimeTypeList #-}
+mimeTypeList = listOf mimeType