Skip to main content

faker_rust/default/
science.rs

1//! Science generator - generates random chemical elements, symbols, and scientists
2
3use crate::base::sample;
4use crate::locale::{fetch_locale_with_context, sample_with_resolve};
5
6/// Generate a random chemical element (e.g. "Hydrogen")
7pub fn element() -> String {
8    fetch_locale_with_context("science.element", "en", Some("science"))
9        .map(|v| sample_with_resolve(&v, Some("science")))
10        .unwrap_or_else(|| sample(FALLBACK_ELEMENTS).to_string())
11}
12
13/// Generate a random chemical element symbol (e.g. "H")
14pub fn element_symbol() -> String {
15    fetch_locale_with_context("science.element_symbol", "en", Some("science"))
16        .map(|v| sample_with_resolve(&v, Some("science")))
17        .unwrap_or_else(|| sample(FALLBACK_SYMBOLS).to_string())
18}
19
20/// Generate a random scientist name (e.g. "Albert Einstein")
21pub fn scientist() -> String {
22    fetch_locale_with_context("science.scientist", "en", Some("science"))
23        .map(|v| sample_with_resolve(&v, Some("science")))
24        .unwrap_or_else(|| sample(FALLBACK_SCIENTISTS).to_string())
25}
26
27// Fallback data
28const FALLBACK_ELEMENTS: &[&str] = &["Hydrogen", "Helium", "Lithium", "Beryllium", "Boron"];
29const FALLBACK_SYMBOLS: &[&str] = &["H", "He", "Li", "Be", "B"];
30const FALLBACK_SCIENTISTS: &[&str] = &[
31    "Isaac Newton",
32    "Albert Einstein",
33    "Marie Curie",
34    "Charles Darwin",
35    "Nikola Tesla",
36];
37
38#[cfg(test)]
39mod tests {
40    use super::*;
41
42    #[test]
43    fn test_element() {
44        assert!(!element().is_empty());
45    }
46
47    #[test]
48    fn test_scientist() {
49        assert!(!scientist().is_empty());
50    }
51}