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

Rust 如何使用toml rs和serde_derive反序列化两种不同的结构和文件格式?,rust,serde,toml,Rust,Serde,Toml,我正在使用toml rs和serde_derive对我的应用程序用来描述数据结构的toml文件进行反序列化 我的第一个数据结构对应于一个TOML文件定义,其中包含必填字段和可选字段 现在我想用它来反序列化另一个TOML文件中描述的另一个数据结构,该文件具有不同的字段 如何向反序列化程序(我使用的是toml::from_str(&contents))指定要反序列化到的结构类型 相关问题-是否可以将类型放入文件本身,以便反序列化可以更通用,并且反序列化程序可以从文件本身检测要反序列化的类型?toml

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

我的第一个数据结构对应于一个TOML文件定义,其中包含必填字段和可选字段

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

如何向反序列化程序(我使用的是
toml::from_str(&contents)
)指定要反序列化到的结构类型


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

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

let x: Foo = toml::from_str(something)?;
将使用
Foo
反序列化
impl

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

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

另外,related-是否可以将类型放入文件本身,以便反序列化更通用,并且反序列化程序可以从文件本身检测要反序列化的类型


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

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

let x: Foo = toml::from_str(something)?;
将使用
Foo
反序列化
impl

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

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

另外,related-是否可以将类型放入文件本身,以便反序列化更通用,并且反序列化程序可以从文件本身检测要反序列化的类型


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

如何向反序列化程序指定要反序列化为的结构类型?-您可以使用与第一次指定反序列化到哪个类型完全相同的方法来执行此操作。向我们展示您如何尝试解决此问题。如何向反序列化程序指定要反序列化为的结构类型?-您可以使用与第一次指定反序列化到哪个类型完全相同的方法来执行此操作。告诉我们你是如何解决这个问题的。这回答了我问题的主要部分,所以我接受了。我想我最想解决的问题是,我想将一个toml文件反序列化为多种不同结构类型中的一种,而不必事先知道文件中的格式/类型。。。。如果你有任何关于enum想法的参考资料,那就太好了。如果你愿意的话,我可以单独问你一个问题。谢谢你回答了我问题的主要部分,所以我接受了。我想我最想解决的问题是,我想将一个toml文件反序列化为多种不同结构类型中的一种,而不必事先知道文件中的格式/类型。。。。如果你有任何关于enum想法的参考资料,那就太好了。如果你愿意的话,我可以单独问你一个问题。谢谢