-- |Manipulation of MIME Types.
module Network.HTTP.Lucu.MIMEType
( MIMEType(..)
- , (</>)
- , (<:>)
- , (<=>)
+ , parseMIMEType
, mimeTypeP
, mimeTypeListP
)
value
-infix 9 </>, <=>
-infixl 8 <:>
+instance Read MIMEType where
+ readsPrec _ s = [(parseMIMEType s, "")]
--- |@\"major\" \<\/\> \"minor\"@ constructs a MIME Type
--- \"major\/minor\".
-(</>) :: String -> String -> MIMEType
-maj </> min
- = MIMEType maj min []
-
--- |This operator appends a @(name, value)@ pair to a MIME Type.
-(<:>) :: MIMEType -> (String, String) -> MIMEType
-mt@(MIMEType _ _ params) <:> pair
- = pair `seq`
- mt {
- mtParams = mtParams mt ++ [pair]
- }
-
--- |This operator takes two strings and makes a tuple of them. So you
--- can say
---
--- > "text" </> "xml" <:> "charset" <=> "UTF-8" <:> "q" <=> "0.9"
---
--- to represent \"text\/xml; charset=UTF-8; q=0.9\".
-(<=>) :: String -> String -> (String, String)
-name <=> value = (name, value)
+-- |Parse 'MIMEType' from a 'Prelude.String'. This function throws an
+-- exception for parse error.
+parseMIMEType :: String -> MIMEType
+parseMIMEType str = case parseStr mimeTypeP str of
+ (Success t, _) -> t
+ _ -> error ("Unparsable MIME Type: " ++ str)
mimeTypeP :: Parser MIMEType