skp_validator_rules/transform/
case.rs1use skp_validator_core::Transform;
4
5#[derive(Debug, Clone, Copy, Default)]
17pub struct UppercaseTransform;
18
19impl Transform<String> for UppercaseTransform {
20 fn transform(&self, value: String) -> String {
21 value.to_uppercase()
22 }
23
24 fn name(&self) -> &'static str {
25 "uppercase"
26 }
27}
28
29#[derive(Debug, Clone, Copy, Default)]
41pub struct LowercaseTransform;
42
43impl Transform<String> for LowercaseTransform {
44 fn transform(&self, value: String) -> String {
45 value.to_lowercase()
46 }
47
48 fn name(&self) -> &'static str {
49 "lowercase"
50 }
51}
52
53#[derive(Debug, Clone, Copy, Default)]
65pub struct CapitalizeTransform;
66
67impl Transform<String> for CapitalizeTransform {
68 fn transform(&self, value: String) -> String {
69 value
70 .split_whitespace()
71 .map(|word| {
72 let mut chars = word.chars();
73 match chars.next() {
74 None => String::new(),
75 Some(first) => first.to_uppercase().chain(chars).collect(),
76 }
77 })
78 .collect::<Vec<_>>()
79 .join(" ")
80 }
81
82 fn name(&self) -> &'static str {
83 "capitalize"
84 }
85}
86
87#[cfg(test)]
88mod tests {
89 use super::*;
90
91 #[test]
92 fn test_uppercase() {
93 let transform = UppercaseTransform;
94 assert_eq!(transform.transform("hello".to_string()), "HELLO");
95 assert_eq!(transform.transform("Hello World".to_string()), "HELLO WORLD");
96 assert_eq!(transform.transform("123abc".to_string()), "123ABC");
97 }
98
99 #[test]
100 fn test_lowercase() {
101 let transform = LowercaseTransform;
102 assert_eq!(transform.transform("HELLO".to_string()), "hello");
103 assert_eq!(transform.transform("Hello World".to_string()), "hello world");
104 }
105
106 #[test]
107 fn test_capitalize() {
108 let transform = CapitalizeTransform;
109 assert_eq!(transform.transform("hello world".to_string()), "Hello World");
110 assert_eq!(transform.transform("HELLO WORLD".to_string()), "HELLO WORLD");
111 }
112}