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;
6use futu_qot::types::SubType;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, schemars::JsonSchema)]
9#[serde(into = "i32")]
10#[non_exhaustive]
11pub enum SubTypeEnum {
12    Basic,
13    OrderBook,
14    OrderBookOdd,
15    Ticker,
16    Rt,
17    KlDay,
18    Kl5Min,
19    Kl15Min,
20    Kl30Min,
21    Kl60Min,
22    Kl1Min,
23    KlWeek,
24    KlMonth,
25    Broker,
26    KlQuarter,
27    KlYear,
28    Kl3Min,
29    Kl10Min,
30    Kl120Min,
31    Kl180Min,
32    Kl240Min,
33}
34
35impl From<SubTypeEnum> for i32 {
36    fn from(s: SubTypeEnum) -> Self {
37        s.as_i32()
38    }
39}
40
41impl SubTypeEnum {
42    fn to_qot(self) -> SubType {
43        match self {
44            Self::Basic => SubType::Basic,
45            Self::OrderBook => SubType::OrderBook,
46            Self::OrderBookOdd => SubType::OrderBookOdd,
47            Self::Ticker => SubType::Ticker,
48            Self::Rt => SubType::RT,
49            Self::KlDay => SubType::KLDay,
50            Self::Kl5Min => SubType::KL5Min,
51            Self::Kl15Min => SubType::KL15Min,
52            Self::Kl30Min => SubType::KL30Min,
53            Self::Kl60Min => SubType::KL60Min,
54            Self::Kl1Min => SubType::KL1Min,
55            Self::KlWeek => SubType::KLWeek,
56            Self::KlMonth => SubType::KLMonth,
57            Self::Broker => SubType::Broker,
58            Self::KlQuarter => SubType::KLQuarter,
59            Self::KlYear => SubType::KLYear,
60            Self::Kl3Min => SubType::KL3Min,
61            Self::Kl10Min => SubType::KL10Min,
62            Self::Kl120Min => SubType::KL120Min,
63            Self::Kl180Min => SubType::KL180Min,
64            Self::Kl240Min => SubType::KL240Min,
65        }
66    }
67
68    fn from_qot(sub_type: SubType) -> Option<Self> {
69        Some(match sub_type {
70            SubType::Basic => Self::Basic,
71            SubType::OrderBook => Self::OrderBook,
72            SubType::OrderBookOdd => Self::OrderBookOdd,
73            SubType::Ticker => Self::Ticker,
74            SubType::RT => Self::Rt,
75            SubType::KLDay => Self::KlDay,
76            SubType::KL5Min => Self::Kl5Min,
77            SubType::KL15Min => Self::Kl15Min,
78            SubType::KL30Min => Self::Kl30Min,
79            SubType::KL60Min => Self::Kl60Min,
80            SubType::KL1Min => Self::Kl1Min,
81            SubType::KLWeek => Self::KlWeek,
82            SubType::KLMonth => Self::KlMonth,
83            SubType::Broker => Self::Broker,
84            SubType::KLQuarter => Self::KlQuarter,
85            SubType::KLYear => Self::KlYear,
86            SubType::KL3Min => Self::Kl3Min,
87            SubType::KL10Min => Self::Kl10Min,
88            SubType::KL120Min => Self::Kl120Min,
89            SubType::KL180Min => Self::Kl180Min,
90            SubType::KL240Min => Self::Kl240Min,
91            _ => return None,
92        })
93    }
94}
95
96impl ToolEnum for SubTypeEnum {
97    fn type_name() -> &'static str {
98        "sub_type"
99    }
100
101    fn from_i32(v: i32) -> Option<Self> {
102        SubType::from_public_i32(v).and_then(Self::from_qot)
103    }
104
105    fn from_str(s: &str) -> Option<Self> {
106        SubType::from_str_alias(s).and_then(Self::from_qot)
107    }
108
109    fn as_i32(self) -> i32 {
110        self.to_qot().as_i32()
111    }
112
113    fn all_int_values() -> Vec<i32> {
114        Self::all_string_values()
115            .into_iter()
116            .filter_map(Self::from_str)
117            .map(Self::as_i32)
118            .collect()
119    }
120
121    fn all_string_values() -> Vec<&'static str> {
122        // Canonical strings use proto-suffix form (matches `Qot_Common.SubType`
123        // enum names), so developers referring to proto docs can paste them
124        // verbatim. `from_str` also accepts lowercase short aliases
125        // (e.g. `"day"` for `"KL_Day"`).
126        vec![
127            "Basic",
128            "OrderBook",
129            "OrderBookOdd",
130            "Ticker",
131            "RT",
132            "KL_Day",
133            "KL_5Min",
134            "KL_15Min",
135            "KL_30Min",
136            "KL_60Min",
137            "KL_1Min",
138            "KL_Week",
139            "KL_Month",
140            "Broker",
141            "KL_Quarter",
142            "KL_Year",
143            "KL_3Min",
144            "KL_10Min",
145            "KL_120Min",
146            "KL_180Min",
147            "KL_240Min",
148        ]
149    }
150}