async_source/
async_sources.rs

1use newsapi_rs::client::NewsApiClient;
2use newsapi_rs::model::{Country, GetSourcesRequest, Language, NewsCategory};
3use newsapi_rs::retry::RetryStrategy;
4
5/// Run with: cargo run --example async_sources
6#[tokio::main]
7async fn main() {
8    dotenvy::dotenv().ok();
9
10    let client = NewsApiClient::builder()
11        .retry(RetryStrategy::None, 0)
12        .build()
13        .expect("Failed to build NewsApiClient");
14
15    let sources_request = GetSourcesRequest::builder()
16        .country(Country::CH)
17        .category(NewsCategory::Technology)
18        .language(Language::EN)
19        .build();
20
21    match client.get_sources(&sources_request).await {
22        Ok(response) => {
23            println!("Sources found: {}", response.get_sources().len());
24            println!("Status: {}", response.get_status());
25
26            for (i, source) in response.get_sources().iter().enumerate() {
27                println!("Source #{}: {}", i + 1, source.get_name());
28                if let Some(desc) = source.get_description() {
29                    println!("  Description: {}", desc);
30                }
31                if let Some(url) = source.get_url() {
32                    println!("  URL: {}", url);
33                }
34                if let Some(category) = source.get_category() {
35                    println!("  Category: {}", category);
36                }
37                if let Some(country) = source.get_country() {
38                    println!("  Country: {}", country);
39                }
40                println!();
41            }
42        }
43        Err(err) => {
44            eprintln!("Error: {}", err);
45        }
46    }
47}