Skip to main content

futu_mcp/tool_enums/
market_enum.rs

1//! Split from tool_enums.rs: MarketEnum.
2
3use 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}