1 module Network.HTTP.Lucu.MIMEType
3 , (+/+) -- String -> String -> MIMEType
4 , (+:+) -- MIMEType -> (String, String) -> MIMEType
5 , (+=+) -- String -> String -> (String, String)
6 , mimeTypeP -- Parser MIMEType
7 , mimeTypeListP -- Parser [MIMEType]
11 import Network.HTTP.Lucu.Parser
12 import Network.HTTP.Lucu.Parser.Http
13 import Network.HTTP.Lucu.Utils
16 data MIMEType = MIMEType {
19 , mtParams :: [ (String, String) ]
23 instance Show MIMEType where
24 show (MIMEType maj min params)
25 = maj ++ "/" ++ min ++
29 "; " ++ joinWith "; " (map showPair params)
31 showPair :: (String, String) -> String
32 showPair (name, value)
33 = name ++ "=" ++ if any (not . isToken) value then
43 (+/+) :: String -> String -> MIMEType
48 (+:+) :: MIMEType -> (String, String) -> MIMEType
49 mt@(MIMEType _ _ params) +:+ pair
51 mtParams = mtParams mt ++ [pair]
55 (+=+) :: String -> String -> (String, String)
56 name +=+ value = (name, value)
60 mimeTypeP :: Parser MIMEType
61 mimeTypeP = allowEOF $
66 return $ MIMEType maj min params
68 paramP :: Parser (String, String)
74 value <- token <|> quotedStr
77 mimeTypeListP :: Parser [MIMEType]
78 mimeTypeListP = allowEOF $ listOf mimeTypeP