]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/MultipartForm.hs
RFC2231.printParams
[Lucu.git] / Network / HTTP / Lucu / MultipartForm.hs
index 4dcf076c93c13be34f7fd3bc0986f24652601616..10d1f64276f07307c581e66d463492c3ef7358d6 100644 (file)
@@ -2,7 +2,6 @@
     DoAndIfThenElse
   , OverloadedStrings
   , ScopedTypeVariables
-  , UnboxedTuples
   , UnicodeSyntax
   #-}
 module Network.HTTP.Lucu.MultipartForm
@@ -16,15 +15,17 @@ import qualified Data.Ascii as A
 import Data.Attoparsec.Char8
 import qualified Data.ByteString.Char8 as BS
 import qualified Data.ByteString.Lazy.Char8 as LS
-import           Data.Char
-import           Data.List
+import Data.Char
+import Data.List
+import Data.Map (Map)
 import Data.Maybe
 import Data.Monoid.Unicode
 import Data.Text (Text)
-import           Network.HTTP.Lucu.Headers
-import           Network.HTTP.Lucu.Parser.Http
-import           Network.HTTP.Lucu.Response
-import           Network.HTTP.Lucu.Utils
+import Network.HTTP.Lucu.Headers
+import Network.HTTP.Lucu.Parser.Http
+import Network.HTTP.Lucu.RFC2231
+import Network.HTTP.Lucu.Response
+import Network.HTTP.Lucu.Utils
 import Prelude.Unicode
 
 -- |This data type represents a form value and possibly an uploaded
@@ -49,7 +50,7 @@ instance HasHeaders Part where
 data ContDispo
     = ContDispo {
         dType   ∷ !CIAscii
-      , dParams ∷ ![(CIAscii, Ascii)]
+      , dParams ∷ !(Map CIAscii Text)
       }
 
 printContDispo ∷ ContDispo → Ascii
@@ -57,20 +58,7 @@ printContDispo d
     = A.fromAsciiBuilder $
       ( A.toAsciiBuilder (A.fromCIAscii $ dType d)
         ⊕
-        ( if null $ dParams d then
-              (∅)
-          else
-              A.toAsciiBuilder "; " ⊕
-              joinWith "; " (map printPair $ dParams d) ) )
-    where
-      printPair ∷ (CIAscii, Ascii) → AsciiBuilder
-      printPair (name, value)
-          = A.toAsciiBuilder (A.fromCIAscii name) ⊕
-            A.toAsciiBuilder "=" ⊕
-            ( if BS.any ((¬) ∘ isToken) $ A.toByteString value then
-                  quoteStr value
-              else
-                  A.toAsciiBuilder value )
+        printParams (dParams d) )
 
 multipartFormP ∷ Ascii → Parser [(Text, FormData)]
 multipartFormP boundary