mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
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>
|
||
|
|
```
|