equity_scanner/utils/
yahoo.rs1use 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}