Skip to main content

icydb_model/base/types/
lang.rs

1//! Module: base::types::lang
2//!
3//! Responsibility: base domain type declarations.
4//! Does not own: runtime storage, query execution, or validator implementation internals.
5//! Boundary: declares macro-modeled domain wrappers and records for downstream schemas.
6
7use crate::prelude::*;
8
9///
10/// Code
11/// ISO 639-1 standard language codes
12///
13
14#[newtype(
15    primitive = "Text",
16    item(prim = "Text", unbounded),
17    ty(validator(path = "base::validator::intl::iso::Iso639_1"))
18)]
19pub struct Code {}
20
21///
22/// TESTS
23///
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    fn test_code() {
31        let test_cases = [
32            // Valid codes
33            ("en", true),
34            ("de", true),
35            // Invalid codes
36            ("D", false),
37            ("DE", false),
38            ("en-us", false),
39            ("EN-US", false),
40            ("EN-USSR", false),
41        ];
42
43        for (key, expected) in test_cases {
44            let code = Code(key.into());
45            assert!(
46                crate::validate(&code).is_ok() == expected,
47                "testing: '{}' - expected: {}, got: {}",
48                key,
49                expected,
50                crate::validate(&code).is_ok()
51            );
52        }
53    }
54}