dingo-core-0.0.2: src/Dingo/Server.hs
module Dingo.Server
( -- Settings:
DingoSettings
, defaultDingoSettings
, dsPort
, dsResourceBundles
-- Functions:
, runApplication
) where
import Data.Text (Text)
import Dingo.Internal.Application (Application)
import Dingo.Internal.Callback (CallbackM)
import Dingo.Internal.Server.State (emptyServerState)
import Dingo.Internal.Server.Wai (mkWaiApplication)
import Dingo.ResourceBundle (ResourceBundle)
import Network.Wai.Handler.Warp (runSettings, defaultSettings, Settings(..))
-- | Settings for the Dingo application. This is kept
-- as an abstract type to avoid breaking applications
-- when fields are added. You should use record syntax
-- to change the defaults, e.g.
--
-- > defaultDingoSettings { dsPort = 4900 }
data DingoSettings =
DingoSettings { dsPort :: Int -- ^ Port to listen on. Default value: 3000
, dsResourceBundles :: [ResourceBundle] -- ^ Starting resource bundles. Default value: []
}
-- | Default settings for the Dingo application.
defaultDingoSettings :: DingoSettings
defaultDingoSettings = DingoSettings 3000 []
-- | Run the application with the given settings.
runApplication :: DingoSettings -> Text -> (Application -> CallbackM ()) ->IO ()
runApplication dingoSettings applicationTitle application = do
serverState <- emptyServerState application applicationTitle $ dsResourceBundles dingoSettings
runSettings settings $ mkWaiApplication serverState
where
settings =
defaultSettings { settingsTimeout = 60
, settingsPort = dsPort dingoSettings
}