From mJS repository:
mJS is designed for microcontrollers with limited resources. Main design goals are: small footprint and simple C/C++ interoperability. mJS implements a strict subset of ES6 (JavaScript version 6).
toml
[dependencies]
mjs-sys = { version = "0.1", features = ["platform-nrf52"] }
```rust fn main() { let mut vm = mjs_sys::VM::create();
// Basic call let val = vm.exec(b"1 / 2\0").unwrap(); if val.isnumber() { println!("Result: {}", val.asdouble().unwrap()); }
// Call JS function from Rust let mut js_function = vm.exec(b" function foobar(x) { return 42 + x; } foobar \0").unwrap();
if jsfunction.isfunction() { let this = None; let x = vm.makenumber(10.); let args = &[&x]; let res = jsfunction.call(this, args).unwrap(); if res.isnumber() { println!("Result: {}", res.asdouble().unwrap()); } }
// Call Rust function from JS fn rustfunction(mjs: *mut mjssys::mjs) { let mut vm = mjssys::VM::frominner(mjs); let x = vm.arg(0).unwrap().as_int().unwrap(); println!("JS -> Rust: {}", x); }
let jsfunction = vm.makeforeign(rustfunction as _); vm.global().set(b"rust", jsfunction).unwrap(); vm.exec(b"rust(42)\0").unwrap();
vm.destroy(); } ```