5 个版本
0.1.6 | 2021 年 11 月 4 日 |
---|---|
0.1.5 | 2021 年 5 月 20 日 |
0.1.4 | 2021 年 5 月 19 日 |
0.1.2 | 2021 年 3 月 7 日 |
0.1.0 | 2020 年 12 月 21 日 |
#653 在 文本处理
17,705 每月下载量
15KB
237 行
sanitizer
灵感来自 validator crate。Sanitizer crate 是一个函数和宏的集合,用于清理结构体字段,利用 Rust 的宏,它遵循 validator crate 的优雅方法。
概述
[dependencies]
sanitizer = { version = "0.1", features = ["derive"] }
然后使用 crate
use sanitizer::prelude::*;
#[derive(Debug, Sanitize)]
struct SignupData {
#[sanitize(trim, lower_case)]
mail: String,
#[sanitize(clamp(1, 60))]
age: u8,
#[sanitize]
user: User,
}
#[derive(Debug, Sanitize)]
struct User {
id: u64,
#[sanitize(trim, clamp(50))]
name: String,
}
fn main() {
let instance = SignupData::new();
instance.sanitize();
}
如果您不想使用 derive 宏,则 sanitizer crate 提供了用于清理整数和字符串的结构和函数
let int: u8 = 50;
let mut instance = IntSanitizer::from(int);
instance.clamp(99, 101);
assert_eq!(99, instance.get());
和字符串
let mut sanitize = StringSanitizer::from(" some_string12 ");
sanitize.trim().numeric();
assert_eq!("12", sanitize.get());
清理器
trim
删除两端空白。
numeric
删除任何非数字字符。
alphanumeric
删除任何非字母数字字符。
lower_case
将字符串输入转换为小写。
upper_case
将字符串输入转换为大写。
camel_case
将字符串输入转换为 camelCase。
snake_case
将字符串输入转换为 snake_case。
screaming_snake_case
使用 Inflector crate 将字符串输入转换为 SCREAMING_SNAKE_CASE。
e164
将字符串输入转换为 E164 国际电话号码格式。如果电话号码无效,则会引发 panic。
clamp(min, max)
使用给定的 min 和 max 限制有效整数字段。
clamp(max)
将字符串输入长度限制为以下数字
custom(function)
使用自定义函数以不同的方式清理字段。例如
#[derive(Sanitize)]
struct SanitizerTest {
#[sanitize(custom(func_string))]
field_string: String,
}
fn func_string(field: &str) -> String {
let mut sanitizer = StringSanitizer::from(field);
sanitizer.trim();
sanitizer.get()
}
#[test]
fn sanitizer_check_custom_functions() {
let mut instance = SanitizerTest {
field_string: String::from("Hello "),
};
instance.sanitize();
assert_eq!(instance.field_string, String::from("Hello"));
}
嵌套
#[derive(Sanitize)]
struct First {
#[sanitize(trim)]
name: String,
#[sanitize]
info: OtherInfo,
}
#[derive(Sanitize)]
struct OtherInfo {
#[sanitize(numeric)]
id: String,
#[sanitize(lower_case, trim)]
email: String,
}
sanitize
方法 First
会自动调用 OtherInfo
的清理方法,如果您想单独清理 OtherInfo
,则可以对其实例调用 snaitize
。
许可证
dashxhq/sanitizer 在 MIT 许可证下授权。
依赖项
~21MB
~145K SLoC