embedded_lang/
macros.rs

1/// Get a language as an embedded resource
2///
3/// # Arguments
4/// * `filename` - Path to the file to embed
5#[macro_export]
6macro_rules! embedded_language {
7    ($filename:literal, resources = [ $($rname:literal: $rfilename:expr),+ ]) => {
8        embedded_lang::Language::new_from_string(include_str!($filename), std::collections::HashMap::from([$(($rname.to_string(), include_bytes!($rfilename).to_vec())),+])).unwrap()
9
10    };
11    ($filename:literal) => {
12        embedded_lang::Language::new_from_string(include_str!($filename), std::collections::HashMap::from([])).unwrap()
13
14    };
15}
16
17/// Get a language string
18///
19/// # Arguments
20/// * `filename` - Path to the file to embed
21#[macro_export]
22macro_rules! get_string {
23    ($set:expr, $name:expr) => {
24        $set.get($name).unwrap_or_default()
25    };
26}
27
28#[cfg(test)]
29mod test_token {
30    use crate as embedded_lang;
31    use crate::LanguageSet;
32
33    #[test]
34    fn test_embedded_language() {
35        let lang = embedded_language!("../examples/en.lang.json");
36        assert_eq!(lang.get("hello_msg"), Some("hello world!"));
37    }
38
39    #[test]
40    fn test_embedded_resources() {
41        let lang = embedded_language!("../examples/en.lang.json", resources = [
42            "license_file":"../LICENSE"
43        ]);
44        assert_eq!(lang.get("hello_msg"), Some("hello world!"));
45    }
46
47    #[test]
48    fn test_get_string() {
49        let mut set = LanguageSet::new(
50            "fr",
51            &[
52                embedded_language!("../examples/en.lang.json"),
53                embedded_language!("../examples/fr.lang.json"),
54            ],
55        );
56        set.set_fallback_language("en");
57
58        assert_eq!(
59            get_string!(
60                LanguageSet::new(
61                    "fr",
62                    &[
63                        embedded_language!("../examples/en.lang.json"),
64                        embedded_language!("../examples/fr.lang.json"),
65                    ]
66                ),
67                "foobar"
68            ),
69            ""
70        );
71        assert_eq!(get_string!(set, "foobar"), "");
72        assert_eq!(get_string!(set, "mustard"), "mustard");
73    }
74}