faker_rust/default/
finance.rs1use crate::base::sample;
4use crate::locale::fetch_locale;
5
6pub fn stock_ticker() -> String {
8 fetch_locale("finance.stock_tickers", "en")
9 .map(|v| sample(&v))
10 .unwrap_or_else(generate_ticker)
11}
12
13fn generate_ticker() -> String {
14 let config = crate::config::FakerConfig::current();
15 const LETTERS: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
16 let length = config.rand_range(2, 5);
17 let mut ticker = String::new();
18 for _ in 0..length {
19 let idx = config.rand_range(0, 26) as usize;
20 ticker.push(LETTERS[idx] as char);
21 }
22 ticker
23}
24
25pub fn market_index() -> String {
27 fetch_locale("finance.market_indices", "en")
28 .map(|v| sample(&v))
29 .unwrap_or_else(|| sample(FALLBACK_INDICES).to_string())
30}
31
32pub fn currency_pair() -> String {
34 let base = sample(FALLBACK_CURRENCIES);
35 let quote = sample(FALLBACK_CURRENCIES);
36 format!("{}/{})", base, quote)
37}
38
39const FALLBACK_INDICES: &[&str] = &[
41 "S&P 500", "Dow Jones", "NASDAQ", "Russell 2000", "FTSE 100",
42 "DAX", "Nikkei 225", "Hang Seng", "Shanghai Composite", "CAC 40",
43 "Euro Stoxx 50", "IBOVESPA", "ASX 200", "TSX Composite",
44];
45
46const FALLBACK_CURRENCIES: &[&str] = &[
47 "USD", "EUR", "GBP", "JPY", "CHF", "CAD", "AUD", "NZD",
48 "CNY", "HKD", "SGD", "MXN", "BRL", "INR", "RUB", "ZAR",
49 "KRW", "SEK", "NOK", "DKK", "PLN", "TRY", "AED", "THB",
50];
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55
56 #[test]
57 fn test_stock_ticker() {
58 assert!(!stock_ticker().is_empty());
59 }
60
61 #[test]
62 fn test_market_index() {
63 assert!(!market_index().is_empty());
64 }
65
66 #[test]
67 fn test_currency_pair() {
68 assert!(!currency_pair().is_empty());
69 }
70}