From f550eda6e98e585cc66f8c7181531ca4a62ccf55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20M=C3=BCller?= Date: Tue, 25 Apr 2023 13:43:08 +0200 Subject: [PATCH] feat(pkg/engine): add TOML parsing functionality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows to use `fromToml` in templates similar to `fromJson` or `fromYaml`. Closes #12024 Signed-off-by: Dominik Müller --- pkg/engine/funcs.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkg/engine/funcs.go b/pkg/engine/funcs.go index 8f05a3a1d..e291fae15 100644 --- a/pkg/engine/funcs.go +++ b/pkg/engine/funcs.go @@ -48,6 +48,7 @@ func funcMap() template.FuncMap { // Add some extra functionality extra := template.FuncMap{ "toToml": toTOML, + "fromToml": fromTOML, "toYaml": toYAML, "fromYaml": fromYAML, "fromYamlArray": fromYAMLArray, @@ -132,6 +133,21 @@ func toTOML(v interface{}) string { return b.String() } +// fromTOML converts a TOML document into a map[string]interface{}. +// +// This is not a general-purpose TOML parser, and will not parse all valid +// TOML documents. Additionally, because its intended use is within templates +// it tolerates errors. It will insert the returned error message string into +// m["Error"] in the returned map. +func fromTOML(str string) map[string]interface{} { + m := make(map[string]interface{}) + + if err := toml.Unmarshal([]byte(str), &m); err != nil { + m["Error"] = err.Error() + } + return m +} + // toJSON takes an interface, marshals it to json, and returns a string. It will // always return a string, even on marshal error (empty string). //