2 个不稳定版本
0.2.0 | 2024年7月29日 |
---|---|
0.1.0 | 2024年7月21日 |
#1911 in 解析器实现
每月249次下载
16KB
serde-validate
该 serde-validate
包提供了在 Rust 中验证反序列化结构体和枚举的实用工具。
该包的核心是 Validate
trait,它定义了一个验证类型实例的方法,并在验证失败时返回一个自定义错误类型。该包还包括一个过程宏 validate_deser
,它可以生成验证反序列化数据的反序列化代码。
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
serde-validate = "0.1"
要使用宏,需要启用 macro
功能(默认启用)
[dependencies]
serde-validate = { version = "0.1", default-features = false, features = ["macro"] }
用法
验证 trait
为您的结构体或枚举实现 Validate
trait 以定义自定义验证逻辑。
use serde_validate::Validate;
use serde::Deserialize;
#[derive(Deserialize)]
struct MyStruct {
value: i32,
}
impl Validate for MyStruct {
type Error = String;
fn validate(&self) -> Result<(), Self::Error> {
if self.value < 0 {
Err("Value must be non-negative".into())
} else {
Ok(())
}
}
}
let my_struct = MyStruct { value: 10 };
assert!(my_struct.validate().is_ok());
validate_deser 宏
使用 validate_deser
宏自动生成验证反序列化数据的反序列化代码。
use serde-validate::{Validate, serde-validate};
#[validate_deser]
struct MyStruct {
value: i32,
}
impl Validate for MyStruct {
type Error = String;
fn validate(&self) -> Result<(), Self::Error> {
if self.value < 0 {
Err("Value must be non-negative".into())
} else {
Ok(())
}
}
}
// Assuming you have a JSON input as below:
let json_input = r#"{ "value": 10 }"#;
// Deserialize and validate the JSON input
let my_struct: Result<MyStruct, _> = serde_json::from_str(json_input);
assert!(my_struct.validate().is_ok());
// Assuming you have a JSON input as below:
let bad_json_input = r#"{ "value": -10 }"#;
// Deserialize and validate the JSON input
let my_struct: Result<MyStruct, _> = serde_json::from_str(bad_json_input);
assert!(my_struct.is_err());
许可证
本项目受 GPL-3.0 许可证许可 - 请参阅 LICENSE 文件以获取详细信息。
依赖项
~175KB