use std::sync::Arc;
use crate::config::Config;
use crate::error::Error;
use crate::http::ApiClient;
use crate::services::{ArticleService, SourceService};
use crate::websocket::{RawWebSocketClient, WebSocketClient, WebSocketOptions};
pub struct Client {
pub articles: ArticleService,
pub sources: SourceService,
pub websocket: WebSocketClient,
pub raw_websocket: RawWebSocketClient,
}
impl Client {
pub fn new(config: Config) -> Result<Self, Error> {
if config.api_key.is_empty() {
return Err(Error::MissingApiKey);
}
let api = Arc::new(ApiClient::new(config.clone())?);
Ok(Self {
articles: ArticleService { api: api.clone() },
sources: SourceService { api },
websocket: WebSocketClient::new(config.clone(), WebSocketOptions::default()),
raw_websocket: RawWebSocketClient::new(config, WebSocketOptions::default()),
})
}
}