solidabis-koodihaaste/src/Server.hs

34 lines
1.0 KiB
Haskell
Raw Normal View History

2019-10-15 22:52:03 +03:00
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
2019-10-15 21:01:57 +03:00
module Server where
2019-10-15 22:52:03 +03:00
import Control.Monad.Reader (MonadReader, ask, asks, runReaderT)
import Control.Monad.Trans (MonadIO, liftIO)
import Data.Aeson (FromJSON)
import Network.Wai.Handler.Warp (run)
import Servant
import Servant.Server.Generic
import API (handler)
2019-10-15 23:12:33 +03:00
import Data.Language (HasModel)
2019-10-15 22:52:03 +03:00
import Solidabis.API (HasClientEnv, HasToken)
newtype Port = Port Int deriving (Show, FromJSON)
class HasPort a where
getPort :: a -> Port
setPort :: a -> Port -> a
instance HasPort Port where
getPort = id
setPort = const
app :: (HasModel r, HasClientEnv r, HasToken r) => r -> Application
app env = genericServeT (`runReaderT` env) API.handler
server
:: (HasModel r, HasClientEnv r, HasToken r, HasPort r, MonadReader r m, MonadIO m)
=> m ()
server = do
Port port <- asks getPort
ask >>= liftIO . run port . app