finance_query/models/market_summary/
response.rs1use crate::models::quote::FormattedValue;
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10#[cfg_attr(feature = "dataframe", derive(crate::ToDataFrame))]
11#[serde(rename_all = "camelCase")]
12#[non_exhaustive]
13pub struct MarketSummaryQuote {
14 pub symbol: String,
16 pub full_exchange_name: Option<String>,
18 pub exchange: Option<String>,
20 pub short_name: Option<String>,
22 pub quote_type: Option<String>,
24 pub market_state: Option<String>,
26 #[serde(default)]
28 pub regular_market_price: Option<FormattedValue<f64>>,
29 #[serde(default)]
31 pub regular_market_change: Option<FormattedValue<f64>>,
32 #[serde(default)]
34 pub regular_market_change_percent: Option<FormattedValue<f64>>,
35 #[serde(default)]
37 pub regular_market_previous_close: Option<FormattedValue<f64>>,
38 #[serde(default)]
40 pub regular_market_time: Option<FormattedValue<i64>>,
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub spark: Option<SparkData>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(rename_all = "camelCase")]
49pub struct SparkData {
50 #[serde(default)]
52 pub close: Option<Vec<Option<f64>>>,
53 #[serde(default)]
55 pub timestamp: Option<Vec<i64>>,
56 #[serde(default)]
58 pub symbol: Option<String>,
59 #[serde(default)]
61 pub previous_close: Option<f64>,
62 #[serde(default)]
64 pub chart_previous_close: Option<f64>,
65}
66
67#[derive(Debug, Clone, Deserialize)]
69#[serde(rename_all = "camelCase")]
70pub(crate) struct RawMarketSummaryResponse {
71 pub market_summary_response: Option<MarketSummaryResult>,
72}
73
74#[derive(Debug, Clone, Deserialize)]
75#[serde(rename_all = "camelCase")]
76#[allow(dead_code)]
77pub(crate) struct MarketSummaryResult {
78 pub result: Option<Vec<MarketSummaryQuote>>,
79 pub error: Option<serde_json::Value>,
80}
81
82impl MarketSummaryQuote {
83 pub(crate) fn from_response(value: serde_json::Value) -> Result<Vec<Self>, serde_json::Error> {
85 let raw: RawMarketSummaryResponse = serde_json::from_value(value)?;
86 Ok(raw
87 .market_summary_response
88 .and_then(|r| r.result)
89 .unwrap_or_default())
90 }
91}