tushare_api/
api.rs

1use serde::{Deserialize, Serialize};
2
3/// Tushare API enum types
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
5pub enum Api {
6    StockBasic,
7    FundBasic,
8    FundDaily,
9    FundPortfolio,
10    Daily,      
11    DailyBasic,
12    MoneyflowMktDc,
13    Weekly,
14    Monthly,
15    IndexDaily,
16    IndexWeekly,
17    IndexMonthly,
18    TradeCal,
19    Margin,
20    StockCompany,
21    MarginDetail,
22    StkHoldernumber,
23    ThsIndex, 
24    ThsMember,
25    ThsDaily,
26    ThsHot,
27    FinaMainbz,
28    FinaMainbzVip,
29    FinaIndicator,
30    Balancesheet,
31    Income,
32    Cashflow,
33    IndexBasic,
34    IndexDailyBasic,
35    Moneyflow,
36    MoneyflowIndustryThs,
37
38    UsBasic,
39    UsDaily,
40    Custom(String), // other apis specified by name
41}
42
43impl Api {
44    pub fn name(&self) -> String {
45        match self {
46            Api::StockBasic => "stock_basic".to_string(),
47            Api::FundBasic => "fund_basic".to_string(),
48            Api::FundDaily => "fund_daily".to_string(),
49            Api::FundPortfolio => "fund_portfolio".to_string(),
50            Api::Daily => "daily".to_string(),
51            Api::DailyBasic => "daily_basic".to_string(),
52            Api::MoneyflowMktDc => "moneyflow_mkt_dc".to_string(),
53            Api::Weekly => "weekly".to_string(),
54            Api::Monthly => "monthly".to_string(),
55            Api::IndexDaily => "index_daily".to_string(),
56            Api::IndexWeekly => "index_weekly".to_string(),
57            Api::IndexMonthly => "index_monthly".to_string(),
58            Api::TradeCal => "trade_cal".to_string(),
59            Api::Margin => "margin".to_string(),
60            Api::StockCompany => "stock_company".to_string(),
61            Api::MarginDetail => "margin_detail".to_string(),
62            Api::StkHoldernumber => "stk_holdernumber".to_string(),
63            Api::ThsIndex => "ths_index".to_string(),
64            Api::ThsMember => "ths_member".to_string(),
65            Api::ThsDaily => "ths_daily".to_string(),
66            Api::ThsHot => "ths_hot".to_string(),
67            Api::FinaMainbz => "fina_mainbz".to_string(),
68            Api::FinaMainbzVip => "fina_mainbz_vip".to_string(),
69            Api::FinaIndicator => "fina_indicator".to_string(),
70            Api::Balancesheet => "balancesheet".to_string(),
71            Api::Income => "income".to_string(),
72            Api::Cashflow => "cashflow".to_string(),
73            Api::IndexBasic => "index_basic".to_string(),
74            Api::IndexDailyBasic => "index_daily_basic".to_string(),
75            Api::Moneyflow => "moneyflow".to_string(),
76            Api::MoneyflowIndustryThs => "moneyflow_industry_ths".to_string(),
77            Api::UsBasic => "us_basic".to_string(),
78            Api::UsDaily => "us_daily".to_string(),
79            Api::Custom(name) => name.clone(),
80        }
81    }
82}
83
84/// Serialize Api enum to string
85pub fn serialize_api_name<S>(api: &Api, serializer: S) -> Result<S::Ok, S::Error>
86where
87    S: serde::Serializer,
88{
89    serializer.serialize_str(&api.name())
90}