Crates.io | zlang |
lib.rs | zlang |
version | 0.1.1 |
created_at | 2025-09-02 00:28:04.884825+00 |
updated_at | 2025-09-03 13:52:23.238913+00 |
description | a simple embeddable language implemented for rust, it is called zlang because it is the last embedded language a sane developer would reach for. |
homepage | |
repository | |
max_upload_size | |
id | 1820370 |
size | 17,755 |
use std::rc::Rc;
use zlang::{ZLang, ZType, ZData};
struct MyState {}
fn main() {
let mut lang: ZLang<MyState> = ZLang::new();
lang.register_function(
"inspect_data",
|_state: &mut MyState, _interp: &ZLang<MyState>, args: Vec<ZType>| {
for z in args {
match &z.data {
ZData::Raw(bytes) => {
println!("Raw bytes: {:?}", bytes);
}
ZData::Dyn(any) => {
if z.tag == Rc::<str>::from("string") {
let s = any.downcast_ref::<String>().unwrap();
println!("String: {}", s);
} else if z.tag == Rc::<str>::from("num") {
let n = any.downcast_ref::<i64>().unwrap();
println!("Number: {}", n);
} else {
println!("Other dynamic type with tag {}", z.tag);
}
}
}
}
None
},
);
// Example program
let program = r#"
inspect_data("Hello world")
"#;
lang.interpret(&mut MyState {}, program);
}