   data and returns the result as a string as well as the _kind_ of data in the
   template (e.g. `:html`). Data keys of the form `:one-two` are converted into
   template variables of the form `oneTwo`."
-  [templates template-name data]
+  [^SoyTofu templates ^String template-name data]
   (let [content (.. templates
                     (newRenderer template-name)
                     (setData (camelize-keys data))


(defn- parse-uncached
  [files]
  (let [builder (reduce #(.add %1 (io/resource %2)) (SoyFileSet/builder) files)
        opts (SoyGeneralOptions.)]
    (.setStrictAutoescapingRequired opts true)
    (.setGeneralOptions builder opts)

    (string/join (cons (string/lower-case (first uc)) (next uc)))))

(defn- camelize-keys
  ^java.util.Map [m]
  (let [f (fn [[k v]] (if (keyword? k) [(camel-case k) v] [k v]))]
    ;; only apply to maps
    (walk/postwalk (fn [x] (if (map? x) (into {} (map f x)) x)) m)))
