-- (<http://tools.ietf.org/html/rfc2046>).
module Network.HTTP.Lucu.MIMEType
( MIMEType(..)
- , mkMIMEType
, parseMIMEType
, printMIMEType
import Data.Ascii (Ascii, AsciiBuilder, CIAscii)
import qualified Data.Ascii as A
import Data.Attoparsec.Char8 as P
+import Data.Convertible.Base
+import Data.Convertible.Instances.Ascii ()
+import Data.Convertible.Utils
import Data.Monoid.Unicode
import Data.Typeable
import Language.Haskell.TH.Syntax
import Network.HTTP.Lucu.MIMEParams
+import Network.HTTP.Lucu.OrphanInstances ()
import Network.HTTP.Lucu.Parser
import Network.HTTP.Lucu.Parser.Http
-import Network.HTTP.Lucu.Utils
import Prelude.Unicode
-- |A media type, subtype, and parameters.
instance Lift MIMEType where
lift (MIMEType {..})
= [| MIMEType {
- mtMedia = $(liftCIAscii mtMedia)
- , mtSub = $(liftCIAscii mtSub)
+ mtMedia = $(lift mtMedia )
+ , mtSub = $(lift mtSub )
, mtParams = $(lift mtParams)
}
|]
--- |@'mkMIMEType' media sub@ returns a 'MIMEType' with the given
--- @media@ and @sub@ types but without any parameters.
-mkMIMEType ∷ CIAscii → CIAscii → MIMEType
-{-# INLINE mkMIMEType #-}
-mkMIMEType = flip flip (∅) ∘ MIMEType
-
-- |Convert a 'MIMEType' to an 'AsciiBuilder'.
printMIMEType ∷ MIMEType → AsciiBuilder
{-# INLINEABLE printMIMEType #-}
= A.toAsciiBuilder (A.fromCIAscii mtMedia) ⊕
A.toAsciiBuilder "/" ⊕
A.toAsciiBuilder (A.fromCIAscii mtSub) ⊕
- printMIMEParams mtParams
+ cs mtParams
-- |Parse 'MIMEType' from an 'Ascii'. This function throws an
-- exception for parse error. For literals consider using
parseMIMEType str
= case parseOnly (finishOff mimeType) $ A.toByteString str of
Right t → t
- Left err → error ("unparsable MIME Type: " ⧺ A.toString str ⧺ ": " ⧺ err)
+ Left err → error ("Unparsable MIME Type: " ⧺ A.toString str ⧺ ": " ⧺ err)
-- |'Parser' for an 'MIMEType'.
mimeType ∷ Parser MIMEType