{-# LANGUAGE OverloadedStrings #-}

module Web.Scotty.Blaze (
  blaze
, builder
) where

import           Network.Wai
import           Web.Scotty (ActionM, header)
import qualified Control.Monad.State as MS
import           Text.Blaze.Html (Html)
import           Blaze.ByteString.Builder (Builder)
import           Text.Blaze.Html.Renderer.Utf8 (renderHtmlBuilder)

-- | Render some Blaze Html
--
blaze :: Html -> ActionM ()
blaze h = do
  header "Content-Type" "text/html"
  builder $ renderHtmlBuilder h

-- | Render a generic builder
--
builder :: Builder -> ActionM ()
builder = MS.modify . setContent

setContent :: Builder -> Response -> Response
setContent b (ResponseBuilder s h _) = ResponseBuilder s h b
setContent b (ResponseFile s h _ _)  = ResponseBuilder s h b
setContent b (ResponseSource s h _)  = ResponseBuilder s h b