提问人:Marco 提问时间:7/29/2023 最后编辑:cafce25Marco 更新时间:7/29/2023 访问量:71
在运行时使用“skip_serializing_if”跳过序列化?
Skip serializing at runtime with `skip_serializing_if`?
问:
我阅读了有关 serde::skip_serializing_if 的信息,我想将其应用到我的项目中,但是我没有找到在运行时读取值的方法(想象一个标志)。--ignore-practices
我尝试使用静态值但没有成功......
请参阅下面的示例。
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct IP {
pub name: String,
#[serde(skip_serializing_if = "read_flag_from_command_line")]
pub practices: Option<Practices>,
}
fn is_false<T>(_: T) -> bool {
let ignore = value_at_run_time;
return ignore;
}
答:
3赞
cafce25
7/29/2023
#1
这不是工作方式或用途,赋予它的函数必须将字段作为参考,并应根据此确定其结果。skip_serializing_if
话虽如此,你可以编写一个依赖于全局状态的函数来确定它是否序列化为黑客:
static SERIALIZE_PRACTICES: AtomicBool = AtomicBool::new(false);
fn dont_serialize_practices<T>(_: &T) -> bool {
!SERIALIZE_PRACTICES.load(Ordering::Acquire)
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct Ip {
#[serde(skip_serializing_if = "dont_serialize_practices")]
pub practices: Option<String>,
}
评论
0赞
Marco
7/29/2023
谢谢。如果可能的话,你能详细说明“这不是skip_serializing_if的工作方式或它的用途”吗?
0赞
cafce25
7/29/2023
好吧,由于它提供的接口和全局变量通常不受欢迎,因此不难看出它的主要用例是跳过字段默认值的序列化。
评论