github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/daemon/logger/templates/templates.go (about)

     1  package templates // import "github.com/docker/docker/daemon/logger/templates"
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"strings"
     7  	"text/template"
     8  )
     9  
    10  // basicFunctions are the set of initial
    11  // functions provided to every template.
    12  var basicFunctions = template.FuncMap{
    13  	"json": func(v interface{}) string {
    14  		buf := &bytes.Buffer{}
    15  		enc := json.NewEncoder(buf)
    16  		enc.SetEscapeHTML(false)
    17  		enc.Encode(v)
    18  		// Remove the trailing new line added by the encoder
    19  		return strings.TrimSpace(buf.String())
    20  	},
    21  	"split":    strings.Split,
    22  	"join":     strings.Join,
    23  	"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.
    24  	"lower":    strings.ToLower,
    25  	"upper":    strings.ToUpper,
    26  	"pad":      padWithSpace,
    27  	"truncate": truncateWithLength,
    28  }
    29  
    30  // NewParse creates a new tagged template with the basic functions
    31  // and parses the given format.
    32  func NewParse(tag, format string) (*template.Template, error) {
    33  	return template.New(tag).Funcs(basicFunctions).Parse(format)
    34  }
    35  
    36  // padWithSpace adds whitespace to the input if the input is non-empty
    37  func padWithSpace(source string, prefix, suffix int) string {
    38  	if source == "" {
    39  		return source
    40  	}
    41  	return strings.Repeat(" ", prefix) + source + strings.Repeat(" ", suffix)
    42  }
    43  
    44  // truncateWithLength truncates the source string up to the length provided by the input
    45  func truncateWithLength(source string, length int) string {
    46  	if len(source) < length {
    47  		return source
    48  	}
    49  	return source[:length]
    50  }