fmp/
quote.rs

1use crate::{request, Client, StatusCode};
2use serde::{Deserialize, Serialize};
3
4#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct FMPQuote {
7    pub symbol: String,
8    pub name: String,
9    pub price: f64,
10    pub changes_percentage: f64,
11    pub change: f64,
12    pub day_low: f64,
13    pub day_high: f64,
14    pub year_high: f64,
15    pub year_low: f64,
16    pub market_cap: f64,
17    pub price_avg50: f64,
18    pub price_avg200: f64,
19    pub volume: f64,
20    pub avg_volume: f64,
21    pub exchange: String,
22    pub open: f64,
23    pub previous_close: f64,
24    pub eps: f64,
25    pub pe: f64,
26    pub earnings_announcement: String,
27    pub shares_outstanding: f64,
28    pub timestamp: f64,
29}
30
31impl Client {
32    pub async fn batch_quotes(&self, tickers: Vec<&str>) -> Result<Vec<FMPQuote>, StatusCode> {
33        let ticker = tickers.join(",");
34        request(format!(
35            "{}/v3/quote/{}?apikey={}",
36            self.base, ticker, self.api_key,
37        ))
38        .await
39    }
40
41    pub async fn quote(&self, ticker: &str) -> Result<Option<FMPQuote>, StatusCode> {
42        let quotes = self.batch_quotes(vec![ticker]).await?;
43        Ok(quotes.into_iter().next())
44    }
45}