From 5777a555f60b780b7db430fa7bfa66a3bcb2623f Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Sun, 29 Mar 2026 14:25:25 +0200 Subject: feat: add shared Rust crates for cross-platform time utilities Introduce `bridge` proc-macro crate with `#[export]` attribute that conditionally applies `wasm_bindgen` for WASM builds, and `time` crate porting all timecode/frame utilities from TypeScript to Rust. --- rust/README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 rust/README.md (limited to 'rust/README.md') diff --git a/rust/README.md b/rust/README.md new file mode 100644 index 00000000..1048f66d --- /dev/null +++ b/rust/README.md @@ -0,0 +1,35 @@ +# rust/ + +Shared Rust crates that power OpenCut across platforms (web via WASM, desktop natively). + +## Adding a new crate + +1. Create it under `rust/crates/` +2. Add `bridge` as a dependency +3. Annotate public functions with `#[export]` + +## How `#[export]` works + +```rust +use bridge::export; + +#[export] +pub fn round_to_frame(time: f64, fps: f64) -> f64 { + (time * fps).round() / fps +} +``` + +Without the `wasm` feature, the macro is a no-op. With `--features wasm`, it expands to: + +```rust +#[wasm_bindgen(js_name = "roundToFrame")] +pub fn round_to_frame(time: f64, fps: f64) -> f64 { ... } +``` + +Desktop uses the crates directly as Cargo dependencies. + +## Testing + +```bash +cargo test -p +``` -- cgit v1.3.1