3个不稳定版本
0.2.0 | 2024年1月26日 |
---|---|
0.1.1 | 2023年2月11日 |
0.1.0 | 2023年2月11日 |
623 在 编码 中排名
每月20,862 次下载
用于 7 个crate(6个直接使用)
10KB
56 行
serde-inline-default
一个小型crate,可以通过内联属性声明来设置Serde字段的默认值。
概述
这个crate是一种实现serde-rs/serde#368目的的方法。如果你想在纯serde
中设置默认值,你必须创建一个函数,并用以下方式与之链接:#[serde)
。这可能在你需要执行计算以获取默认值时是好的,但通常你只想将一个简单的整数或字符串作为默认值,并不得不创建一个整个函数来返回硬编码的值。
#[derive(Deserialize)]
struct Test {
#[serde(default = "value_default")]
value: u32
}
fn value_default() -> u32 { 42 }
如果您有很多字段,且每个字段都有很多(不同的)默认值,那么可能会变得相当混乱。这个crate通过提供#[serde_inline_default]
过程宏来解决此问题。在结构体级别(在#[derive(Deserialize)]
/#[derive(Serialize)]
之前,否则将无法正确工作),您可以通过#[serde_inline_default(...)]
在您的serde字段中设置默认值,而不需要创建额外的函数。
#[serde_inline_default]
#[derive(Deserialize)]
struct Test {
#[serde_inline_default(42)]
value: u32
}
内部,#[serde_inline_default(...)]
被扩展为一个返回设置值的函数,并且该属性被替换为#[serde(default = "<function name>")]
。因此,这个宏只是为您的代码提供一些语法糖,但如果您想要保持代码整洁或编写声明式宏/ macro_rules!
,它将非常方便。
许可证
该项目可以在以下许可证中选择一个进行许可
- Apache许可证,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
依赖项
~315–770KB
~18K SLoC