Skip to main content

icydb_model/base/types/
geo.rs

1//! Module: base::types::geo
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/// AddressLine
11///
12/// - Trim
13/// - Length: 1–100
14/// - Allowed characters are not enforced
15///
16
17#[newtype(
18    source_key = "crates/icydb/src/base/types/geo.rs::newtype::1",
19    primitive = "Text",
20    item(prim = "Text", unbounded),
21    ty(
22        normalizer(path = "base::normalizer::text::Trim"),
23        rule(
24            source_key = "icydb.base.rule.geo.address_line.length.v1",
25            kind = "length_range_inclusive",
26            args(1, 100)
27        ),
28    )
29)]
30pub struct AddressLine {}
31
32///
33/// CityName
34///
35/// - Trim
36/// - TitleCase (optional, e.g. “new york” → “New York”)
37/// - Length: 1–100
38/// - Allowed: letters, spaces, apostrophes, hyphens
39///
40
41#[newtype(
42    source_key = "crates/icydb/src/base/types/geo.rs::newtype::2",
43    primitive = "Text",
44    item(prim = "Text", unbounded),
45    ty(
46        normalizer(path = "base::normalizer::text::Trim"),
47        normalizer(path = "base::normalizer::text::case::Title"),
48        rule(
49            source_key = "icydb.base.rule.geo.city_name.length.v1",
50            kind = "length_range_inclusive",
51            args(1, 100)
52        ),
53    )
54)]
55pub struct CityName {}
56
57///
58/// PostalCode
59///
60/// - Trim whitespace
61/// - Uppercase
62/// - Length: 3–12 chars
63/// - Allowed characters are not enforced
64///
65
66#[newtype(
67    source_key = "crates/icydb/src/base/types/geo.rs::newtype::3",
68    primitive = "Text",
69    item(prim = "Text", unbounded),
70    ty(
71        normalizer(path = "base::normalizer::text::Trim"),
72        normalizer(path = "base::normalizer::text::case::Upper"),
73        rule(
74            source_key = "icydb.base.rule.geo.postal_code.length.v1",
75            kind = "length_range_inclusive",
76            args(3, 12)
77        ),
78    )
79)]
80pub struct PostalCode {}
81
82///
83/// RegionName
84/// (state/province)
85///
86/// - Trim
87/// - Uppercase
88/// - Length: 2–50
89/// - Allowed characters are not enforced
90///
91
92#[newtype(
93    source_key = "crates/icydb/src/base/types/geo.rs::newtype::4",
94    primitive = "Text",
95    item(prim = "Text", unbounded),
96    ty(
97        normalizer(path = "base::normalizer::text::Trim"),
98        normalizer(path = "base::normalizer::text::case::Upper"),
99        rule(
100            source_key = "icydb.base.rule.geo.region_name.length.v1",
101            kind = "length_range_inclusive",
102            args(2, 50)
103        ),
104    )
105)]
106pub struct RegionName {}