Skip to content

Commit

Permalink
yaml: Support multi document decode
Browse files Browse the repository at this point in the history
Related to #1087

TODO:
Support encode via option?
  • Loading branch information
wader committed Feb 27, 2025
1 parent 89b3aab commit 40afc7b
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions format/yaml/yaml.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,32 @@ func init() {

func decodeYAML(d *decode.D) any {
br := d.RawLen(d.Len())
var r any

var vs []any

yd := yaml.NewDecoder(bitio.NewIOReader(br))
if err := yd.Decode(&r); err != nil {
d.Fatalf("%s", err)
}
if err := yd.Decode(new(any)); !errors.Is(err, io.EOF) {
d.Fatalf("trialing data after top-level value")
for {
var v any
err := yd.Decode(&v)
if err != nil {
if len(vs) == 0 {
d.Fatalf("%s", err)
} else if errors.Is(err, io.EOF) {
break
} else {
d.Fatalf("trialing data after document")
}
}

vs = append(vs, v)
}

var s scalar.Any
s.Actual = gojqx.Normalize(r)
if len(vs) == 1 {
s.Actual = gojqx.Normalize(vs[0])
} else {
s.Actual = gojqx.Normalize(vs)
}

switch s.Actual.(type) {
case map[string]any,
Expand Down

0 comments on commit 40afc7b

Please sign in to comment.