@@ -211,75 +211,37 @@ extension ConfidenceValue {
211211}
212212
213213extension ConfidenceValue {
214- // swiftlint:disable function_body_length
215214 // swiftlint:disable cyclomatic_complexity
216215 // swiftlint:disable identifier_name
217216 public func asJSONData( ) -> Data ? {
218- let encoder = JSONEncoder ( )
219- encoder. outputFormatting = . sortedKeys
220-
221- switch value {
222- case . boolean( let value) :
223- return try ? encoder. encode ( value)
224- case . string( let value) :
225- return try ? encoder. encode ( value)
226- case . integer( let value) :
227- return try ? encoder. encode ( value)
228- case . double( let value) :
229- return try ? encoder. encode ( value)
230- case . date( let value) :
231- return try ? encoder. encode ( value)
232- case . timestamp( let value) :
233- return try ? encoder. encode ( value)
234- case . structure( let values) :
235- var flattened : [ String : Any ] = [ : ]
236- for (key, value) in values {
237- switch value {
238- case . boolean( let v) : flattened [ key] = v
239- case . string( let v) : flattened [ key] = v
240- case . integer( let v) : flattened [ key] = v
241- case . double( let v) : flattened [ key] = v
242- case . date( let v) : flattened [ key] = v
243- case . timestamp( let v) : flattened [ key] = v
244- case . structure( let v) :
245- var nested : [ String : Any ] = [ : ]
246- for (nestedKey, nestedValue) in v {
247- switch nestedValue {
248- case . boolean( let v) : nested [ nestedKey] = v
249- case . string( let v) : nested [ nestedKey] = v
250- case . integer( let v) : nested [ nestedKey] = v
251- case . double( let v) : nested [ nestedKey] = v
252- case . date( let v) : nested [ nestedKey] = v
253- case . timestamp( let v) : nested [ nestedKey] = v
254- case . structure( let v) :
255- var innerNested : [ String : Any ] = [ : ]
256- for (innerKey, innerValue) in v {
257- switch innerValue {
258- case . boolean( let v) : innerNested [ innerKey] = v
259- case . string( let v) : innerNested [ innerKey] = v
260- case . integer( let v) : innerNested [ innerKey] = v
261- case . double( let v) : innerNested [ innerKey] = v
262- case . date( let v) : innerNested [ innerKey] = v
263- case . timestamp( let v) : innerNested [ innerKey] = v
264- default : break
265- }
266- }
267- nested [ nestedKey] = innerNested
268- default : break
269- }
217+ func flatten( _ value: ConfidenceValueInternal ) -> Any ? {
218+ switch value {
219+ case . boolean( let v) : return v
220+ case . string( let v) : return v
221+ case . integer( let v) : return v
222+ case . double( let v) : return v
223+ case . date( let v) : return v
224+ case . timestamp( let v) : return v
225+ case . list( let values) :
226+ return values. compactMap { flatten ( $0) }
227+ case . structure( let values) :
228+ var dict : [ String : Any ] = [ : ]
229+ for (key, val) in values {
230+ if let flattened = flatten ( val) {
231+ dict [ key] = flattened
270232 }
271- flattened [ key] = nested
272- default : break
273233 }
234+ return dict
235+ case . null:
236+ return NSNull ( )
274237 }
238+ }
239+
240+ if let flattened = flatten ( self . value) {
275241 return try ? JSONSerialization . data ( withJSONObject: flattened, options: . sortedKeys)
276- case . null:
277- return try ? JSONSerialization . data ( withJSONObject: NSNull ( ) )
278- default :
279- return nil
280242 }
243+ return nil
281244 }
282- // swiftlint:enable function_body_length
283245 // swiftlint:enable cyclomatic_complexity
284246 // swiftlint:enable identifier_name
285247}
0 commit comments