use super::urls::api;
use crate::client::YahooClient;
use crate::error::Result;
use crate::models::hours::MarketHours;
pub async fn fetch(client: &YahooClient, region: Option<&str>) -> Result<MarketHours> {
let config = client.config();
let region = region.unwrap_or(&config.region);
let params = [
("formatted", "true"),
("key", "finance"),
("region", region),
];
let response = client
.request_with_params(api::MARKET_TIME, ¶ms)
.await?;
let json: serde_json::Value = response.json().await?;
parse_hours_response(&json)
}
fn parse_hours_response(json: &serde_json::Value) -> Result<MarketHours> {
MarketHours::from_response(json).map_err(|e| {
crate::error::FinanceError::ResponseStructureError {
field: "hours".to_string(),
context: e,
}
})
}