Crates.io | ferrosaur |
lib.rs | ferrosaur |
version | |
source | src |
created_at | 2025-05-07 17:04:13.33312+00 |
updated_at | 2025-05-09 19:36:31.604503+00 |
description | Static codegen for deno_core. 🦀📲🦕 |
homepage | https://tonywu6.github.io/ferrosaur/ |
repository | https://github.com/tonywu6/ferrosaur |
max_upload_size | |
id | 1664119 |
Cargo.toml error: | TOML parse error at line 19, column 1 | 19 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
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.
This project is released under the Apache 2.0 License and the MIT License.