@@ -17,10 +17,10 @@ limitations under the License.
1717package fieldpath
1818
1919import (
20+ "bytes"
2021 "errors"
2122 "fmt"
2223 "strconv"
23- "strings"
2424
2525 "github.com/go-json-experiment/json"
2626 "sigs.k8s.io/structured-merge-diff/v6/value"
@@ -97,36 +97,45 @@ func DeserializePathElement(s string) (PathElement, error) {
9797
9898// SerializePathElement serializes a path element
9999func 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+ }
101106
107+ func serializePathElementBuilder (pe PathElement , builder * bytes.Buffer ) error {
102108 switch {
103109 case pe .FieldName != nil :
104110 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
106115 }
107- builder .WriteString (* pe .FieldName )
108116 case pe .Key != nil :
109117 if _ , err := builder .Write (peKeySepBytes ); err != nil {
110- return "" , err
118+ return err
111119 }
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
114122 }
115123 case pe .Value != nil :
116124 if _ , err := builder .Write (peValueSepBytes ); err != nil {
117- return "" , err
125+ return err
118126 }
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
121129 }
122130 case pe .Index != nil :
123131 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
125136 }
126- builder .WriteString (strconv .Itoa (* pe .Index ))
127137 default :
128- return "" , errors .New ("invalid PathElement" )
138+ return errors .New ("invalid PathElement" )
129139 }
130-
131- return builder .String (), nil
140+ return nil
132141}
0 commit comments