respond-0.2.0.0: src/Web/Respond/Run.hs
{-|
Description: building and running a RespondT app.
contains the tools to build and run a RespondT app
-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TupleSections #-}
module Web.Respond.Run where
import Network.Wai
import Control.Monad.IO.Class (MonadIO)
import Web.Respond.Monad
import Web.Respond.DefaultHandlers
import Web.Respond.DefaultServer
import qualified Network.Wai.Handler.Warp as Warp
import System.Log.FastLogger (LoggerSet)
-- * using RespondT
-- | build an 'Network.Wai.Application' from a 'RespondT' router stack.
respondApp :: MonadIO m => FailureHandlers -- ^ however you want failures handled
-> (forall a. m a -> IO a) -- ^ how to unpeel your monad to 'IO'
-> RespondT m ResponseReceived -- ^ your api - must respond.
-> Application -- ^ give this to warp or something
respondApp handlers lifter api req res = lifter (runRespondT api handlers req res)
-- | it's 'respondApp' with 'defaultHandlers' passed in.
respondAppDefault :: MonadIO m => (forall a. m a -> IO a) -> RespondT m ResponseReceived -> Application
respondAppDefault = respondApp defaultHandlers
-- | serve a RespondT router app using 'runWaiApp' on 'respondApp'.
serveRespond :: MonadIO m => Warp.Port -> LoggerSet -> FailureHandlers -> (forall a. m a -> IO a) -> RespondT m ResponseReceived -> IO ()
serveRespond port loggerSet handlers lifter api = runWaiApp port loggerSet (respondApp handlers lifter api)
-- | serve a RespondT router app using 'runWaiApp' on 'respondAppDefault'
serveRespondDefault :: MonadIO m => Warp.Port -> LoggerSet -> (forall a. m a -> IO a) -> RespondT m ResponseReceived -> IO ()
serveRespondDefault port loggerSet lifter api = runWaiApp port loggerSet (respondAppDefault lifter api)
-- * the simpler Respond
-- | RespondT stacked on top of IO; the simplest stack for handlers.
type RespondM a = RespondT IO a
-- | build an Application out of a RespondM handler.
simpleRespondApp :: FailureHandlers -> RespondM ResponseReceived -> Application
simpleRespondApp handlers = respondApp handlers id
-- | build an Application out of a RespondM handler using the default error handlers
simpleRespondAppDefault :: RespondM ResponseReceived -> Application
simpleRespondAppDefault = respondAppDefault id
-- | serve a RespondM handler
serveSimpleRespond :: Warp.Port -> LoggerSet -> FailureHandlers -> RespondM ResponseReceived -> IO ()
serveSimpleRespond port loggerSet handlers = serveRespond port loggerSet handlers id
-- | serve a RespondM handler using the default error handlers
serveSimpleRespondDefault :: Warp.Port -> LoggerSet -> RespondM ResponseReceived -> IO ()
serveSimpleRespondDefault port loggerSet = serveRespondDefault port loggerSet id