8 个版本
0.4.2 | 2023年2月6日 |
---|---|
0.4.1 | 2023年2月5日 |
0.4.0 | 2022年4月18日 |
0.3.1 | 2022年4月17日 |
0.1.1 | 2022年4月16日 |
#311 in 编码
12,222 每月下载量
用于 12 个crate(6个直接使用)
26KB
322 行
serde-this-or-that
针对可以指定为多种类型的字段进行自定义反序列化。
此crate与Cargo配合使用,需要像下面的Cargo.toml
文件一样
[dependencies]
serde-this-or-that = "0.4"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
入门指南
在您的应用程序中添加一些使用示例。
以下是在代码中使用serde-this-or-that
的示例
use serde::Deserialize;
use serde_json::from_str;
use serde_this_or_that::{as_bool, as_f64, as_u64};
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
struct MyStruct {
#[serde(deserialize_with = "as_bool")]
is_active: bool,
#[serde(deserialize_with = "as_u64")]
num_attempts: u64,
#[serde(deserialize_with = "as_f64")]
grade: f64,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let string = r#"
{
"isActive": "True",
"numAttempts": "",
"grade": "81"
}
"#;
let s: MyStruct = from_str(string)?;
println!("{s:#?}");
assert!(s.is_active);
assert_eq!(s.num_attempts, 0);
assert_eq!(s.grade, 81.0);
Ok(())
}
导出函数
示例
您可以在GitHub项目仓库的examples/文件夹中查看此crate的示例用法。
性能
基准测试表明,实现一个自定义的Visitor
(如serde-this-or-that
所做的那样),平均性能比使用无标签枚举的方法快约15倍。
另一个基准测试将性能与serde_with crate进行了比较:它表明,如果仅使用DisplayFromStr
,则这两个crate的性能大致相同。但是,当涉及到PickFirst
时,serde-this-or-that
在平均情况下似乎表现得更好,性能大约快12倍。
基准测试存储在benches/文件夹中,可以使用cargo bench
运行。
贡献
欢迎贡献!打开一个拉取请求来修复错误,或者打开一个问题来讨论新功能或更改。
有关更多信息,请查看文档中的贡献部分。
许可证
本项目自豪地采用MIT许可协议进行许可(《LICENSE或http://opensource.org/licenses/MIT》)。
serde-this-or-that
可以按照MIT许可协议进行分发。贡献将接受相同的许可。
作者
依赖项
~110–350KB