use claude_sdk::{ClaudeClient, Message, MessagesRequest};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
let api_key = std::env::var("ANTHROPIC_API_KEY")
.expect("ANTHROPIC_API_KEY environment variable must be set");
let client = ClaudeClient::anthropic(api_key);
println!("🤖 Claude SDK - Simple Chat Example");
println!("=====================================\n");
let request = MessagesRequest::new(
claude_sdk::models::CLAUDE_SONNET_4_5.anthropic_id,
1024,
vec![Message::user(
"Hello! Can you explain what makes Rust a great language for systems programming?",
)],
);
println!("Sending message to Claude...\n");
let response = client.send_message(request).await?;
println!("📝 Response:");
println!("─────────────────────────────────────");
for content in &response.content {
if let claude_sdk::ContentBlock::Text { text, .. } = content {
println!("{}", text);
}
}
println!("─────────────────────────────────────\n");
println!("📊 Token Usage:");
println!(" Input tokens: {}", response.usage.input_tokens);
println!(" Output tokens: {}", response.usage.output_tokens);
println!(
" Total tokens: {}",
response.usage.input_tokens + response.usage.output_tokens
);
if let Some(stop_reason) = response.stop_reason {
println!(" Stop reason: {:?}", stop_reason);
}
Ok(())
}