{-# LANGUAGE LambdaCase #-} -- | The main module. Does little more than handle some basic ocnfic, then -- call the server module Main where import Control.Monad.IO.Class (MonadIO (liftIO)) import Control.Monad.Logger (runStderrLoggingT) import Data.Default.Class (def) import Database.Persist.Postgresql import Network.Wai.Handler.Warp (run) import Network.Wai.Middleware.RequestLogger (OutputFormat (..), RequestLoggerSettings (..), mkRequestLogger) import System.Environment (getArgs) import Data.Functor ((<&>)) import Data.ByteString.Internal (packChars) import GTFS import Server main :: IO () main = do connStr <- getArgs <&> \case {[str] -> packChars str; _ -> ""} gtfs <- loadGtfs "./gtfs.zip" loggerMiddleware <- mkRequestLogger $ def { outputFormat = Detailed True } runStderrLoggingT $ withPostgresqlPool connStr 10 $ \pool -> liftIO $ do app <- application gtfs pool putStrLn "starting server …" run 4000 (loggerMiddleware app)