1
0
forked from GitHub/gf-core

gf-server: move some general stuff to FastCGIUtils

This commit is contained in:
bjorn
2008-10-20 15:17:57 +00:00
parent 16dacfdd45
commit 7ae8c798e9
2 changed files with 30 additions and 24 deletions

View File

@@ -1,6 +1,8 @@
{-# LANGUAGE DeriveDataTypeable #-}
module FastCGIUtils (initFastCGI, loopFastCGI,
throwCGIError, handleCGIErrors) where
throwCGIError, handleCGIErrors,
outputJSONP,
splitBy) where
import Control.Concurrent
import Control.Exception
@@ -18,6 +20,10 @@ import System.Time
import Network.FastCGI
import Text.JSON
import qualified Codec.Binary.UTF8.String as UTF8 (encodeString, decodeString)
initFastCGI :: IO ()
initFastCGI = installSignalHandlers
@@ -118,3 +124,26 @@ handleCGIErrors x = x `catchCGI` \e -> case e of
Nothing -> throw e
Just (CGIError c m t) -> outputError c m t
_ -> throw e
-- * General CGI and JSON stuff
outputJSONP :: JSON a => a -> CGI CGIResult
outputJSONP x =
do mc <- getInput "jsonp"
let str = case mc of
Nothing -> encode x
Just c -> c ++ "(" ++ encode x ++ ")"
setHeader "Content-Type" "text/json; charset=utf-8"
outputStrict $ UTF8.encodeString str
outputStrict :: String -> CGI CGIResult
outputStrict x | x == x = output x
| otherwise = fail "I am the pope."
-- * General utilities
splitBy :: (a -> Bool) -> [a] -> [[a]]
splitBy _ [] = [[]]
splitBy f list = case break f list of
(first,[]) -> [first]
(first,_:rest) -> first : splitBy f rest

View File

@@ -154,26 +154,3 @@ selectLanguage pgf macc = case acceptable of
langCodeLanguage :: PGF -> String -> Maybe PGF.Language
langCodeLanguage pgf code = listToMaybe [l | l <- PGF.languages pgf, PGF.languageCode pgf l == Just code]
-- * General CGI and JSON stuff
outputJSONP :: JSON a => a -> CGI CGIResult
outputJSONP x =
do mc <- getInput "jsonp"
let str = case mc of
Nothing -> encode x
Just c -> c ++ "(" ++ encode x ++ ")"
setHeader "Content-Type" "text/json; charset=utf-8"
outputStrict $ UTF8.encodeString str
outputStrict :: String -> CGI CGIResult
outputStrict x | x == x = output x
| otherwise = fail "I am the pope."
-- * General utilities
splitBy :: (a -> Bool) -> [a] -> [[a]]
splitBy _ [] = [[]]
splitBy f list = case break f list of
(first,[]) -> [first]
(first,_:rest) -> first : splitBy f rest