module Main where import Control.Lens import Data.Monoid import Data.String import Data.Text (unpack) 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 port = serverPort cfg host = fromString . unpack $ serverHost cfg :: HostPreference settings = defaultSettings & setHost host & setPort port runSettings settings $ 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" )