36 lines
696 B
Markdown
36 lines
696 B
Markdown
# 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 <crate>
|
|
```
|