packages feed

pdf-slave-server-0.1.1.0: app/Main.hs

module Main where

import Data.Monoid 
import Network.Wai.Handler.Warp
import Network.Wai.Middleware.RequestLogger
import Options.Applicative

import Text.PDF.Slave.Server

-- | Argument line options
data Options = Options {
  -- | Path to config, if not set, the app will not start
  configPath :: FilePath
}

-- | Command line parser
optionsParser :: Parser Options
optionsParser = Options
  <$> strOption (
         long "conf"
      <> metavar "CONFIG"
      <> help "Path to configuration file"
    )

-- | Execute server with given options
runServer :: Options -> IO ()
runServer Options{..} = do
  cfg <- readConfig configPath
  env <- newServerEnv cfg
  let logger = makeLogger $ serverDetailedLogging cfg
  run (serverPort cfg) $ logger $ pdfSlaveServerApp env
  where
    makeLogger b = if b
      then logStdoutDev
      else logStdout

main :: IO ()
main = execParser opts >>= runServer
  where
    opts = info (helper <*> optionsParser)
      ( fullDesc
     <> progDesc "Web server for pdf-slave tool"
     <> header "pdf-slave-server - provides web service for pdf-slave tool" )