command-stream 1.3.0

Modern shell command execution library with streaming, async iteration, and event support
Documentation
use command_stream::{exec, RunOptions, StdinOption};
use std::io::{Read, Write};

#[tokio::test]
async fn completed_result_exposes_streams() {
    let options = RunOptions {
        stdin: StdinOption::Content("input".to_string()),
        mirror: false,
        ..RunOptions::default()
    };
    let mut result = exec("cat", options).await.unwrap();
    let mut stdout = String::new();
    result.stdout.read_to_string(&mut stdout).unwrap();
    assert_eq!(stdout, "input");
    let mut stderr = String::new();
    result.stderr.read_to_string(&mut stderr).unwrap();
    assert!(stderr.is_empty());
    result.stdin.write_all(b"more").unwrap();
    assert_eq!(result.stdin.to_string(), "inputmore");
    result.stdout.rewind();
    let mut replay = String::new();
    result.stdout.read_to_string(&mut replay).unwrap();
    assert_eq!(replay, "input");
}

#[tokio::test]
async fn streaming_runner_records_input_in_completed_result() {
    let result = command_stream::StreamingRunner::new("cat")
        .stdin("streamed")
        .collect()
        .await
        .unwrap();
    assert_eq!(result.stdout, "streamed");
    assert_eq!(result.stdin.to_string(), "streamed");
}