futu_core/
qot_trade_date_market.rs1pub const TRADE_DATE_MARKET_VALID_VALUES: &str = "TradeDateMarket=1..=10 (HK=1, US=2, CN=3, NT=4, ST=5, JP_FUTURE=6, \
9 SG_FUTURE=7, SG=8, MY=9, JP=10); legacy numeric QotMarket aliases: \
10 US=11, SH/CN=21, SZ=22";
11
12#[must_use]
13pub fn is_trade_date_market(value: i32) -> bool {
14 matches!(value, 1..=10 | 11 | 21 | 22)
15}
16
17#[must_use]
18pub fn trade_date_market_from_str_alias(raw: &str) -> Option<i32> {
19 let trimmed = raw.trim();
20 if let Ok(value) = trimmed.parse::<i32>() {
21 return is_trade_date_market(value).then_some(value);
22 }
23
24 let value = match trimmed.to_ascii_uppercase().as_str() {
25 "HK" => 1,
26 "US" => 2,
27 "CN" => 3,
28 "NT" => 4,
29 "ST" => 5,
30 "JP_FUTURE" | "JPFUTURE" | "JPF" => 6,
31 "SG_FUTURE" | "SGFUTURE" | "SGF" => 7,
32 "SG" | "SG_STOCK" | "SG_SECURITY" => 8,
33 "MY" | "MY_STOCK" | "MY_SECURITY" => 9,
34 "JP" | "JP_STOCK" | "JP_SECURITY" => 10,
35 _ => return None,
36 };
37 Some(value)
38}
39
40#[must_use]
41pub fn backend_market_id_for_trade_date_market(market: i32) -> Option<u32> {
42 match market {
43 1 => Some(1),
47 2 => Some(10),
48 3 => Some(30),
49 4 => Some(51),
50 5 => Some(50),
51 6 => Some(185),
52 7 => Some(160),
53 8 => Some(180),
54 9 => Some(1350),
55 10 => Some(830),
56 11 => Some(10),
58 21 => Some(30),
59 22 => Some(31),
60 _ => None,
61 }
62}