kuma
1package template
2
3import (
4"strings"
5
6"github.com/hoisie/mustache"
7)
8
9type contextMap map[string]interface{}
10
11func (cm contextMap) merge(other contextMap) {
12for k, v := range other {
13cm[k] = v
14}
15}
16
17func newContextMap(key, value string) contextMap {
18if !strings.Contains(key, ".") {
19return map[string]interface{}{
20key: value,
21}
22}
23
24parts := strings.SplitAfterN(key, ".", 2)
25return map[string]interface{}{
26parts[0][:len(parts[0])-1]: newContextMap(parts[1], value),
27}
28}
29
30func Render(template string, values map[string]string) []byte {
31ctx := contextMap{}
32for k, v := range values {
33ctx.merge(newContextMap(k, v))
34}
35data := mustache.Render(template, ctx)
36return []byte(data)
37}
38