| package templates // import "github.com/docker/docker/daemon/logger/templates" | |
| import ( | |
| "bytes" | |
| "encoding/json" | |
| "strings" | |
| "text/template" | |
| ) | |
| // basicFunctions are the set of initial | |
| // functions provided to every template. | |
| var basicFunctions = template.FuncMap{ | |
| "json": func(v interface{}) string { | |
| buf := &bytes.Buffer{} | |
| enc := json.NewEncoder(buf) | |
| enc.SetEscapeHTML(false) | |
| enc.Encode(v) | |
| // Remove the trailing new line added by the encoder | |
| return strings.TrimSpace(buf.String()) | |
| }, | |
| "split": strings.Split, | |
| "join": strings.Join, | |
| "title": strings.Title, //nolint:staticcheck // SA1019: strings.Title is deprecated: The rule Title uses for word boundaries does not handle Unicode punctuation properly. Use golang.org/x/text/cases instead. | |
| "lower": strings.ToLower, | |
| "upper": strings.ToUpper, | |
| "pad": padWithSpace, | |
| "truncate": truncateWithLength, | |
| } | |
| // NewParse creates a new tagged template with the basic functions | |
| // and parses the given format. | |
| func NewParse(tag, format string) (*template.Template, error) { | |
| return template.New(tag).Funcs(basicFunctions).Parse(format) | |
| } | |
| // padWithSpace adds whitespace to the input if the input is non-empty | |
| func padWithSpace(source string, prefix, suffix int) string { | |
| if source == "" { | |
| return source | |
| } | |
| return strings.Repeat(" ", prefix) + source + strings.Repeat(" ", suffix) | |
| } | |
| // truncateWithLength truncates the source string up to the length provided by the input | |
| func truncateWithLength(source string, length int) string { | |
| if len(source) < length { | |
| return source | |
| } | |
| return source[:length] | |
| } |