finlight_client/
client.rs1use std::sync::Arc;
2
3use crate::config::Config;
4use crate::error::Error;
5use crate::http::ApiClient;
6use crate::services::{ArticleService, SourceService};
7use crate::websocket::{RawWebSocketClient, WebSocketClient, WebSocketOptions};
8
9pub struct Client {
11 pub articles: ArticleService,
13 pub sources: SourceService,
15 pub websocket: WebSocketClient,
18 pub raw_websocket: RawWebSocketClient,
21}
22
23impl Client {
24 pub fn new(config: Config) -> Result<Self, Error> {
26 if config.api_key.is_empty() {
27 return Err(Error::MissingApiKey);
28 }
29 let api = Arc::new(ApiClient::new(config.clone())?);
30 Ok(Self {
31 articles: ArticleService { api: api.clone() },
32 sources: SourceService { api },
33 websocket: WebSocketClient::new(config.clone(), WebSocketOptions::default()),
34 raw_websocket: RawWebSocketClient::new(config, WebSocketOptions::default()),
35 })
36 }
37}