packages feed

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