use brainwires_code_interpreters::{ExecutionLimits, ExecutionRequest, Executor, Language};
fn main() {
println!("=== 1. Setup: Supported languages ===\n");
let executor = Executor::new();
let languages = executor.supported_languages();
for lang in &languages {
println!(" - {lang}");
}
println!(" Total: {}", languages.len());
println!("\n=== 2. Rhai: Sum 1..=10 ===\n");
let rhai_result = executor.execute(ExecutionRequest {
language: Language::Rhai,
code: "let sum = 0; for i in 1..=10 { sum += i; } sum".to_string(),
..Default::default()
});
println!(" Success: {}", rhai_result.success);
println!(" Output: {}", rhai_result.stdout.trim());
println!(" Time: {}ms", rhai_result.timing_ms);
if let Some(err) = &rhai_result.error {
println!(" Error: {err}");
}
println!("\n=== 3. Lua: Sum 1..=10 ===\n");
let lua_result = executor.execute(ExecutionRequest {
language: Language::Lua,
code: "local sum = 0; for i = 1, 10 do sum = sum + i end return sum".to_string(),
..Default::default()
});
println!(" Success: {}", lua_result.success);
println!(" Output: {}", lua_result.stdout.trim());
println!(" Time: {}ms", lua_result.timing_ms);
if let Some(err) = &lua_result.error {
println!(" Error: {err}");
}
println!("\n=== 4. Strict limits: Rhai with tight sandbox ===\n");
let strict_executor = Executor::with_limits(ExecutionLimits::strict());
let limits = strict_executor.limits();
println!(" Timeout: {}ms", limits.max_timeout_ms);
println!(" Memory: {}MB", limits.max_memory_mb);
println!(" Operations: {}", limits.max_operations);
println!(" Call depth: {}", limits.max_call_depth);
let strict_result = strict_executor.execute(ExecutionRequest {
language: Language::Rhai,
code: "let x = 2; let y = 3; x * y".to_string(),
..Default::default()
});
println!(" Success: {}", strict_result.success);
println!(" Output: {}", strict_result.stdout.trim());
println!(" Time: {}ms", strict_result.timing_ms);
println!("\n=== 5. Timing comparison ===\n");
println!(" Rhai: {}ms", rhai_result.timing_ms);
println!(" Lua: {}ms", lua_result.timing_ms);
println!("\nDone.");
}