1use 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 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}