this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

pkg/encoding/yaml: implement UnmarshalStream

Change-Id: I587ef873531e40bf673b0675460a8da87c2a6a50
Signed-off-by: Marcel van Lohuizen <mpvl@golang.org>
Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/532280
Unity-Result: CUEcueckoo <cueckoo@cuelang.org>
TryBot-Result: CUEcueckoo <cueckoo@cuelang.org>
Reviewed-by: Paul Jolly <paul@myitcv.io>

authored by

Marcel van Lohuizen and committed by
Marcel van Lohuizen
480b28b1 880863af

+60 -1
+23 -1
pkg/encoding/yaml/manual.go
··· 71 71 return buf.String(), nil 72 72 } 73 73 74 - // Unmarshal parses the YAML to a CUE instance. 74 + // Unmarshal parses the YAML to a CUE expression. 75 75 func Unmarshal(data []byte) (ast.Expr, error) { 76 76 return yaml.Unmarshal("", data) 77 + } 78 + 79 + // UnmarshalStream parses the YAML to a CUE list expression on success. 80 + func UnmarshalStream(data []byte) (ast.Expr, error) { 81 + d, err := yaml.NewDecoder("", data) 82 + if err != nil { 83 + return nil, err 84 + } 85 + 86 + a := []ast.Expr{} 87 + for { 88 + x, err := d.Decode() 89 + if err == io.EOF { 90 + break 91 + } 92 + if err != nil { 93 + return nil, err 94 + } 95 + a = append(a, x) 96 + } 97 + 98 + return ast.NewList(a...), nil 77 99 } 78 100 79 101 // Validate validates YAML and confirms it is an instance of the schema
+12
pkg/encoding/yaml/pkg.go
··· 54 54 } 55 55 }, 56 56 }, { 57 + Name: "UnmarshalStream", 58 + Params: []internal.Param{ 59 + {Kind: adt.BytesKind | adt.StringKind}, 60 + }, 61 + Result: adt.TopKind, 62 + Func: func(c *internal.CallCtxt) { 63 + data := c.Bytes(0) 64 + if c.Do() { 65 + c.Ret, c.Err = UnmarshalStream(data) 66 + } 67 + }, 68 + }, { 57 69 Name: "Validate", 58 70 Params: []internal.Param{ 59 71 {Kind: adt.BytesKind | adt.StringKind},
+25
pkg/encoding/yaml/testdata/gen.txtar
··· 12 12 t7: yaml.MarshalStream([{a: 1}, {b: 2}]) 13 13 t8: yaml.Marshal({b: int | *2}) 14 14 t9: yaml.MarshalStream([{a: 1}, {b: int | *2}]) 15 + 16 + unmarshalStream: { 17 + t1: yaml.UnmarshalStream("a: 1\n---\nb: 2") 18 + t1: yaml.UnmarshalStream('a: 1\n---\nb: 2') 19 + empty: yaml.UnmarshalStream('') 20 + empty: yaml.UnmarshalStream("") 21 + nums: yaml.UnmarshalStream('1\n---\n2') 22 + nums: yaml.UnmarshalStream("1\n---\n2") 23 + null1: yaml.UnmarshalStream('1\n---\n---\n2') 24 + null1: yaml.UnmarshalStream("1\n---\n---\n2") 25 + null2: yaml.UnmarshalStream('1\n---\n---\n2') 26 + null2: yaml.UnmarshalStream("1\n---\n---\n2") 27 + } 28 + 15 29 -- out/yaml -- 16 30 Errors: 17 31 a: error in call to encoding/yaml.Validate: invalid value 4 (out of bound <3): ··· 48 62 b: 2 49 63 50 64 """ 65 + unmarshalStream: { 66 + t1: [{ 67 + a: 1 68 + }, { 69 + b: 2 70 + }] 71 + empty: [] 72 + nums: [1, 2] 73 + null1: [1, null, 2] 74 + null2: [1, null, 2] 75 + } 51 76