Skip to content
Snippets Groups Projects
Commit 6079b4de authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add FileTransferProgressCallback

parent 341a00f8
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!18Update Bindings
import Bindings
import XCTestDynamicOverlay
public struct FileTransferProgressCallback {
public struct Callback {
public var progress: Progress
public var partTracker: FilePartTracker
}
public init(handle: @escaping (Result<Callback, NSError>) -> Void) {
self.handle = handle
}
public var handle: (Result<Callback, NSError>) -> Void
}
extension FileTransferProgressCallback {
public static let unimplemented = FileTransferProgressCallback(
handle: XCTUnimplemented("\(Self.self)")
)
}
extension FileTransferProgressCallback {
func makeBindingsFileTransferReceiveProgressCallback() -> BindingsFileTransferReceiveProgressCallbackProtocol {
makeBindingsFileTransferProgressCallback(debugName: "BindingsFileTransferReceiveProgressCallback")
}
func makeBindingsFileTransferSentProgressCallback() -> BindingsFileTransferSentProgressCallbackProtocol {
makeBindingsFileTransferProgressCallback(debugName: "BindingsFileTransferSentProgressCallback")
}
private func makeBindingsFileTransferProgressCallback(debugName: String)
-> BindingsFileTransferReceiveProgressCallbackProtocol & BindingsFileTransferSentProgressCallbackProtocol {
class CallbackObject: NSObject,
BindingsFileTransferReceiveProgressCallbackProtocol,
BindingsFileTransferSentProgressCallbackProtocol {
init(_ callback: FileTransferProgressCallback, _ debugName: String) {
self.callback = callback
self.debugName = debugName
}
let callback: 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")
}
do {
callback.handle(.success(.init(
progress: try Progress.decode(payload),
partTracker: .live(tracker)
)))
} catch {
callback.handle(.failure(error as NSError))
}
}
}
return CallbackObject(self, debugName)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment