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. |
||
|---|---|---|
| .. | ||
| crates | ||
| README.md | ||
README.md
rust/
Shared Rust crates that power OpenCut across platforms (web via WASM, desktop natively).
Adding a new crate
- Create it under
rust/crates/ - Add
bridgeas a dependency - Annotate public functions with
#[export]
How #[export] works
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:
#[wasm_bindgen(js_name = "roundToFrame")]
pub fn round_to_frame(time: f64, fps: f64) -> f64 { ... }
Desktop uses the crates directly as Cargo dependencies.
Testing
cargo test -p <crate>