{-# LANGUAGE OverloadedStrings #-} module Network.Wai.Middleware.ContentType.Lucid where import Network.Wai.Middleware.ContentType.Types (FileExtListenerT, tell', FileExt (Html), ResponseVia (..)) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response, responseBuilder) import qualified Lucid.Base as L import Control.Monad.Trans (MonadTrans (lift)) import qualified Data.HashMap.Lazy as HM -- * Lifted Combinators lucid :: Monad m => L.HtmlT m () -> FileExtListenerT m () lucid i = do f <- lift (lucidOnly i) tell' $ HM.singleton Html $ ResponseVia i status200 [("Content-Type","text/html")] (const f) {-# INLINEABLE lucid #-} -- * Data Only lucidOnly :: Monad m => L.HtmlT m () -> m (Status -> ResponseHeaders -> Response) lucidOnly i = (\b s hs -> responseBuilder s hs b) <$> L.execHtmlT i {-# INLINEABLE lucidOnly #-}