2 releases

new 0.1.1 May 9, 2025
0.1.0 May 7, 2025

#204 in FFI

Download history 148/week @ 2025-05-04

148 downloads per month

MIT/Apache

135KB
3.5K SLoC

ferrosaur

crates.io documentation MIT/Apache-2.0 licensed

ferrosaur derives statically-typed Rust code — à la wasm-bindgen — for deno_core::JsRuntime to interface with your JavaScript code.

If you have:

// lib.js
export const slowFib = (n) =>
  n === 0 ? 0 : n === 1 ? 1 : slowFib(n - 1) + slowFib(n - 2);

... and you write:

// lib.rs
use ferrosaur::js;

#[js(module("lib.js"))]
struct Math;

#[js(interface)]
impl Math {
    #[js(func)]
    fn slow_fib(&self, n: serde<usize>) -> serde<usize> {}
}

... then you get:

// let rt: &mut JsRuntime;
let lib = Math::main_module_init(rt).await?;
let fib = lib.slow_fib(42, rt)?;
assert_eq!(fib, 267914296);

[!TIP]

This is like the inverse of deno_core::op2:

  • #[op2] gives JavaScript programs easy access to your Rust implementation.
  • ferrosaur gives your Rust program easy access to JavaScript implementations.

License

This project is released under the Apache 2.0 License and the MIT License.

Dependencies

~0.6–1MB
~23K SLoC