gpt4 book ai didi

rust - 如何使用toml-rs和serde_derive反序列化两种不同的结构和文件格式?

转载 作者:行者123 更新时间:2023-11-29 08:25:11 25 4
gpt4 key购买 nike

我正在使用 toml-rs 和 serde_derive 反序列化我的应用程序用来描述数据结构的 TOML 文件。

我的第一个数据结构与一个包含必填字段和可选字段的 TOML 文件定义相对应。

现在我想用它来反序列化另一个 TOML 文件中描述的具有不同字段的数据结构。

如何向反序列化器(我正在使用 toml::from_str(&contents))指定要反序列化为哪种结构类型?

相关问题 - 是否可以将类型放入文件本身,以便反序列化可以更通用,并且反序列化器可以从文件本身检测到要反序列化的类型?

最佳答案

toml::from_str 反序列化为表达式预期的类型。所以

let x: Foo = toml::from_str(something)?;

将使用 FooDeserialize 实现。

您还可以通过泛型参数显式指定要反序列化的类型:

let x = toml::from_str::<Foo>(something)?;

Also, related - is it possible to put the type into the file itself, so that deserialization can be more generic, and the deserializer can detect the type to deserialize from the file itself?

您可以使用枚举来做到这一点。每个变体可以包含不同的类型。为了找出确切的设计,我建议您为枚举实现 Serialize,将其序列化为您的目标格式,然后您将了解如何执行运行时类型规范。我不确定 toml 是否支持枚举,但 json 肯定支持。

关于rust - 如何使用toml-rs和serde_derive反序列化两种不同的结构和文件格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com