From d2acabe796b8be186e9680d35110d82beb2facfd Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Thu, 2 Jun 2022 23:35:12 +0200 Subject: [PATCH] Update MessageDeliveryWaiter.Result for type safety --- .../MessageDeliveryWaiter.swift | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/Sources/ElixxirDAppsSDK/MessageDeliveryWaiter.swift b/Sources/ElixxirDAppsSDK/MessageDeliveryWaiter.swift index 75d0bec2..92b6ab96 100644 --- a/Sources/ElixxirDAppsSDK/MessageDeliveryWaiter.swift +++ b/Sources/ElixxirDAppsSDK/MessageDeliveryWaiter.swift @@ -1,16 +1,9 @@ import Bindings public struct MessageDeliveryWaiter { - public struct Result: Equatable { - public init(delivered: Bool, timedOut: Bool, roundResults: Data?) { - self.delivered = delivered - self.timedOut = timedOut - self.roundResults = roundResults - } - - public var delivered: Bool - public var timedOut: Bool - public var roundResults: Data? + public enum Result: Equatable { + case delivered(roundResults: Data) + case notDelivered(timedOut: Bool) } public var wait: (Data, Int, @escaping (Result) -> Void) throws -> Void @@ -29,9 +22,7 @@ extension MessageDeliveryWaiter { MessageDeliveryWaiter { roundList, timeoutMS, callback in try bindingsClient.wait( forMessageDelivery: roundList, - mdc: Callback(onCallback: { delivered, timedOut, roundResults in - callback(Result(delivered: delivered, timedOut: timedOut, roundResults: roundResults)) - }), + mdc: Callback(onCallback: callback), timeoutMS: timeoutMS ) } @@ -39,15 +30,26 @@ extension MessageDeliveryWaiter { } private final class Callback: NSObject, BindingsMessageDeliveryCallbackProtocol { - init(onCallback: @escaping (Bool, Bool, Data?) -> Void) { + init(onCallback: @escaping (MessageDeliveryWaiter.Result) -> Void) { self.onCallback = onCallback super.init() } - let onCallback: (Bool, Bool, Data?) -> Void + let onCallback: (MessageDeliveryWaiter.Result) -> Void func eventCallback(_ delivered: Bool, timedOut: Bool, roundResults: Data?) { - onCallback(delivered, timedOut, roundResults) + if delivered, !timedOut, let roundResults = roundResults { + return onCallback(.delivered(roundResults: roundResults)) + } + if !delivered, roundResults == nil { + return onCallback(.notDelivered(timedOut: timedOut)) + } + fatalError(""" + BindingsMessageDeliveryCallback received invalid parameters: + - delivered → \(delivered) + - timedOut → \(timedOut) + - roundResults == nil → \(roundResults == nil) + """) } } -- GitLab