]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Utils.hs
List all pages
[Rakka.git] / Rakka / Utils.hs
index 0fddc6d64127baf25a1e5adbe19b58b5e758d039..15bc6f4043f5a87f149cd09a5147c4cb4cb5be7c 100644 (file)
@@ -1,19 +1,24 @@
 module Rakka.Utils
     ( yesOrNo
 module Rakka.Utils
     ( yesOrNo
+    , trueOrFalse
     , parseYesOrNo
     , maybeA
     , deleteIfEmpty
     , chomp
     , guessMIMEType
     , parseYesOrNo
     , maybeA
     , 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
 
 
@@ -22,6 +27,11 @@ yesOrNo True  = "yes"
 yesOrNo False = "no"
 
 
 yesOrNo False = "no"
 
 
+trueOrFalse :: Bool -> String
+trueOrFalse True  = "true"
+trueOrFalse False = "false"
+
+
 parseYesOrNo :: ArrowChoice a => a String Bool
 parseYesOrNo 
     = proc str -> do case str of
 parseYesOrNo :: ArrowChoice a => a String Bool
 parseYesOrNo 
     = proc str -> do case str of
@@ -57,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