Skip to content
Snippets Groups Projects
Commit 10b788a1 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add GetFactsFromContact functor

parent cdeb2d24
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!18Update Bindings
import Foundation
public struct Fact: Equatable {
public init(
fact: String,
......@@ -16,4 +18,22 @@ extension Fact: Codable {
case fact = "Fact"
case type = "Type"
}
static func decode(_ data: Data) throws -> Fact {
try JSONDecoder().decode(Self.self, from: data)
}
func encode() throws -> Data {
try JSONEncoder().encode(self)
}
}
extension Array where Element == Fact {
static func decode(_ data: Data) throws -> [Fact] {
try JSONDecoder().decode(Self.self, from: data)
}
func encode() throws -> Data {
try JSONEncoder().encode(self)
}
}
import Bindings
import XCTestDynamicOverlay
public struct ContactFactsProvider {
public var get: (Data) throws -> [Fact]
public struct GetFactsFromContact {
public var run: (Data) throws -> [Fact]
public func callAsFunction(contact: Data) throws -> [Fact] {
try get(contact)
try run(contact)
}
}
extension ContactFactsProvider {
public static let live = ContactFactsProvider { contact in
extension GetFactsFromContact {
public static let live = GetFactsFromContact { contact in
var error: NSError?
let factsData = BindingsGetFactsFromContact(contact, &error)
let data = BindingsGetFactsFromContact(contact, &error)
if let error = error {
throw error
}
guard let factsData = factsData else {
guard let data = data else {
fatalError("BindingsGetFactsFromContact returned `nil` without providing error")
}
let decoder = JSONDecoder()
let facts = try decoder.decode([Fact].self, from: factsData)
return facts
return try [Fact].decode(data)
}
}
#if DEBUG
extension ContactFactsProvider {
public static let failing = ContactFactsProvider { _ in
struct NotImplemented: Error {}
throw NotImplemented()
}
extension GetFactsFromContact {
public static let unimplemented = GetFactsFromContact(
run: XCTUnimplemented("\(Self.self)")
)
}
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment