{-# OPTIONS_GHC -XOverloadedStrings -funbox-strict-fields #-} module Main where import Network.FastCGI import Control.Exception import System.IO import Database.HSQL import Database.HSQL.PostgreSQL (connect) import Text.JSON import qualified OpenResty.Request as Req import qualified OpenResty.Response as Res import Debug.Trace (trace) import Data.Dynamic import Control.Monad.Trans import qualified Data.ByteString.Char8 as B main :: IO () main = do catchDyn initServer processInitError initServer :: IO () initServer = do cnn <- (connect "localhost" "test" "agentzh" "agentzh") runServer cnn runServer :: Connection -> IO () runServer = runFastCGI . handleErrors . processRequest processRequest :: Connection -> CGI CGIResult processRequest cnn = do catchCGI (Req.parseCGIEnv >>= output . (++"\n") . encode) handler where handler :: Exception -> CGI CGIResult handler error@(DynException dyn) = Res.emitError (trace ("Exception: " ++ e) e) where e = case fromDynamic dyn of Just v -> show (v :: Req.RestyError) Nothing -> show error handler v = output $ show v ++ "\n" --processRequest cnn = output $ trace "Showing hi" (show "hi") processInitError :: SqlError -> IO () processInitError = runFastCGI . Res.emitError . show