#验证 #反序列化 #serde

serde-validate

用于验证反序列化结构体和枚举的库

2 个不稳定版本

0.2.0 2024年7月29日
0.1.0 2024年7月21日

#1911 in 解析器实现

Download history 68/week @ 2024-07-15 42/week @ 2024-07-22 139/week @ 2024-07-29

每月249次下载

GPL-3.0-or-later

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