openrunner-rs 1.0.1

A Rust library for running OpenScript
Documentation
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");

    // Example 1: Simple script execution
    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);

    // Example 2: Script with arguments
    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());

    // Example 3: Environment variables
    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());

    // Example 4: Working directory
    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());

    // Example 5: File execution
    println!("\nExample 5: File execution");
    // Create a temporary script file
    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);
    }

    // Example 6: Error handling
    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(())
}