]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/MIMEType.hs
Reimplement MultipartForm
[Lucu.git] / Network / HTTP / Lucu / MIMEType.hs
index fdc112c7eea12ac560492795616b66f446c18faa..ab0e06596320d343164211017a8725ada3b9f07b 100644 (file)
@@ -3,7 +3,7 @@
   , UnicodeSyntax
   #-}
 
--- |Manipulation of MIME Types.
+-- |MIME Types
 module Network.HTTP.Lucu.MIMEType
     ( MIMEType(..)
     , mkMIMEType
@@ -11,8 +11,8 @@ module Network.HTTP.Lucu.MIMEType
     , parseMIMEType
     , printMIMEType
 
-    , mimeTypeP
-    , mimeTypeListP
+    , mimeType
+    , mimeTypeList
     )
     where
 import Control.Applicative
@@ -27,28 +27,32 @@ import Network.HTTP.Lucu.RFC2231
 import Prelude hiding (min)
 import Prelude.Unicode
 
--- |@'MIMEType' \"major\" \"minor\" [(\"name\", \"value\")]@
--- represents \"major\/minor; name=value\".
+-- |@'MIMEType' \"major\" \"minor\" [(\"name\", \"value\"), ...]@
+-- represents \"major\/minor; name=value; ...\".
 data MIMEType = MIMEType {
       mtMajor  ∷ !CIAscii
     , mtMinor  ∷ !CIAscii
     , mtParams ∷ !(Map CIAscii Text)
-    } deriving (Eq, Show)
+    } deriving (Eq)
 
--- |Construct a 'MIMEType' without any parameters.
+instance Show MIMEType where
+    show = A.toString ∘ A.fromAsciiBuilder ∘ printMIMEType
+
+-- |@'mkMIMEType' major minor@ returns a 'MIMEType' with the given
+-- @major@ and @minor@ types but without any parameters.
 mkMIMEType ∷ CIAscii → CIAscii → MIMEType
 {-# INLINE mkMIMEType #-}
 mkMIMEType maj min
     = MIMEType maj min (∅)
 
--- |Convert a 'MIMEType' to 'AsciiBuilder'.
+-- |Convert a 'MIMEType' to an 'AsciiBuilder'.
 printMIMEType ∷ MIMEType → AsciiBuilder
 {-# INLINEABLE printMIMEType #-}
 printMIMEType (MIMEType maj min params)
     = 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.
@@ -61,18 +65,20 @@ parseMIMEType str
     where
       p ∷ Parser MIMEType
       {-# INLINE p #-}
-      p = do t ← mimeTypeP
+      p = do t ← mimeType
              endOfInput
              return t
 
-mimeTypeP ∷ Parser MIMEType
-{-# INLINEABLE mimeTypeP #-}
-mimeTypeP = do maj    ← A.toCIAscii <$> token
-               _      ← char '/'
-               min    ← A.toCIAscii <$> token
-               params ← paramsP
-               return $ MIMEType maj min params
+-- |'Parser' for an 'MIMEType'.
+mimeType ∷ Parser MIMEType
+{-# INLINEABLE mimeType #-}
+mimeType = do maj    ← A.toCIAscii <$> token
+              _      ← char '/'
+              min    ← A.toCIAscii <$> token
+              params ← mimeParams
+              return $ MIMEType maj min params
 
-mimeTypeListP ∷ Parser [MIMEType]
-{-# INLINE mimeTypeListP #-}
-mimeTypeListP = listOf mimeTypeP
+-- |'Parser' for a list of 'MIMEType's.
+mimeTypeList ∷ Parser [MIMEType]
+{-# INLINE mimeTypeList #-}
+mimeTypeList = listOf mimeType