wikimusic-ssr-0.6.0.0: src/WikiMusic/SSR/Boot.hs
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}
module WikiMusic.SSR.Boot (boot) where
import Control.Monad
import Data.ByteString.Lazy qualified as BL
import Data.Text (pack)
import Network.Wai.Handler.Warp
import Optics
import Relude
import WikiMusic.SSR.Config
import WikiMusic.SSR.Model.Config
import WikiMusic.SSR.Servant.ApiSetup
boot :: (MonadIO m) => m ()
boot = do
args <- liftIO getArgs
maybeCfg <- readConfig (cfg args)
liftIO $ either crashWithBadConfig startWikiMusicSSR maybeCfg
where
crashWithBadConfig e = error ("Bad config could not be parsed! " <> show e)
cfg args = case nonEmpty args of
Just (x :| []) -> pack x
_ -> "resources/config/run-local.toml"
startWikiMusicSSR :: (MonadIO m) => AppConfig -> m ()
startWikiMusicSSR cfg = do
liftIO . BL.putStr $ "Starting WikiMusic SSR ..."
liftIO $ runSettings apiSettings =<< mkApp cfg
where
apiSettings = setPort (cfg ^. #servant % #port) defaultSettings