icydb_base/types/
lang.rs

1use crate::prelude::*;
2
3///
4/// Code
5/// ISO 639-1 standard language codes
6///
7
8#[newtype(
9    primitive = "Text",
10    item(prim = "Text"),
11    ty(validator(path = "validator::intl::iso::Iso639_1"))
12)]
13pub struct Code {}
14
15///
16/// TESTS
17///
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22
23    #[test]
24    fn test_code() {
25        let test_cases = [
26            // Valid codes
27            ("en", true),
28            ("de", true),
29            // Invalid codes
30            ("D", false),
31            ("DE", false),
32            ("en-us", false),
33            ("EN-US", false),
34            ("EN-USSR", false),
35        ];
36
37        for (key, expected) in test_cases {
38            let code = Code(key.into());
39            assert!(
40                validate(&code).is_ok() == expected,
41                "testing: '{}' - expected: {}, got: {}",
42                key,
43                expected,
44                validate(&code).is_ok()
45            );
46        }
47    }
48}