use heromodels::db::hero::OurDB; use heromodels::register_db_functions; use rhai::Engine; use std::sync::Arc; use std::fs; use std::path::Path; use chrono::{DateTime, Utc, Duration}; fn main() -> Result<(), Box> { // Create a temporary directory for the database let temp_dir = std::env::temp_dir().join("heromodels_gov_example"); if temp_dir.exists() { fs::remove_dir_all(&temp_dir)?; } fs::create_dir_all(&temp_dir)?; println!("Using temporary database at: {}", temp_dir.display()); // Create a new OurDB instance let db = OurDB::new(&temp_dir, true)?; let db = Arc::new(db); // Create a new Rhai engine let mut engine = Engine::new(); // Register the auto-generated DB functions with the engine register_db_functions(&mut engine); // Register print functions engine.register_fn("println", |s: &str| println!("{}", s)); engine.register_fn("print", |s: &str| print!("{}", s)); // Register date/time functions engine.register_fn("now", || Utc::now()); engine.register_fn("days", |n: i64| Duration::days(n)); engine.register_fn("+", |dt: DateTime, duration: Duration| dt + duration); // Add the DB instance to the engine's scope engine.register_fn("get_db", move || -> Arc { db.clone() }); // Load and execute the Rhai script let script_path = Path::new(env!("CARGO_MANIFEST_DIR")) .join("examples") .join("gov_example.rhai"); println!("Loading Rhai script from: {}", script_path.display()); match engine.eval_file::<()>(script_path) { Ok(_) => println!("Script executed successfully"), Err(e) => eprintln!("Error executing script: {}", e), } // Clean up the temporary directory fs::remove_dir_all(&temp_dir)?; Ok(()) }