;;; see: https://developers.google.com/closure/templates/
(set-env! :dependencies '[[com.google.template/soy "2017-04-23"]])
(require '[clojure.java.io :as io])
(import '[com.google.template.soy SoyFileSet data.SoyMapData tofu.SoyTofu])
;;; setup
(def template-file (io/file "test.soy"))
(spit template-file
"{namespace example}
/**
* @param num
*/
{template .test1}
Foo: {$num}!
{/template}
/**
* @param num
*/
{template .test2}
Bar: {$num}!
{/template}")
;;; main
(let [^SoyTofu tofu (-> (SoyFileSet/builder)
(.add template-file)
.build
.compileToTofu)
^SoyMapData data-map (SoyMapData. (to-array ["num" "44"]))]
[(-> tofu
(.newRenderer "example.test1")
(.setData data-map)
.render)
(-> tofu
(.newRenderer "example.test2")
(.setData data-map)
.render)])
;;; tear down
(io/delete-file template-file)