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    source_key = "crates/icydb/src/base/types/lang.rs::newtype::1",
16    primitive = "Text",
17    item(prim = "Text", unbounded),
18    ty(validator(path = "base::validator::intl::iso::Iso639_1"))
19)]
20pub struct Code {}
21
22///
23/// TESTS
24///
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    #[test]
31    fn test_code() {
32        let test_cases = [
33            // Valid codes
34            ("en", true),
35            ("de", true),
36            // Invalid codes
37            ("D", false),
38            ("DE", false),
39            ("en-us", false),
40            ("EN-US", false),
41            ("EN-USSR", false),
42        ];
43
44        for (key, expected) in test_cases {
45            let code = Code(key.into());
46            assert!(
47                crate::validate(&code).is_ok() == expected,
48                "testing: '{}' - expected: {}, got: {}",
49                key,
50                expected,
51                crate::validate(&code).is_ok()
52            );
53        }
54    }
55}