Skip to main content

icydb_model/base/normalizer/intl/
iso.rs

1//! Module: base::normalizer::intl::iso
2//!
3//! Responsibility: base normalizer definitions.
4//! Does not own: validation policy, persistence, or schema mutation semantics.
5//! Boundary: mutates schema field values through facade normalizer traits.
6
7use crate::{prelude::*, visitor::Normalizer};
8
9///
10/// Iso3166_1A2
11/// Trims and uppercases the code
12///
13
14#[normalizer]
15pub struct Iso3166_1A2;
16
17impl Normalizer<String> for Iso3166_1A2 {
18    fn normalize(&self, value: &mut String) -> Result<(), String> {
19        // trim in place
20        let trimmed = value.trim();
21
22        if trimmed.len() != value.len() {
23            *value = trimmed.to_owned();
24        }
25
26        // uppercase in place (ASCII)
27        value.make_ascii_uppercase();
28
29        Ok(())
30    }
31}
32
33///
34/// Iso639_1
35/// Trims and lowercases the code
36///
37
38#[normalizer]
39pub struct Iso639_1;
40
41impl Normalizer<String> for Iso639_1 {
42    fn normalize(&self, value: &mut String) -> Result<(), String> {
43        let trimmed = value.trim();
44
45        if trimmed.len() != value.len() {
46            *value = trimmed.to_owned();
47        }
48
49        value.make_ascii_lowercase();
50
51        Ok(())
52    }
53}