futu_mcp/tool_enums/
market_enum.rs1use 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 MarketEnum {
11 HK,
12 US,
13 SH,
14 SZ,
15 SG,
16 JP,
17 AU,
18 MY,
19 CA,
20 FX,
21}
22
23impl From<MarketEnum> for i32 {
24 fn from(m: MarketEnum) -> Self {
25 m.as_i32()
26 }
27}
28
29impl ToolEnum for MarketEnum {
30 fn type_name() -> &'static str {
31 "market"
32 }
33
34 fn from_i32(v: i32) -> Option<Self> {
35 Some(match v {
36 1 => Self::HK,
37 11 => Self::US,
38 21 => Self::SH,
39 22 => Self::SZ,
40 31 => Self::SG,
41 41 => Self::JP,
42 51 => Self::AU,
43 61 => Self::MY,
44 71 => Self::CA,
45 81 => Self::FX,
46 _ => return None,
47 })
48 }
49
50 fn from_str(s: &str) -> Option<Self> {
51 Some(match s.trim().to_ascii_uppercase().as_str() {
52 "HK" => Self::HK,
53 "US" => Self::US,
54 "SH" | "CN" => Self::SH,
55 "SZ" => Self::SZ,
56 "SG" => Self::SG,
57 "JP" => Self::JP,
58 "AU" => Self::AU,
59 "MY" => Self::MY,
60 "CA" => Self::CA,
61 "FX" => Self::FX,
62 _ => return None,
63 })
64 }
65
66 fn as_i32(self) -> i32 {
67 match self {
68 Self::HK => 1,
69 Self::US => 11,
70 Self::SH => 21,
71 Self::SZ => 22,
72 Self::SG => 31,
73 Self::JP => 41,
74 Self::AU => 51,
75 Self::MY => 61,
76 Self::CA => 71,
77 Self::FX => 81,
78 }
79 }
80
81 fn all_int_values() -> Vec<i32> {
82 vec![1, 11, 21, 22, 31, 41, 51, 61, 71, 81]
83 }
84
85 fn all_string_values() -> Vec<&'static str> {
86 vec!["HK", "US", "SH", "SZ", "SG", "JP", "AU", "MY", "CA", "FX"]
87 }
88}