Crates.io | es_runtime |
lib.rs | es_runtime |
version | 0.1.4 |
source | src |
created_at | 2020-03-26 16:10:12.521908 |
updated_at | 2020-06-01 13:17:52.212704 |
description | An API and Utils around the spidermonkey script engine |
homepage | https://github.com/DRFos/es_runtime |
repository | https://github.com/DRFos/es_runtime |
max_upload_size | |
id | 223155 |
size | 202,498 |
es_runtime is a crate aimed at making it possible for rust developers to integrate an ECMA-Script engine in their rust projects without having specialized knowledge about ECMA-Script engines.
The engine used is the Mozilla SpiderMonkey engine (https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey).
This project was started as a hobby project for me to learn rust. I hope some of you find it useful to learn about using spidermonkey from rust.
for the current status and versions please see https://github.com/DRFos/es_runtime
The version published on crates.io is based on mozjs 0.10.1 which is the latest published verion of mozjs.
The more current version depends on the github repo of mozjs but because of that it cannot be published to crates.io
Please see the CHANGELOG for what's new.
please see https://github.com/DRFos/es_runtime
I'm also working on a more feature rich runtime with a commandline tool and also an application server based on this runtime
for updates on the status of those please see https://github.com/DRFos
I'd like to hear what you would want to see in this project and or what you'd like to use it for, please drop me a line @ incoming+drfos-es-runtime-17727229-issue-@incoming.gitlab.com
Cargo.toml
[dependencies]
es_runtime = {git = "https://github.com/DRFos/es_runtime"}
# but you should check in the repo for the tag or branch you want to use and link to that
# es_runtime = {git = "https://github.com/DRFos/es_runtime", tag = "0.3.5"}
[dependencies]
es_runtime = "0.1"
my_app.rs
#[test]
fn example() {
// start a runtime
let rt = EsRuntimeWrapper::builder()
// run the garbage collector every 5 secs
.gc_interval(Duration::from_secs(5))
.build();
// create an example object
rt.eval_sync("this.myObj = {a: 1, b: 2};", "test1.es")
.ok()
.unwrap();
// register a native rust method
rt.register_op(
"my_rusty_op",
Box::new(|_sm_rt, args: Vec<EsValueFacade>| {
let a = args.get(0).unwrap().get_i32();
let b = args.get(1).unwrap().get_i32();
Ok(EsValueFacade::new_i32(a * b))
}),
);
// call the rust method from ES
rt.eval_sync(
"this.myObj.c = esses.invoke_rust_op_sync('my_rusty_op', 3, 7);",
"test2.es",
)
.ok()
.unwrap();
let c: Result<EsValueFacade, EsErrorInfo> =
rt.eval_sync("(this.myObj.c);", "test3.es");
assert_eq!(&21, c.ok().unwrap().get_i32());
// define an ES method and calling it from rust
rt.eval_sync("this.my_method = (a, b) => {return a * b;};", "test4.es")
.ok()
.unwrap();
let args = vec![EsValueFacade::new_i32(12), EsValueFacade::new_i32(5)];
let c_res: Result<EsValueFacade, EsErrorInfo> = rt.call_sync("my_method", args);
let c: EsValueFacade = c_res.ok().unwrap();
assert_eq!(&60, c.get_i32());
}
Currently I have only compiled this on and for a 64 bit linux machine (I use openSUSE)
Besides rust you'll need to install the following packages to compile the mozjs crate
for more detailed info please visit https://github.com/servo/mozjs#building