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};