From 3400aff2588cbf9dd4629c05537d16b019d0fdf5 Mon Sep 17 00:00:00 2001 From: Gareth Watts Date: Thu, 22 Oct 2020 12:14:14 -0500 Subject: Allow cascade _target to work with non toml fm The TOML lib unmarshals slices of string maps to []map[string]interface{} whereas YAML and JSON decode to []interface{} The existing tests only check for TOML working correctly, and _target with cascade did not work at all for frontmatter defined in other formats. Add a function to normalize those slices Fixes #7874 --- common/maps/maps.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'common/maps/maps.go') diff --git a/common/maps/maps.go b/common/maps/maps.go index 8b42ca764..41d9b6e15 100644 --- a/common/maps/maps.go +++ b/common/maps/maps.go @@ -14,6 +14,7 @@ package maps import ( + "fmt" "strings" "github.com/gobwas/glob" @@ -64,6 +65,23 @@ func ToStringMap(in interface{}) map[string]interface{} { return m } +func ToSliceStringMap(in interface{}) ([]map[string]interface{}, error) { + switch v := in.(type) { + case []map[string]interface{}: + return v, nil + case []interface{}: + var s []map[string]interface{} + for _, entry := range v { + if vv, ok := entry.(map[string]interface{}); ok { + s = append(s, vv) + } + } + return s, nil + default: + return nil, fmt.Errorf("unable to cast %#v of type %T to []map[string]interface{}", in, in) + } +} + type keyRename struct { pattern glob.Glob newKey string -- cgit v1.2.3