#预处理器 #验证 #处理 #测试 #API

preprocess-macro

使用内置预处理器对结构体进行预处理

16个不稳定版本 (3个破坏性更改)

0.5.7 2024年8月2日
0.5.6 2024年6月22日
0.5.2 2024年5月20日
0.4.1 2024年4月22日
0.2.1 2023年7月19日

#1618过程宏

Download history 7/week @ 2024-04-29 49/week @ 2024-05-13 514/week @ 2024-05-20 19/week @ 2024-05-27 230/week @ 2024-06-03 4/week @ 2024-06-10 270/week @ 2024-06-17 34/week @ 2024-06-24 71/week @ 2024-07-01 146/week @ 2024-07-29 9/week @ 2024-08-05 5/week @ 2024-08-12

每月160次下载
用于 预处理器

MIT 许可证

44KB
1.5K SLoC

预处理器

一个库,可以帮助你预处理你的结构和枚举。可用于验证数据或转换数据。

有两种类型的预处理程序

  • 验证器:它们检查给定字段是否有效,但不修改值。例如:验证器可以检查一个字符串是否是有效的电子邮件地址。
  • 预处理程序:这些允许你修改字段的值(以及可能的数据类型)。例如:预处理程序可以修剪字符串,或将它转换为大写。

示例用法

use preprocess::prelude::*;

#[preprocess::sync]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct UserSignUpRequest {
    // First trims the email, then converts it to lowercase, then validates it as an email address.
    #[preprocess(trim, lowercase, email)]
    pub email: String,
    // First trims the password, then checks if it's at least 8 characters long.
    #[preprocess(trim, length(min = 8))]
    pub password: String,
}

let processed_value = raw_value.preprocess()?;

继承派生属性

由于该库使用属性宏,它必须是结构体或枚举上的第一个属性。将生成一个新的结构体/枚举,其名称为 {original_name}Processed。派生宏将继承原始结构体/枚举的所有派生属性。例如

use preprocess::prelude::*;

#[preprocess::sync]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserSignUpRequest {
    #[preprocess(trim, lowercase, email)]
    #[serde(default)]
    pub email: String,
    #[serde(alias = "pass")]
    #[preprocess(trim, length(min = 8))]
    pub password: String,
}

上面的代码将生成

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserSignUpRequestProcessed {
    #[serde(default)]
    pub email: String,
    #[serde(alias = "pass")]
    pub password: String,
}

这样,你使用的任何自定义派生属性(如Serde)都将被生成的结构体/枚举继承。这也确保了你可以在不编写任何额外代码的情况下预处理你的结构体/枚举,并将预处理版本发送给客户端。

有关该库的更多详细信息,请参阅文档

MSRV

没有MSRV,说实话,我认为MSRV没有多大意义,因为Rust升级很容易。我只在我机器上使用最新的Rust版本。话虽如此,我认为我没有使用任何新的Rust功能。因此,它应该也能在旧版本的Rust上工作。如果你遇到任何问题,请提交问题

灵感

这个库在很大程度上受到了validator库的启发。非常感谢Keats创建了它。

许可证

本项目采用MIT许可证

依赖项

~2.4–4MB
~70K SLoC