pub struct NewsApiClient<T> { /* private fields */ }
Implementations§
Source§impl NewsApiClient<Client>
impl NewsApiClient<Client>
pub fn new(api_key: &str) -> Self
Sourcepub fn builder() -> NewsApiClientBuilder
pub fn builder() -> NewsApiClientBuilder
Examples found in repository?
examples/async_sources.rs (line 10)
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}
More examples
examples/async_everything_search.rs (line 10)
6async fn main() {
7 dotenvy::dotenv().ok();
8
9 println!("Example 1: Using the builder pattern");
10 let builder_client = NewsApiClient::builder()
11 .build()
12 .expect("Failed to build NewsApiClient");
13
14 let request1 = GetEverythingRequest::builder()
15 .search_term(String::from("Nvidia+NVDA+stock"))
16 .language(Language::EN)
17 .page_size(1)
18 .build();
19
20 match builder_client.get_everything(&request1).await {
21 Ok(response) => {
22 println!(
23 "Builder client - Total Results: {}",
24 response.get_total_results()
25 );
26 println!("Articles retrieved: {}", response.get_articles().len());
27 if let Some(article) = response.get_articles().first() {
28 println!("First article: {}", article.get_title());
29 }
30 }
31 Err(err) => {
32 eprintln!("Builder client error: {}", err);
33 }
34 }
35
36 println!("\nExample 2: Using from_env");
37 let env_client = NewsApiClient::from_env();
38
39 let request2 = GetEverythingRequest::builder()
40 .search_term(String::from("Bitcoin+crypto"))
41 .language(Language::EN)
42 .page_size(1)
43 .build();
44
45 match env_client.get_everything(&request2).await {
46 Ok(response) => {
47 println!(
48 "Env client - Total Results: {}",
49 response.get_total_results()
50 );
51 println!("Articles retrieved: {}", response.get_articles().len());
52 if let Some(article) = response.get_articles().first() {
53 println!("First article: {}", article.get_title());
54 }
55 }
56 Err(err) => {
57 eprintln!("Env client error: {}", err);
58 }
59 }
60}
Sourcepub fn from_env() -> Self
pub fn from_env() -> Self
Examples found in repository?
examples/top_headlines.rs (line 55)
50async fn main() {
51 dotenvy::dotenv().ok();
52
53 // Provide your API key here or set it in the environment variable NEWS_API_KEY
54 // let client = NewsApiClient::new("api_key");
55 let client = NewsApiClient::from_env();
56
57 let request = GetTopHeadlinesRequest::builder()
58 .country(Country::US)
59 .category(NewsCategory::Technology)
60 .page_size(5)
61 .build()
62 .unwrap();
63
64 match client.get_top_headlines(&request).await {
65 Ok(response) => {
66 println!("Total Results: {}", response.get_total_results());
67 println!("Articles retrieved: {}", response.get_articles().len());
68
69 for (i, article) in response.get_articles().iter().enumerate() {
70 println!("Article #{}: {}", i + 1, article.get_title());
71 println!(" Source: {}", article.get_source().get_name());
72 println!(" URL: {}", article.get_url());
73 println!();
74 }
75 }
76 Err(err) => {
77 eprintln!(
78 "Error: {}",
79 match err {
80 ApiClientError::InvalidResponse(response) => response.message.clone(),
81 _ => err.to_string(),
82 }
83 );
84 }
85 }
86}
More examples
examples/everything_search.rs (line 58)
53async fn main() {
54 dotenvy::dotenv().ok();
55
56 // Provide your API key here or set it in the environment variable NEWS_API_KEY
57 // let client = NewsApiClient::new("api_key");
58 let client = NewsApiClient::from_env();
59
60 let everything_request = GetEverythingRequest::builder()
61 .search_term(String::from("Nvidia+NVDA+stock"))
62 .language(Language::EN)
63 .start_date(Utc::now() - chrono::Duration::days(30))
64 .end_date(Utc::now())
65 .page_size(1)
66 .build();
67
68 match client.get_everything(&everything_request).await {
69 Ok(response) => {
70 println!("Total Results: {}", response.get_total_results());
71 println!("Articles retrieved: {}", response.get_articles().len());
72
73 for (i, article) in response.get_articles().iter().enumerate() {
74 println!("Article #{}: {}", i + 1, article.get_title());
75 println!(" Source: {}", article.get_source().get_name());
76 println!(" Published: {}", article.get_published_at());
77 println!(" URL: {}", article.get_url());
78 println!();
79 }
80 }
81 Err(err) => {
82 eprintln!(
83 "Error: {}",
84 match err {
85 ApiClientError::InvalidResponse(response) => response.message.clone(),
86 _ => err.to_string(),
87 }
88 );
89 }
90 }
91}
examples/async_everything_search.rs (line 37)
6async fn main() {
7 dotenvy::dotenv().ok();
8
9 println!("Example 1: Using the builder pattern");
10 let builder_client = NewsApiClient::builder()
11 .build()
12 .expect("Failed to build NewsApiClient");
13
14 let request1 = GetEverythingRequest::builder()
15 .search_term(String::from("Nvidia+NVDA+stock"))
16 .language(Language::EN)
17 .page_size(1)
18 .build();
19
20 match builder_client.get_everything(&request1).await {
21 Ok(response) => {
22 println!(
23 "Builder client - Total Results: {}",
24 response.get_total_results()
25 );
26 println!("Articles retrieved: {}", response.get_articles().len());
27 if let Some(article) = response.get_articles().first() {
28 println!("First article: {}", article.get_title());
29 }
30 }
31 Err(err) => {
32 eprintln!("Builder client error: {}", err);
33 }
34 }
35
36 println!("\nExample 2: Using from_env");
37 let env_client = NewsApiClient::from_env();
38
39 let request2 = GetEverythingRequest::builder()
40 .search_term(String::from("Bitcoin+crypto"))
41 .language(Language::EN)
42 .page_size(1)
43 .build();
44
45 match env_client.get_everything(&request2).await {
46 Ok(response) => {
47 println!(
48 "Env client - Total Results: {}",
49 response.get_total_results()
50 );
51 println!("Articles retrieved: {}", response.get_articles().len());
52 if let Some(article) = response.get_articles().first() {
53 println!("First article: {}", article.get_title());
54 }
55 }
56 Err(err) => {
57 eprintln!("Env client error: {}", err);
58 }
59 }
60}
Sourcepub async fn get_everything(
&self,
request: &GetEverythingRequest,
) -> Result<GetEverythingResponse, ApiClientError>
pub async fn get_everything( &self, request: &GetEverythingRequest, ) -> Result<GetEverythingResponse, ApiClientError>
Examples found in repository?
examples/everything_search.rs (line 68)
53async fn main() {
54 dotenvy::dotenv().ok();
55
56 // Provide your API key here or set it in the environment variable NEWS_API_KEY
57 // let client = NewsApiClient::new("api_key");
58 let client = NewsApiClient::from_env();
59
60 let everything_request = GetEverythingRequest::builder()
61 .search_term(String::from("Nvidia+NVDA+stock"))
62 .language(Language::EN)
63 .start_date(Utc::now() - chrono::Duration::days(30))
64 .end_date(Utc::now())
65 .page_size(1)
66 .build();
67
68 match client.get_everything(&everything_request).await {
69 Ok(response) => {
70 println!("Total Results: {}", response.get_total_results());
71 println!("Articles retrieved: {}", response.get_articles().len());
72
73 for (i, article) in response.get_articles().iter().enumerate() {
74 println!("Article #{}: {}", i + 1, article.get_title());
75 println!(" Source: {}", article.get_source().get_name());
76 println!(" Published: {}", article.get_published_at());
77 println!(" URL: {}", article.get_url());
78 println!();
79 }
80 }
81 Err(err) => {
82 eprintln!(
83 "Error: {}",
84 match err {
85 ApiClientError::InvalidResponse(response) => response.message.clone(),
86 _ => err.to_string(),
87 }
88 );
89 }
90 }
91}
More examples
examples/async_everything_search.rs (line 20)
6async fn main() {
7 dotenvy::dotenv().ok();
8
9 println!("Example 1: Using the builder pattern");
10 let builder_client = NewsApiClient::builder()
11 .build()
12 .expect("Failed to build NewsApiClient");
13
14 let request1 = GetEverythingRequest::builder()
15 .search_term(String::from("Nvidia+NVDA+stock"))
16 .language(Language::EN)
17 .page_size(1)
18 .build();
19
20 match builder_client.get_everything(&request1).await {
21 Ok(response) => {
22 println!(
23 "Builder client - Total Results: {}",
24 response.get_total_results()
25 );
26 println!("Articles retrieved: {}", response.get_articles().len());
27 if let Some(article) = response.get_articles().first() {
28 println!("First article: {}", article.get_title());
29 }
30 }
31 Err(err) => {
32 eprintln!("Builder client error: {}", err);
33 }
34 }
35
36 println!("\nExample 2: Using from_env");
37 let env_client = NewsApiClient::from_env();
38
39 let request2 = GetEverythingRequest::builder()
40 .search_term(String::from("Bitcoin+crypto"))
41 .language(Language::EN)
42 .page_size(1)
43 .build();
44
45 match env_client.get_everything(&request2).await {
46 Ok(response) => {
47 println!(
48 "Env client - Total Results: {}",
49 response.get_total_results()
50 );
51 println!("Articles retrieved: {}", response.get_articles().len());
52 if let Some(article) = response.get_articles().first() {
53 println!("First article: {}", article.get_title());
54 }
55 }
56 Err(err) => {
57 eprintln!("Env client error: {}", err);
58 }
59 }
60}
Sourcepub async fn get_top_headlines(
&self,
request: &GetTopHeadlinesRequest,
) -> Result<TopHeadlinesResponse, ApiClientError>
pub async fn get_top_headlines( &self, request: &GetTopHeadlinesRequest, ) -> Result<TopHeadlinesResponse, ApiClientError>
Examples found in repository?
examples/top_headlines.rs (line 64)
50async fn main() {
51 dotenvy::dotenv().ok();
52
53 // Provide your API key here or set it in the environment variable NEWS_API_KEY
54 // let client = NewsApiClient::new("api_key");
55 let client = NewsApiClient::from_env();
56
57 let request = GetTopHeadlinesRequest::builder()
58 .country(Country::US)
59 .category(NewsCategory::Technology)
60 .page_size(5)
61 .build()
62 .unwrap();
63
64 match client.get_top_headlines(&request).await {
65 Ok(response) => {
66 println!("Total Results: {}", response.get_total_results());
67 println!("Articles retrieved: {}", response.get_articles().len());
68
69 for (i, article) in response.get_articles().iter().enumerate() {
70 println!("Article #{}: {}", i + 1, article.get_title());
71 println!(" Source: {}", article.get_source().get_name());
72 println!(" URL: {}", article.get_url());
73 println!();
74 }
75 }
76 Err(err) => {
77 eprintln!(
78 "Error: {}",
79 match err {
80 ApiClientError::InvalidResponse(response) => response.message.clone(),
81 _ => err.to_string(),
82 }
83 );
84 }
85 }
86}
Sourcepub async fn get_sources(
&self,
request: &GetSourcesRequest,
) -> Result<GetSourcesResponse, ApiClientError>
pub async fn get_sources( &self, request: &GetSourcesRequest, ) -> Result<GetSourcesResponse, ApiClientError>
Examples found in repository?
examples/async_sources.rs (line 21)
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}
pub fn with_retry(self, strategy: RetryStrategy, max_retries: usize) -> Self
Trait Implementations§
Source§impl<T: Clone> Clone for NewsApiClient<T>
impl<T: Clone> Clone for NewsApiClient<T>
Source§fn clone(&self) -> NewsApiClient<T>
fn clone(&self) -> NewsApiClient<T>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl<T> Freeze for NewsApiClient<T>where
T: Freeze,
impl<T> RefUnwindSafe for NewsApiClient<T>where
T: RefUnwindSafe,
impl<T> Send for NewsApiClient<T>where
T: Send,
impl<T> Sync for NewsApiClient<T>where
T: Sync,
impl<T> Unpin for NewsApiClient<T>where
T: Unpin,
impl<T> UnwindSafe for NewsApiClient<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more