ic_dbms_api/dbms/sanitize/
url_encoding.rs1use crate::prelude::{IcDbmsResult, Sanitize, Value};
2
3pub struct UrlEncodingSanitizer;
16
17impl Sanitize for UrlEncodingSanitizer {
18 fn sanitize(&self, value: Value) -> IcDbmsResult<Value> {
19 match value {
20 Value::Text(text) => {
21 let encoded = percent_encoding::utf8_percent_encode(
22 text.as_str(),
23 percent_encoding::NON_ALPHANUMERIC,
24 )
25 .to_string();
26 Ok(Value::Text(encoded.into()))
27 }
28 other => Ok(other),
29 }
30 }
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn test_url_encoding_sanitizer() {
39 let sanitizer = UrlEncodingSanitizer;
40 let string_value = Value::Text("你好 rust".into());
41 let number_value = Value::Int32(42.into());
42
43 let sanitized_string = sanitizer.sanitize(string_value).unwrap();
44 let sanitized_number = sanitizer.sanitize(number_value).unwrap();
45
46 assert_eq!(
47 sanitized_string,
48 Value::Text("%E4%BD%A0%E5%A5%BD%20rust".into())
49 );
50 assert_eq!(sanitized_number, Value::Int32(42.into()));
51 }
52}