diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/FilePartTracker.swift b/Sources/ElixxirDAppsSDK/FileTransfer/FilePartTracker.swift
new file mode 100644
index 0000000000000000000000000000000000000000..0cd9bf335f430365b8bf47f3c2f5924942eff12c
--- /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 0000000000000000000000000000000000000000..fe1ae07d70ac43d71f29ce8ec8feb7068a44e3ee
--- /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 0000000000000000000000000000000000000000..9310d3d7a3bf781e54ac478eb9d091f1489be4e5
--- /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)")
+  )
+}