packages feed

wai-make-assets-0.2: src/wai-make-assets.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE ViewPatterns #-}

{-# OPTIONS_GHC -fno-warn-unused-binds #-}

import           Data.Maybe
import           Network.Wai.Handler.Warp
import           System.IO
import           WithCli

import qualified Network.Wai.MakeAssets as MA
import           Network.Wai.MakeAssets hiding (clientDir)

data Args
  = Args {
    port :: Maybe Int,
    clientDir :: Maybe FilePath
  }
  deriving (Generic)

instance HasArguments Args

main :: IO ()
main = withCliModified [AddShortOption "port" 'p'] $
  \ args -> do
    let appPort = fromMaybe 8000 (port args)
        settings =
          setPort appPort $
          setBeforeMainLoop (hPutStrLn stderr
            ("listening to " ++ show appPort ++ "...")) $
          defaultSettings
        options = maybe def (\ cd -> def{ MA.clientDir = cd }) (clientDir args)
    runSettings settings =<< serveAssets options