17 个不稳定版本 (4 个破坏性更新)
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.1.0 | 2022 年 7 月 25 日 |
#358 在 Rust 模式
每月 140 次下载
59KB
1K SLoC
预处理
一个用于预处理您的结构和枚举的crate。可用于验证数据或转换数据。
有两种类型的预处理程序
- 验证器:它们检查给定的字段是否有效,但不修改值。例如:验证器可以检查一个字符串是否是有效的电子邮件地址。
- 预处理程序:这些允许您修改字段的值(以及可能的数据类型)。例如:预处理程序可以修剪字符串或将它转换为大写。
示例用法
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()?;
继承派生属性
由于该crate使用属性宏,它必须始终是结构体或枚举上的第一个属性。将生成一个名为 {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)都将继承生成的结构体或枚举。这也确保了您可以在不编写任何额外代码的情况下预处理您的结构体或枚举,并将其发送给客户端。
有关该crate的更多详细信息,请参阅文档。
MSRV
没有MSRV,说实话,我觉得MSRV没有意义,因为Rust升级很容易。我只是在我的机器上使用最新的Rust版本。话虽如此,我认为我没有使用任何新的Rust功能。因此,它应该也能在较旧的Rust版本上运行。如果您遇到任何问题,请打开问题。
灵感
这个crate主要受到validator
crate的启发。向Keats表示衷心的感谢,他创建了它。
许可证
该项目受MIT许可证许可。
依赖关系
~7–14MB
~179K SLoC