Skip to content

Commit ae1cac8

Browse files
committed
Merge branch 'master' into perf-text-bool
2 parents 9c07770 + 0b1cab2 commit ae1cac8

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

Sources/SwiftProtobuf/JSONEncodingVisitor.swift

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,11 @@ internal struct JSONEncodingVisitor: Visitor {
134134
encoder.putBytesValue(value: value)
135135
}
136136

137-
private mutating func _visitRepeated<T>(value: [T], fieldNumber: Int, encode: (T) -> ()) throws {
137+
private mutating func _visitRepeated<T>(
138+
value: [T],
139+
fieldNumber: Int,
140+
encode: (inout JSONEncoder, T) throws -> ()
141+
) throws {
138142
try startField(for: fieldNumber)
139143
var comma = false
140144
encoder.startArray()
@@ -143,7 +147,7 @@ internal struct JSONEncodingVisitor: Visitor {
143147
encoder.comma()
144148
}
145149
comma = true
146-
encode(v)
150+
try encode(&encoder, v)
147151
}
148152
encoder.endArray()
149153
}
@@ -168,37 +172,43 @@ internal struct JSONEncodingVisitor: Visitor {
168172
}
169173

170174
mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws {
171-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: Float) in
175+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
176+
(encoder: inout JSONEncoder, v: Float) in
172177
encoder.putFloatValue(value: v)
173178
}
174179
}
175180

176181
mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws {
177-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: Double) in
182+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
183+
(encoder: inout JSONEncoder, v: Double) in
178184
encoder.putDoubleValue(value: v)
179185
}
180186
}
181187

182188
mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws {
183-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: Int32) in
189+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
190+
(encoder: inout JSONEncoder, v: Int32) in
184191
encoder.putInt32(value: v)
185192
}
186193
}
187194

188195
mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws {
189-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: Int64) in
196+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
197+
(encoder: inout JSONEncoder, v: Int64) in
190198
encoder.putInt64(value: v)
191199
}
192200
}
193201

194202
mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws {
195-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: UInt32) in
203+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
204+
(encoder: inout JSONEncoder, v: UInt32) in
196205
encoder.putUInt32(value: v)
197206
}
198207
}
199208

200209
mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws {
201-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: UInt64) in
210+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
211+
(encoder: inout JSONEncoder, v: UInt64) in
202212
encoder.putUInt64(value: v)
203213
}
204214
}
@@ -228,50 +238,43 @@ internal struct JSONEncodingVisitor: Visitor {
228238
}
229239

230240
mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws {
231-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: Bool) in
241+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
242+
(encoder: inout JSONEncoder, v: Bool) in
232243
encoder.putBoolValue(value: v)
233244
}
234245
}
235246

236247
mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws {
237-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: String) in
248+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
249+
(encoder: inout JSONEncoder, v: String) in
238250
encoder.putStringValue(value: v)
239251
}
240252
}
241253

242254
mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws {
243-
try _visitRepeated(value: value, fieldNumber: fieldNumber) { (v: Data) in
255+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
256+
(encoder: inout JSONEncoder, v: Data) in
244257
encoder.putBytesValue(value: v)
245258
}
246259
}
247260

248261
mutating func visitRepeatedEnumField<E: Enum>(value: [E], fieldNumber: Int) throws {
249-
try startField(for: fieldNumber)
250-
var arraySeparator = String()
251-
encoder.append(text: "[")
252-
for v in value {
253-
encoder.append(text: arraySeparator)
262+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
263+
(encoder: inout JSONEncoder, v: E) throws in
254264
if let n = v.name {
255265
encoder.appendQuoted(name: n)
256266
} else {
257267
encoder.putEnumInt(value: v.rawValue)
258268
}
259-
arraySeparator = ","
260269
}
261-
encoder.append(text: "]")
262270
}
263271

264272
mutating func visitRepeatedMessageField<M: Message>(value: [M], fieldNumber: Int) throws {
265-
try startField(for: fieldNumber)
266-
var arraySeparator = String()
267-
encoder.append(text: "[")
268-
for v in value {
269-
encoder.append(text: arraySeparator)
273+
try _visitRepeated(value: value, fieldNumber: fieldNumber) {
274+
(encoder: inout JSONEncoder, v: M) throws in
270275
let json = try v.jsonUTF8Data()
271276
encoder.append(utf8Data: json)
272-
arraySeparator = ","
273277
}
274-
encoder.append(text: "]")
275278
}
276279

277280
mutating func visitRepeatedGroupField<G: Message>(value: [G], fieldNumber: Int) throws {

0 commit comments

Comments
 (0)