module Hascat.App
( module Hascat.Config,
InitHandler,
RespondHandler,
DoneHandler,
Handlers(..),
SystemHandler(..),
App(..),
defaultInit,
defaultDone,
defaultHandlers )
where
import Data.Maybe
import Hascat.Config
import Network.HTTP
import Data.ByteString.Lazy
import Hascat.Protocol
import System.Plugins
type InitHandler a = AppConfig -> IO a
type RespondHandler a =
AppConfig -> a -> ServletRequest -> IO (Response ByteString)
type DoneHandler a = AppConfig -> a -> IO ()
data Handlers a = Handlers {
initHandler :: InitHandler a,
respondHandler :: RespondHandler a,
doneHandler :: DoneHandler a }
data SystemHandler a = SystemHandler (RespondHandler a)
data App = forall a . App {
appConfig :: AppConfig,
appModule :: Module,
appHandlers :: Handlers a,
appState :: Maybe a,
appPaused :: Bool }
defaultHandlers = Handlers {
initHandler = defaultInit,
respondHandler = undefined,
doneHandler = defaultDone}
defaultInit :: InitHandler ()
defaultInit _ = return ()
defaultDone :: DoneHandler a
defaultDone _ _ = return ()