我有一个像这样的枚举:
#[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 中的错误?