use std::time::Duration;
use rust_expect::prelude::*;
use rust_expect::sync::SyncSession;
fn main() -> Result<()> {
println!("rust-expect Synchronous API Example");
println!("====================================\n");
println!("1. Basic synchronous session...");
let mut session = SyncSession::spawn("echo", &["Hello from sync API!"])?;
let m = session.expect("Hello")?;
println!(" Matched: '{}'", m.matched.trim());
println!(" PID: {}", session.pid());
println!("\n2. Interactive synchronous session...");
let mut session = SyncSession::spawn("/bin/sh", &[])?;
println!(" Shell spawned with PID: {}", session.pid());
session.expect_timeout(Pattern::shell_prompt(), Duration::from_secs(5))?;
println!(" Prompt detected");
session.send_line("echo 'Sync test 1'")?;
session.expect("Sync test 1")?;
println!(" First command completed");
session.send_line("echo 'Sync test 2'")?;
session.expect("Sync test 2")?;
println!(" Second command completed");
let buffer = session.buffer();
println!(" Current buffer length: {} bytes", buffer.len());
session.send_line("exit")?;
println!(" Session exited");
println!("\n3. Timeout handling...");
let mut session = SyncSession::spawn("/bin/sh", &[])?;
session.expect_timeout(Pattern::shell_prompt(), Duration::from_secs(2))?;
session.send_line("echo 'different output'")?;
match session.expect_timeout("nonexistent pattern", Duration::from_millis(500)) {
Ok(_) => println!(" Pattern found (unexpected)"),
Err(ExpectError::Timeout { .. }) => println!(" Timeout occurred as expected"),
Err(e) => println!(" Other error: {e}"),
}
session.kill()?;
println!("\n4. Custom session configuration...");
let config = SessionConfig {
dimensions: (120, 40),
timeout: TimeoutConfig {
default: Duration::from_secs(30),
spawn: Duration::from_secs(60),
close: Duration::from_secs(10),
},
..Default::default()
};
let session = SyncSession::spawn_with_config("/bin/sh", &[], config)?;
println!(" Session created with custom config");
println!(" Dimensions: {:?}", session.config().dimensions);
println!(" Default timeout: {:?}", session.config().timeout.default);
println!(" Close timeout: {:?}", session.config().timeout.close);
drop(session);
println!("\nSynchronous API examples completed successfully!");
Ok(())
}