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.