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

Add UdMultiLookupCallback

parent 8756a012
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!90Update Bindings
import Bindings
import XCTestDynamicOverlay
public struct UdMultiLookupCallback {
public enum Result: Equatable {
case success([Contact])
case failure(error: NSError, failedIDs: [Data])
}
public init(handle: @escaping (Result) -> Void) {
self.handle = handle
}
public var handle: (Result) -> Void
}
extension UdMultiLookupCallback {
public static let unimplemented = UdMultiLookupCallback(
handle: XCTUnimplemented("\(Self.self)")
)
}
extension UdMultiLookupCallback {
func makeBindingsUdMultiLookupCallback() -> BindingsUdMultiLookupCallbackProtocol {
class CallbackObject: NSObject, BindingsUdMultiLookupCallbackProtocol {
init(_ callback: UdMultiLookupCallback) {
self.callback = callback
}
let callback: UdMultiLookupCallback
func callback(_ contactListJSON: Data?, failedIDs: Data?, err: Error?) {
if let err = err {
callback.handle(.failure(
error: err as NSError,
failedIDs: failedIDs
.map { (try? JSONDecoder().decode([Data].self, from: $0)) ?? [] } ?? []
))
} else if let contactListJSON = contactListJSON {
do {
let contactsData = try JSONDecoder().decode([Data].self, from: contactListJSON)
let contacts: [Contact] = contactsData.map { Contact.live($0) }
callback.handle(.success(contacts))
} catch {
callback.handle(.failure(error: error as NSError, failedIDs: []))
}
} else {
fatalError("BindingsUdMultiLookupCallbackProtocol received `nil` contactListJSON and `nil` error")
}
}
}
return CallbackObject(self)
}
}
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