mobile-ios/CovidSafe/Feedback/Sources/JMCTargetJSONFromDisk.swift
2020-05-08 17:49:14 +10:00

45 lines
1.5 KiB
Swift

// Copyright © 2020 Australian Government All rights reserved.
import Foundation
extension JMCTarget {
static let JSONFileName = "JMCTarget"
public static func createTargetFromJSONOnDisk() throws -> JMCTarget {
guard let JMCTargetJSONPath = Foundation.Bundle.main.path(forResource: JSONFileName, ofType: "json") else {
throw JMCTargetJSONOnDiskError.jsonFileMissingFromBundleError
}
return try JMCTarget(JSONFilePath: JMCTargetJSONPath)
}
init(JSONFilePath: String) throws {
guard let JMCTargetData = try? Data(contentsOf: URL(fileURLWithPath: JSONFilePath)) else {
throw JMCTargetJSONOnDiskError.readJSONFileError
}
try self.init(JSONData: JMCTargetData)
}
init(JSONData: Data) throws {
let JSONObject = try JSONSerialization.jsonObject(with: JSONData, options: [])
guard let JMCTargetDictionary = JSONObject as? [String : NSObject] else {
throw JMCTargetJSONOnDiskError.jsonDictionaryToInstanceError
}
try self.init(JSONDictionary: JMCTargetDictionary )
}
init(JSONDictionary: [String: NSObject]) throws {
guard let host = JSONDictionary["host"] as? String,
let apiKey = JSONDictionary["apiKey"] as? String,
let projectKey = JSONDictionary["projectKey"] as? String else {
throw JMCTargetJSONOnDiskError.jsonDictionaryToInstanceError
}
self.init(host: host, apiKey: apiKey, projectKey: projectKey)
}
}
public enum JMCTargetJSONOnDiskError: Error {
case jsonFileMissingFromBundleError
case readJSONFileError
case jsonDictionaryToInstanceError
}