将 TOML 数据反序列化为具有 nalgebra 类型的结构

Deserialise TOML data into struct with nalgebra types

提问人:thefrollickingnerd 提问时间:11/15/2023 更新时间:11/15/2023 访问量:32

问:

我有这个结构 -

#[derive(Deserialize)]
struct body {
    label: String,
    mass: f64,
    pos: Point3<f64>,
    vel: Vector3<f64>,
    obj_col: f32,
}

我在一个 toml 文件中有一些数据,我想读取并反序列化到结构中。

[[objects]]
    label = "Sun"
    mass = 1.9891e30
    pos = [0.0, 0.0, 0.0]
    vel = [0.0, 0.0, 0.0]
    obj_col = 1.00

我已经通读了 nalgebra 文档,似乎向量/矩阵类型存在序列化特征,但目前尚不清楚我应该如何实现它们。 就目前而言,serde 无法将 Point3 和 Vector3 识别为可以反序列化的类型。

以前有没有其他人实现过这个问题的解决方案?我不知道从哪里开始

作为第二个问题,toml 文件有多个对象,这些对象都将成为单独的结构实例。有没有办法在实例反序列化时遍历实例?

Rust 结构 序列化 toml

评论

0赞 cafce25 11/15/2023
“serde 不将 [它们] 识别为可以反序列化的类型”是什么意思?如果您遇到编译或运行时错误,请在您的问题中包含错误消息。您确定已启用吗?features = ["serde-serialize"]

答:

1赞 Aditeya 11/15/2023 #1

您需要在 nalgebra 上启用 crate 功能才能获取它们的反序列化器。serde-serialize

如果要遍历实例以创建单个结构,则必须实现自定义反序列化程序,而不是派生反序列化程序。

评论

0赞 thefrollickingnerd 11/16/2023
啊,谢谢你,就是这样。我花了很长时间寻找如何反序列化 nalgebra,但找不到这个!