Skip to main content

icydb_model/base/normalizer/text/
case.rs

1//! Module: base::normalizer::text::case
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
9use convert_case::{Case, Casing};
10
11///
12/// Kebab
13///
14
15#[normalizer]
16pub struct Kebab;
17
18impl Normalizer<String> for Kebab {
19    fn normalize(&self, value: &mut String) -> Result<(), String> {
20        *value = value.to_case(Case::Kebab);
21
22        Ok(())
23    }
24}
25
26///
27/// Lower
28///
29
30#[normalizer]
31pub struct Lower;
32
33impl Normalizer<String> for Lower {
34    fn normalize(&self, value: &mut String) -> Result<(), String> {
35        // Unicode-aware lowercase; allocates
36        *value = value.to_lowercase();
37
38        Ok(())
39    }
40}
41
42///
43/// Snake
44///
45
46#[normalizer]
47pub struct Snake;
48
49impl Normalizer<String> for Snake {
50    fn normalize(&self, value: &mut String) -> Result<(), String> {
51        *value = value.to_case(Case::Snake);
52
53        Ok(())
54    }
55}
56
57///
58/// Title
59///
60
61#[normalizer]
62pub struct Title;
63
64impl Normalizer<String> for Title {
65    fn normalize(&self, value: &mut String) -> Result<(), String> {
66        *value = value.to_case(Case::Title);
67
68        Ok(())
69    }
70}
71
72///
73/// Upper
74///
75
76#[normalizer]
77pub struct Upper;
78
79impl Normalizer<String> for Upper {
80    fn normalize(&self, value: &mut String) -> Result<(), String> {
81        // Unicode-aware uppercase; allocates
82        *value = value.to_uppercase();
83
84        Ok(())
85    }
86}
87
88///
89/// UpperCamel
90///
91
92#[normalizer]
93pub struct UpperCamel;
94
95impl Normalizer<String> for UpperCamel {
96    fn normalize(&self, value: &mut String) -> Result<(), String> {
97        *value = value.to_case(Case::UpperCamel);
98
99        Ok(())
100    }
101}
102
103///
104/// UpperSnake
105///
106
107#[normalizer]
108pub struct UpperSnake;
109
110impl Normalizer<String> for UpperSnake {
111    fn normalize(&self, value: &mut String) -> Result<(), String> {
112        *value = value.to_case(Case::UpperSnake);
113
114        Ok(())
115    }
116}