json and dump filter

This commit is contained in:
Sebastian Frank
2019-03-11 15:29:05 +01:00
parent a2eaa3f4b4
commit 2f2454ee54
8 changed files with 107 additions and 20 deletions

View File

@@ -1,11 +1,56 @@
package config
import (
"fmt"
"reflect"
"github.com/imdario/mergo"
)
// MapString is a map[string]interface{} which always unmarsahls yaml to map[string]interface{}
type MapString map[string]interface{}
// UnmarshalYAML handles all maps as map[string]interface{} for later JSON
// see https://github.com/elastic/beats/blob/6435194af9f42cbf778ca0a1a92276caf41a0da8/libbeat/common/mapstr.go
func (ms *MapString) UnmarshalYAML(unmarshal func(interface{}) error) error {
var result map[interface{}]interface{}
err := unmarshal(&result)
if err != nil {
return err
}
*ms = cleanUpInterfaceMap(result)
return nil
}
func cleanUpInterfaceArray(in []interface{}) []interface{} {
result := make([]interface{}, len(in))
for i, v := range in {
result[i] = cleanUpMapValue(v)
}
return result
}
func cleanUpInterfaceMap(in map[interface{}]interface{}) MapString {
result := make(MapString)
for k, v := range in {
result[fmt.Sprintf("%v", k)] = cleanUpMapValue(v)
}
return result
}
func cleanUpMapValue(v interface{}) interface{} {
switch v := v.(type) {
case []interface{}:
return cleanUpInterfaceArray(v)
case map[interface{}]interface{}:
return cleanUpInterfaceMap(v)
case string:
return v
default:
return fmt.Sprintf("%v", v)
}
}
// CollectionConfig describes a collection
type CollectionConfig struct {
Name *string `yaml:"Name"`
@@ -26,7 +71,7 @@ type ThisPathConfig struct {
Navname *string `yaml:"Navname"`
GoTo *string `yaml:"GoTo"`
Collections []*CollectionConfig `yaml:"Collections"`
Data interface{} `yaml:"Data"`
Data MapString `yaml:"Data"`
}
// IndexConfig describes index input and output file
@@ -85,7 +130,7 @@ type PathConfig struct {
Markdown *MarkdownConfig `yaml:"Markdown"`
Imaging *ImagingConfig `yaml:"Imaging"`
Data map[string]interface{} `yaml:"Data"`
Data MapString `yaml:"Data"`
}
// PathConfigTree is complete config tree of content dir
@@ -94,7 +139,7 @@ type PathConfigTree struct {
OutputPath string
Hidden bool // for collections which are not part of the navigation
ColMap map[string]interface{}
ColMap MapString
InputFiles []string
OtherFiles []string