use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct AIChatMessage {
pub role: String,
pub content: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AIChatRequest {
pub messages: Vec<AIChatMessage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream: Option<bool>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AIChatResponse {
pub chat_id: String,
pub content: String,
pub query_summary: String,
pub related_queries: Vec<String>,
pub tickers: Vec<serde_json::Value>,
pub sources: Vec<serde_json::Value>,
pub widgets: Vec<String>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AirlinePriceIndex {
pub airline: String,
pub date: String,
pub price_index: f64,
pub daily_avg_price: f64,
}
#[derive(Debug, Deserialize)]
pub struct AirlinePriceIndexData {
pub data: Vec<AirlinePriceIndex>,
pub airline: String,
pub from: String,
pub to: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CountryMetadata {
pub country: String,
pub code2: String,
pub code3: String,
pub code_no: String,
pub currency: String,
pub currency_code: String,
pub region: String,
pub sub_region: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub rating: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_spread: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country_risk_premium: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub equity_risk_premium: Option<f64>,
}
#[derive(Debug, Deserialize)]
pub struct CovidInfo {
pub state: String,
#[serde(rename = "case")]
pub cases: f64,
pub death: f64,
pub updated: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FDACommitteeMeeting {
pub from_date: String,
pub to_date: String,
pub event_description: String,
pub url: String,
}
#[derive(Debug, Deserialize)]
pub struct TechnicalIndicator {
#[serde(flatten)]
pub indicators: HashMap<String, Vec<f64>>,
#[serde(rename = "t")]
pub timestamps: Vec<i64>,
}
#[derive(Debug, Deserialize)]
pub struct Development {
pub symbol: String,
pub datetime: String,
pub headline: String,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PressRelease {
pub symbol: String,
pub major_development: Vec<Development>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SymbolLookupInfo {
pub description: String,
pub display_symbol: String,
pub symbol: String,
#[serde(rename = "type")]
pub security_type: String,
}
#[derive(Debug, Deserialize)]
pub struct SymbolLookup {
pub count: i64,
pub result: Vec<SymbolLookupInfo>,
}
#[derive(Debug, Deserialize)]
pub struct SectorMetricData {
pub sector: String,
pub metrics: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Deserialize)]
pub struct SectorMetric {
pub region: String,
pub data: Vec<SectorMetricData>,
}