-- vim: ft=haskell {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} module $module_path$.Base where import Snap.Core (Snap,route) import qualified Snap.Http.Server as HTTP import Snap.Util.FileServe (serveDirectory) data Config = Config { cfgPort :: !Int -- ^ The port to run on , cfgStaticDir :: Maybe FilePath -- ^ Content to be served off of the root, relative to -- the directory that the server was started in } deriving (Show) -- | A default @Config@ value that will produce a server that runs on port 8080, -- and serves no static content. defaultConfig :: Config defaultConfig = Config { cfgPort = 8080, cfgStaticDir = Nothing } -- | Spawn a snap server, and run the given RPC action. runServer :: Config -> Snap () -> IO () runServer Config { .. } serveRpc = do let snapCfg :: HTTP.Config Snap () snapCfg = HTTP.setPort cfgPort HTTP.defaultConfig HTTP.simpleHttpServe snapCfg body where body = do serveRpc case cfgStaticDir of Just path -> route [ ("", serveDirectory path) ] Nothing -> return ()