equity_scanner/utils/
yahoo.rs

1use serde::Deserialize;
2
3#[derive(Debug, Deserialize)]
4#[serde(rename_all = "camelCase")]
5pub struct ApiResponse {
6    pub quote_summary: Option<QuoteSummary>,
7}
8
9#[derive(Debug, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct QuoteSummary {
12    pub error: Option<serde_json::Value>,
13    pub result: Option<Vec<CompanyData>>,
14}
15
16#[derive(Debug, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct CompanyData {
19    pub asset_profile: Option<AssetProfile>,
20    pub financial_data: Option<FinancialData>,
21}
22
23#[derive(Debug, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub struct AssetProfile {
26    pub address1: Option<String>,
27    pub address2: Option<String>,
28    pub audit_risk: Option<u8>,
29    pub board_risk: Option<u8>,
30    pub city: Option<String>,
31    pub company_officers: Option<Vec<CompanyOfficer>>,
32    pub compensation_as_of_epoch_date: Option<i64>,
33    pub compensation_risk: Option<u8>,
34    pub country: Option<String>,
35    pub governance_epoch_date: Option<i64>,
36    pub industry: Option<String>,
37    pub industry_disp: Option<String>,
38    pub industry_key: Option<String>,
39    pub long_business_summary: Option<String>,
40    pub max_age: Option<u32>,
41    pub overall_risk: Option<u8>,
42    pub phone: Option<String>,
43    pub sector: Option<String>,
44    pub sector_disp: Option<String>,
45    pub sector_key: Option<String>,
46    pub share_holder_rights_risk: Option<u8>,
47    pub state: Option<String>,
48    pub website: Option<String>,
49    pub zip: Option<String>,
50}
51
52#[derive(Debug, Deserialize)]
53#[serde(rename_all = "camelCase")]
54pub struct CompanyOfficer {
55    pub age: Option<u8>,
56    pub exercised_value: Option<MonetaryValue>,
57    pub fiscal_year: Option<u16>,
58    pub max_age: Option<u8>,
59    pub name: Option<String>,
60    pub title: Option<String>,
61    pub total_pay: Option<MonetaryValue>,
62    pub unexercised_value: Option<MonetaryValue>,
63    pub year_born: Option<u16>,
64}
65
66#[derive(Debug, Deserialize)]
67#[serde(rename_all = "camelCase")]
68pub struct FinancialData {
69    pub current_price: Option<NumericValue>,
70    pub current_ratio: Option<NumericValue>,
71    pub debt_to_equity: Option<NumericValue>,
72    pub ebitda: Option<MonetaryValue>,
73    pub ebitda_margins: Option<NumericValue>,
74    pub financial_currency: Option<String>,
75    pub free_cashflow: Option<MonetaryValue>,
76    pub gross_margins: Option<NumericValue>,
77    pub gross_profits: Option<MonetaryValue>,
78    pub max_age: Option<u32>,
79    pub number_of_analyst_opinions: Option<NumericValue>,
80    pub operating_cashflow: Option<MonetaryValue>,
81    pub operating_margins: Option<NumericValue>,
82    pub profit_margins: Option<NumericValue>,
83    pub quick_ratio: Option<NumericValue>,
84    pub recommendation_key: Option<String>,
85    pub recommendation_mean: Option<NumericValue>,
86    pub return_on_assets: Option<NumericValue>,
87    pub return_on_equity: Option<NumericValue>,
88    pub revenue_growth: Option<NumericValue>,
89    pub revenue_per_share: Option<NumericValue>,
90    pub target_high_price: Option<NumericValue>,
91    pub target_low_price: Option<NumericValue>,
92    pub target_mean_price: Option<NumericValue>,
93    pub target_median_price: Option<NumericValue>,
94    pub total_cash: Option<MonetaryValue>,
95    pub total_cash_per_share: Option<NumericValue>,
96    pub total_debt: Option<MonetaryValue>,
97    pub total_revenue: Option<MonetaryValue>,
98}
99
100#[derive(Debug, Deserialize)]
101#[serde(rename_all = "camelCase")]
102pub struct MonetaryValue {
103    pub fmt: Option<String>,
104    pub long_fmt: Option<String>,
105    pub raw: Option<f64>,
106}
107
108#[derive(Debug, Deserialize)]
109#[serde(rename_all = "camelCase")]
110pub struct NumericValue {
111    pub fmt: Option<String>,
112    pub raw: Option<f64>,
113}