//! Basic usage example for the yarr-api crate //! //! This example demonstrates how to use the Sonarr API client to fetch basic information. //! //! To run this example: //! ```bash //! cargo run --example basic_usage //! ``` //! //! Make sure to set the following environment variables: //! - SONARR_URL: Your Sonarr instance URL (e.g., "http://localhost:8989") //! - SONARR_API_KEY: Your Sonarr API key use yarr_api::{Result, SonarrClient}; #[tokio::main] async fn main() -> Result<()> { // Initialize tracing for better error visibility tracing_subscriber::fmt::init(); // Get configuration from environment variables let sonarr_url = std::env::var("SONARR_URL").unwrap_or_else(|_| "http://localhost:8989".to_string()); let sonarr_api_key = std::env::var("SONARR_API_KEY").expect("SONARR_API_KEY environment variable must be set"); // Create the API client let client = SonarrClient::new(sonarr_url, sonarr_api_key); println!("Connecting to Sonarr..."); // Fetch and display system status match client.get_system_status().await { Ok(status) => { println!("āœ“ Connected to Sonarr successfully!"); println!(" App Name: {}", status.app_name.unwrap_or_default()); println!(" Version: {}", status.version.unwrap_or_default()); println!(" Instance: {}", status.instance_name.unwrap_or_default()); } Err(e) => { eprintln!("āœ— Failed to connect to Sonarr: {}", e); return Err(e); } } // Fetch and display series count match client.get_series().await { Ok(series) => { println!("\nšŸ“ŗ Series Information:"); println!(" Total series: {}", series.len()); let monitored_count = series.iter().filter(|s| s.monitored).count(); println!(" Monitored series: {}", monitored_count); if !series.is_empty() { println!("\nšŸŽ¬ Sample series:"); for (i, show) in series.iter().take(5).enumerate() { let title = show.title.as_deref().unwrap_or("Unknown"); let status = if show.monitored { "Monitored" } else { "Not Monitored" }; println!(" {}. {} ({})", i + 1, title, status); } if series.len() > 5 { println!(" ... and {} more", series.len() - 5); } } } Err(e) => { eprintln!("āœ— Failed to fetch series: {}", e); } } // Fetch and display queue information match client.get_queue().await { Ok(queue) => { println!("\nšŸ“„ Download Queue:"); println!(" Items in queue: {}", queue.records.len()); if !queue.records.is_empty() { for (i, item) in queue.records.iter().take(3).enumerate() { let title = item.title.as_deref().unwrap_or("Unknown"); let status = &item.status; println!(" {}. {} ({})", i + 1, title, status); } if queue.records.len() > 3 { println!(" ... and {} more", queue.records.len() - 3); } } } Err(e) => { eprintln!("āœ— Failed to fetch queue: {}", e); } } // Check health status match client.get_health().await { Ok(health) => { println!("\nšŸ„ Health Status:"); if health.is_empty() { println!(" āœ“ All systems healthy!"); } else { println!(" āš ļø {} health issue(s) detected:", health.len()); for (i, issue) in health.iter().take(3).enumerate() { let message = issue.message.as_deref().unwrap_or("Unknown issue"); println!(" {}. {}", i + 1, message); } if health.len() > 3 { println!(" ... and {} more issues", health.len() - 3); } } } Err(e) => { eprintln!("āœ— Failed to fetch health status: {}", e); } } println!("\nšŸŽ‰ Example completed successfully!"); Ok(()) }