use std::time::Duration;
use rust_expect::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
println!("rust-expect Basic Example");
println!("==========================\n");
println!("1. Running 'echo' command...");
let mut session = Session::spawn("echo", &["Hello, rust-expect!"]).await?;
let m = session.expect("Hello").await?;
println!(" Matched: '{}'", m.matched.trim());
println!(" Buffer after match: '{}'", m.after.trim());
println!("\n2. Interactive shell session...");
let mut session = Session::spawn("/bin/sh", &[]).await?;
session
.expect_timeout(Pattern::shell_prompt(), Duration::from_secs(5))
.await?;
println!(" Shell started, prompt detected");
session.send_line("echo 'Interactive test'").await?;
println!(" Sent: echo 'Interactive test'");
let m = session.expect("Interactive test").await?;
println!(" Received: '{}'", m.matched.trim());
session.send_line("exit").await?;
println!(" Sent: exit");
session.wait().await?;
println!(" Session ended cleanly");
println!("\n3. Pattern matching with multiple patterns...");
let mut session = Session::spawn("/bin/sh", &["-c", "echo 'success'"]).await?;
let mut patterns = PatternSet::new();
patterns.add(Pattern::literal("success"));
patterns.add(Pattern::literal("failure"));
patterns.add(Pattern::timeout(Duration::from_secs(3)));
let m = session.expect_any(&patterns).await?;
if m.matched.contains("success") {
println!(" Command succeeded!");
} else if m.matched.contains("failure") {
println!(" Command failed!");
}
println!("\n4. Terminal resize...");
let mut session = Session::spawn("/bin/sh", &[]).await?;
let (cols, rows) = session.config().dimensions;
println!(" Initial dimensions: {cols}x{rows}");
session.resize_pty(120, 40).await?;
println!(" Resized to: 120x40");
session.send_line("exit").await?;
session.wait().await?;
println!("\nBasic examples completed successfully!");
Ok(())
}