From 801f4fa278670719bec074b708241878ad5fb25e Mon Sep 17 00:00:00 2001 From: Joannis Orlandos Date: Mon, 23 Oct 2017 10:38:25 +0200 Subject: [PATCH] decoding strings and arrays --- Sources/Cheetah/Codable.swift | 16 ++++++++++++++-- Tests/CheetahTests/ParserTests.swift | 5 +++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Sources/Cheetah/Codable.swift b/Sources/Cheetah/Codable.swift index b8fecd6..07f854b 100644 --- a/Sources/Cheetah/Codable.swift +++ b/Sources/Cheetah/Codable.swift @@ -374,9 +374,21 @@ public class JSONDecoder { return try T(from: decoder) } + public func decode(_ type: T.Type, from array: JSONArray) throws -> T { + let decoder = _JSONDecoder(target: .array(array)) + return try T(from: decoder) + } + public func decode(_ type: T.Type, from string: String) throws -> T { - let object = try JSONObject(from: string) - let decoder = _JSONDecoder(target: .object(object)) + let decoder: _JSONDecoder + + if let object = try? JSONObject(from: string) { + decoder = _JSONDecoder(target: .object(object)) + } else { + let array = try JSONArray(from: string) + decoder = _JSONDecoder(target: .array(array)) + } + return try T(from: decoder) } } diff --git a/Tests/CheetahTests/ParserTests.swift b/Tests/CheetahTests/ParserTests.swift index 00607c0..47f9105 100644 --- a/Tests/CheetahTests/ParserTests.swift +++ b/Tests/CheetahTests/ParserTests.swift @@ -92,6 +92,11 @@ class ParsingTests: XCTestCase { XCTAssertEqual(Bool(obj1["other"]), false) XCTAssertEqual(Bool(obj2["other"]), false) XCTAssertEqual(Bool(obj3["other"]), true) + + let encoded = array0.serializedString() + let values = try JSONDecoder().decode([User].self, from: encoded) + + XCTAssertEqual(values.count, 4) } func testEncodeArrayJSON() throws {