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