@@ -17,10 +17,10 @@ limitations under the License.
17
17
package fieldpath
18
18
19
19
import (
20
+ "bytes"
20
21
"errors"
21
22
"fmt"
22
23
"strconv"
23
- "strings"
24
24
25
25
"github.com/go-json-experiment/json"
26
26
"sigs.k8s.io/structured-merge-diff/v6/value"
@@ -97,36 +97,45 @@ func DeserializePathElement(s string) (PathElement, error) {
97
97
98
98
// SerializePathElement serializes a path element
99
99
func SerializePathElement (pe PathElement ) (string , error ) {
100
- builder := strings.Builder {}
100
+ builder := bytes.Buffer {}
101
+ if err := serializePathElementBuilder (pe , & builder ); err != nil {
102
+ return "" , err
103
+ }
104
+ return builder .String (), nil
105
+ }
101
106
107
+ func serializePathElementBuilder (pe PathElement , builder * bytes.Buffer ) error {
102
108
switch {
103
109
case pe .FieldName != nil :
104
110
if _ , err := builder .Write (peFieldSepBytes ); err != nil {
105
- return "" , err
111
+ return err
112
+ }
113
+ if _ , err := builder .WriteString (* pe .FieldName ); err != nil {
114
+ return err
106
115
}
107
- builder .WriteString (* pe .FieldName )
108
116
case pe .Key != nil :
109
117
if _ , err := builder .Write (peKeySepBytes ); err != nil {
110
- return "" , err
118
+ return err
111
119
}
112
- if err := json .MarshalWrite (& builder , * pe .Key , json .Deterministic (true )); err != nil {
113
- return "" , err
120
+ if err := json .MarshalWrite (builder , pe .Key , json .Deterministic (true )); err != nil {
121
+ return err
114
122
}
115
123
case pe .Value != nil :
116
124
if _ , err := builder .Write (peValueSepBytes ); err != nil {
117
- return "" , err
125
+ return err
118
126
}
119
- if err := json .MarshalWrite (& builder , (* pe .Value ).Unstructured (), json .Deterministic (true )); err != nil {
120
- return "" , err
127
+ if err := json .MarshalWrite (builder , (* pe .Value ).Unstructured (), json .Deterministic (true )); err != nil {
128
+ return err
121
129
}
122
130
case pe .Index != nil :
123
131
if _ , err := builder .Write (peIndexSepBytes ); err != nil {
124
- return "" , err
132
+ return err
133
+ }
134
+ if _ , err := builder .WriteString (strconv .Itoa (* pe .Index )); err != nil {
135
+ return err
125
136
}
126
- builder .WriteString (strconv .Itoa (* pe .Index ))
127
137
default :
128
- return "" , errors .New ("invalid PathElement" )
138
+ return errors .New ("invalid PathElement" )
129
139
}
130
-
131
- return builder .String (), nil
140
+ return nil
132
141
}
0 commit comments