rustleaf/
lib.rs

1/// RustLeaf interpreter library
2pub mod core;
3pub mod eval;
4pub mod lexer;
5pub mod parser;
6
7// Re-export proc macros
8pub use rustleaf_macros::rust_value_any;
9
10use anyhow::Result;
11use std::fs;
12use std::path::Path;
13
14/// Evaluate a RustLeaf expression from a string and return the result
15pub fn eval_str(source: &str) -> Result<core::Value> {
16    let mut evaluator = eval::Evaluator::new();
17    evaluator.eval_str(source)
18}
19
20/// Evaluate a RustLeaf file and return the result
21pub fn eval_file<P: AsRef<Path>>(path: P) -> Result<core::Value> {
22    let source = fs::read_to_string(path)?;
23    run(source)
24}
25
26/// Run a RustLeaf program from source code
27pub fn run(source: String) -> Result<core::Value> {
28    let mut evaluator = eval::Evaluator::new();
29    evaluator.eval_str(&source)
30}
31
32/// Run a RustLeaf program and print the result
33pub fn run_and_print(source: String) -> Result<()> {
34    let result = run(source)?;
35
36    // Only print non-unit values
37    if !matches!(result, core::Value::Unit) {
38        println!("{result:?}");
39    }
40
41    Ok(())
42}