Skip to main content

futu_mcp/tool_enums/
subtype_enum.rs

1//! Split from tool_enums.rs: SubTypeEnum.
2
3use serde::Serialize;
4
5use super::ToolEnum;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, schemars::JsonSchema)]
8#[serde(into = "i32")]
9#[non_exhaustive]
10pub enum SubTypeEnum {
11    Basic,
12    OrderBook,
13    Ticker,
14    Rt,
15    KlDay,
16    Kl5Min,
17    Kl15Min,
18    Kl30Min,
19    Kl60Min,
20    Kl1Min,
21    KlWeek,
22    KlMonth,
23    Broker,
24    KlQuarter,
25    KlYear,
26    Kl3Min,
27}
28
29impl From<SubTypeEnum> for i32 {
30    fn from(s: SubTypeEnum) -> Self {
31        s.as_i32()
32    }
33}
34
35impl ToolEnum for SubTypeEnum {
36    fn type_name() -> &'static str {
37        "sub_type"
38    }
39
40    fn from_i32(v: i32) -> Option<Self> {
41        Some(match v {
42            1 => Self::Basic,
43            2 => Self::OrderBook,
44            4 => Self::Ticker,
45            5 => Self::Rt,
46            6 => Self::KlDay,
47            7 => Self::Kl5Min,
48            8 => Self::Kl15Min,
49            9 => Self::Kl30Min,
50            10 => Self::Kl60Min,
51            11 => Self::Kl1Min,
52            12 => Self::KlWeek,
53            13 => Self::KlMonth,
54            14 => Self::Broker,
55            15 => Self::KlQuarter,
56            16 => Self::KlYear,
57            17 => Self::Kl3Min,
58            _ => return None,
59        })
60    }
61
62    fn from_str(s: &str) -> Option<Self> {
63        // case-insensitive match against canonical names + common aliases
64        Some(match s.trim().to_ascii_lowercase().as_str() {
65            "basic" => Self::Basic,
66            "orderbook" | "order_book" => Self::OrderBook,
67            "ticker" => Self::Ticker,
68            "rt" => Self::Rt,
69            "kl_day" | "kl-day" | "day" => Self::KlDay,
70            "kl_5min" | "kl-5min" | "5min" => Self::Kl5Min,
71            "kl_15min" | "kl-15min" | "15min" => Self::Kl15Min,
72            "kl_30min" | "kl-30min" | "30min" => Self::Kl30Min,
73            "kl_60min" | "kl-60min" | "60min" => Self::Kl60Min,
74            "kl_1min" | "kl-1min" | "1min" => Self::Kl1Min,
75            "kl_week" | "kl-week" | "week" => Self::KlWeek,
76            "kl_month" | "kl-month" | "month" => Self::KlMonth,
77            "broker" => Self::Broker,
78            "kl_quarter" | "kl-quarter" | "quarter" => Self::KlQuarter,
79            "kl_year" | "kl-year" | "year" => Self::KlYear,
80            "kl_3min" | "kl-3min" | "3min" => Self::Kl3Min,
81            _ => return None,
82        })
83    }
84
85    fn as_i32(self) -> i32 {
86        match self {
87            Self::Basic => 1,
88            Self::OrderBook => 2,
89            Self::Ticker => 4,
90            Self::Rt => 5,
91            Self::KlDay => 6,
92            Self::Kl5Min => 7,
93            Self::Kl15Min => 8,
94            Self::Kl30Min => 9,
95            Self::Kl60Min => 10,
96            Self::Kl1Min => 11,
97            Self::KlWeek => 12,
98            Self::KlMonth => 13,
99            Self::Broker => 14,
100            Self::KlQuarter => 15,
101            Self::KlYear => 16,
102            Self::Kl3Min => 17,
103        }
104    }
105
106    fn all_int_values() -> Vec<i32> {
107        vec![1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
108    }
109
110    fn all_string_values() -> Vec<&'static str> {
111        // Canonical strings use proto-suffix form (matches `Qot_Common.SubType`
112        // enum names), so developers referring to proto docs can paste them
113        // verbatim. `from_str` also accepts lowercase short aliases
114        // (e.g. `"day"` for `"KL_Day"`).
115        vec![
116            "Basic",
117            "OrderBook",
118            "Ticker",
119            "RT",
120            "KL_Day",
121            "KL_5Min",
122            "KL_15Min",
123            "KL_30Min",
124            "KL_60Min",
125            "KL_1Min",
126            "KL_Week",
127            "KL_Month",
128            "Broker",
129            "KL_Quarter",
130            "KL_Year",
131            "KL_3Min",
132        ]
133    }
134}