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}