//! Example of using the Rhai integration with SAL //! //! This example demonstrates how to use the Rhai scripting language //! with the System Abstraction Layer (SAL) library. use rhai::Engine; use sal::rhai; use sal::rhai::{self, Engine}; use std::fs; fn main() -> Result<(), Box> { // Create a new Rhai engine let mut engine = Engine::new(); // Register SAL functions with the engine rhai::register(&mut engine)?; // Create a test file let test_file = "rhai_test_file.txt"; fs::write(test_file, "Hello, Rhai!")?; // Create a test directory let test_dir = "rhai_test_dir"; if !fs::metadata(test_dir).is_ok() { fs::create_dir(test_dir)?; } // Run a Rhai script that uses SAL functions let script = r#" // Check if files exist let file_exists = exist("rhai_test_file.txt"); let dir_exists = exist("rhai_test_dir"); // Get file size let size = file_size("rhai_test_file.txt"); // Create a new directory let new_dir = "rhai_new_dir"; let mkdir_result = mkdir(new_dir); // Copy a file let copy_result = copy("rhai_test_file.txt", "rhai_test_dir/copied_file.txt"); // Find files let files = find_files(".", "*.txt"); // Return a map with all the results #{ file_exists: file_exists, dir_exists: dir_exists, file_size: size, mkdir_result: mkdir_result, copy_result: copy_result, files: files } "#; // Evaluate the script and get the results let result = engine.eval::(script)?; // Print the results println!("Script results:"); println!(" File exists: {}", result.get("file_exists").unwrap().clone().cast::()); println!(" Directory exists: {}", result.get("dir_exists").unwrap().clone().cast::()); println!(" File size: {} bytes", result.get("file_size").unwrap().clone().cast::()); println!(" Mkdir result: {}", result.get("mkdir_result").unwrap().clone().cast::()); println!(" Copy result: {}", result.get("copy_result").unwrap().clone().cast::()); // Print the found files let files = result.get("files").unwrap().clone().cast::(); println!(" Found files:"); for file in files { println!(" - {}", file.cast::()); } // Clean up fs::remove_file(test_file)?; fs::remove_dir_all(test_dir)?; fs::remove_dir_all("rhai_new_dir")?; Ok(()) }