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.Hidden { continue } if f.CodecType == template.CodecConst { if f.Value != nil { out = utils.SetPathValue(f.Path, f.Value, out) } } else { if value, ok := renderUtils.GetValueFromPath(res, f.Path); ok { out = utils.SetPathValue(f.Path, value, out) } } } return out, nil }