小编kal*_*zen的帖子

如何使用 serde 反序列化 Prost 枚举?

我正在使用 [prost] 从 protobuf 生成结构。其中一个结构非常简单:

enum Direction {
  up = 0;
  down = 1;
  sideways = 2;
}
Run Code Online (Sandbox Code Playgroud)

这会生成如下代码:

enum Direction {
  up = 0;
  down = 1;
  sideways = 2;
}
Run Code Online (Sandbox Code Playgroud)

我必须将大量 JSON 文件解析为这些消息。这些有数万行长,但是当这个字段出现时,它看起来像:

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
#[derive(serde_derive::Deserialize)]
pub enum Direction {
    Up = 0,
    Down = 1,
    Sideways = 2,
}
Run Code Online (Sandbox Code Playgroud)

所以,简而言之,它的反序列化格式是字符串,序列化后是i32

如果我只是运行它,并尝试解析 JSON,我会得到:

thread 'tests::parse_json' panicked at 'Failed to parse: "data/my_data.json": Error("invalid type: string \"up\", expected i32", line: …
Run Code Online (Sandbox Code Playgroud)

rust serde prost

9
推荐指数
1
解决办法
3803
查看次数

标签 统计

prost ×1

rust ×1

serde ×1