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