Skip to main content

futu_gateway_core/
security_display_name.rs

1//! C++ `GetSecDisplayNameByAppLanguage` equivalent.
2//!
3//! Source reference:
4//! `FutuOpenD/Src/NNProtoCenter/Quote/SecList/INNBiz_Qot_SecList.h`
5//! latest `GetSecDisplayNameByAppLanguage`.
6
7/// C++ `NN_AppLanguage_ZH`.
8pub const APP_LANGUAGE_ZH: i32 = 0;
9/// C++ `NN_AppLanguage_HK`.
10pub const APP_LANGUAGE_HK: i32 = 1;
11/// C++ `NN_AppLanguage_EN`.
12pub const APP_LANGUAGE_EN: i32 = 2;
13/// C++ `NN_AppLanguage_JA`.
14pub const APP_LANGUAGE_JA: i32 = 5;
15
16/// Select a security display name using the same fallback chain as C++
17/// `GetSecDisplayNameByAppLanguage`.
18#[must_use]
19pub fn cpp_security_display_name(
20    name_sc: &str,
21    name_tc: &str,
22    name_en: &str,
23    name_jp: &str,
24    app_lang: i32,
25) -> String {
26    let candidates: [&str; 4] = match app_lang {
27        APP_LANGUAGE_HK => [name_tc, name_sc, name_en, name_jp],
28        APP_LANGUAGE_EN => [name_en, name_sc, name_tc, name_jp],
29        APP_LANGUAGE_JA => [name_jp, name_en, name_sc, name_tc],
30        APP_LANGUAGE_ZH => [name_sc, name_tc, name_en, name_jp],
31        _ => [name_sc, name_tc, name_en, name_jp],
32    };
33    candidates
34        .into_iter()
35        .find(|candidate| !candidate.is_empty())
36        .unwrap_or("")
37        .to_string()
38}
39
40#[cfg(test)]
41mod tests;