-------------------------------------------------------------------------------- -- | Implements a basic static file server for previewing options {-# LANGUAGE OverloadedStrings #-} module Hakyll.Preview.Server ( staticServer ) where -------------------------------------------------------------------------------- import Data.String import qualified Network.Wai.Handler.Warp as Warp import qualified Network.Wai.Application.Static as Static import qualified Network.Wai as Wai import Network.HTTP.Types.Status (Status) -------------------------------------------------------------------------------- import Hakyll.Core.Logger (Logger) import qualified Hakyll.Core.Logger as Logger staticServer :: Logger -- ^ Logger -> FilePath -- ^ Directory to serve -> String -- ^ Host to bind on -> Int -- ^ Port to listen on -> IO () -- ^ Blocks forever staticServer logger directory host port = do Logger.header logger $ "Listening on http://" ++ host ++ ":" ++ show port Warp.runSettings warpSettings $ Static.staticApp (Static.defaultFileServerSettings directory) where warpSettings = Warp.setLogger noLog $ Warp.setHost (fromString host) $ Warp.setPort port Warp.defaultSettings noLog :: Wai.Request -> Status -> Maybe Integer -> IO () noLog _ _ _ = return ()