use openrunner_rs::{run, run_file, ScriptOptions};
use std::path::PathBuf;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Running basic OpenRunner examples...\n");
println!("Example 1: Simple script execution");
let options = ScriptOptions::new().openscript_path("/bin/sh");
let result = run("echo 'Hello, OpenRunner!'", options).await?;
println!(" Output: {}", result.stdout.trim());
println!(" Exit code: {}", result.exit_code);
println!(" Duration: {:?}", result.duration);
println!("\nExample 2: Script with arguments");
let options = ScriptOptions::new()
.openscript_path("/bin/sh")
.args(vec!["arg1".to_string(), "arg2".to_string()]);
let result = run("echo \"Arguments: $1 $2\"", options).await?;
println!(" Output: {}", result.stdout.trim());
println!("\nExample 3: Environment variables");
let options = ScriptOptions::new()
.openscript_path("/bin/sh")
.env("GREETING", "Hello")
.env("NAME", "World");
let result = run("echo \"$GREETING, $NAME!\"", options).await?;
println!(" Output: {}", result.stdout.trim());
println!("\nExample 4: Working directory");
let options = ScriptOptions::new()
.openscript_path("/bin/sh")
.working_directory("/tmp");
let result = run("pwd", options).await?;
println!(" Working directory: {}", result.stdout.trim());
println!("\nExample 5: File execution");
let mut temp_file = tempfile::NamedTempFile::new()?;
std::io::Write::write_all(&mut temp_file, b"echo 'Hello from file!'\necho 'Second line'")?;
let script_path = PathBuf::from(temp_file.path());
let options = ScriptOptions::new().openscript_path("/bin/sh");
let result = run_file(&script_path, options).await?;
println!(" File output:");
for line in result.stdout.lines() {
println!(" {}", line);
}
println!("\nExample 6: Error handling");
let options = ScriptOptions::new().openscript_path("/bin/sh");
let result = run("exit 42", options).await?;
if result.exit_code != 0 {
println!(" WARNING: Script failed with non-zero exit code");
}
println!("\nBasic examples completed successfully!");
Ok(())
}