1pub mod core;
3pub mod eval;
4pub mod lexer;
5pub mod parser;
6
7pub use rustleaf_macros::rust_value_any;
9
10use anyhow::Result;
11use std::fs;
12use std::path::Path;
13
14pub fn eval_str(source: &str) -> Result<core::Value> {
16 let mut evaluator = eval::Evaluator::new();
17 evaluator.eval_str(source)
18}
19
20pub fn eval_file<P: AsRef<Path>>(path: P) -> Result<core::Value> {
22 let source = fs::read_to_string(path)?;
23 run(source)
24}
25
26pub fn run(source: String) -> Result<core::Value> {
28 let mut evaluator = eval::Evaluator::new();
29 evaluator.eval_str(&source)
30}
31
32pub fn run_and_print(source: String) -> Result<()> {
34 let result = run(source)?;
35
36 if !matches!(result, core::Value::Unit) {
38 println!("{result:?}");
39 }
40
41 Ok(())
42}