packages feed

test-sandbox-compose-0.1.0: Test/Sandbox/Compose/Template.hs

module Test.Sandbox.Compose.Template (
  applyTemplate
) where

import qualified Text.Hastache as H
import qualified Text.Hastache.Context as H
import qualified Data.Text.Lazy as TL
import qualified Data.Text as T
import qualified Data.Map as M

applyTemplate :: H.MuVar a
         => [(String, a)]
         -> String
         -> IO String
applyTemplate keyValues template  = do
  str' <- H.hastacheStr
          H.defaultConfig
          (H.encodeStr template)
          (H.mkStrContext context')
  return $ T.unpack $ TL.toStrict str'
  where
    context' :: Monad m => String -> H.MuType m
    context' str' = case M.lookup str' (M.fromList (map (\(k,v) -> (k,H.MuVariable v)) keyValues)) of
      Just val -> val
      Nothing -> H.MuVariable ("{{"++str'++"}}")