Skip to main content

finlight_client/
lib.rs

1//! Official Rust client for the [finlight.me](https://finlight.me) API —
2//! financial news with sentiment analysis, entity recognition, and real-time
3//! streaming.
4//!
5//! Full API documentation: <https://docs.finlight.me>
6//!
7//! # Quick start
8//!
9//! ```no_run
10//! use finlight_client::{Client, Config, GetArticlesParams};
11//!
12//! #[tokio::main]
13//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
14//!     let client = Client::new(Config::new(std::env::var("FINLIGHT_API_KEY")?))?;
15//!
16//!     let resp = client
17//!         .articles
18//!         .fetch_articles(&GetArticlesParams {
19//!             query: Some("nvidia".into()),
20//!             page_size: Some(10),
21//!             ..Default::default()
22//!         })
23//!         .await?;
24//!     for article in resp.articles {
25//!         println!("[{}] {}", article.source, article.title);
26//!     }
27//!     Ok(())
28//! }
29//! ```
30//!
31//! # Streaming
32//!
33//! ```no_run
34//! use finlight_client::{Client, Config, GetArticlesWebSocketParams};
35//! use futures_util::StreamExt;
36//!
37//! #[tokio::main]
38//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
39//!     let client = Client::new(Config::new(std::env::var("FINLIGHT_API_KEY")?))?;
40//!
41//!     let mut stream = client.websocket.stream(GetArticlesWebSocketParams {
42//!         query: Some("nvidia".into()),
43//!         ..Default::default()
44//!     });
45//!     while let Some(article) = stream.next().await {
46//!         let article = article?; // Err is terminal (e.g. blocked by server)
47//!         println!("[{}] {}", article.source, article.title);
48//!     }
49//!     Ok(())
50//! }
51//! ```
52
53#![warn(missing_docs)]
54
55mod client;
56mod config;
57mod error;
58mod http;
59mod models;
60mod params;
61mod services;
62mod version;
63mod webhook;
64mod websocket;
65
66pub use client::Client;
67pub use config::Config;
68pub use error::{Error, WebhookVerificationError};
69pub use models::{Article, ArticleResponse, Company, Listing, RawArticle, Source};
70pub use params::{
71    Category, GetArticleByLinkParams, GetArticlesParams, GetArticlesWebSocketParams,
72    GetRawArticlesWebSocketParams, OrderBy, SortOrder,
73};
74pub use services::{ArticleService, SourceService};
75pub use webhook::construct_webhook_event;
76pub use websocket::{ArticleStream, RawWebSocketClient, WebSocketClient, WebSocketOptions};