hack2-contrib-2010.9.28: src/Hack2/Contrib/Middleware/ShowExceptions.hs
-- | Stolen from rack: catches all exceptions raised from the app it wraps.
module Hack2.Contrib.Middleware.ShowExceptions (show_exceptions) where
import Data.Default
import Data.Maybe
import Hack2
import Hack2.Contrib.Middleware.Hub
import Hack2.Contrib.Utils
import Air.Light
import Prelude hiding ((.), (^), (>), (-), log)
import System.IO
import System.IO.Error
import qualified Data.ByteString.Lazy.Char8 as B
program :: String
program = "ShowExceptions"
show_exceptions :: Maybe HackErrors -> Middleware
show_exceptions stream app = \env -> do
let my_stream = unHackErrors - stream.fromMaybe (env.hack_errors)
let log = simple_logger (\x -> my_stream (B.pack x)) program
app env `catch` (handler log)
where
handler :: Logger -> IOError -> IO Response
handler log e = do
let message = e.show
Error. log message
return - def { status = 500, body = B.pack message }