...
This commit is contained in:
67
examples/rhai_process_example.rs
Normal file
67
examples/rhai_process_example.rs
Normal file
@@ -0,0 +1,67 @@
|
||||
//! Example of using the Rhai integration with SAL Process module
|
||||
//!
|
||||
//! This example demonstrates how to use the Rhai scripting language
|
||||
//! with the System Abstraction Layer (SAL) Process module.
|
||||
|
||||
use rhai::{Engine, Map, Dynamic};
|
||||
use sal::rhai;
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
// Create a new Rhai engine
|
||||
let mut engine = Engine::new();
|
||||
|
||||
// Register SAL functions with the engine
|
||||
rhai::register(&mut engine)?;
|
||||
|
||||
// Run a Rhai script that uses SAL Process functions
|
||||
let script = r#"
|
||||
// Check if a command exists
|
||||
let ls_exists = which("ls");
|
||||
|
||||
// Run a simple command
|
||||
let echo_result = run_command("echo 'Hello from Rhai!'");
|
||||
|
||||
// Run a command silently
|
||||
let silent_result = run_silent("ls -la");
|
||||
|
||||
// List processes
|
||||
let processes = process_list("");
|
||||
|
||||
// Return a map with all the results
|
||||
{
|
||||
ls_exists: ls_exists,
|
||||
echo_stdout: echo_result.stdout,
|
||||
echo_success: echo_result.success,
|
||||
silent_success: silent_result.success,
|
||||
process_count: processes.len()
|
||||
}
|
||||
"#;
|
||||
|
||||
// Evaluate the script and get the results
|
||||
let result = engine.eval::<Map>(script)?;
|
||||
|
||||
// Print the results
|
||||
println!("Script results:");
|
||||
|
||||
if let Some(ls_exists) = result.get("ls_exists") {
|
||||
println!(" ls command exists: {}", ls_exists);
|
||||
}
|
||||
|
||||
if let Some(echo_stdout) = result.get("echo_stdout") {
|
||||
println!(" Echo command output: {}", echo_stdout.clone().into_string().unwrap());
|
||||
}
|
||||
|
||||
if let Some(echo_success) = result.get("echo_success") {
|
||||
println!(" Echo command success: {}", echo_success.clone().as_bool().unwrap());
|
||||
}
|
||||
|
||||
if let Some(silent_success) = result.get("silent_success") {
|
||||
println!(" Silent command success: {}", silent_success.clone().as_bool().unwrap());
|
||||
}
|
||||
|
||||
if let Some(process_count) = result.get("process_count") {
|
||||
println!(" Number of processes: {}", process_count.clone().as_int().unwrap());
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
Reference in New Issue
Block a user