diff options
Diffstat (limited to 'tests/mediapc/requirements/templatefns.go')
-rw-r--r-- | tests/mediapc/requirements/templatefns.go | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/tests/mediapc/requirements/templatefns.go b/tests/mediapc/requirements/templatefns.go index 1b743d935f6..59491d37cab 100644 --- a/tests/mediapc/requirements/templatefns.go +++ b/tests/mediapc/requirements/templatefns.go @@ -16,6 +16,7 @@ package templatefns import ( + "fmt" "strings" "text/template" "unicode" @@ -26,15 +27,17 @@ import ( func Funcs() template.FuncMap { // These function are made available in templates by calling their key values, e.g. {{SnakeCase "HelloWorld"}}. return template.FuncMap{ - // Case conversion functions. - "LowerCase": strings.ToLower, - "UpperCase": strings.ToUpper, - "TitleCase": titleCase, - "SnakeCase": snakeCase, + // go/keep-sorted start + "Dict": dict, "KebabCase": kebabCase, - "UpperCamelCase": upperCamelCase, "LowerCamelCase": lowerCamelCase, + "LowerCase": strings.ToLower, "SafeReqID": safeReqID, + "SnakeCase": snakeCase, + "TitleCase": titleCase, + "UpperCamelCase": upperCamelCase, + "UpperCase": strings.ToUpper, + // go/keep-sorted end } } @@ -118,3 +121,36 @@ func safeReqID(s string) string { } return "r" + strings.ToLower(f(f(f(s, "/", "__"), ".", "_"), "-", "_")) } + +// dict converts a list of key-value pairs into a map. +// If there is an odd number of values, the last value is nil. +// The last key is preserved so in the template it can be referenced like {{$myDict.key}}. +func dict(v ...any) map[string]any { + dict := map[string]any{} + lenv := len(v) + for i := 0; i < lenv; i += 2 { + key := toString(v[i]) + if i+1 >= lenv { + dict[key] = nil + continue + } + dict[key] = v[i+1] + } + return dict +} + +// toString converts a value to a string. +func toString(v any) string { + switch v := v.(type) { + case string: + return v + case []byte: + return string(v) + case error: + return v.Error() + case fmt.Stringer: + return v.String() + default: + return fmt.Sprintf("%v", v) + } +} |