Skip to content

Instantly share code, notes, and snippets.

@TerryCK
Last active April 2, 2020 07:40
Show Gist options
  • Save TerryCK/5684b8a5638b84d95424736c0f07f389 to your computer and use it in GitHub Desktop.
Save TerryCK/5684b8a5638b84d95424736c0f07f389 to your computer and use it in GitHub Desktop.
test for Graph QL for different of data model with same point of api
import UIKit
protocol Request {
associatedtype Payload: Codable
func fire(completion: (Result<Payload, Error>) -> Void)
var parameter: [String] { get }
}
protocol DataPayloadModel: Codable {
static var profile: Self { get }
static var queryBody: [String] { get }
}
struct RolloverDataModal: Codable {
let balance : Double
}
struct Rollover : Codable, DataPayloadModel {
static var profile: Self { .init(rollover: .init(balance: .nan)) }
let rollover: RolloverDataModal
}
extension DataPayloadModel {
static var queryBody: [String] {
Mirror(reflecting: profile).children.reduce([String]()) { $0 + [$1.label!] }
// var find = [String]()
// for case let (propertyName?, _) in Mirror(reflecting: profile).children where Parameter(rawValue: propertyName) != nil {
// find.append(propertyName)
// }
// return find
}
}
extension Request {
func fire(completion: (Result<Payload, Error>) -> Void) {
print(parameter)
}
}
enum Parameter: String, CaseIterable {
case rollover
}
enum SPI<Payload: DataPayloadModel> : Request {
case getInfo
var parameter: [String] { Payload.queryBody }
}
struct Person : Codable, DataPayloadModel {
static var profile: Self {
.init(name: "", age: 0, profession: "", gender: "")
}
let name: String
let age: Int
let profession: String
let gender: String
}
SPI.getInfo.fire { (result: Result<Rollover, Error>) in
}
SPI.getInfo.fire { (result: Result<Person, Error>) in
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment