-
Notifications
You must be signed in to change notification settings - Fork 274
/
template.go
36 lines (30 loc) · 826 Bytes
/
template.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package internal
import (
"sync"
"github.com/nicksnyder/go-i18n/v2/i18n/template"
)
// Template stores the template for a string and a cached version of the parsed template if they are cacheable.
type Template struct {
Src string
LeftDelim string
RightDelim string
parseOnce sync.Once
parsedTemplate template.ParsedTemplate
parseError error
}
func (t *Template) Execute(parser template.Parser, data interface{}) (string, error) {
var pt template.ParsedTemplate
var err error
if parser.Cacheable() {
t.parseOnce.Do(func() {
t.parsedTemplate, t.parseError = parser.Parse(t.Src, t.LeftDelim, t.RightDelim)
})
pt, err = t.parsedTemplate, t.parseError
} else {
pt, err = parser.Parse(t.Src, t.LeftDelim, t.RightDelim)
}
if err != nil {
return "", err
}
return pt.Execute(data)
}