pub mod core;
pub mod eval;
pub mod lexer;
pub mod parser;
pub use rustleaf_macros::rust_value_any;
use anyhow::Result;
use std::fs;
use std::path::Path;
pub fn eval_str(source: &str) -> Result<core::Value> {
let mut evaluator = eval::Evaluator::new();
evaluator.eval_str(source)
}
pub fn eval_file<P: AsRef<Path>>(path: P) -> Result<core::Value> {
let source = fs::read_to_string(path)?;
run(source)
}
pub fn run(source: String) -> Result<core::Value> {
let mut evaluator = eval::Evaluator::new();
evaluator.eval_str(&source)
}
pub fn run_and_print(source: String) -> Result<()> {
let result = run(source)?;
if !matches!(result, core::Value::Unit) {
println!("{result:?}");
}
Ok(())
}