@@ -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