From 6c31fc64c16b7c2a8219cb3ddde41ff505e175eb Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Wed, 7 Sep 2022 16:24:09 +0200 Subject: [PATCH] Encode/decode empty facts array to/from "null" --- Sources/XXClient/Models/Fact.swift | 10 ++++++++-- Tests/XXClientTests/Models/FactTests.swift | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Sources/XXClient/Models/Fact.swift b/Sources/XXClient/Models/Fact.swift index 99db6a2a..2ee8a6b3 100644 --- a/Sources/XXClient/Models/Fact.swift +++ b/Sources/XXClient/Models/Fact.swift @@ -30,10 +30,16 @@ extension Fact: Codable { extension Array where Element == Fact { public static func decode(_ data: Data) throws -> Self { - try JSONDecoder().decode(Self.self, from: data) + if let string = String(data: data, encoding: .utf8), string == "null" { + return [] + } + return try JSONDecoder().decode(Self.self, from: data) } public func encode() throws -> Data { - try JSONEncoder().encode(self) + if isEmpty { + return "null".data(using: .utf8)! + } + return try JSONEncoder().encode(self) } } diff --git a/Tests/XXClientTests/Models/FactTests.swift b/Tests/XXClientTests/Models/FactTests.swift index 2ba1da9a..c844af66 100644 --- a/Tests/XXClientTests/Models/FactTests.swift +++ b/Tests/XXClientTests/Models/FactTests.swift @@ -38,4 +38,17 @@ final class FactTests: XCTestCase { XCTAssertNoDifference(models, decodedModels) } + + func testCodingEmptyArray() throws { + let jsonString = "null" + let jsonData = jsonString.data(using: .utf8)! + + let decodedModels = try [Fact].decode(jsonData) + + XCTAssertNoDifference(decodedModels, []) + + let encodedModels = try decodedModels.encode() + + XCTAssertNoDifference(encodedModels, jsonData) + } } -- GitLab