X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Rakka.git;a=blobdiff_plain;f=Rakka%2FUtils.hs;h=15bc6f4043f5a87f149cd09a5147c4cb4cb5be7c;hp=693fdf2ebae8b695e7b1c30596c2e81d5bd09c40;hb=9d86882fe1630c844e11cf2cf760110c04ea10d4;hpb=f4a4c275bf0afab9f4ed04158866830e20b93cae diff --git a/Rakka/Utils.hs b/Rakka/Utils.hs index 693fdf2..15bc6f4 100644 --- a/Rakka/Utils.hs +++ b/Rakka/Utils.hs @@ -6,15 +6,19 @@ module Rakka.Utils , deleteIfEmpty , chomp , guessMIMEType + , isSafeChar + , mkQueryString ) 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 Network.URI import System.IO.Unsafe @@ -63,3 +67,23 @@ guessMIMEType = read . unsafePerformIO . magicString magic . L8.unpack $ 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