Crates.io | duktape-rs |
lib.rs | duktape-rs |
version | 0.0.4 |
source | src |
created_at | 2019-01-30 06:12:27.478594 |
updated_at | 2019-01-31 22:38:43.236963 |
description | Safe(er) rust wrapper for dukbind. |
homepage | |
repository | https://gitlab.com/envis10n/duktape-rs |
max_upload_size | |
id | 111532 |
size | 21,641 |
Safe(er) rust wrapper for dukbind.
This library is a work in progress and is currently limited in features.
At the moment, duktape-rs
Provides a safe* wrapper around dukbind (raw FFI bindings for duktape).
Provides manageable value returns that can be modified and passed back to the duktape context.
Supports heap pointers (for objects), including setting and getting properties of an object (as DukValue).
Can eval a &str and return the result (DukResult<DukValue, DukError>)
Supports handling (what I assume to be) most JS errors that crop up during eval minimally tested
*Safety not guaranteed
For some reason docs.rs has a problem with compiling dukbind and won't generate them :/ Check back another time for documentation Coming Soon™
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)
}
Objects in duktape are returned as heap pointers that have to be stored and returned as a wrapper around that pointer.
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