Skip to content
Snippets Groups Projects
UdSearchCallback.swift 1.19 KiB
Newer Older
import Bindings
import XCTestDynamicOverlay

public struct UdSearchCallback {
  public init(handle: @escaping (Result<[UDSearchResult], NSError>) -> Void) {
    self.handle = handle
  }

  public var handle: (Result<[UDSearchResult], NSError>) -> Void
}

extension UdSearchCallback {
  public static let unimplemented = UdSearchCallback(
    handle: XCTUnimplemented("\(Self.self)")
  )
}

extension UdSearchCallback {
  func makeBindingsUdSearchCallback() -> BindingsUdSearchCallbackProtocol {
    class CallbackObject: NSObject, BindingsUdSearchCallbackProtocol {
      init(_ callback: UdSearchCallback) {
        self.callback = callback
      }

      let callback: UdSearchCallback

      func callback(_ contactListJSON: Data?, err: Error?) {
        if let error = err {
          callback.handle(.failure(error as NSError))
        } else if let data = contactListJSON {
          do {
            callback.handle(.success(try [UDSearchResult].decode(data)))
          } catch {
            callback.handle(.failure(error as NSError))
          }
        } else {
          fatalError("BindingsUdSearchCallback received `nil` data and `nil` error")
        }
      }
    }

    return CallbackObject(self)
  }
}