Files
marka/parser/decoders/yaml.go
Max Richter 75d6dab008
All checks were successful
Build and Push Server / build-and-push (push) Successful in 7m4s
feat: reimplement pathAlias for yaml fields
2025-10-24 11:12:35 +02:00

52 lines
1.1 KiB
Go

package decoders
import (
"fmt"
"git.max-richter.dev/max/marka/parser/utils"
renderUtils "git.max-richter.dev/max/marka/renderer/utils"
"git.max-richter.dev/max/marka/template"
"go.yaml.in/yaml/v4"
)
func Yaml(input string, block template.Block) (value any, error error) {
res := make(map[string]any)
err := yaml.Unmarshal([]byte(input), &res)
if err != nil {
return nil, fmt.Errorf("failed to parse yaml '%q': %w", input, err)
}
var out any
for _, f := range block.Fields {
if f.Path == "@schema" {
continue
}
if f.CodecType == template.CodecConst {
if f.Value != nil {
out = utils.SetPathValue(f.Path, f.Value, out)
}
} else {
if value, ok := res[f.Path]; ok {
out = utils.SetPathValue(f.Path, value, out)
continue
}
for _, alias := range f.PathAliases {
if value, ok := res[alias]; ok {
out = utils.SetPathValue(f.Path, value, out)
continue
}
}
if value, ok := renderUtils.GetValueFromPath(res, f.Path); ok {
out = utils.SetPathValue(f.Path, value, out)
continue
}
}
}
return out, nil
}