1
0
forked from GitHub/gf-core

Move CGIError stuff to FastCGIUtils.

This commit is contained in:
bjorn
2008-08-24 19:12:44 +00:00
parent 5c0487200f
commit a8f0546574
2 changed files with 21 additions and 19 deletions

View File

@@ -1,9 +1,12 @@
{-# LANGUAGE DeriveDataTypeable #-}
module FastCGIUtils (initFastCGI, loopFastCGI,
DataRef, newDataRef, getData) where
DataRef, newDataRef, getData,
throwCGIError, handleCGIErrors) where
import Control.Concurrent
import Control.Exception
import Control.Monad
import Data.Dynamic
import Data.IORef
import Prelude hiding (catch)
import System.Directory
@@ -14,6 +17,7 @@ import System.IO.Unsafe
import System.Posix
import System.Time
import Network.FastCGI
initFastCGI :: IO ()
@@ -119,4 +123,19 @@ getData loadData ref file = liftIO $
-- Logging
logError :: String -> IO ()
logError s = hPutStrLn stderr s
logError s = hPutStrLn stderr s
-- * General CGI Error exception mechanism
data CGIError = CGIError { cgiErrorCode :: Int, cgiErrorMessage :: String, cgiErrorText :: [String] }
deriving Typeable
throwCGIError :: Int -> String -> [String] -> CGI a
throwCGIError c m t = throwCGI $ DynException $ toDyn $ CGIError c m t
handleCGIErrors :: CGI CGIResult -> CGI CGIResult
handleCGIErrors x = x `catchCGI` \e -> case e of
DynException d -> case fromDynamic d of
Nothing -> throw e
Just (CGIError c m t) -> outputError c m t
_ -> throw e

View File

@@ -9,9 +9,7 @@ import Network.CGI
import Text.JSON
import qualified Codec.Binary.UTF8.String as UTF8 (encodeString)
import Control.Exception
import Control.Monad
import Data.Dynamic
import qualified Data.Map as Map
import Data.Maybe
@@ -127,21 +125,6 @@ linearize' pgf mto tree =
Nothing -> PGF.linearizeAllLang pgf tree
Just to -> [(to,PGF.linearize pgf to tree)]
-- * General CGI Error exception mechanism
data CGIError = CGIError { cgiErrorCode :: Int, cgiErrorMessage :: String, cgiErrorText :: [String] }
deriving Typeable
throwCGIError :: Int -> String -> [String] -> CGI a
throwCGIError c m t = throwCGI $ DynException $ toDyn $ CGIError c m t
handleCGIErrors :: CGI CGIResult -> CGI CGIResult
handleCGIErrors x = x `catchCGI` \e -> case e of
DynException d -> case fromDynamic d of
Nothing -> throw e
Just (CGIError c m t) -> outputError c m t
_ -> throw e
-- * General CGI and JSON stuff
outputJSON :: JSON a => a -> CGI CGIResult