diff --git a/Sources/XXClient/Callbacks/FileTransferProgressCallback.swift b/Sources/XXClient/Callbacks/FileTransferProgressCallback.swift index 9c77d7af95ef9f47c42ff47ec682af4658b9ee50..615a715a102dfec5beba26042faf20543b26efaa 100644 --- a/Sources/XXClient/Callbacks/FileTransferProgressCallback.swift +++ b/Sources/XXClient/Callbacks/FileTransferProgressCallback.swift @@ -5,21 +5,24 @@ public struct FileTransferProgressCallback { public struct Callback { public init( progress: Progress, - partTracker: FilePartTracker + partTracker: FilePartTracker, + error: Error? ) { self.progress = progress self.partTracker = partTracker + self.error = error } public var progress: Progress public var partTracker: FilePartTracker + public var error: Error? } - public init(handle: @escaping (Result<Callback, NSError>) -> Void) { + public init(handle: @escaping (Callback) -> Void) { self.handle = handle } - public var handle: (Result<Callback, NSError>) -> Void + public var handle: (Callback) -> Void } extension FileTransferProgressCallback { @@ -51,24 +54,23 @@ extension FileTransferProgressCallback { let debugName: String func callback(_ payload: Data?, t: BindingsFilePartTracker?, err: Error?) { - if let error = err { - callback.handle(.failure(error as NSError)) - return - } guard let payload = payload else { fatalError("\(debugName) received `nil` payload without providing error") } - guard let tracker = t else { - fatalError("\(debugName) received `nil` tracker without providing error") - } + let progress: Progress do { - callback.handle(.success(.init( - progress: try Progress.decode(payload), - partTracker: .live(tracker) - ))) + progress = try Progress.decode(payload) } catch { - callback.handle(.failure(error as NSError)) + fatalError("\(debugName) payload decoding failed with error: \(error)") + } + guard let tracker = t else { + fatalError("\(debugName) received `nil` tracker without providing error") } + callback.handle(.init( + progress: progress, + partTracker: .live(tracker), + error: err + )) } }