]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Utils.hs
List all pages
[Rakka.git] / Rakka / Utils.hs
index 693fdf2ebae8b695e7b1c30596c2e81d5bd09c40..15bc6f4043f5a87f149cd09a5147c4cb4cb5be7c 100644 (file)
@@ -6,15 +6,19 @@ module Rakka.Utils
     , deleteIfEmpty
     , chomp
     , guessMIMEType
     , deleteIfEmpty
     , chomp
     , guessMIMEType
+    , isSafeChar
+    , mkQueryString
     )
     where
 
     )
     where
 
+import qualified Codec.Binary.UTF8.String as UTF8
 import           Control.Arrow
 import           Control.Arrow.ArrowList
 import qualified Data.ByteString.Lazy as Lazy (ByteString)
 import qualified Data.ByteString.Lazy.Char8 as L8 hiding (ByteString)
 import           Magic
 import           Network.HTTP.Lucu
 import           Control.Arrow
 import           Control.Arrow.ArrowList
 import qualified Data.ByteString.Lazy as Lazy (ByteString)
 import qualified Data.ByteString.Lazy.Char8 as L8 hiding (ByteString)
 import           Magic
 import           Network.HTTP.Lucu
+import           Network.URI
 import           System.IO.Unsafe
 
 
 import           System.IO.Unsafe
 
 
@@ -63,3 +67,23 @@ guessMIMEType = read . unsafePerformIO . magicString magic . L8.unpack
               $ do m <- magicOpen [MagicMime]
                    magicLoadDefault m
                    return m
               $ do m <- magicOpen [MagicMime]
                    magicLoadDefault m
                    return m
+
+
+isSafeChar :: Char -> Bool
+isSafeChar c
+    | c == '/'            = True
+    | isReserved c        = False
+    | c > ' ' && c <= '~' = True
+    | otherwise           = False
+
+
+mkQueryString :: [(String, String)] -> String
+mkQueryString []            = ""
+mkQueryString ((k, v) : xs) = encode k ++ "=" ++ encode v ++
+                              if xs == [] then
+                                  ""
+                              else
+                                  ';' : mkQueryString(xs)
+    where
+      encode :: String -> String
+      encode = escapeURIString isSafeChar . UTF8.encodeString
\ No newline at end of file