zlang

Crates.iozlang
lib.rszlang
version0.1.1
created_at2025-09-02 00:28:04.884825+00
updated_at2025-09-03 13:52:23.238913+00
descriptiona 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
id1820370
size17,755
(WebAppEnjoyer)

documentation

README

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);
}
Commit count: 0

cargo fmt