]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Utils.hs
Resource paths should not be assumed to be encoded in UTF-8. HTTP/1.1 says nothing...
[Lucu.git] / Network / HTTP / Lucu / Utils.hs
index ec4b6727f60567613549604a1c0e209d6d2a7727..4db7c0555e1e05513052ef0573e4dfab2874fc24 100644 (file)
@@ -1,6 +1,5 @@
 {-# LANGUAGE
-    BangPatterns
-  , OverloadedStrings
+    OverloadedStrings
   , UnicodeSyntax
   #-}
 -- |Utility functions used internally in the Lucu httpd. These
@@ -10,6 +9,7 @@ module Network.HTTP.Lucu.Utils
     , joinWith
     , quoteStr
     , parseWWWFormURLEncoded
+    , splitPathInfo
     , show3
     )
     where
@@ -29,6 +29,7 @@ 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]
@@ -89,6 +90,15 @@ parseWWWFormURLEncoded src
       plusToSpace '+' = ' '
       plusToSpace c   = c
 
+-- |> splitPathInfo "http://example.com/foo/bar"
+--  > ==> ["foo", "bar"]
+splitPathInfo ∷ URI → [ByteString]
+splitPathInfo uri
+    = let reqPathStr = uriPath uri
+          reqPath    = [unEscapeString x | x ← splitBy (≡ '/') reqPathStr, (¬) (null x)]
+      in
+        map BS.pack reqPath
+
 -- |> show3 5
 --  > ==> "005"
 show3 ∷ Integral n ⇒ n → AsciiBuilder