module Happstack.Server.HStringTemplate (webST) where
import Happstack.Server
( ToMessage(toMessage, toContentType, toResponse)
, Response
)
import Control.Monad.Trans (MonadIO, liftIO)
import Text.StringTemplate
( STGroup
, StringTemplate
, directoryGroupLazy
, getStringTemplate
, render
, setManyAttrib
)
import qualified Data.ByteString.Char8 as B (pack)
import qualified Data.ByteString.Lazy.Char8 as L (pack)
import System.Log.Logger (Priority(..), logM)
log' :: Priority -> String -> IO ()
log' = logM "Happstack.Server.HStringTemplate"
instance ToMessage (StringTemplate String) where
toContentType _ = B.pack "text/html;charset=utf-8"
toMessage = L.pack . render
webST :: (MonadIO m) =>
String
-> [(String, String)]
-> m Response
webST name attrs = do
grp :: STGroup String <- liftIO $ directoryGroupLazy "templates"
case getStringTemplate name grp of
Just tmp -> do
liftIO $ log' INFO ("webST executing: " ++ name)
return . toResponse $ setManyAttrib attrs tmp
Nothing -> fail $ "Template does not exist: " ++ name