From 341a00f872ed80a378b9a99575984cd9e1d93120 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Thu, 28 Jul 2022 20:17:53 +0100
Subject: [PATCH] Implement FilePartTracker wrapper

---
 .../FileTransfer/FilePartTracker.swift        | 22 +++++++++++++++++
 .../Functors/FilePartTrackerGetNumParts.swift | 22 +++++++++++++++++
 .../FilePartTrackerGetPartStatus.swift        | 24 +++++++++++++++++++
 3 files changed, 68 insertions(+)
 create mode 100644 Sources/ElixxirDAppsSDK/FileTransfer/FilePartTracker.swift
 create mode 100644 Sources/ElixxirDAppsSDK/FileTransfer/Functors/FilePartTrackerGetNumParts.swift
 create mode 100644 Sources/ElixxirDAppsSDK/FileTransfer/Functors/FilePartTrackerGetPartStatus.swift

diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/FilePartTracker.swift b/Sources/ElixxirDAppsSDK/FileTransfer/FilePartTracker.swift
new file mode 100644
index 00000000..0cd9bf33
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/FilePartTracker.swift
@@ -0,0 +1,22 @@
+import Bindings
+
+public struct FilePartTracker {
+  public var getNumParts: FilePartTrackerGetNumParts
+  public var getPartStatus: FilePartTrackerGetPartStatus
+}
+
+extension FilePartTracker {
+  public static func live(_ bindingsTracker: BindingsFilePartTracker) -> FilePartTracker {
+    FilePartTracker(
+      getNumParts: .live(bindingsTracker),
+      getPartStatus: .live(bindingsTracker)
+    )
+  }
+}
+
+extension FilePartTracker {
+  public static let unimplemented = FilePartTracker(
+    getNumParts: .unimplemented,
+    getPartStatus: .unimplemented
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FilePartTrackerGetNumParts.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FilePartTrackerGetNumParts.swift
new file mode 100644
index 00000000..fe1ae07d
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FilePartTrackerGetNumParts.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FilePartTrackerGetNumParts {
+  public var run: () -> Int
+
+  public func callAsFunction() -> Int {
+    run()
+  }
+}
+
+extension FilePartTrackerGetNumParts {
+  public static func live(_ tracker: BindingsFilePartTracker) -> FilePartTrackerGetNumParts {
+    FilePartTrackerGetNumParts(run: tracker.getNumParts)
+  }
+}
+
+extension FilePartTrackerGetNumParts {
+  public static let unimplemented = FilePartTrackerGetNumParts(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FilePartTrackerGetPartStatus.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FilePartTrackerGetPartStatus.swift
new file mode 100644
index 00000000..9310d3d7
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FilePartTrackerGetPartStatus.swift
@@ -0,0 +1,24 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FilePartTrackerGetPartStatus {
+  public var run: (Int) -> FilePartStatus
+
+  public func callAsFunction(partNum: Int) -> FilePartStatus {
+    run(partNum)
+  }
+}
+
+extension FilePartTrackerGetPartStatus {
+  public static func live(_ tracker: BindingsFilePartTracker) -> FilePartTrackerGetPartStatus {
+    FilePartTrackerGetPartStatus { partNum in
+      FilePartStatus(rawValue: tracker.getPartStatus(partNum))
+    }
+  }
+}
+
+extension FilePartTrackerGetPartStatus {
+  public static let unimplemented = FilePartTrackerGetPartStatus(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
-- 
GitLab