lento-quick-js 0.4.2-alpha.0

QuickJS Javascript engine wrapper
Documentation
use std::cell::RefCell;
use std::rc::Rc;
use quick_js::{Context, JsValue, ResourceValue};
use quick_js::console::{ConsoleBackend, Level};

pub struct Console {}

impl Console {
    pub fn new() -> Self {
        Self {}
    }
}

impl ConsoleBackend for Console {
    fn log(&self, level: Level, values: Vec<JsValue>) {
        println!("{}:{:?}", level, values);
    }
}

struct MyResource {
    text: String,
}

impl Drop for MyResource {
    fn drop(&mut self) {
        println!("my class dropped");
    }
}

pub fn main() {
    let context = Context::builder().console(Console::new()).build().unwrap();
    let resource = MyResource {
        text: "test".to_string(),
    };
    let js_value = JsValue::Resource(ResourceValue {
        resource: Rc::new(RefCell::new(resource)),
    });
    context.add_callback("print", |msg: JsValue| {
        println!("{:?}", msg);
        if let Some(txt) = msg.as_resource(|r: &mut MyResource| r.text.to_string()) {
            println!("callback text={}", txt);
        } else {
            println!("Not a resource");
        }
        0
    }).unwrap();
    context.set_global("rs", js_value).unwrap();
    context.eval(r"print(rs)").unwrap();
}