module Soostone ( app , middleWare , module Soostone.API , module Soostone.Types , module Soostone.Handlers ) where import Soostone.API import Soostone.Handlers import Soostone.Types import Control.Monad.Reader (runReaderT) import Network.Wai ( Middleware ) import Network.Wai.Middleware.Prometheus ( def, prometheus ) import Servant ( Application, HasServer(ServerT), Handler, hoistServer, serve ) soostoneServer :: ServerT SoostoneAPI AppM soostoneServer = API api' where api' = MainAPI submitKeyHandler countKeyHandler app :: AppState -> Application app !s = \req resp -> serve api (hoistServer api nt soostoneServer) req resp where nt :: AppM a -> Handler a nt x = flip runReaderT s $ runAppM x middleWare :: Middleware middleWare baseApp = prometheus def baseApp