use super::urls::api;
use crate::client::YahooClient;
use crate::constants::Region;
use crate::error::Result;
use tracing::info;
pub async fn fetch(client: &YahooClient, region: Option<Region>) -> Result<serde_json::Value> {
let config = client.config();
let (lang, region) = match region {
Some(r) => (r.lang(), r.region()),
None => (config.lang.as_str(), config.region.as_str()),
};
info!(
"Fetching trending tickers (lang={}, region={})",
lang, region
);
let url = api::trending(region);
let params = [("lang", lang), ("region", region)];
let response = client.request_with_params(&url, ¶ms).await?;
Ok(response.json().await?)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::client::ClientConfig;
#[tokio::test]
#[ignore] async fn test_fetch_trending() {
let client = YahooClient::new(ClientConfig::default()).await.unwrap();
let result = fetch(&client, None).await;
assert!(result.is_ok());
let json = result.unwrap();
assert!(json.get("finance").is_some());
}
}