1use 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 OrderBookOdd,
14 Ticker,
15 Rt,
16 KlDay,
17 Kl5Min,
18 Kl15Min,
19 Kl30Min,
20 Kl60Min,
21 Kl1Min,
22 KlWeek,
23 KlMonth,
24 Broker,
25 KlQuarter,
26 KlYear,
27 Kl3Min,
28}
29
30impl From<SubTypeEnum> for i32 {
31 fn from(s: SubTypeEnum) -> Self {
32 s.as_i32()
33 }
34}
35
36impl ToolEnum for SubTypeEnum {
37 fn type_name() -> &'static str {
38 "sub_type"
39 }
40
41 fn from_i32(v: i32) -> Option<Self> {
42 Some(match v {
43 1 => Self::Basic,
44 2 => Self::OrderBook,
45 22 => Self::OrderBookOdd,
46 4 => Self::Ticker,
47 5 => Self::Rt,
48 6 => Self::KlDay,
49 7 => Self::Kl5Min,
50 8 => Self::Kl15Min,
51 9 => Self::Kl30Min,
52 10 => Self::Kl60Min,
53 11 => Self::Kl1Min,
54 12 => Self::KlWeek,
55 13 => Self::KlMonth,
56 14 => Self::Broker,
57 15 => Self::KlQuarter,
58 16 => Self::KlYear,
59 17 => Self::Kl3Min,
60 _ => return None,
61 })
62 }
63
64 fn from_str(s: &str) -> Option<Self> {
65 Some(match s.trim().to_ascii_lowercase().as_str() {
67 "basic" => Self::Basic,
68 "orderbook" | "order_book" => Self::OrderBook,
69 "orderbookodd" | "orderbook_odd" | "order-book-odd" | "order_book_odd"
70 | "odd_orderbook" | "odd-lot-orderbook" | "odd_lot_orderbook" => Self::OrderBookOdd,
71 "ticker" => Self::Ticker,
72 "rt" => Self::Rt,
73 "kl_day" | "kl-day" | "day" => Self::KlDay,
74 "kl_5min" | "kl-5min" | "5min" => Self::Kl5Min,
75 "kl_15min" | "kl-15min" | "15min" => Self::Kl15Min,
76 "kl_30min" | "kl-30min" | "30min" => Self::Kl30Min,
77 "kl_60min" | "kl-60min" | "60min" => Self::Kl60Min,
78 "kl_1min" | "kl-1min" | "1min" => Self::Kl1Min,
79 "kl_week" | "kl-week" | "week" => Self::KlWeek,
80 "kl_month" | "kl-month" | "month" => Self::KlMonth,
81 "broker" => Self::Broker,
82 "kl_quarter" | "kl-quarter" | "quarter" => Self::KlQuarter,
83 "kl_year" | "kl-year" | "year" => Self::KlYear,
84 "kl_3min" | "kl-3min" | "3min" => Self::Kl3Min,
85 _ => return None,
86 })
87 }
88
89 fn as_i32(self) -> i32 {
90 match self {
91 Self::Basic => 1,
92 Self::OrderBook => 2,
93 Self::OrderBookOdd => 22,
94 Self::Ticker => 4,
95 Self::Rt => 5,
96 Self::KlDay => 6,
97 Self::Kl5Min => 7,
98 Self::Kl15Min => 8,
99 Self::Kl30Min => 9,
100 Self::Kl60Min => 10,
101 Self::Kl1Min => 11,
102 Self::KlWeek => 12,
103 Self::KlMonth => 13,
104 Self::Broker => 14,
105 Self::KlQuarter => 15,
106 Self::KlYear => 16,
107 Self::Kl3Min => 17,
108 }
109 }
110
111 fn all_int_values() -> Vec<i32> {
112 vec![1, 2, 22, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
113 }
114
115 fn all_string_values() -> Vec<&'static str> {
116 vec![
121 "Basic",
122 "OrderBook",
123 "OrderBookOdd",
124 "Ticker",
125 "RT",
126 "KL_Day",
127 "KL_5Min",
128 "KL_15Min",
129 "KL_30Min",
130 "KL_60Min",
131 "KL_1Min",
132 "KL_Week",
133 "KL_Month",
134 "Broker",
135 "KL_Quarter",
136 "KL_Year",
137 "KL_3Min",
138 ]
139 }
140}