From b2c8e07bead17cea909dd5ae42f31d45bcf0225d Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 24 Jun 2022 09:57:34 -0500 Subject: [PATCH] added JSONValue additions Signed-off-by: Matt Bruce --- MVMCore/MVMCore/Models/JSON/JSONValue.swift | 33 +++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/MVMCore/MVMCore/Models/JSON/JSONValue.swift b/MVMCore/MVMCore/Models/JSON/JSONValue.swift index 333fc91..b3527d2 100644 --- a/MVMCore/MVMCore/Models/JSON/JSONValue.swift +++ b/MVMCore/MVMCore/Models/JSON/JSONValue.swift @@ -13,6 +13,7 @@ public typealias JSONValueDictionary = [String: JSONValue] public enum JSONValueError: Error { case encode + case TypeMismatch } extension Optional { @@ -68,6 +69,38 @@ public enum JSONValue: Codable, Equatable { case .null: break } } + + public var base: Any { + switch self { + case .string(let string): return string + case .int(let int): return int + case .double(let double): return double + case .bool(let bool): return bool + case .object(let object): return try! object.toJSONAny() + case .array(let array): return try! array.toJSONArray() + case .null: return NSNull() + } + } + + public func value() throws -> T { + guard let base = self.base as? T else { + throw JSONValueError.TypeMismatch + } + return base + } + + private func value(type: T.Type) throws -> T { + let base: T = try value() + return base + } + + public func toString() throws -> String { try value(type: String.self) } + public func toDouble() throws -> Double { try value(type: Double.self) } + public func toInt() throws -> Int { try value(type: Int.self) } + public func toBool() throws -> Bool { try value(type: Bool.self) } + public func toArray(of type: T.Type) throws -> [T]{ try value(type: [T].self) } + public func toObject(of type: T.Type) throws -> T { try value(type: T.self) } + } public func ==(lhs: JSONValue, rhs: JSONValue) -> Bool {