1.8 KiB
epic, story, title, status
| epic | story | title | status |
|---|---|---|---|
| 7 | 7.2 | Rust FFI Bridge | draft |
Epic 7 — macOS App (Swift/SwiftUI)
Goal: A beautiful, native macOS app that feels like it belongs on the platform.
Story 7.2: Rust FFI Bridge
As a macOS developer integrating CalcPad, I want a Swift package that wraps the Rust engine's C FFI into idiomatic Swift types, So that the macOS app can call the engine safely and efficiently without manual pointer management.
Acceptance Criteria:
Given the Rust engine is compiled as a C-compatible dynamic library
When the Swift package is imported
Then a CalcPadEngine class is available with methods evaluateLine(_ line: String) -> LineResult and evaluateSheet(_ text: String) -> SheetResult
Given the Swift app calls evaluateLine("2 + 2")
When the FFI bridge processes the call
Then the result is returned as a Swift LineResult struct (not a raw pointer)
And all memory allocated by Rust is properly freed (no leaks)
Given the Swift app calls evaluateSheet with a multi-line string
When the FFI bridge processes the call
Then an array of LineResult values is returned, one per line, in order
Given the Rust engine returns an error for a malformed expression
When the Swift bridge receives the error
Then it is converted to a Swift Error type or an error variant in LineResult (not a crash or nil)
Given the app is profiled with Instruments (Leaks tool)
When evaluateLine and evaluateSheet are called repeatedly over many cycles
Then no memory leaks are detected from the FFI boundary
Given the bridge is used on a background thread When multiple calls are made concurrently Then the bridge handles thread safety correctly (either by being thread-safe or by documenting single-threaded use with appropriate assertions)