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
+        ))
       }
     }