ryoakg
6/22/2017 - 8:11 AM

closure-template.clj

;;; 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)