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

Refactor UdMultiLookupCallback.Result

parent bcf22fb3
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!93Lookup, Multi-Lookup and Search API improvements
......@@ -2,9 +2,20 @@ import Bindings
import XCTestDynamicOverlay
public struct UdMultiLookupCallback {
public enum Result: Equatable {
case success([Contact])
case failure(error: NSError, failedIDs: [Data])
public struct Result: Equatable {
public init(
contacts: [Contact],
failedIds: [Data],
errors: [NSError]
) {
self.contacts = contacts
self.failedIds = failedIds
self.errors = errors
}
public var contacts: [Contact]
public var failedIds: [Data]
public var errors: [NSError]
}
public init(handle: @escaping (Result) -> Void) {
......@@ -30,23 +41,31 @@ extension UdMultiLookupCallback {
let callback: UdMultiLookupCallback
func callback(_ contactListJSON: Data?, failedIDs: Data?, err: Error?) {
var result = UdMultiLookupCallback.Result(
contacts: [],
failedIds: [],
errors: []
)
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 {
result.errors.append(err as NSError)
}
if let contactListJSON = contactListJSON {
do {
result.contacts = try JSONDecoder()
.decode([Data].self, from: contactListJSON)
.map { Contact.live($0) }
} catch {
result.errors.append(error as NSError)
}
}
if let failedIDs = failedIDs {
do {
let contactsData = try JSONDecoder().decode([Data].self, from: contactListJSON)
let contacts: [Contact] = contactsData.map { Contact.live($0) }
callback.handle(.success(contacts))
result.failedIds = try JSONDecoder().decode([Data].self, from: failedIDs)
} catch {
callback.handle(.failure(error: error as NSError, failedIDs: []))
result.errors.append(error as NSError)
}
} else {
fatalError("BindingsUdMultiLookupCallbackProtocol received `nil` contactListJSON and `nil` error")
}
callback.handle(result)
}
}
......
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