use heromodels::db::hero::OurDB; use rhailib_dsl::finance::register_finance_rhai_modules; use rhai::{Engine, Dynamic}; use std::sync::Arc; use std::{fs, path::Path}; const CALLER_ID: &str = "example_caller"; fn main() -> Result<(), Box> { // Initialize Rhai engine let mut engine = Engine::new(); // Initialize database with OurDB let db_path = "temp_finance_db"; // Clean up previous database file if it exists if Path::new(db_path).exists() { fs::remove_dir_all(db_path)?; } let _db = Arc::new(OurDB::new(db_path, true).expect("Failed to create database")); // Register the library module with Rhai register_finance_rhai_modules(&mut engine); let mut db_config = rhai::Map::new(); db_config.insert("DB_PATH".into(), db_path.into()); db_config.insert("CALLER_PUBLIC_KEY".into(), CALLER_ID.into()); db_config.insert("CIRCLE_PUBLIC_KEY".into(), CALLER_ID.into()); engine.set_default_tag(Dynamic::from(db_config)); // Or pass via CallFnOptions // Load and evaluate the Rhai script let manifest_dir = env!("CARGO_MANIFEST_DIR"); let script_path = Path::new(manifest_dir).join("examples").join("finance").join("finance.rhai"); println!("Script path: {}", script_path.display()); let script = fs::read_to_string(&script_path)?; println!("--- Running Finance Rhai Script ---"); match engine.eval::<()>(&script) { Ok(_) => println!("\n--- Script executed successfully! ---"), Err(e) => eprintln!("\n--- Script execution failed: {} ---", e), } // Clean up the database file fs::remove_dir_all(db_path)?; println!("--- Cleaned up temporary database. ---"); Ok(()) }