rust - serde - 多个默认值组合在一起?
问题描述
我正在尝试使用 Serde 加载 Toml 文件,它包含多个布尔值,如果在文本文件中找不到,我想将它们全部默认为 false。
我目前的实现是:
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(rename_all="PascalCase")]
pub struct SomeConfigStruct {
// This one *must* exist, non optional, non defaulted.
class_name : String,
#[serde(default = "default_boolean")]
parent_in_constructor : bool,
#[serde(default = "default_boolean")]
set_user_texts : bool,
#[serde(default = "default_boolean")]
singleton : bool,
#[serde(default = "default_boolean")]
use_enum_types : bool,
}
我怎样才能做一些事情:
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(rename_all="PascalCase")]
pub struct SomeConfigStruct {
class_name : String,
#[serde(type = bool, default = "default_boolean")]
parent_in_constructor : bool,
set_user_texts : bool,
singleton : bool,
use_enum_types : bool,
}
[编辑,结构上的新成员,以更好地说明我的需要。]
解决方案
更新了新的约束
我不知道这样的宏,据我所知不存在。不过,我可以提供替代解决方案。
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct SomeConfigStruct {
class_name: String,
#[serde(default)]
#[serde(flatten)]
defaulting_values: SomeConfigStructDefaulting,
}
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
pub struct SomeConfigStructDefaulting {
parent_in_constructor: bool,
set_user_texts: bool,
singleton: bool,
use_enum_types: bool,
}
// This will be called to fill in missing spots in defaulting_values.
// Will also be called, if defaulting_values is missing altogether.
impl Default for SomeConfigStructDefaulting {
fn default() -> Self {
let default_boolean = true;
Self {
parent_in_constructor: default_boolean,
set_user_texts: default_boolean,
singleton: default_boolean,
use_enum_types: default_boolean,
}
}
}
这肯定不会减少行数,但它确实会固定default_boolean
为一个值,如果这是您的主要关注点的话。
这样,您的序列化表示看起来仍然相同,并且您可以轻松编写包装器而不必编写some_config_struct.defaulting_values
实际代码。
推荐阅读
- visual-studio-2008 - MFC:在窗口标题中转义“&”字符的正确方法是什么(VS2008)
- python - 使用 PIL 旋转 RGBA 图像后失去颜色
- batch-file - 此代码不会运行,只会退出。我不确定我在哪里犯了错误
- amazon-web-services - 使用 AWS EC2 的 crontab 上的 python 脚本 - 如何衡量使用情况?
- python - exe 文件的输出为 csv 格式。我想要一个标题和所有数据一起
- django - Geo Django GDAL 异常 OGR 失败
- html - 从 ms word 粘贴到 ck、tiny mce、文本框的内容未显示
- typescript - 在 TypeScript 和 NestS 中将类转换为类/对象(实体到 DTO)
- angular - 什么是 Angular 嵌入?
- python - 为什么进程还在后台运行?