#duktape #javascript #js #dukbind

duktape-rs

duktape 的更安全(更安全)的 Rust 封装

4 个版本

0.0.4 2019 年 1 月 31 日
0.0.3 2019 年 1 月 31 日
0.0.2 2019 年 1 月 31 日
0.0.1 2019 年 1 月 30 日

#6 in #duktape

无许可证

21KB
417

duktape-rs

duktape 的更安全(更安全)的 Rust 封装。

进行中

此库正在进行开发,目前功能有限。

它能做什么?

目前,duktape-rs

  • 为 dukbind 提供了一个安全的包装(duktape 的原始 FFI 绑定)。

  • 提供可管理的值返回,可以修改并将其传递回 duktape 上下文。

  • 支持堆指针(用于对象),包括设置和获取对象的属性(作为 DukValue)。

  • 可以评估 &str 并返回结果(DukResult<DukValue, DukError>)

  • 支持处理(我认为是)大多数在 eval 过程中出现的 JS 错误 测试较少

    *安全性不保证

文档在哪里?

由于某种原因,docs.rs 在编译 dukbind 时出现问题,无法生成文档 :/ 请稍后再来查看文档 即将推出™

基础知识

extern crate duktape-rs;

use duktape-rs::DukContext;

fn main() {
    // Create a new context
    let mut ctx = DukContext::new();
    
    // Eval 5+5
    let val = ctx.eval_string("5+5").unwrap();
    
    // Destroy the heap (do this when you are done using the context)
    ctx.destroy();
    
    // Compare the value as an i64 against 10
    assert_eq!(val.as_i64().expect("Not an i64"), 10)
}

对象

duktape 中的对象作为堆指针返回,必须存储并作为该指针的包装返回。

let mut ctx = DukContext::new();

let obj = ctx.eval_string("({ok: true})").unwrap().as_object().expect("Not an object");

let val = obj.get_prop("ok").unwrap().as_bool().expect("Not a bool");

println!("Value: {}", val); //-> Value: true

依赖关系

~13MB
~249K SLoC