0x7*_*x76 5 rust deserialization serde
所以我试图反序列化一个由二进制数据(bincode)组成的消息,这个二进制文件不是由 serde 序列化的,但我正在尝试使用 serde 来反序列化它。但是,发送的数据可选地有一个原始数据部分,其末尾的长度没有前缀,但保证是消息的其余部分。Serde 总是期望一个长度。由于与不是我制造/设计的系统的向后兼容性问题,我无法添加长度,这种兼容性很重要。这是否可以通过 Serde 实现,我将如何去做?
我已经查看了 serde 和 bincode 的文档,但找不到任何可以帮助我的内容。
bincode::deserialize_from 允许您保留输入流中的任何尾随数据。
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct Data {
q: String,
r: i32,
#[serde(skip)]
trailing: Vec<u8>,
}
fn main() -> bincode::Result<()> {
let bytes = [7, 0, 0, 0, 0, 0, 0, 0, 115, 117, 99, 99, 101, 115, 115, 227, 7, 0, 0, 3, 2, 1];
let mut cursor = &bytes[..];
let mut data: Data = bincode::deserialize_from(&mut cursor)?;
data.trailing = cursor.to_owned();
println!("{:#?}", data);
Ok(())
}
Run Code Online (Sandbox Code Playgroud)