#javascript #js #jrst

chakracore

High-level bindings to JRST, the ChakraCore API

2 unstable releases

Uses old Rust 2015

0.2.0 Jun 24, 2017
0.1.0 Feb 13, 2017

#3 in #ecmascript

21 downloads per month
Used in leafers

MIT license

105KB
2K SLoC

chakracore-rs

crates.io version Language (Rust)

This is a wrapper around the JavaScript Runtime (JSRT), used in Microsoft Edge and node-chakracore. The library is still in pre-release and is not yet stable. The tests try to cover as much functionality as possible but memory leaks and segfaults may occur. If you want a more stable library, use the underlying API directly: chakracore-sys.

Documentation

Chakracore - master

Installation

Add this to your Cargo.toml:

[dependencies]
chakracore = "0.1.0"

... and this to your crate root:

extern crate chakracore as js;

This library, by itself, is simple and easily installed, but its chakracore-sys dependency is not. To ensure a successful build, please view the chakracore-sys build instructions.

Example

Hello World

extern crate chakracore as js;

fn main() {
  let runtime = js::Runtime::new().unwrap();
  let context = js::Context::new(&runtime).unwrap();
  let guard = context.make_current().unwrap();

  let result = js::script::eval(&guard, "5 + 5").unwrap();
  assert_eq!(result.to_integer(&guard), 10);
}

Function - Multiply

extern crate chakracore as js;

fn main() {
  let runtime = js::Runtime::new().unwrap();
  let context = js::Context::new(&runtime).unwrap();
  let guard = context.make_current().unwrap();

  let multiply = js::value::Function::new(&guard, Box::new(|guard, info| {
      let result = info.arguments[0].to_integer(guard)
                 * info.arguments[1].to_integer(guard);
      Ok(js::value::Number::new(guard, result).into())
  }));

  let result = multiply.call(&guard, &[
      &js::value::Number::new(&guard, 191).into(),
      &js::value::Number::new(&guard, 7).into(),
  ]).unwrap();

  assert_eq!(result.to_integer(&guard), 1337);
}

Dependencies

~2.6–5.5MB
~113K SLoC