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 ()