use rusty_claw::prelude::*;
use tokio_stream::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Rusty Claw Simple Query Example ===\n");
let options = ClaudeAgentOptions::builder()
.max_turns(5) .permission_mode(PermissionMode::AcceptEdits) .model("claude-sonnet-4-5".to_string()) .build();
println!("Options configured:");
println!(" - Max turns: {:?}", options.max_turns);
println!(" - Permission mode: {:?}", options.permission_mode);
println!(" - Model: {:?}", options.model);
println!();
println!("Sending query: 'What files are in this directory?'\n");
let mut stream = query("What files are in this directory?", Some(options)).await?;
while let Some(result) = stream.next().await {
match result {
Ok(Message::Assistant(msg)) => {
println!("=== Assistant Message ===");
for block in msg.message.content {
match block {
ContentBlock::Text { text } => {
println!("Claude: {}", text);
}
ContentBlock::ToolUse { id, name, input } => {
println!("Tool use: {} (ID: {})", name, id);
println!("Input: {}", input);
}
ContentBlock::ToolResult {
tool_use_id,
content,
is_error,
} => {
println!(
"Tool result (ID: {}, error: {}): {:?}",
tool_use_id, is_error, content
);
}
ContentBlock::Thinking { thinking, .. } => {
println!("Thinking: {}", thinking);
}
}
}
println!();
}
Ok(Message::Result(msg)) => {
println!("=== Query Complete ===");
println!("Result: {:?}", msg);
break;
}
Ok(Message::System(msg)) => {
println!("System: {:?}", msg);
}
Ok(Message::User(msg)) => {
println!("User: {:?}", msg);
}
Ok(Message::ControlRequest { .. })
| Ok(Message::ControlResponse { .. })
| Ok(Message::RateLimitEvent(_))
| Ok(Message::McpMessage(_)) => {
}
Err(e) => {
eprintln!("Error: {}", e);
break;
}
}
}
println!("\n=== Example Complete ===");
Ok(())
}