Skip to content

Commit 1516de8

Browse files
committed
stop exporting jsoniter based apis
see: kubernetes-sigs#202
1 parent dda5e3a commit 1516de8

File tree

2 files changed

+45
-10
lines changed

2 files changed

+45
-10
lines changed

fieldpath/serialize-pe.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,25 @@ var (
5454
peSepBytes = []byte(peSeparator)
5555
)
5656

57+
// DO NOT EXPORT
58+
// readJSONIter reads a Value from a JSON iterator.
59+
// TODO: eliminate this https://github.com/kubernetes-sigs/structured-merge-diff/issues/202
60+
func readJSONIter(iter *jsoniter.Iterator) (value.Value, error) {
61+
v := iter.Read()
62+
if iter.Error != nil && iter.Error != io.EOF {
63+
return nil, iter.Error
64+
}
65+
return value.NewValueInterface(v), nil
66+
}
67+
68+
// DO NOT EXPORT
69+
70+
// writeJSONStream writes a value into a JSON stream.
71+
// TODO: eliminate this https://github.com/kubernetes-sigs/structured-merge-diff/issues/202
72+
func writeJSONStream(v value.Value, stream *jsoniter.Stream) {
73+
stream.WriteVal(v.Unstructured())
74+
}
75+
5776
// DeserializePathElement parses a serialized path element
5877
func DeserializePathElement(s string) (PathElement, error) {
5978
b := []byte(s)
@@ -75,7 +94,7 @@ func DeserializePathElement(s string) (PathElement, error) {
7594
case peValueSepBytes[0]:
7695
iter := readPool.BorrowIterator(b)
7796
defer readPool.ReturnIterator(iter)
78-
v, err := value.ReadJSONIter(iter)
97+
v, err := readJSONIter(iter)
7998
if err != nil {
8099
return PathElement{}, err
81100
}
@@ -86,7 +105,7 @@ func DeserializePathElement(s string) (PathElement, error) {
86105
fields := value.FieldList{}
87106

88107
iter.ReadObjectCB(func(iter *jsoniter.Iterator, key string) bool {
89-
v, err := value.ReadJSONIter(iter)
108+
v, err := readJSONIter(iter)
90109
if err != nil {
91110
iter.Error = err
92111
return false
@@ -141,14 +160,14 @@ func serializePathElementToWriter(w io.Writer, pe PathElement) error {
141160
stream.WriteMore()
142161
}
143162
stream.WriteObjectField(field.Name)
144-
value.WriteJSONStream(field.Value, stream)
163+
writeJSONStream(field.Value, stream)
145164
}
146165
stream.WriteObjectEnd()
147166
case pe.Value != nil:
148167
if _, err := stream.Write(peValueSepBytes); err != nil {
149168
return err
150169
}
151-
value.WriteJSONStream(*pe.Value, stream)
170+
writeJSONStream(*pe.Value, stream)
152171
case pe.Index != nil:
153172
if _, err := stream.Write(peIndexSepBytes); err != nil {
154173
return err

value/value.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"strings"
2424

2525
jsoniter "github.com/json-iterator/go"
26+
"sigs.k8s.io/structured-merge-diff/v4/internal/jsonstream"
2627
yaml "sigs.k8s.io/yaml/goyaml.v2"
2728
)
2829

@@ -90,15 +91,25 @@ func FromJSON(input []byte) (Value, error) {
9091
func FromJSONFast(input []byte) (Value, error) {
9192
iter := readPool.BorrowIterator(input)
9293
defer readPool.ReturnIterator(iter)
93-
return ReadJSONIter(iter)
94+
return read(iter)
95+
}
96+
97+
// this is a local copy of jsonstream.Read to avoid cyclic dependencies
98+
// TODO: eliminate this https://github.com/kubernetes-sigs/structured-merge-diff/issues/202
99+
func read(iter *jsoniter.Iterator) (value.Value, error) {
100+
v := iter.Read()
101+
if iter.Error != nil && iter.Error != io.EOF {
102+
return nil, iter.Error
103+
}
104+
return value.NewValueInterface(v), nil
94105
}
95106

96107
// ToJSON is a helper function for producing a JSon document.
97108
func ToJSON(v Value) ([]byte, error) {
98109
buf := bytes.Buffer{}
99110
stream := writePool.BorrowStream(&buf)
100111
defer writePool.ReturnStream(stream)
101-
WriteJSONStream(v, stream)
112+
jsonstream.Write(v, stream)
102113
b := stream.Buffer()
103114
err := stream.Flush()
104115
// Help jsoniter manage its buffers--without this, the next
@@ -109,17 +120,22 @@ func ToJSON(v Value) ([]byte, error) {
109120
return buf.Bytes(), err
110121
}
111122

112-
// ReadJSONIter reads a Value from a JSON iterator.
113-
func ReadJSONIter(iter *jsoniter.Iterator) (Value, error) {
123+
// DO NOT EXPORT
124+
// readJSONIter reads a Value from a JSON iterator.
125+
// TODO: eliminate this https://github.com/kubernetes-sigs/structured-merge-diff/issues/202
126+
func readJSONIter(iter *jsoniter.Iterator) (Value, error) {
114127
v := iter.Read()
115128
if iter.Error != nil && iter.Error != io.EOF {
116129
return nil, iter.Error
117130
}
118131
return NewValueInterface(v), nil
119132
}
120133

121-
// WriteJSONStream writes a value into a JSON stream.
122-
func WriteJSONStream(v Value, stream *jsoniter.Stream) {
134+
// DO NOT EXPORT
135+
136+
// writeJSONStream writes a value into a JSON stream.
137+
// TODO: eliminate this https://github.com/kubernetes-sigs/structured-merge-diff/issues/202
138+
func writeJSONStream(v Value, stream *jsoniter.Stream) {
123139
stream.WriteVal(v.Unstructured())
124140
}
125141

0 commit comments

Comments
 (0)