#trim #case #struct-fields #validate #macro-derive #e164

sanitizer

一组用于清理结构体字段的函数和宏

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文本处理

Download history 3679/week @ 2024-03-14 3169/week @ 2024-03-21 3337/week @ 2024-03-28 2229/week @ 2024-04-04 4511/week @ 2024-04-11 4224/week @ 2024-04-18 4800/week @ 2024-04-25 3258/week @ 2024-05-02 6005/week @ 2024-05-09 4448/week @ 2024-05-16 4905/week @ 2024-05-23 2570/week @ 2024-05-30 4866/week @ 2024-06-06 4442/week @ 2024-06-13 5132/week @ 2024-06-20 2687/week @ 2024-06-27

17,705 每月下载量

MIT 许可证

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