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