@@ -23,7 +23,6 @@ import (
23
23
"strconv"
24
24
"strings"
25
25
26
- jsoniter "github.com/json-iterator/go"
27
26
"sigs.k8s.io/structured-merge-diff/v4/value"
28
27
)
29
28
@@ -73,29 +72,18 @@ func DeserializePathElement(s string) (PathElement, error) {
73
72
FieldName : & str ,
74
73
}, nil
75
74
case peValueSepBytes [0 ]:
76
- iter := readPool .BorrowIterator (b )
77
- defer readPool .ReturnIterator (iter )
78
- v , err := value .ReadJSONIter (iter )
75
+ v , err := value .FromJSON (b )
79
76
if err != nil {
80
77
return PathElement {}, err
81
78
}
82
79
return PathElement {Value : & v }, nil
83
80
case peKeySepBytes [0 ]:
84
- iter := readPool .BorrowIterator (b )
85
- defer readPool .ReturnIterator (iter )
86
- fields := value.FieldList {}
87
-
88
- iter .ReadObjectCB (func (iter * jsoniter.Iterator , key string ) bool {
89
- v , err := value .ReadJSONIter (iter )
90
- if err != nil {
91
- iter .Error = err
92
- return false
93
- }
94
- fields = append (fields , value.Field {Name : key , Value : v })
95
- return true
96
- })
81
+ fields , err := value .FieldListFromJSON (b )
82
+ if err != nil {
83
+ return PathElement {}, err
84
+ }
97
85
fields .Sort ()
98
- return PathElement {Key : & fields }, iter . Error
86
+ return PathElement {Key : & fields }, nil
99
87
case peIndexSepBytes [0 ]:
100
88
i , err := strconv .Atoi (s [2 :])
101
89
if err != nil {
@@ -109,11 +97,6 @@ func DeserializePathElement(s string) (PathElement, error) {
109
97
}
110
98
}
111
99
112
- var (
113
- readPool = jsoniter .NewIterator (jsoniter .ConfigCompatibleWithStandardLibrary ).Pool ()
114
- writePool = jsoniter .NewStream (jsoniter .ConfigCompatibleWithStandardLibrary , nil , 1024 ).Pool ()
115
- )
116
-
117
100
// SerializePathElement serializes a path element
118
101
func SerializePathElement (pe PathElement ) (string , error ) {
119
102
buf := strings.Builder {}
@@ -122,47 +105,37 @@ func SerializePathElement(pe PathElement) (string, error) {
122
105
}
123
106
124
107
func serializePathElementToWriter (w io.Writer , pe PathElement ) error {
125
- stream := writePool .BorrowStream (w )
126
- defer writePool .ReturnStream (stream )
127
108
switch {
128
109
case pe .FieldName != nil :
129
- if _ , err := stream .Write (peFieldSepBytes ); err != nil {
110
+ if _ , err := w .Write (peFieldSepBytes ); err != nil {
130
111
return err
131
112
}
132
- stream . WriteRaw ( * pe .FieldName )
113
+ fmt . Fprintf ( w , "%s" , * pe .FieldName )
133
114
case pe .Key != nil :
134
- if _ , err := stream .Write (peKeySepBytes ); err != nil {
115
+ if _ , err := w .Write (peKeySepBytes ); err != nil {
135
116
return err
136
117
}
137
- stream .WriteObjectStart ()
138
-
139
- for i , field := range * pe .Key {
140
- if i > 0 {
141
- stream .WriteMore ()
142
- }
143
- stream .WriteObjectField (field .Name )
144
- value .WriteJSONStream (field .Value , stream )
118
+ jsonVal , err := value .FieldListToJSON (* pe .Key )
119
+ if err != nil {
120
+ return err
145
121
}
146
- stream . WriteObjectEnd ( )
122
+ fmt . Fprintf ( w , "%s" , jsonVal )
147
123
case pe .Value != nil :
148
- if _ , err := stream .Write (peValueSepBytes ); err != nil {
124
+ if _ , err := w .Write (peValueSepBytes ); err != nil {
125
+ return err
126
+ }
127
+ jsonVal , err := value .ToJSON (* pe .Value )
128
+ if err != nil {
149
129
return err
150
130
}
151
- value . WriteJSONStream ( * pe . Value , stream )
131
+ fmt . Fprintf ( w , "%s" , jsonVal )
152
132
case pe .Index != nil :
153
- if _ , err := stream .Write (peIndexSepBytes ); err != nil {
133
+ if _ , err := w .Write (peIndexSepBytes ); err != nil {
154
134
return err
155
135
}
156
- stream . WriteInt ( * pe .Index )
136
+ fmt . Fprintf ( w , "%d" , * pe .Index )
157
137
default :
158
138
return errors .New ("invalid PathElement" )
159
139
}
160
- b := stream .Buffer ()
161
- err := stream .Flush ()
162
- // Help jsoniter manage its buffers--without this, the next
163
- // use of the stream is likely to require an allocation. Look
164
- // at the jsoniter stream code to understand why. They were probably
165
- // optimizing for folks using the buffer directly.
166
- stream .SetBuffer (b [:0 ])
167
- return err
140
+ return nil
168
141
}
0 commit comments