【发布时间】:2020-06-03 14:30:19
【问题描述】:
我有一个像这样的枚举:
#[derive(Debug, Deserialize, Serialize)]
enum E {
A(i32),
#[serde(skip)]
B(bool),
C(char),
D(Vec<i32>),
}
然后我尝试使用bincode crate 执行以下操作:
fn main() {
let data = E::C('A');
let encoded = bincode::serialize(&data).unwrap();
let decoded = bincode::deserialize::<E>(&encoded).unwrap();
println!("{:?}", decoded);
}
然而,这会引发以下消息:
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Io(Custom { kind: UnexpectedEof, error: "failed to fill whole buffer" })', src/main.rs:16:19
我注意到,如果满足以下条件之一,一切正常:
- 我删除了
#[serde(skip)]属性 - 我从变体中删除元组
我也知道 bincode 会以某种方式忽略 #[serde(skip)] 并尝试将 encoded 反序列化为 E::D(Vec<i32>)。如果我将Vec<i32> 更改为char 它将起作用,但decoded 将是E::D('A')(而不是E::C('A'))。
我错过了什么还是 bincode crate 中的错误?
【问题讨论】:
-
这看起来像是
bincode中的一个错误。 -
这似乎是这个问题:github.com/servo/bincode/issues/184
-
感谢您的评论!这是一个悲伤的消息; bincode 已经到了 1.0.0 但是有一个烦人的错误。 :(