From a1ad09239bfc1aabdb345c798cf8b490f1dc0f44 Mon Sep 17 00:00:00 2001 From: Zach Date: Fri, 9 Jun 2023 19:19:03 -0600 Subject: [PATCH] Add JSON data function (#2) --- Sources/Cache/JSON/JSON.swift | 15 +++++++++++++++ Tests/CacheTests/JSONTests.swift | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/Sources/Cache/JSON/JSON.swift b/Sources/Cache/JSON/JSON.swift index 0df02c3..7abf00f 100644 --- a/Sources/Cache/JSON/JSON.swift +++ b/Sources/Cache/JSON/JSON.swift @@ -71,6 +71,21 @@ public struct JSON: Cacheable where Key.RawVal } } + /// Returns JSON data. + /// + /// - Throws: Errors are from `JSONSerialization.data(withJSONObject:)` + public func data() throws -> Data { + var stringKeyedValues: [String: Any] = [:] + + for (key, value) in allValues { + stringKeyedValues[key.rawValue] = value + } + + return try JSONSerialization.data( + withJSONObject: stringKeyedValues + ) + } + /** Retrieves a nested JSON object within the current object. diff --git a/Tests/CacheTests/JSONTests.swift b/Tests/CacheTests/JSONTests.swift index 31a2773..155ce9d 100644 --- a/Tests/CacheTests/JSONTests.swift +++ b/Tests/CacheTests/JSONTests.swift @@ -24,6 +24,13 @@ final class JSONTests: XCTestCase { XCTAssertEqual(json.get(.text), "Hello, World!") XCTAssertEqual(json.get(.count), 27) XCTAssertEqual(json.get(.isError), false) + + let data = try json.data() + let loadedJSON: JSON = JSON(data: data) + + XCTAssertEqual(loadedJSON.get(.text, as: String.self), json.get(.text)) + XCTAssertEqual(loadedJSON.get(.count, as: Int.self), json.get(.count)) + XCTAssertEqual(loadedJSON.get(.isError, as: Bool.self), json.get(.isError)) } func testInitArray() throws {