ic_dbms_api/dbms/sanitize/
collapse_whitespace.rs1use crate::prelude::{IcDbmsResult, Sanitize, Value};
2
3pub struct CollapseWhitespaceSanitizer;
16
17impl Sanitize for CollapseWhitespaceSanitizer {
18 fn sanitize(&self, value: Value) -> IcDbmsResult<Value> {
19 match value {
20 Value::Text(text) => Ok(Value::Text(
21 text.as_str()
22 .split_whitespace()
23 .collect::<Vec<_>>()
24 .join(" ")
25 .trim()
26 .into(),
27 )),
28 other => Ok(other),
29 }
30 }
31}
32
33#[cfg(test)]
34mod tests {
35
36 use super::*;
37
38 #[test]
39 fn test_collapse_whitespace_sanitizer() {
40 let sanitizer = CollapseWhitespaceSanitizer;
41 let string_with_whitespace = Value::Text(" Hello, World! ".into());
42 let string_without_whitespace = Value::Text("Hello".into());
43 let number_value = Value::Int32(42.into());
44
45 let sanitized_with_whitespace = sanitizer.sanitize(string_with_whitespace).unwrap();
46 let sanitized_without_whitespace = sanitizer.sanitize(string_without_whitespace).unwrap();
47 let sanitized_number = sanitizer.sanitize(number_value).unwrap();
48
49 assert_eq!(
50 sanitized_with_whitespace,
51 Value::Text("Hello, World!".into())
52 );
53 assert_eq!(sanitized_without_whitespace, Value::Text("Hello".into()));
54 assert_eq!(sanitized_number, Value::Int32(42.into()));
55 }
56}