import Foundation import XCTestDynamicOverlay import XXClient public struct MessengerLookupContact { public enum Error: Swift.Error, Equatable { case notConnected case notLoggedIn } public var run: (Data) throws -> Contact public func callAsFunction(id: Data) throws -> Contact { try run(id) } } extension MessengerLookupContact { public static func live(_ env: MessengerEnvironment) -> MessengerLookupContact { MessengerLookupContact { id in guard let e2e = env.e2e() else { throw Error.notConnected } guard let ud = env.ud() else { throw Error.notLoggedIn } var result: Result<Contact, NSError>! let semaphore = DispatchSemaphore(value: 0) _ = try env.lookupUD( params: LookupUD.Params( e2eId: e2e.getId(), udContact: try ud.getContact(), lookupId: id, singleRequestParamsJSON: env.getSingleUseParams() ), callback: UdLookupCallback { lookupResult in result = lookupResult semaphore.signal() } ) semaphore.wait() return try result.get() } } } extension MessengerLookupContact { public static let unimplemented = MessengerLookupContact( run: XCTUnimplemented("\(Self.self)") ) }