@@ -17,15 +17,12 @@ limitations under the License.
1717package fieldpath
1818
1919import (
20- "bytes"
2120 "errors"
2221 "fmt"
23- "io"
2422 "strconv"
2523 "strings"
2624
2725 "github.com/go-json-experiment/json"
28- "github.com/go-json-experiment/json/jsontext"
2926 "sigs.k8s.io/structured-merge-diff/v6/value"
3027)
3128
5552 peKeySepBytes = []byte {peKey , peSeparator }
5653)
5754
58- // FieldListFromJSON is a helper function for reading a JSON document.
59- func fieldListFromJSON (input []byte ) (value.FieldList , error ) {
60- parser := jsontext .NewDecoder (bytes .NewBuffer (input ))
61-
62- if objStart , err := parser .ReadToken (); err != nil {
63- return nil , fmt .Errorf ("parsing JSON: %v" , err )
64- } else if objStart .Kind () != jsontext .BeginObject .Kind () {
65- return nil , fmt .Errorf ("expected object" )
66- }
67-
68- var fields value.FieldList
69- for {
70- if parser .PeekKind () == jsontext .EndObject .Kind () {
71- if _ , err := parser .ReadToken (); err != nil {
72- return nil , fmt .Errorf ("parsing JSON: %v" , err )
73- }
74- break
75- }
76-
77- rawKey , err := parser .ReadToken ()
78- if err == io .EOF {
79- return nil , fmt .Errorf ("unexpected EOF" )
80- } else if err != nil {
81- return nil , fmt .Errorf ("parsing JSON: %v" , err )
82- }
83-
84- k := rawKey .String ()
85-
86- var v any
87- if err := json .UnmarshalDecode (parser , & v ); err == io .EOF {
88- return nil , fmt .Errorf ("unexpected EOF" )
89- } else if err != nil {
90- return nil , fmt .Errorf ("parsing JSON: %v" , err )
91- }
92-
93- fields = append (fields , value.Field {Name : k , Value : value .NewValueInterface (v )})
94- }
95-
96- return fields , nil
97- }
98-
9955// DeserializePathElement parses a serialized path element
10056func DeserializePathElement (s string ) (PathElement , error ) {
10157 b := []byte (s )
@@ -121,11 +77,10 @@ func DeserializePathElement(s string) (PathElement, error) {
12177 }
12278 return PathElement {Value : & v }, nil
12379 case peKeySepBytes [0 ]:
124- fields , err := fieldListFromJSON ( b )
125- if err != nil {
80+ var fields value. FieldList
81+ if err := json . Unmarshal ( b , & fields ); err != nil {
12682 return PathElement {}, err
12783 }
128- fields .Sort ()
12984 return PathElement {Key : & fields }, nil
13085 case peIndexSepBytes [0 ]:
13186 i , err := strconv .Atoi (s [2 :])
0 commit comments