]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Utils.hs
Reimplement MultipartForm
[Lucu.git] / Network / HTTP / Lucu / Utils.hs
index a488aafbb64161feee9e67404c05f29a065236ec..3d38b8b3aec36c9dff990cb4c7e66d05995ad27e 100644 (file)
@@ -1,13 +1,11 @@
 {-# LANGUAGE
-    BangPatterns
-  , OverloadedStrings
+    OverloadedStrings
   , UnicodeSyntax
   #-}
 -- |Utility functions used internally in the Lucu httpd. These
 -- functions may be useful too for something else.
 module Network.HTTP.Lucu.Utils
     ( splitBy
-    , joinWith
     , quoteStr
     , parseWWWFormURLEncoded
     , splitPathInfo
@@ -23,8 +21,6 @@ import Data.ByteString (ByteString)
 import qualified Data.ByteString.Char8 as BS
 import Data.List hiding (last)
 import Data.Monoid.Unicode
-import Data.Text (Text)
-import Data.Text.Encoding as T
 import Network.URI
 import Prelude hiding (last)
 import Prelude.Unicode
@@ -32,22 +28,11 @@ import Prelude.Unicode
 -- |> splitBy (== ':') "ab:c:def"
 --  > ==> ["ab", "c", "def"]
 splitBy ∷ (a → Bool) → [a] → [[a]]
+{-# INLINEABLE splitBy #-}
 splitBy isSep src
-    = case break isSep src
-      of (last , []       ) → [last]
-         (first, _sep:rest) → first : splitBy isSep rest
-
--- |> joinWith ":" ["ab", "c", "def"]
---  > ==> "ab:c:def"
-joinWith ∷ Ascii → [AsciiBuilder] → AsciiBuilder
-{-# INLINEABLE joinWith #-}
-joinWith sep = flip go (∅)
-    where
-      go ∷ [AsciiBuilder] → AsciiBuilder → AsciiBuilder
-      {-# INLINE go #-}
-      go []     ab = ab
-      go (x:[]) ab = ab ⊕ x
-      go (x:xs) ab = go xs (ab ⊕ A.toAsciiBuilder sep ⊕ x)
+    = case break isSep src of
+        (last , []       ) → [last]
+        (first, _sep:rest) → first : splitBy isSep rest
 
 -- |> quoteStr "abc"
 --  > ==> "\"abc\""
@@ -94,12 +79,12 @@ parseWWWFormURLEncoded src
 
 -- |> splitPathInfo "http://example.com/foo/bar"
 --  > ==> ["foo", "bar"]
-splitPathInfo ∷ URI → [Text]
+splitPathInfo ∷ URI → [ByteString]
 splitPathInfo uri
     = let reqPathStr = uriPath uri
           reqPath    = [unEscapeString x | x ← splitBy (≡ '/') reqPathStr, (¬) (null x)]
       in
-        map (T.decodeUtf8 ∘ BS.pack) reqPath
+        map BS.pack reqPath
 
 -- |> show3 5
 --  > ==> "005"
@@ -111,3 +96,5 @@ show3 = A.unsafeFromBuilder ∘ go
            | i ≥ 0 ∧ i < 100  = B.fromByteString "0"  ⊕ BT.integral i
            | i ≥ 0 ∧ i < 1000 =                         BT.integral i
            | otherwise        = error ("show3: the integer i must satisfy 0 <= i < 1000: " ⧺ show i)
+-- FIXME: Drop this function as soon as possible, to eliminate the
+-- dependency on blaze-textual.