use files_sdk::FilesClient;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = env::var("FILES_API_KEY").expect("FILES_API_KEY must be set");
let _client = FilesClient::builder().api_key(&api_key).build()?;
println!("Tower Retry Example");
println!("===================\n");
println!("To add retry logic with tower, add these dependencies:");
println!(" tower = \"0.5\"");
println!(" tower-http = {{ version = \"0.6\", features = [\"retry\"] }}");
println!();
println!("Then use RetryLayer:");
println!("```rust");
println!("use tower::ServiceBuilder;");
println!("use tower_http::retry::RetryLayer;");
println!("use tower_http::classify::ServerErrorsAsFailures;");
println!();
println!("let client = FilesClient::builder().api_key(\"key\").build()?;");
println!();
println!("let retrying_client = ServiceBuilder::new()");
println!(" .layer(RetryLayer::new(ServerErrorsAsFailures::default()))");
println!(" .service(client);");
println!("```");
println!();
println!("Key Features:");
println!("- Automatic retry on 5xx server errors");
println!("- Exponential backoff (configurable)");
println!("- Custom retry policies via RetryPolicy trait");
println!("- Composable with other middleware layers");
Ok(())
}