summaryrefslogtreecommitdiff
path: root/server/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'server/Main.hs')
-rw-r--r--server/Main.hs42
1 files changed, 42 insertions, 0 deletions
diff --git a/server/Main.hs b/server/Main.hs
new file mode 100644
index 000000000..4266519c7
--- /dev/null
+++ b/server/Main.hs
@@ -0,0 +1,42 @@
+module Main where
+
+import PandocServer (app)
+import qualified Network.Wai.Handler.CGI as CGI
+import qualified Network.Wai.Handler.Warp as Warp
+import Network.Wai.Middleware.Timeout (timeout)
+import System.Environment (getProgName)
+import Options.Applicative
+
+data Opts = Opts
+ { optPort :: Warp.Port,
+ optTimeout :: Int } -- in seconds
+
+options :: Parser Opts
+options = Opts
+ <$> option auto
+ ( long "port"
+ <> value 3030
+ <> metavar "PORT"
+ <> help "Port to serve on" )
+ <*> option auto
+ ( long "timeout"
+ <> value 2
+ <> metavar "SECONDS"
+ <> help "Seconds timeout" )
+
+main :: IO ()
+main = do
+ progname <- getProgName
+ let optspec = info (options <**> helper)
+ ( fullDesc
+ <> progDesc "Run a pandoc server"
+ <> header "pandoc-server - text conversion server" )
+ opts <- execParser optspec
+
+ let port = optPort opts
+ let app' = timeout (optTimeout opts) app
+ if progname == "pandoc-server.cgi"
+ then -- operate as a CGI script
+ CGI.run app'
+ else -- operate as a persistent server
+ Warp.run port app'