finance_query/constants/
indices.rs1#[non_exhaustive]
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
7#[serde(rename_all = "kebab-case")]
8pub enum Region {
9 #[serde(alias = "america", alias = "am")]
11 Americas,
12 #[serde(alias = "eu")]
14 Europe,
15 #[serde(alias = "asia", alias = "apac", alias = "asia_pacific")]
17 AsiaPacific,
18 #[serde(alias = "mea", alias = "emea", alias = "middle_east_africa")]
20 MiddleEastAfrica,
21 #[serde(alias = "currency", alias = "fx")]
23 Currencies,
24}
25
26impl std::str::FromStr for Region {
27 type Err = ();
28
29 fn from_str(s: &str) -> Result<Self, Self::Err> {
30 match s.to_lowercase().replace(['-', '_'], "").as_str() {
31 "americas" | "america" | "am" => Ok(Region::Americas),
32 "europe" | "eu" => Ok(Region::Europe),
33 "asiapacific" | "asia" | "apac" => Ok(Region::AsiaPacific),
34 "middleeastafrica" | "mea" | "emea" => Ok(Region::MiddleEastAfrica),
35 "currencies" | "currency" | "fx" => Ok(Region::Currencies),
36 _ => Err(()),
37 }
38 }
39}
40
41impl Region {
42 pub fn parse(s: &str) -> Option<Self> {
44 s.parse().ok()
45 }
46
47 pub fn symbols(&self) -> &'static [&'static str] {
49 match self {
50 Region::Americas => AMERICAS,
51 Region::Europe => EUROPE,
52 Region::AsiaPacific => ASIA_PACIFIC,
53 Region::MiddleEastAfrica => MIDDLE_EAST_AFRICA,
54 Region::Currencies => CURRENCIES,
55 }
56 }
57
58 pub fn as_str(&self) -> &'static str {
60 match self {
61 Region::Americas => "americas",
62 Region::Europe => "europe",
63 Region::AsiaPacific => "asia-pacific",
64 Region::MiddleEastAfrica => "middle-east-africa",
65 Region::Currencies => "currencies",
66 }
67 }
68
69 pub fn all() -> &'static [Region] {
71 &[
72 Region::Americas,
73 Region::Europe,
74 Region::AsiaPacific,
75 Region::MiddleEastAfrica,
76 Region::Currencies,
77 ]
78 }
79}
80
81pub const AMERICAS: &[&str] = &[
83 "^GSPC", "^DJI", "^IXIC", "^NYA", "^XAX", "^RUT", "^VIX", "^GSPTSE", "^BVSP", "^MXX", "^IPSA", "^MERV", ];
96
97pub const EUROPE: &[&str] = &[
99 "^FTSE", "^GDAXI", "^FCHI", "^STOXX50E", "^N100", "^BFX", "^BUK100P", "MOEX.ME", "^125904-USD-STRD", ];
109
110pub const ASIA_PACIFIC: &[&str] = &[
112 "^N225", "^HSI", "000001.SS", "^KS11", "^TWII", "^STI", "^AXJO", "^AORD", "^NZ50", "^BSESN", "^JKSE", "^KLSE", ];
125
126pub const MIDDLE_EAST_AFRICA: &[&str] = &[
128 "^TA125.TA", "^CASE30", "^JN0U.JO", ];
132
133pub const CURRENCIES: &[&str] = &[
135 "DX-Y.NYB", "^XDB", "^XDE", "^XDN", "^XDA", ];
141
142pub fn all_symbols() -> Vec<&'static str> {
144 Region::all()
145 .iter()
146 .flat_map(|r| r.symbols().iter().copied())
147 .collect()
148}