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