quickjs-rusty 0.11.1

A rusty QuickJS (QuickJS-NG) Javascript engine wrapper, and more.
Documentation
use std::collections::HashMap;

use quickjs_rusty::BigInt;
use quickjs_rusty::{value::OwnedJsValue, Context};

#[test]
fn test_try_from_owned_js_value() {
    let context = Context::builder().build().unwrap();
    let js_value: OwnedJsValue = context.eval("42", false).unwrap();
    let value: i32 = js_value.try_into().unwrap();
    assert_eq!(value, 42);

    let js_value: OwnedJsValue = context.eval("null", false).unwrap();
    let value: Option<i32> = js_value.try_into().unwrap();
    assert_eq!(value, None);

    let js_value: OwnedJsValue = context.eval("42", false).unwrap();
    let value: Option<i32> = js_value.try_into().unwrap();
    assert_eq!(value, Some(42));

    let js_value: OwnedJsValue = context.eval("1754784747637", false).unwrap();
    let value: Option<u64> = js_value.try_into().unwrap();
    assert_eq!(value, Some(1754784747637));

    let js_value: OwnedJsValue = context.eval("true", false).unwrap();
    let value: bool = js_value.try_into().unwrap();
    assert_eq!(value, true);

    let js_value: OwnedJsValue = context.eval(r#""hello""#, false).unwrap();
    let value: String = js_value.try_into().unwrap();
    assert_eq!(value, "hello");

    // test with rope string
    let js_value: OwnedJsValue = context
        .eval(
            &format!(
                "var x = `{}`; x + x",
                include_str!("fixtures/long_string.txt")
            ),
            false,
        )
        .unwrap();
    assert!(js_value.is_string());
    let value: String = js_value.try_into().unwrap();
    assert!(value.starts_with("Lorem ipsum"));

    let js_value: OwnedJsValue = context.eval(r#"({"key": "value"})"#, false).unwrap();
    let value: HashMap<String, String> = js_value.try_into().unwrap();
    assert_eq!(value, HashMap::from([("key".into(), "value".into())]));

    let js_value: OwnedJsValue = context.eval(r#"[1, 2, 3]"#, false).unwrap();
    let value: Vec<i32> = js_value.try_into().unwrap();
    assert_eq!(value, vec![1, 2, 3]);

    let js_value: OwnedJsValue = context.eval(r#"12345678901234567890n"#, false).unwrap();
    let value: BigInt = js_value.try_into().unwrap();
    assert_eq!(value.to_string(), "12345678901234567890");
}