extern crate mini_v8;
use mini_v8::{MiniV8, Array, Object, Function};
fn main() {
let mv8 = MiniV8::new();
let value: usize = mv8.eval("2 + 2").unwrap();
assert_eq!(value, 4);
let value: String = mv8.eval("`Two plus two is ${2 + 2}`").unwrap();
assert_eq!(value, "Two plus two is 4".to_string());
let array: Array = mv8.eval("[123, 'abc']").unwrap();
let element: String = array.get(1).unwrap();
assert_eq!(element, "abc".to_string());
array.set(0, 456).unwrap();
let object: Object = mv8.create_object();
let js_string = mv8.create_string("This string is owned by JavaScript!");
object.set("someString", js_string).unwrap();
let rust_add = mv8.create_function(|inv| {
let (a, b): (f64, f64) = inv.args.into(&inv.mv8)?;
Ok(a + b)
});
object.set("add", rust_add.clone()).unwrap();
let js_add: Function = mv8.eval("(a, b) => a + b").unwrap();
let value: f64 = rust_add.call((1, 2)).unwrap();
assert_eq!(value, 3.0);
let value: f64 = js_add.call((1, 2)).unwrap();
assert_eq!(value, 3.0);
}